首页 > 其他分享 >客户价值和客户创利能力分析

客户价值和客户创利能力分析

时间:2023-05-13 21:13:02浏览次数:30  
标签:customer med df frame 能力 客户 创利 OrderDate

一、数据导入

csv_path = './Data/North_American_Superstore.csv'
df = pd.read_csv(csv_path, encoding="gbk")
pd.set_option('display.max_columns', None)
# 原始dataframe中列名中包含空格,需要进行替换
df.rename(columns = lambda x : x.replace(' ',''),inplace = True)
df.head()

二、数据预处理

1.数据概况

print(df.shape)
print("-"*30)
print(df.describe())
print("-"*30)
print(df.info())

 

2.数据清理

异常数据处理

df.loc[df['Sales']<0].Sales.count() # 统计销售额Sales<0的个数
df.loc[df['Sales']<0, ['OrderID', 'CustomerID', 'Sales']] # 查看异常Sales的OrderID和CustomerID
df = df.loc[(df['Sales']>0)&(df['Quantity']>0)] # 取Sales 和 Quantity 均大于零的行

数据格式

# 日期数据格式转换
df['OrderDate'] = pd.to_datetime(df['OrderDate'])

# 查看用户下单的日期范围
print('最晚下单日期是:',df['OrderDate'].max())
print('最早下单日期是:',df['OrderDate'].min())

 

三、客户价值和客户创利能力分析

RFM分析:最近一次消费(Recency近度)、消费频率(Frequency频度)、消费金额(Monetary额度)

重要价值客户(高,高,高):最近消费时间近、消费频次和消费金额都很高,绝对的优质客户。

重要保持客户(低,高,高):最近消费时间较远,但消费频次和金额都很高,说明这是个一段时间没来的忠诚客户,需要主动和他保持联系。

重要发展客户(高,低,高):最近消费时间较近、消费金额高,但频次不高,忠诚度不高,很有潜力的用户,必须重点发展。

重要挽留客户(低,低,高):最近消费时间较远、消费频次不高,但消费金额高,可能是将要流失或者已经要流失的用户,应当基于挽留措施

1.客户RFM表

获取不同客户(CustomerID)在所有时间内的下单次数Frequency

df_f = df.copy()
df_f.drop_duplicates(subset=['OrderID'],keep='first',inplace=True) # 合并相同的订单
df_freq = df_f.groupby('CustomerID',as_index=False).OrderID.count().rename(columns={'OrderID':'Frequency'})
df_freq.set_index('CustomerID',drop=True,inplace=True)
df_freq.head()

 获取不同客户(CustomerID)在所有时间内的订单金额Monetary、利润Profit和最后一次下单距离当前时间的天数Recency

df_group = df.groupby('CustomerID')
df_rm = df_group.agg({'Sales':'sum','OrderDate':'max','Profit':'sum'}).rename(columns={'Sales':'Monetary'})
df_rm['Recency'] = (pd.to_datetime('2019-01-01') - df_rm['OrderDate']).dt.days
df_rm = df_rm.drop('OrderDate',axis=1)
df_rm.head()

 

 获取获取不同客户(CustomerID)在其发生购买的年限内年均下单频次Frequency

DiffYears = df_group.agg({'OrderDate':(lambda df : df.dt.year.max() - df.dt.year.min()+1)}).rename(
columns={'OrderDate':'DiffYears'}).DiffYears
DiffYears.head()
df_freq.Frequency=df_freq.Frequency/DiffYears
df_freq.head()

df_rfm = df_rm.merge(df_freq,on='CustomerID')
df_rfm.head()

 

2.不同类型客户分析

以中位数为界划分对各客户进行类型划分

# 求取RFM各值的中位数
r_med = df_rfm['Recency'].median()
f_med = df_rfm['Frequency'].median()
m_med = df_rfm['Monetary'].median()
r_med,f_med,m_med

# 划分客户类型的函数
def customer_type_func(frame):
customer_type_list = []
for i in range(len(frame)):
if frame.iloc[i,2]<=r_med and frame.iloc[i,3]>=f_med and frame.iloc[i,0]>=m_med:
customer_type_list.append('重要价值客户')
elif frame.iloc[i,2]<=r_med and frame.iloc[i,3]<f_med and frame.iloc[i,0]>=m_med:
customer_type_list.append('重要发展客户')
elif frame.iloc[i,2]>r_med and frame.iloc[i,3]>=f_med and frame.iloc[i,0]>=m_med:
customer_type_list.append('重要保持客户')
elif frame.iloc[i,2]>r_med and frame.iloc[i,3]<f_med and frame.iloc[i,0]>=m_med:
customer_type_list.append('重要挽留客户')
else:
customer_type_list.append('一般客户')
frame['CustomerType'] = customer_type_list
customer_type_func(df_rfm)

分析不同类型客户的总体获利情况

df_rfm['ProfitType'] = (df_rfm.Profit>0)
df_ProfitCustNum= df_rfm.groupby(['CustomerType','ProfitType']).size().reset_index(name='ProfitCustNum')
df_ProfitCustNum

 

 

不同类型客户总订单金额、利润率、利润、客户平均订单金额、客户平均订单利润

 

不同类型客户创利情况分析

 

 

四、同期群分析

同期群分析(Cohort Analysis,亦称群组分析),其主要目的是分析相似群体的行为随时间的变化(比如用户商品的回购、对产品/服务的使用等)

