一文速览-Python构建用户是否为常驻用户的RFM判别模型

191 阅读5分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

前言

个人认为该模型可以运用到很多场合不单单是进行普通的用户挖掘。而且可以举一反三形成另一维度特征用来标记用户。也是一个经常用于用户购买行为预测的重要特征之一。通过该篇文章能够知晓如何根据这一个模型反建更多相对模型。

一、RFM概念

RFM模型是衡量客户价值和客户创利能力的重要工具和手段。在众多的客户关系管理(CRM)的分析模式中,RFM模型是被广泛提到的。该机械模型通过一个客户的近期购买行为、购买的总体频率以及花了多少钱3项指标来描述该客户的价值状况。

根据美国数据库营销研究所Arthur Hughes的研究,客户数据库中有三个神奇的要素,这三个要素构成了数据分析最好的指标:

最近一次消费(Recency)
消费频率(Frequency)
消费金额(Monetary)

根据模型原理可知该模型主要由三个特征R、F、M所组成,当然要构建这个模型可以不用仅仅局限于这三个特征进行构建,我们可以根据不同数据特征筛选出最为需要的三个因素进行构建。

二、根据实例构建模型步骤

1.数据预览

此次数据选为2021年的全国大学生数据统计与分析竞赛B题数据。

(如有数据需要可联系笔者)

图片.png

2.模型的构建

图片.png 在该模型中,我们选择用户的三个指标,即“login_diff_time”(登录间隔)、“login_time” (登录时长)、“login_day”(登录天数)依次承担这三个维度。设置这些特征表达了 一定的用户依赖度,提取该特征我们可以了解该用户对课程的粘粘度,判断是否为使用 该软件的核心用户。从而推测符合行为程度的用户对购买课程是否拥有强烈的意愿,加 大推送课程购买概率。

3.维度打分

对每个用户进行 R/F/M 三个维度的打分。R 维度打分的标准是:登录越频繁,则分 值越高。F 维度打分的标准是:登录的时长越多,则分值越高。M 维度打分的标准是: 登录的天数越多,则分值越高。

我们首先需要根据数据情况进行合理的划分区间:

首先看login_diff_time:

图片.png

图片.png

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'

图片.png

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 模型对每个用户进行分类。其输出结果预览如下图。

图片.png

该模型能够快速地帮助企业对用户进行分类,进而对不同层次的用户制定不同的营 销策略。由下图可以直观地看出该企业存在的流失用户是比例最大的,而重要价值用户 占中等比例,一般用户占的比例最小。通过 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()

图片.png

图片.png

点关注,防走丢,如有纰漏之处,请留言指教,非常感谢

以上就是本期全部内容。我是fanstuck ,有问题大家随时留言讨论 ,我们下期见。

我正在参与掘金技术社区创作者签约计划招募活动,点击链接报名投稿