基于客观事实的 RFM 模型(Python 代码)

RFM模型用于客户价值分析,本文通过Python和Anaconda解释模型原理,使用pandas、matplotlib和seaborn等库处理数据,实现用户分类。首先获取R、F、M三个维度数据,然后通过等距分箱方法对用户进行客观分层,最后展示用户类别分布,揭示潜在的市场策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

CDA数据分析师 出品  

1

背景

RFM(Recency Frequency Monetary)模型是衡量客户价值和客户创利能力的重要工具和手段。在众多的客户关系管理(CRM)的分析模式中,RFM模型是被广泛提到的。

RFM模型是属于业务分析方法与模型中的部分。它的本质是用户分类。本文将用现代最流行的编程语言---Python语言来实践课堂上讲解的RFM模型,将用户进行分类。

本文采用Anaconda进行Python编译,主要涉及的Python模块:

  • pandas

  • matplotlib

  • seaborn

  • datetime

本章分为三部分讲解:

1.RFM模型原理与步骤

2.Python分布实现RFM

3.总结

2

RFM模型原理与步骤

RFM模型的思路是:该模型是根据用户历史行为数据,结合业务理解选择划分维度,实现用户分类,助力用户精准营销。此外,还学习了构建RFM模型的步骤:

  • 获取R、F、M三个维度下的原始数据

  • 定义R、F、M的评估模型与判断阈值

  • 进行数据处理,获取R、F、M的值

  • 参照评估模型与阈值,对用户进行分层

  • 针对不同层级用户制定运营策略

上面步骤可以知道,我们需要有RFM三个维度,根据我们在业务分析方法课程中学到的,业务分析模型离不开指标,而指标是对度量的汇总。因此,在找出RFM三个维度后,需要对每个维度下度量实现不同汇总规则。下面讲述对R、F、M三个维度下的度量如何进行汇总。

1.R代表最近一次消费,是计算最近一次消费时间点和当前时间点的时间差。因此,这里需要用到多维数据透视分析中的基本透视规则---最小值MIN求出最小的时间差。

2.F代表消费频次,是在指定区间内统计用户的购买次数。因此,这里需要用到多维数据透视分析中的基本透视规则---技术类COUNT(技术类不去重指标)统计用户的购买次数。

3.M代表消费金额,是指在指定区间内统计用户的消费总金额,因此,这里需要用到求和类指标,也即基本透视规则中的合计规则---SUM。

在对得到RFM模型中的指标值后最重要的一步就是分层,根据我们在课堂上学到的内容,大部分的用户分层是根据经验来分层的,本文在追求数据的客观性下采取统计学中的等距分箱方法来进行分层,对R、F、M三个维度分成两类。

综上,我们大致了解了如何构建RFM模型,下面以Python实现RFM模型,并对每一步进行详细的讲解。

3

Python实现RFM模型

数据准备

本文所需的数据是一家公司对2021年10月底至今的客户购买行为数据,(前十二行)如图下:

其中, uid 代表客户的id,是存在重复情况的。 prince 维度代表客户每发生一次交易行为所花费的金额。 time 为

### Python 库用于 RFM 模型实现 对于 RFM (Recency, Frequency, Monetary) 模型的实现,多个 Python 库提供了强大的支持。以下是几个常用的库: #### 1. `lifetimes` 库 `lifetimes` 是一个专注于客户生命周期分析的库,特别适合于 RFM 分析。该库实现了多种生存模型和频率预测模型,能够帮助理解客户的购买行为。 ```python from lifetimes import BetaGeoFitter bgf = BetaGeoFitter(penalizer_coef=0.0) bgf.fit(frequency, recency, T) # 预测未来某个时间段内的购买次数 frequency_predictions = bgf.predict(t=30, frequency=frequency, recency=recency, T=T) ``` 此库不仅适用于简单的 RFM 计算,还扩展到了更复杂的客户流失率建模[^1]。 #### 2. `pandas` 和 `numpy` 虽然不是专门针对 RFM 的库,但是 `pandas` 和 `numpy` 提供了处理数据所需的基础工具。通过这两个库可以轻松计算 Recency、Frequency 和 Monetary 值,并进行初步的数据探索与清洗工作。 ```python import pandas as pd import numpy as np data['TotalSum'] = data.groupby('CustomerID')['Amount'].transform(np.sum) rfmTable = data.groupby('CustomerID').agg({ 'InvoiceDate': lambda x: (max_date - x.max()).days, 'InvoiceNo': 'count', 'TotalSum': 'mean' }) rfmTable.rename(columns={ 'InvoiceDate': 'Recency', 'InvoiceNo': 'Frequency', 'TotalSum': 'MonetaryValue'}, inplace=True) ``` 上述代码片段展示了如何利用基础数据分析库来构建 RFM 表格。 #### 3. `scikit-learn` 及其他机器学习框架 当涉及到进一步的应用场景时,比如聚类分析或分类任务,则可借助像 `scikit-learn` 这样的通用 ML 平台来进行高级分析。例如 KMeans 聚类可以帮助识别不同类型的顾客群体。 ```python from sklearn.cluster import KMeans kmeans = KMeans(n_clusters=4).fit(rfm_normalized) labels = kmeans.labels_ centroids = kmeans.cluster_centers_ print(labels) print(centroids) ``` 这种组合方式使得不仅可以执行基本的 RFM 分析,还可以深入挖掘潜在模式并做出更加精准的商业决策。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值