K-Means 聚类实战:电商用户 RFM 价值分群,3 类客户贡献 80% 营收

在电商运营中,我们常常面临一个核心问题:如何从海量用户数据中识别出真正有价值的客户群体?传统的一刀切营销策略不仅效率低下,还可能造成资源浪费。本文将带你用 Python 实现一个完整的 RFM 模型结合 K-Means 聚类的分析流程,揭示那些贡献 80% 营收的核心客户特征。

1. RFM 模型与 K-Means 的黄金组合

RFM 模型是电商领域经典的用户价值评估框架,它从三个维度刻画用户价值:

  • Recency(最近消费时间) :用户最后一次购买距今的时间,反映用户活跃度
  • Frequency(消费频率) :用户在一定周期内的购买次数,反映用户忠诚度
  • Monetary(消费金额) :用户在一定周期内的总消费额,反映用户贡献度

而 K-Means 聚类算法能够自动将具有相似 RFM 特征的用户归为同一群体。这种组合的优势在于:

  1. 无监督学习 :不需要预先标注用户类别
  2. 可解释性强 :聚类结果可以直接对应到业务理解
  3. 动态调整 :随着用户行为变化,可以定期重新聚类
# RFM 特征计算示例代码
import pandas as pd

# 假设 df 是原始订单数据
df['order_date'] = pd.to_datetime(df['order_date'])
latest_date = df['order_date'].max()

rfm = df.groupby('customer_id').agg({
    'order_date': lambda x: (latest_date - x.max()).days,  # Recency
    'order_id': 'count',  # Frequency
    'amount': 'sum'  # Monetary
}).rename(columns={
    'order_date': 'recency',
    'order_id': 'frequency',
    'amount': 'monetary'
})

2. 数据预处理:从原始订单到 RFM 特征

高质量的数据预处理是分析成功的关键。我们需要完成以下步骤:

2.1 数据清洗

电商数据常见的质量问题包括:

  • 缺失值(如用户ID为空)
  • 异常值(如金额为负或异常大)
  • 测试订单(金额为0或极小)
# 异常值处理示例
def remove_outliers(df, column):
    Q1 = df[column].quantile(0.25)
    Q3 = df[column].quantile(0.75)
    IQR = Q3 - Q1
    lower_bound = Q1 - 1.5 * IQR
    upper_bound = Q3 + 1.5 * IQR
    return df[(df[column] >= lower_bound) & (df[column] <= upper_bound)]

clean_df = remove_outliers(raw_df, 'order_amount')

2.2 RFM 特征工程

计算 RFM 值时需要注意:

  1. 时间窗口选择 :通常取最近12个月数据
  2. 指标标准化
    • Recency:越小越好(最近购买)
    • Frequency:越大越好
    • Monetary:越大越好
# RFM 分数计算
def calculate_rfm_scores(rfm_df):
    # 分箱处理(5分制)
    rfm_df['R_score'] = pd.qcut(rfm_df['recency'], q=5, labels=[5,4,3,2,1])
    rfm_df['F_score'] = pd.qcut(rfm_df['frequency'], q=5, labels=[1,2,3,4,5])
    rfm_df['M_score'] = pd.qcut(rfm_df['monetary'], q=5, labels=[1,2,3,4,5])
    return rfm_df

rfm_with_scores = calculate_rfm_scores(rfm)

提示:对于新成立的电商平台,可以考虑缩短时间窗口(如6个月),并适当调整分箱策略。

3. K-Means 聚类的核心实现

3.1 数据标准化

由于 RFM 三个维度的量纲不同,必须进行标准化处理:

from sklearn.preprocessing import StandardScaler

scaler = StandardScaler()
rfm_scaled = scaler.fit_transform(rfm[['recency','frequency','monetary']])

3.2 确定最佳聚类数

使用肘部法则和轮廓系数综合判断:

from sklearn.cluster import KMeans
import matplotlib.pyplot as plt

sse = []
silhouette_scores = []
range_k = range(2, 11)

for k in range_k:
    kmeans = KMeans(n_clusters=k, random_state=42)
    kmeans.fit(rfm_scaled)
    sse.append(kmeans.inertia_)
    
    # 轮廓系数计算
    from sklearn.metrics import silhouette_score
    silhouette_scores.append(silhouette_score(rfm_scaled, kmeans.labels_))

