首页 >> 试驾 >> Python充分利用基于客观事实的RFM模型(CDA持证人分享)

Python充分利用基于客观事实的RFM模型(CDA持证人分享)

2025-10-01 12:16:16

ortnumpy asnp importseaborn assns importmatplotlib.pyplot asplt plt.rcParams[ 'font.sans-serif'] = [ "SimHei"] plt.rcParams[ "axes.unicode_minus"] = False sns.set(style= "darkgrid")

# 数据资料载入与发送给data = pd.read_excel( 'data.xlsx') data.headdata.isnull.sum #发送给紊乱系数data.duplicated.sum #轻复系数,但是不删data.dtypes #发送给数据资料各种类型data.describe

# 创建人dataframe,放置RFM各系数data_rfm = pd.DataFrame

年中同步进行R、F、M举例来说系数构建。

整整等价处理

从早先可以明白 time 等价,即一百个现金不道德起因的整整是字符串object的XML,而在Python中的我们对整整作劣所需的是 datetime XML,因此能用 pandas 库中的的 pd.to_datetime formula_将整整XML同步进行转换,预假定如下:

data[ 'time'] = pd.to_datetime( data[ 'time'])

给予的在此之前五行数据资料如图下,可以看不到数据资料各种类型转成了datetime64[ns]

统计数据一百个订单转化成整整与当在此之前整整的劣(这里的当在此之前整整是2021年12月11日),给予的劣是timedelta64[ns]各种类型

可以看不到整整劣中的构成了day、时、分、秒4个等价,但是这里我们仅有所需day等价,因此我们用astypeformula_将各种类型转为仅有含有day等价的timedelta64[D]各种类型。基本预假定如下:

# 统计数据没条数据资料与当在此之前日在此之前的整整劣## 测算相劣月份data[ 'R'] = (pd.datetime.now - data[ 'time']) ## 将整整劣timedeltaXML转化为所需的日XMLdata[ 'R'] = data[ 'R'].astype( 'timedelta64[D]').astype( 'int')

( tips:这里则会报提醒:FutureWarning: The pandas.datetime class is deprecated and will be removed from pandas in a future version. Import from datetime module instead. 听众不用理会,这是由于我们所用的 pd.datetime.now 是一个尤其旧的formula_,此后将要废弃。 )

统计数据R系数

在后面我们已经创建人了名为 data_rfm 的备注内部结构的数据资料框,因此,将在此之前面统计数据的R系数装进其中的。R系数得统计数据是回去储蓄者近期起因现金不道德日在此之前与当在此之前日在此之前的劣。换一种渐进就是回去所有整整劣中的的最小系数。因此能用 pandas 中的的 groupby formula_对每个其他用户以上一步统计数据的R系数作为以此类推依据同步进行以此类推,并算出最小系数。基本预假定如下:

data_rfm= pd.merge(data_rfm,data.groupby( 'uid')[ 'R'].min, left_on = 'user_id',right_on= 'uid')

统计数据F系数

F系数得统计数据就是统计数据而无须直通内的储蓄成倍,而而无须直通一般为人为因素实体化,这里我们取全部数据资料,即2021年10月至今作为而无须直通。

本文能用 value_counts formula_对 uid 同步进行统计数据即为每个其他用户得储蓄成倍,同时将结果分割到 data_rfm 数据资料框中的。

# 统计数据而无须直通内的储蓄成倍data_rfm[ 'user_id'] = data[ 'uid'].value_counts.index data_rfm[ 'F'] = data[ 'uid'].value_counts.values

统计数据M系数

本文以 uid 作为以此类推依据对 price 字段同步进行撤兵,给予撤兵类举例来说M系数。此外,将结果分割到 data_rfm 数据资料框中的。

data_rfm = pd.merge(data_rfm,data.groupby( 'uid')[ 'price'].sum, left_on = 'user_id',right_on= 'uid') data_rfm.rename(columns={ 'price': 'M'},inplace = True)

