本文已参与「新人创作礼」活动,一起开启掘金创作之路。
前言
个人认为该模型可以运用到很多场合不单单是进行普通的用户挖掘。而且可以举一反三形成另一维度特征用来标记用户。也是一个经常用于用户购买行为预测的重要特征之一。通过该篇文章能够知晓如何根据这一个模型反建更多相对模型。
一、RFM概念
RFM模型是衡量客户价值和客户创利能力的重要工具和手段。在众多的客户关系管理(CRM)的分析模式中,RFM模型是被广泛提到的。该机械模型通过一个客户的近期购买行为、购买的总体频率以及花了多少钱3项指标来描述该客户的价值状况。
根据美国数据库营销研究所Arthur Hughes的研究,客户数据库中有三个神奇的要素,这三个要素构成了数据分析最好的指标:
最近一次消费(Recency)
消费频率(Frequency)
消费金额(Monetary)
根据模型原理可知该模型主要由三个特征R、F、M所组成,当然要构建这个模型可以不用仅仅局限于这三个特征进行构建,我们可以根据不同数据特征筛选出最为需要的三个因素进行构建。
二、根据实例构建模型步骤
1.数据预览
此次数据选为2021年的全国大学生数据统计与分析竞赛B题数据。
(如有数据需要可联系笔者)
2.模型的构建
在该模型中,我们选择用户的三个指标,即“login_diff_time”(登录间隔)、“login_time” (登录时长)、“login_day”(登录天数)依次承担这三个维度。设置这些特征表达了 一定的用户依赖度,提取该特征我们可以了解该用户对课程的粘粘度,判断是否为使用 该软件的核心用户。从而推测符合行为程度的用户对购买课程是否拥有强烈的意愿,加 大推送课程购买概率。
3.维度打分
对每个用户进行 R/F/M 三个维度的打分。R 维度打分的标准是:登录越频繁,则分 值越高。F 维度打分的标准是:登录的时长越多,则分值越高。M 维度打分的标准是: 登录的天数越多,则分值越高。
我们首先需要根据数据情况进行合理的划分区间:
首先看login_diff_time:
| R打分 | R值 | 含义 | |
|---|---|---|---|
| 1 | [30,135] | 一个月以上四个月半之内未登陆 | |
| 2 | [10,30] | 10天以上一个月之内未登陆 | |
| 3 | [3,10] | 3天以上10天以下未登陆 | |
| 4 | [1,3] | 1天以上3天以下未登陆 | |
| 5 | [0,1] | 1天之内登陆过 | |
| 'login_time' |
| F打分 | F值 | 含义 | |
|---|---|---|---|
| 1 | [0,1] | 登陆时长不足一天 | |
| 2 | [1,10] | 登陆时长超过一天不足十天 | |
| 3 | [10,30] | 登陆时长超过十天不足一个月 | |
| 4 | [30,365] | 登陆时长超过一个月不足一年 | |
| 5 | [365.--] | 登陆时长超过一年 | |
| --- | --- | ||
M值设为
‘login_day':
| M打分 | M值 | 含义 | |
|---|---|---|---|
| 1 | [0,1] | 登陆天数不超过一天 | |
| 2 | [1,3] | 登陆天数超过一天不足三天 | |
| 3 | [3,5] | 登陆天数超过三天不足五天 | |
| 4 | [5,10] | 登陆天数超过五天不足十天 | |
| 5 | [10,120] | 登陆天数超过十天在三个月之内 | |
| --- | --- | ||
由此我们可对各个用户进行 R/F/M 的打分。因为每个用户和平均值对比后的 R/F/M 只有 0 和 1 两个值。0 表示小于平均值,1 表示大于平均值。整体组合一共有 8 个分组。 所以我们设定 RFM 的分类标准,将用户分为了 2 × 2 × 2 = 8 种。
4.模型建立
根据建立的 RFM 模型对每个用户进行分类。其输出结果预览如下图。
该模型能够快速地帮助企业对用户进行分类,进而对不同层次的用户制定不同的营 销策略。由下图可以直观地看出该企业存在的流失用户是比例最大的,而重要价值用户 占中等比例,一般用户占的比例最小。通过 RFM 方法,对用户的属性数据分析,对用 户进行了归类。在推送和营销时,可以更加精准化,不至于出现用户反感的情形。更重 要的是,对产品转化等商业价值也有很大的帮助 。
三、具体代码以及思路
df2['R-SCORE']=pd.cut(df2['R'],bins=[-1,1,3,10,30,135],labels=[5,4,3,2,1],right=False).astype(float)
df2['F-SCORE']=pd.cut(df2['F'],bins=[-1,1,10,30,365,1481],labels=[1,2,3,4,5],right=False).astype(float)
df2['M-SCORE']=pd.cut(df2['M'],bins=[-1,1,3,5,10,120],labels=[1,2,3,4,5],right=False).astype(float)
df2.head()
df2['R是否大于均值']=(df2['R-SCORE']>df2['R-SCORE'].mean())*1
df2['F是否大于均值']=(df2['F-SCORE']>df2['F-SCORE'].mean())*1
df2['M是否大于均值']=(df2['M-SCORE']>df2['M-SCORE'].mean())*1
df2['人群数值']=(df2['R是否大于均值']*100)+(df2['F是否大于均值']*10)+(df2['M是否大于均值']*1)
df2.head()
点关注,防走丢,如有纰漏之处,请留言指教,非常感谢
以上就是本期全部内容。我是fanstuck ,有问题大家随时留言讨论 ,我们下期见。
我正在参与掘金技术社区创作者签约计划招募活动,点击链接报名投稿。