【机器学习小案例篇】关于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
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值