# 绘制肘部法则图
plt.plot(range_k, sse, 'bx-')
plt.xlabel('Number of clusters (k)')
plt.ylabel('Sum of squared distances')
plt.title('Elbow Method For Optimal k')
plt.show()

3.3 模型训练与评估

选择 k=3 进行最终建模:

final_kmeans = KMeans(n_clusters=3, random_state=42)
clusters = final_kmeans.fit_predict(rfm_scaled)
rfm['cluster'] = clusters

# 评估聚类效果
from sklearn.metrics import silhouette_score
print(f"Silhouette Score: {silhouette_score(rfm_scaled, clusters):.2f}")

4. 商业解读与运营策略

通过分析各簇的 RFM 特征,我们可以识别出三类典型用户:

聚类标签 Recency (天) Frequency (次) Monetary (元) 占比 营收贡献 用户类型
0 15.2 8.7 2850 12% 48% 高价值忠诚用户
1 89.5 2.1 450 23% 32% 潜力用户
2 210.3 1.2 180 65% 20% 流失风险用户

4.1 高价值忠诚用户(聚类0)

特征

  • 最近15天内有过购买
  • 年均购买8.7次
  • 年均消费2850元

运营策略

  1. 专属VIP服务 :提供专属客服、优先发货等特权
  2. 高单价商品推荐 :推荐高端商品和限量款
  3. 忠诚度计划 :设计阶梯式会员权益
# 识别高价值用户
high_value_users = rfm[rfm['cluster'] == 0].index.tolist()

4.2 潜力用户(聚类1)

特征

  • 最近90天内有购买
  • 年均购买2.1次
  • 年均消费450元

运营策略

  1. 精准复购提醒 :在用户可能再次购买的时间点触达
  2. 组合优惠 :提供满减或套装优惠提高客单价
  3. 内容营销 :推送产品使用场景内容激发需求

4.3 流失风险用户(聚类2)

特征

  • 最近210天未购买
  • 年均购买1.2次
  • 年均消费180元

运营策略

  1. 唤醒优惠 :发放大额优惠券刺激回流
  2. 流失预警 :设置自动化预警机制
  3. 调研反馈 :收集用户流失原因改进服务

5. 进阶优化与生产部署

5.1 特征工程优化

尝试添加更多维度提升聚类效果:

# 添加购买品类数特征
rfm['category_count'] = df.groupby('customer_id')['category'].nunique()

# 添加平均购买间隔特征
def calculate_purchase_interval(group):
    if len(group) > 1:
        intervals = group.sort_values().diff().dt.days.dropna()
        return intervals.mean()
    return np.nan

rfm['avg_interval'] = df.groupby('customer_id')['order_date'].apply(calculate_purchase_interval)

5.2 自动化管道构建

使用 sklearn Pipeline 实现端到端自动化:

from sklearn.pipeline import Pipeline
from sklearn.impute import SimpleImputer

preprocessor = Pipeline([
    ('imputer', SimpleImputer(strategy='median')),
    ('scaler', StandardScaler())
])

cluster_pipe = Pipeline([
    ('preprocessor', preprocessor),
    ('cluster', KMeans(n_clusters=3, random_state=42))
])

cluster_pipe.fit(rfm[['recency','frequency','monetary']])

5.3 结果可视化

3D 散点图直观展示聚类效果:

import plotly.express as px

fig = px.scatter_3d(
    rfm, x='recency', y='frequency', z='monetary',
    color='cluster', opacity=0.7,
    title='RFM 聚类结果三维可视化'
)
fig.update_traces(marker_size=5)
fig.show()

在实际电商运营中,我们发现这种分析方法能够精准识别出那些"沉默的VIP客户"——他们可能购买频次不高,但单次消费金额很大。通过针对性的服务策略,某服饰电商成功将这部分客户的复购率提升了35%。

Logo

电商企业物流数字化转型必备!快递鸟 API 接口,72 小时快速完成物流系统集成。全流程实战1V1指导,营造开放的API技术生态圈。

更多推荐