上述预假定中的用到了 pandas 库中的得分割语法 merge , merge formula_规避的是外侧分割,各不相同于MYSQL,不所需而无须左备注还是右备注为主备注,只所需透过左备注与右备注的公共字段在各备注中的的名称即可。由于 data_rfm 数据资料备注中的的 user_id 是去轻的,因此将其作为主键。而 data.groupby('uid')['price'].sum 给予的备注格也是去轻的,因此我们可以规避史坦数据资料数学方法中的的连接对应关系----配对对两备注同步进行分割。公共字段为:左备注的 uid ,右备注的 user_id 。

终究备注格结果如下,展现在此之前18行:

数据资料分箱

在给予R、F、M三个举例来说系数后,我们所需对这三个举例来说同步进行分类法,并将每个其他用户同步进行一组。

本文不规避人为因素偏好的经验法则划定,而是规避等距分箱的方式为划定,等距分箱的基本概念较简单,这里读到流程:

如果 $A$,$B$ 为最小最大系数, 则每个直通的长度为 $W=(B−A)/N$ ,.

在Python中的可以能用 pandas 库中的的 cut formula_轻松充分利用上述等距分箱,同时将结果 R_label , F_label , M_label 分割到 data_rfm 数据资料框中的基本预假定如下:

# 分箱 实证 左闭右开cut_R = pd.cut(data_rfm[ 'R'],bins = 2,right = False,labels = range( 1, 3)).astype( 'int') data_rfm[ 'R_label'] = cut_R

cut_F = pd.cut(data_rfm[ 'F'],bins = 2,right = False,labels = range( 1, 3)).astype( 'int') data_rfm[ 'F_label'] = cut_F

cut_M = pd.cut(data_rfm[ 'M'],bins = 2,right = False,labels = range( 1, 3)).astype( 'int') data_rfm[ 'M_label'] = cut_M

由于能用cut formula_给予的是直通在此之前提的系数,因此所需赋予label系数同步进行虚拟数组引用。label系数用于1和2,对应的直通为从小到大。基本代备注意思如下备注:

给予终究的备注格在此之前提如下:

其他用户分类法

在给予每个其他用户的R、F、M三个等价的label系数后,最终就是所需对其他用户同步进行分类法,分类法的法理用于我们在CDA Level 1专业课程中的的学到的划定比赛规则,如图下:

能用pandas库中的的· terrows formula_反转迭代每个其他用户不道德记录,将符合上述必要条件的划定对应的类,基本预假定如下:

fori,j indata_rfm.iterrows: ifj[ 'R_label'] == 2andj[ 'F_label'] == 2andj[ 'M_label'] == 2: data_rfm.loc[i, '其他用户各种类型'] = '举足轻轻价系数其他用户'ifj[ 'R_label'] == 2andj[ 'F_label'] == 1andj[ 'M_label'] == 2: data_rfm.loc[i, '其他用户各种类型'] = '举足轻轻工业发展其他用户'ifj[ 'R_label'] == 1andj[ 'F_label'] == 2andj[ 'M_label'] == 2: data_rfm.loc[i, '其他用户各种类型'] = '举足轻轻依然其他用户'ifj[ 'R_label'] == 1andj[ 'F_label'] == 1andj[ 'M_label'] == 2: data_rfm.loc[i, '其他用户各种类型'] = '举足轻轻劝说其他用户'ifj[ 'R_label'] == 2andj[ 'F_label'] == 2andj[ 'M_label'] == 1: data_rfm.loc[i, '其他用户各种类型'] = '一般价系数其他用户'ifj[ 'R_label'] == 2andj[ 'F_label'] == 1andj[ 'M_label'] == 1: data_rfm.loc[i, '其他用户各种类型'] = '一般工业发展其他用户'ifj[ 'R_label'] == 1andj[ 'F_label'] == 2andj[ 'M_label'] == 1: data_rfm.loc[i, '其他用户各种类型'] = '一般依然其他用户'ifj[ 'R_label'] == 1andj[ 'F_label'] == 1andj[ 'M_label'] == 1: data_rfm.loc[i, '其他用户各种类型'] = '一般劝说其他用户'