通过将用户按初始行为的发生时间分组(得到同期群),然后再统计初始行为时间后不同时段内留存行为的发生频次。

由于数据集的原因,不能确定历史所有老客户的ID,因此做出假设:以2015上半年下单的客户为老客户,从2015年下半年开始计算新增客户,2016年上半年开始计算客户回购率/留存率

for i, customer_list_half_year in enumerate(u_customer_list):
if i>0 and i<7:
last_list = [] # 保存过去所有时间内客户ID(去重)
retain_list = [] # 保存以后每个半年回购的客户人数
for j in range(0,i):
last_list.extend(u_customer_list[j])
last_list = list(set(last_list))
new_list = [cust for cust in customer_list_half_year if cust not in last_list] # 保存当前周期新增客户ID
for k in range(i+1,8):
retain_list.append(len([cust for cust in u_customer_list[k] if cust in new_list]))
print(label[i]+'新增客户数量为', len(new_list), '留存率依次为',[round(i/len(new_list), 3) for i in retain_list])

 

 

五、Tableau仪表盘搭建

 

标签:customer,med,df,frame,能力,客户,创利,OrderDate
From: https://www.cnblogs.com/0chenxian0/p/17398133.html

相关文章

  • GDI-InvalidateRect使客户区矩形区域的图形变得无效
     RECTrect;::GetClientRect(m_hWnd,&rect);//获取窗口客户区的坐标BOOLb=::InvalidateRect(m_hWnd,&rect,TRUE);//使客户区矩形区域的图形变得无效/*使原来画的图像无效参数1:HWNDhWnd窗口句柄如果为NULL,则系统将在函数返......
  • 客户端javascript对象的几何属性(获得大小及坐标)
    在一些客户端javascript对象中,存在着如宽度、高度、坐标类的几何属性,同时这些属性在不同的浏览器下又有不同的属性名。现在将所有的此类对象的几何属性汇总,便于学习,免得搞混。1.浏览器窗口在桌面的坐标(x,y)Window      IE下:window.screenLeft,window.screenTo......
  • PostgreSQL 10 文档: PostgreSQL 客户端工具
    PostgreSQL客户端应用这部份包含PostgreSQL客户端应用和工具的参考信息。不是所有这些命令都是通用工具,某些需要特殊权限。这些应用的共同特征是它们可以被运行在任何主机上,而不管数据库服务器在哪里。当在命令行上指定用户和数据库名时,它们的大小写会被保留—空格或特殊字......
  • 农村高中生源转型期提升学生二次函数建模能力的课堂探究
         农村高中是处于国内各乡镇地区的普通全日制高级中学,属于农村教育的“终极”阶段。从农村高中所处的区位条件来讲,当下国内城镇化进程不断加快,农村高中生源呈现为逐年递减的全新变化形势,同时面临着新课标下数学核心素养培养的新要求与任务。然而,以往农村高中数学教学......
  • 500e + HALL STM32版 500e代码精简之后移植到103上,带载能力强,
    500e+HALLSTM32版500e代码精简之后移植到103上,带载能力强,低速性能优秀,效果见视频。增加开关霍尔算法,可对比无感角度与传感器角度,方便优化性能!提供:1、代码2、电路板+电机一套(和程序对应3、解析文档另有对应的单电阻方案,st单电阻挺麻烦的,12000。ID:516000656267840027......
  • 客户端容器 | 青训营笔记
    浏览器架构浏览器架构演进单进程架构:所有模块运行在同一个进程里,包含网络、插件、JavaScript运行环境等多进程架构(现代浏览器的常用架构):主进程、网络进程、渲染进程、GPU进程、插件进程面向服务架构:算是多进程架构的升级版。将原来的UI、数据库、文件、设备、网络等,作为一......
  • 立足市场,勤于研发,低代码软件公司为客户创造价值!
    随着社会的进步和科技的发展,低代码开发市场也迎来了蓬勃的发展商机。不管是做哪一行,都需要企业立足市场,勤于思考和研发,为客户着想,从而创造更高价值。低代码软件公司流辰信息一直以满足客户需求为己任,精于研发,丰富产品,提升产品品质,做好服务保障举措。1、为客户创收!只有为客户创......
  • leetcode 1045 买下所有产品的客户
    leetcode1045买下所有产品的客户selectcustomer_idfromCustomercleftjoinProductponc.product_key=p.product_keygroupbycustomer_idhavingcount(distinctc.product_key)=(selectcount(*)fromProduct) selectcustomer_idfrom(selectdis......
  • spark-sql 启动客户端报错问题
    1.spark-sql启动报错java.lang.NoClassDefFoundError:org/apache/tez/dag/api/SessionNotRunning原因:在启动时找不到tez的jar包解决方法:将tez目录下的tez-api-0.9.1.jar复制一份到spark的jars目录下cptez-api-0.9.1.jar/usr/hdp/current/spark2-client/jars/分发到其他......
  • 谷歌I/O大会重磅发布:Bard编码能力优化后仍不支持中文,开发者选择CodeGeeX更佳
    谷歌I/O大会今天凌晨发布,打出系列AI组合拳。除了发布升级版语言模型PaLM2之外,Bard能力也要起飞。凭借改进的数学、逻辑和推理技能,Bard现在可以帮助生成、解释和调试20多种编程语言的代码,开发者们需要输入prompt,来得到完整的代码片段。Bard提供的代码引用功能,在提供代码来......