RFM模型(扩展)

知识一:df.map() 方法

我们先来看一下下面这个问题。

现在想继续处理第 6 题中的某男子私立大学三名延毕学生数据,因为学校有规定挂科次数和旷课次数加起来超过 50 次的会开除学籍。

现在我们不想看到总次数,而是想把大于 50 次的次数换成开除,其他的换成延毕,如下图:

 我们可以用 df.replace() 方法解决,代码如下:

# 某男子私立大学三名延毕学生数据
df_6 = pd.DataFrame({'姓名': ['零某某', '徐放牛', '文学'],
                    '性别': ['男', '男', '男'],
                    '专业': ['生物信息', '人工智能', '电子竞技'],
                    '挂科次数': ['7', '5', '4'],
                    '旷课次数': [45, 44, 30],
                    '总次数': [52, 49, 34]})
                        
# 把总次数大于50次的值换成“开除”,其他的换成“延毕”
df_6['总次数'] = df_6['总次数'].replace({52: '开除', 49: '延毕', 34: '延毕'})

# 查看数据
df_6

 

但是当数据量稍微多一点的时候这个方法就有点行不通了,我们可能需要通过其他方法来解决这个问题。

df.map() 方法就是一个不错的选择,我们来看看 df.map() 是怎么解决这个问题的,代码如下:

# 某男子私立大学三名延毕学生数据
df_7 = pd.DataFrame({'姓名': ['零某某', '徐放牛', '文学'],
                    '性别': ['男', '男', '男'],
                    '专业': ['生物信息', '人工智能', '电子竞技'],
                    '挂科次数': ['7', '5', '4'],
                    '旷课次数': [45, 44, 30],
                    '总次数': [52, 49, 34]})

# 先定义一个函数
def map_judge(x):
    if x >= 50:
        return "开除"
    else:
        return "延毕"

# 将函数 map_judge 作为参数传入 df.map()
df_7['总次数'] = df_7['总次数'].map(map_judge)

# 查看数据
df_7

 

df_7['总次数'] = df_7['总次数'].map(map_score) 可以理解为 df.map() 方法将 df['总次数'] 这一列的每个数据作为 x 传入到 map_judge 函数中。

再对每一个数据进行判断、替换。也就是 df.map() 方法可以使用自定义函数按条件批量替换数据,比起 df.replace() 方法更加灵活。

# 某男子私立大学三名延毕学生数据
df_8 = pd.DataFrame({'姓名': ['零某某', '徐放牛', '文学'],
                    '性别': ['男', '男', '男'],
                    '专业': ['生物信息', '人工智能', '电子竞技'],
                    '挂科次数': ['7', '5', '4'],
                    '旷课次数': [45, 44, 30],
                    '总次数': ['开除', '延毕', '延毕']})

# 先定义一个函数
def map_amount(x):
    if x>=40:
        return '多'
    else:
        return '少'

# 将函数作为参数传入df.map()
df_8['旷课次数'] = df_8['旷课次数'].map(map_amount)

# 查看数据
df_8

 

知识二:AARRR模型

AARRR 模型常用来对用户从获取阶段到传播阶段其间的数据进行分析,以便于找到薄弱环节进行有效提升。可分为五个阶段,分别是:

获取用户(Acquisition)

激活用户(Activation)

提高留存(Retention)

增加收入(revenue)

推荐(Referral)

 

1.一个新的 APP 肯定需要有新用户的注册,也就是获取用户。我们可以通过各种渠道去获取用户,然后通过日新增用户数等指标去衡量获取用户这个阶段的好坏。

2.用户注册完 APP 可能看了一眼但并没有真正使用,所以在获取用户之后需要激活用户,例如通过发放优惠券。

3.激活用户之后我们要想办法让用户变成回头客,让用户养成使用习惯,也就是提高留存,减少用户流失。例如每日小游戏可获取积分,积分可以兑换礼品。

4.在 APP 能正常维持运营后,我们肯定要想办法赚到更多的钱,也就是增加收入。上面的三个阶段都有可能会影响到收入,例如新用户的减少用户流失都可能会导致收入减少。

5.最后一个阶段是推荐,也就是用户自己将 APP 分享给其他人,从而带来新的用户。用户可能会把自己喜欢的 APP 推荐给他人,但这种情况很少。这时候就需要采取一定的激励措施。例如推荐一位好友注册 APP,你和好友都可以获得 10 元现金奖励。

