Python社区  »  Python

十分钟定位用户价值 - Python RFM数据挖掘

起个帅的名 • 6 天前 • 19 次点击  
阅读 30

十分钟定位用户价值 - Python RFM数据挖掘

前言

Python由于丰富而强大的类库,广泛应用与互联网各技术领域,其中以数据挖掘和分析最为常见,本文通过Python实现RFM用户价值分析模型,带大家一起感受数据挖掘与分析的乐趣~

RFM:消费(Recency)、消费频率(Frequency)、与消费金额(Monetary),我们将商业活动核心三要素,用一定的权重计算,即可为各用户建立价值标签。

通过用户价值标签,我们就可以采用不同营销策略,做精准营销,以及拉新、召回等营运行动

RFM建模与分析

技术准备

技术栈:Python的time、numpy、pandas类包

Pandas:

  • 提供丰富的数据函数库(导入、导出、选取、过滤、统计)
  • 提供数据可视化功能

业务实践

现在我们有一份原始数据,包含用户id、订单时间、订单id、订单金额,期望通过RFM模型得到各用户价值:

代码如下,注释已经非常清晰,这里不做赘述:

import time
import numpy as np
import pandas as pd

# 导入数据
df_raw = pd.DataFrame(pd.read_excel('test.xlsx',index_col='USERID'))


# 缺失值处理
sales_data = df_raw.dropna() # 丢失带有缺失值NA的行记录
sales_data = sales_data[sales_data['AMOUNTINFO'] > 1] # 丢弃订单金额<=1的记录 

# 数据转换 (按用户id去重归总)
recency_value = sales_data['ORDERDATE'].groupby(sales_data.index).max() #计算最近一次订单时间
frequency_value = sales_data['ORDERDATE'].groupby(sales_data.index).count() #计算订单频率
monetary_value = sales_data['AMOUNTINFO'].groupby(sales_data.index).sum() #计算订单总金额

# 分别计算R,F,M得分
deadline_date = pd.datetime(2020, 5,1) #指定一个时间节点,用来计算其他时间和改时间的距离
r_interval = (deadline_date - recency_value).dt.days #计算r间隔
r_score = pd.cut(r_interval, 5, labels=[5,4,3,2,1]) # 计算r得分 五分位倒序
f_score = pd.cut(frequency_value, 5, labels=[1,2,3,4,5]) # 计算f得分
m_score = pd.cut(monetary_value, 5, labels=[1,2,3,4,5]) # 计算m得分

# R,F,M数据合并
rfm_list = [r_score, f_score, m_score] # 将R,F,M三个维度组成列表
rfm_cols = ['r_score', 'f_score', 'm_score'] # 设置R,F,M三个维度的列名
rfm_pd = pd.DataFrame(np.array(rfm_list).transpose(), dtype=np.int32, 
                      columns=rfm_cols, index=frequency_value.index) #建立R,F,M数据框

#策略1:加权得分 定义用户价值
rfm_pd['rfm_wscore'] = rfm_pd['r_score']*0.2 + rfm_pd['f_score']*0.2 + rfm_pd['m_score']*0.6

#策略2:RFM组合 直接输出三维度值
rfm_pd_tmp = rfm_pd.copy()
rfm_pd_tmp['r_score'] = rfm_pd_tmp['r_score'].astype('str')
rfm_pd_tmp['f_score'] = rfm_pd_tmp['f_score'].astype('str')
rfm_pd_tmp['m_score'] = rfm_pd_tmp['m_score'].astype('str')
rfm_pd['rfm_comb'] = rfm_pd_tmp['r_score'].str.cat(rfm_pd_tmp['f_score']).str.cat(rfm_pd_tmp['m_score'])

# 导出数据
rfm_pd.to_csv('simple.csv')
复制代码

运行脚本后,得到一份新的文件,内容如下:

以上就是我们整个数据挖掘和分析流程,Pandas功能丰富,若想进一步了解,可以查阅文档

结语

可见,基于Python,RFM模型还是挺好实现的,建模的难点其实在于阕值及权重值的选取,他们会直接影响最后的结果。

我个人的经验是基于2-8原则,选择R、F、M三者2-8原则的分界值作为阕值。再根据业务实际设定权重值。

技术本身是枯燥的,但是我们可以运用技术,让生活变得更加美好。后续也会为大家带来更多,Python有意思的实战分享!

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/63079
 
19 次点击  
分享到微博