[Python]RFM用户分类模型, 加matplotlib可视化数据--在线教育行业分析案例连载1

本文介绍了在线教育行业RFM用户分类模型的构建过程,使用Python进行数据处理,通过分析学生的购买行为、使用频率和消费金额,划分用户群体。并对RFM模型的R(近期行为)、F(频率)、M(消费金额)指标进行了详细定义,展示了如何确定各指标的界限。最后,通过可视化结果揭示了流失用户和一般维持用户的占比,强调了精细化运营的重要性。
摘要由CSDN通过智能技术生成


前言

该文章为连载的第一篇:RFM用户分类模型

某家在线教育机构拥有自己开发的教育产品VLE,该教育机构提供了他们四个学期里,开展的七门课的数据,接下来我会根据这些数据,为该教育机构做一系列的数据分析,包括用户的RFM模型、用户分群特征、用户成绩分析等等。

该教育机构部分数据库结构如下

在这里插入图片描述


如下这一篇文章为:用户的RFM模型

先简单介绍一下RFM模型:

RFM模型是衡量客户价值和客户创利能力的重要工具和手段。
该机械模型通过一个客户的

  1. 近期购买行为(R:Recency)、
  2. 购买的总体频率(F:Frequency)
  3. 花了多少钱(M:Monetary)

3项指标来描述该客户的价值状况。


该案例是在线教育产品,并且这里只提供用户一学期购买课程的消费注册使用情况,所以RFM会调正为:

  1. 近期产品使用行为(R:Recency)、
  2. 产品使用频率(F:Frequency)
  3. 花了多少钱(M:Monetary)

这个案例中计算用户RFM模型会用到:

  1. studentRegistration 学生注册信息表 (记为regi)
  2. studentVle 学生产品交互行为表 (记为vle)
  3. courses 课程表 (记为courses)

其中:

  1. code_presentation为学期
  2. code_module为课程
  3. 其他字面意思比较好理解

一、导入库

import pandas as pd
import numpy as np
import datetime
import time
import matplotlib
matplotlib.rcParams['font.sans-serif'] = ['Arial Unicode MS']
matplotlib.rcParams['axes.unicode_minus']=False
import matplotlib.pyplot as plt
import seaborn as sns
import sklearn
from sklearn.preprocessing import LabelEncoder
np.set_printoptions(suppress=True)
pd.set_option('display.float_format', lambda x: '%.4f' % x)


二、构造价格数据

因为这里没有关于价格的数据,我们需要对每门课构造一个价格

构造价格的依据:

  • 假设AAA是最简单的课程课程难度随着AAA、BBB、CCC递增,价格会越来越贵
  • 假设课程价格的基准是10*时间长度,同时价格根据难度增加,BBB为11乘时间长度,CCC为12,以此类推
  • 同时物价膨胀学校每年也会调整增10%的学费

实现代码如下(示例):

presentation=sorted(courses["code_presentation"].unique().tolist())
#presentation 为['2013B', '2013J', '2014B', '2014J']
module=sorted(courses["code_module"].unique().tolist())
#module 为['AAA', 'BBB', 'CCC', 'DDD', 'EEE', 'FFF', 'GGG']

这里需要注意的是,不是每一学期都会开展这七门课


#基准价格
x=10
module_price={
   }
for m in module:
    module_price[m]=x+module.index(m)
    
#module_price 为{'AAA': 10, 'BBB': 11, 'CCC': 12, 'DDD': 13, 'EEE': 14, 'FFF': 15, 'GGG': 16}

#增加价格列,并用每门课基准价格乘时间长度
courses["price"]=courses["code_module"].map(module_price)
courses["price"]=courses["module_presentation_length"]*courses["price"]

#从第二学期开始,价格上升10%
for pre in presentation[1:]:
    courses.loc[(courses["code_presentation"]==pre),"price"]*=(1.1)**(presentation.index(pre))

courses.sort_values(by=["code_presentation","code_module"]).head(10)

在这里插入图片描述

三、分别计算RFM信息

这里我们只选取最新的一个学期2014J计算

1、聚合所需要的信息

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值