Python 语言 用 Scikit learn 实现客户分群 RFM 数据 K means 聚类 + 轮廓系数评估

Python阿木 发布于 2025-06-09 11 次阅读


Python Scikit-learn 实现RFM模型与K-means聚类分析及轮廓系数评估

客户分群是市场营销中的一项重要活动,通过对客户进行有效的分群,企业可以更好地了解客户需求,制定更有针对性的营销策略。RFM模型(Recency, Frequency, Monetary)是一种常用的客户分群方法,它通过分析客户的购买频率、购买金额和购买时间来评估客户的忠诚度和价值。本文将使用Python的Scikit-learn库,结合K-means聚类算法和轮廓系数评估,实现RFM模型的客户分群。

1. 数据准备

我们需要准备RFM数据。RFM数据通常包括以下三个维度:

- Recency(最近一次购买时间):距离当前时间的间隔,通常以天或月为单位。
- Frequency(购买频率):在一定时间内购买的次数。
- Monetary(购买金额):在一定时间内的总消费金额。

以下是一个简单的RFM数据示例:

python
import pandas as pd

创建一个示例DataFrame
data = {
'Recency': [30, 15, 45, 10, 60],
'Frequency': [5, 3, 2, 4, 1],
'Monetary': [200, 150, 300, 250, 100]
}

df = pd.DataFrame(data)
print(df)

2. 数据预处理

在进行聚类分析之前,我们需要对数据进行预处理,包括:

- 缺失值处理:检查数据中是否存在缺失值,并进行相应的处理。
- 数据标准化:由于RFM数据量纲不同,我们需要对数据进行标准化处理,以便K-means算法能够公平地对待每个维度。

python
from sklearn.preprocessing import StandardScaler

数据标准化
scaler = StandardScaler()
df_scaled = scaler.fit_transform(df)
print(df_scaled)

3. K-means聚类

接下来,我们使用K-means算法对标准化后的数据进行聚类。K-means算法是一种无监督学习算法,它通过迭代优化聚类中心,将数据点分配到最近的聚类中心。

python
from sklearn.cluster import KMeans

设置聚类数量
k = 3

初始化K-means模型
kmeans = KMeans(n_clusters=k, random_state=0)

拟合模型
kmeans.fit(df_scaled)

获取聚类标签
labels = kmeans.labels_

打印聚类结果
print(labels)

4. 轮廓系数评估

轮廓系数是衡量聚类效果的一个指标,其值范围在-1到1之间。轮廓系数越接近1,表示聚类效果越好。

python
from sklearn.metrics import silhouette_score

计算轮廓系数
silhouette_avg = silhouette_score(df_scaled, labels)
print(f'Silhouette Coefficient: {silhouette_avg}')

5. 结果分析

根据轮廓系数和聚类结果,我们可以对客户进行分群。以下是一个简单的分群结果分析:

python
创建一个包含原始数据和聚类标签的DataFrame
df_clustered = pd.DataFrame(df_scaled)
df_clustered['Cluster'] = labels

打印分群结果
print(df_clustered)

通过分析不同聚类中的客户特征,我们可以了解不同客户群体的购买行为和偏好,从而制定相应的营销策略。

总结

本文使用Python的Scikit-learn库,实现了RFM模型的客户分群。通过K-means聚类算法和轮廓系数评估,我们对客户进行了有效的分群,并分析了不同客户群体的特征。这种方法可以帮助企业更好地了解客户,制定更有针对性的营销策略。

后续工作

- 可以尝试不同的聚类算法,如层次聚类、DBSCAN等,比较它们的聚类效果。
- 可以结合其他特征,如客户年龄、性别等,进行更全面的客户分群。
- 可以使用聚类结果进行客户细分,针对不同细分市场制定个性化的营销策略。

通过不断优化和改进,我们可以使客户分群更加精准,从而提高企业的市场竞争力。