【机器学习小案例篇】关于RFM模型的小案例

import pandas as pd

1. 导入数据

In [75]:

trad_flow = pd.read_csv('D:\python\Script\RFM_TRAD_FLOW.csv',encoding='gbk')  #编码格式需要进行修改
trad_flow.head() #默认前五行

Out[75]:

 transIDcumidtimeamounttype_labeltype
094071000114JUN09:17:58:34199.0正常Normal
196251000116JUN09:15:09:13369.0正常Normal
2118371000101JUL09:14:50:36369.0正常Normal
3266291000114DEC09:18:05:32359.0正常Normal
4308501000112APR10:13:02:20399.0正常Normal

2.计算 RFM

In [21]:

M = trad_flow.groupby(['cumid','type'])[['amount']].sum()

In [48]:

trains_M = pd.pivot_table(M,index='cumid',columns='type',values='amount')
trains_M.head()

Out[48]:

typeNormalPresentedSpecial_offerreturned_goods
cumid    
100013608.00.0420.0-694.0
100021894.00.0NaN-242.0
100033503.00.0156.0-224.0
100042979.00.0373.0-40.0
100052368.00.0NaN-249.0

In [47]:

F = trad_flow.groupby(['cumid','type'])[['transID']].count()
F.head()

Out[47]:

  transID
cumidtype 
10001Normal15
Presented8
Special_offer2
returned_goods2
10002Normal12

In [46]:

R = trad_flow.groupby(['cumid','type'])[['time']].max()
R.head()

Out[46]:

  time
cumidtype 
10001Normal21JUL09:09:31:26
Presented31MAR10:20:29:48
Special_offer12OCT09:10:59:13
returned_goods10JUL10:20:41:54
10002Normal29JUL09:19:21:41

3.衡量客户对打折商品的偏好

In [53]:

trains_M['Special_offer'] = trains_M['Special_offer'].fillna(0)
trains_M['Special_offer'].head()

Out[53]:

cumid
10001    420.0
10002      0.0
10003    156.0
10004    373.0
10005      0.0
Name: Special_offer, dtype: float64

In [67]:

trains_M['spe_ratio'] = trains_M['Special_offer']/(trains_M['Special_offer']+trains_M['Normal'])
trains_M['spe_ratio'].head()

Out[67]:

cumid
10001    0.104270
10002    0.000000
10003    0.042635
10004    0.111277
10005    0.000000
Name: spe_ratio, dtype: float64

In [68]:

M_rank = trains_M.sort_values('spe_ratio',ascending=False).head()
M_rank.head()

Out[68]:

typeNormalPresentedSpecial_offerreturned_goodsspe_ratio
cumid     
10151765.00.0870.0NaN0.532110
400331206.00.0761.0-848.00.386884
402361155.00.0691.0-793.00.374323
302251475.00.0738.0-301.00.333484
200681631.00.0731.0-239.00.309483

In [74]:

pd.qcut(M_rank['spe_ratio'],4)

Out[74]:

cumid
10151    (0.387, 0.532]
40033    (0.374, 0.387]
40236    (0.333, 0.374]
30225    (0.308, 0.333]
20068    (0.308, 0.333]
Name: spe_ratio, dtype: category
Categories (4, interval[float64]): [(0.308, 0.333] < (0.333, 0.374] < (0.374, 0.387] < (0.387, 0.532]]

 

相关:

【机器学习业务篇】基于RFM模型的用户分群方法

【机器学习杂烩篇】详解 Pandas 透视表(pivot_table)

【机器学习杂烩篇】pandas fillna()函数详解

【机器学习杂烩篇】Pandas 排序sort_values

【机器学习杂烩篇】Pandas中的qcut和cut

 

数据链接:https://pan.baidu.com/s/1Qet7LWD89jVGBQK9QUQnDg

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
RFM模型是一种用于对客户价值进行分析和分类的常用工具,它根据客户的最近一次购买时间(Recency)、购买频率(Frequency)和购买金额(Monetary)三个指标来对客户进行分类和评估,以便企业可以更好地了解其客户,并制定更有效的营销策略。 以一家在线零售商为例,该公司希望通过RFM模型对其客户进行分类,以便针对不同的客户群体制定不同的营销策略。该公司首先对所有客户的购买历史记录进行了分析,并计算出每个客户的RFM值。 Recency(最近一次购买时间):该公司将客户的最近一次购买时间与当前日期的差值作为Recency值,例如,如果一个客户最近一次购买是在7天前,那么他的Recency值为7。 Frequency(购买频率):该公司计算了每个客户在过去一年内的购买次数,并将其作为Frequency值。 Monetary(购买金额):该公司计算了每个客户在过去一年内的总购买金额,并将其作为Monetary值。 然后,该公司将客户根据RFM值进行分类,例如,将客户分为“重要价值客户”、“高频率低价值客户”、“低频率高价值客户”、“低价值客户”等不同的群体。根据这些分组,该公司可以制定不同的营销策略,例如,向“重要价值客户”提供更高端的产品和服务、向“高频率低价值客户”提供促销活动等。 通过RFM模型的使用,该公司能够更好地了解其客户群体,并根据客户的不同需求和价值制定更有效的营销策略,提高销售额和客户满意度。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值