简单来说,AARRR 模型可以通过各种指标帮助我们分析用户的行为,从而在不同的阶段制定不同的运营策略。

### RFM模型的代码实现 RFM模型的核心在于对客户数据中的三个关键指标进行提取和计算:最近一次消费时间(Recency)、消费频率(Frequency)以及消费金额(Monetary Value)。下面是一个完整的基于PythonRFM模型代码实现,适用于常见的交易数据集。 #### 数据准备 假设我们有一个包含以下列的数据集: - `CustomerID`:客户的唯一标识符。 - `OrderDate`:订单日期。 - `AmountSpent`:每次交易的金额。 这些数据通常可以从企业的销售数据库中获取。 --- #### Python代码实现 ```python import pandas as pd from datetime import timedelta, datetime # 创建示例数据 data = { 'CustomerID': ['Cust1', 'Cust2', 'Cust1', 'Cust3', 'Cust2', 'Cust4', 'Cust1'], 'OrderDate': [ '2023-09-01', '2023-08-15', '2023-07-20', '2023-06-10', '2023-05-01', '2023-04-15', '2023-03-01' ], 'AmountSpent': [100, 200, 150, 300, 250, 400, 50] } df = pd.DataFrame(data) # 将OrderDate转换为datetime格式 df['OrderDate'] = pd.to_datetime(df['OrderDate']) # 定义当前日期(通常是运行代码时的实际日期) current_date = df['OrderDate'].max() + timedelta(days=1) # 假设今天是最后订单日的下一天 # 计算RFMrfm_df = ( df.groupby('CustomerID') .agg( Recency=(lambda x: (current_date - x['OrderDate'].max()).dt.days), # 最近一次购买距今天数 Frequency=('OrderDate', 'nunique'), # 购买次数 MonetaryValue=('AmountSpent', 'sum') # 总消费金额 ) ).reset_index() # 打印RFM结果 print(rfm_df) ``` --- #### 输出解释 上述代码会生成一个包含每个客户RFM值的结果表。例如: | CustomerID | Recency | Frequency | MonetaryValue | |------------|---------|-----------|---------------| | Cust1 | 62 | 3 | 300 | | Cust2 | 78 | 2 | 450 | | Cust3 | 92 | 1 | 300 | | Cust4 | 108 | 1 | 400 | 其中: - **Recency** 表示该客户最后一次购买距离当前日期的天数。 - **Frequency** 是该客户总的购买次数。 - **MonetaryValue** 是该客户总消费金额。 --- #### 进一步扩展RFM评分与分组 为了更方便地分析客户价值,可以将每个维度分成若干等级(如五级),并赋予相应的分数。 ```python # 对RFM值进行打分(反向打分:R越小越好;F&M越大越好) quantiles = rfm_df.quantile(q=[0.2, 0.4, 0.6, 0.8]) quantiles = quantiles.to_dict() def calculate_r_score(x): if x <= quantiles['Recency'][0.2]: return 5 elif x <= quantiles['Recency'][0.4]: return 4 elif x <= quantiles['Recency'][0.6]: return 3 elif x <= quantiles['Recency'][0.8]: return 2 else: return 1 def calculate_fm_score(x, col_name): if x >= quantiles[col_name][0.8]: return 5 elif x >= quantiles[col_name][0.6]: return 4 elif x >= quantiles[col_name][0.4]: return 3 elif x >= quantiles[col_name][0.2]: return 2 else: return 1 # 应用评分函数 rfm_df['R_Score'] = rfm_df['Recency'].apply(calculate_r_score) rfm_df['F_Score'] = rfm_df['Frequency'].apply(lambda x: calculate_fm_score(x, 'Frequency')) rfm_df['M_Score'] = rfm_df['MonetaryValue'].apply(lambda x: calculate_fm_score(x, 'MonetaryValue')) # 合并RFM综合得分 rfm_df['RFM_Score'] = rfm_df[['R_Score', 'F_Score', 'M_Score']].sum(axis=1) # 打印最终结果 print(rfm_df) ``` 通过这种方式,可以获得每个客户的综合RFM得分,并据此划分客户群体。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mez_Blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值