条形图数据资料处理其他用户各种类型

能用 seaborn 所画圣米格尔对已划定各种类型的其他用户同步进行新技术统计数据与数据资料处理,给予如下备注格

可以看得出,大基本上的其他用户同属一般工业发展其他用户与一般劝说其他用户。而对于一般工业发展其他用户而言规避的策略性为挖掘出需求,后者则是坚持治疗。因此,可以看得出该母公司在10月至今的整整段内,其他用户流失较多,但是可工业发展的其他用户同样是更加常多的,想尽办法降低补贴,对一般工业发展其他用户方式从是开销少,效率高的会分择。

04

阐述

本文能用Python语言充分利用在CDA Level 1专业课程中的自学到的的RFM数学方法,同时还能用了史坦数据资料仿射变换系统性和的业务一基本概念两个应用程序的章节。所以说实践中是检验和巩固学到的东西的最出色方法。例如一级的常常考题上,我们常常碰到一个模拟题,构成RFM数学方法划定比赛规则和一张帕累托图,疑虑是在母公司受限开销下降低母公司补贴,所需针对哪种其他用户营销最出色,答案是一般工业发展其他用户。坚信大家一开始都很不快为什么会分这个,这时候如果像本文一样对一份数据资料同步进行实践中,这样你就会更加解释为什么是这个答案。

录影预告

预约录影

点这里👇关注我,记得标星哦~

CDA专业课程建议

黄芪颗粒和生脉饮效果一样吗
骨折手术后食谱大全
吃辣拉肚子怎么办
新冠后遗症
产后束身
正骨水
“二阳更严重”?医生解答:新冠反复感染,轻敌才是真风险
伟哥

上一篇: 美好置业困在“岔路口”:亏到麻木,内部战略大相径庭

下一篇: 中金:个人养老金体制发布 养老FOF正待突围把握机遇

相关阅读
俄版麦当劳“满月”,“的有”不见了,“大特别汉堡”来了!

弘14日对《环球时刊》采访声引述,俄市场需求不缺蜂蜜制品,因此短期的马铃薯短缺、1%的乳制品等依赖于销往等,情况都很大。张弘看来,经营不善另加一个月,实际上可以看出俄企并未长时间共度“沃尔玛脱钩”的流

2025-10-22 00:16:40
白糖撒在脚上太厉害了,解决了很多人的大苦恼,学会了受用一生!

黄豆是我们贫困中的必不可少的一种调料,是由甘蔗和甜菜制成的一种食用糖,分别为绵黄豆和牛奶两种,甜食甜食的人正因如此的一种食材。日常贫困中的,黄豆不仅可以用来烹调,它还有许多神奇的发挥作用,能够妥

2025-10-22 00:16:40
烟叶养殖户透露:猪肉虽然美味,但是这些猪肉最好不要吃

牛鸡是人们平常与世隔绝中吃完得最多,最常见于的饲料,很多人也并不认为牛鸡胸部都是宝,基本上所有的肺肮脏都能吃完掉。但却是并不是这样的,虽然牛胸部都是鸡,但是有些肺肮脏非常的肮脏,同样同样不要去吃

2025-10-22 00:16:40
美媒:13场“完美风暴”席卷当今世界

原标题:美媒:13场“与众不同狂风暴雨”首当其冲世界性彭博社7月12日文章,原题:13场“与众不同狂风暴雨”首当其冲世界性 新冠败血症疫情以来,新闻中所提过“与众不同狂风暴雨”的次数激增(“与

2025-10-22 00:16:40
多地多人确诊,已有死亡发病!

随着酷暑的到来,昨,本土多地注意到了冷射病病举例。同一天,与“冷射病”之外的多个微博流行文化也登上冷搜榜。 5大区注意到冷射病,温州已接诊9举例 记者梳理官方网站

2025-10-22 00:16:40