K-Means 聚类实战:电商用户分群 2 大核心步骤与 7 个特征工程要点

📅 2026/7/12 11:08:59 👁️ 阅读次数 📝 编程学习
K-Means 聚类实战:电商用户分群 2 大核心步骤与 7 个特征工程要点

K-Means 聚类实战:电商用户分群 2 大核心步骤与 7 个特征工程要点

当电商平台积累了大量用户行为数据后,如何从这些数据中挖掘出有价值的用户分群信息?K-Means 聚类算法提供了一种有效的解决方案。本文将深入探讨如何通过数据预处理和特征工程两大核心步骤,构建高质量的电商用户分群模型。

1. 数据预处理:构建高质量分析基础

数据预处理是K-Means聚类成功的关键前提。电商数据通常包含大量噪声和异常值,直接使用原始数据会导致聚类效果大打折扣。以下是数据预处理的四个关键环节:

1.1 数据清洗与转换

电商数据清洗需要特别注意三类问题:

  • 缺失值处理:订单金额、用户ID等关键字段缺失会严重影响分析
  • 数据类型转换:日期时间字段需要转换为datetime格式,分类变量需要编码
  • 重复记录处理:同一订单被多次记录会导致数据失真
# 示例:电商数据基础清洗 df['order_date'] = pd.to_datetime(df['order_date']) # 日期转换 df['user_id'] = df['user_id'].astype('str') # 用户ID转为字符串 df = df.drop_duplicates(subset=['order_id']) # 去除重复订单

1.2 异常值检测与处理

电商数据中常见的异常值类型及处理方法:

异常类型检测方法处理方式
超高额订单IQR方法/Z-score截断或删除
异常购买频率时间序列分析单独分析
退货欺诈订单业务规则过滤标记排除
# 使用IQR方法检测异常订单金额 Q1 = df['order_amount'].quantile(0.25) Q3 = df['order_amount'].quantile(0.75) IQR = Q3 - Q1 df = df[~((df['order_amount'] < (Q1 - 1.5*IQR)) | (df['order_amount'] > (Q3 + 1.5*IQR)))]

1.3 特征衍生与扩展

从原始数据中提取更有价值的特征:

  • 时间特征:购买时段、星期几、是否节假日
  • 行为特征:浏览-购买转化率、加购未买商品数
  • RFM特征:最近购买时间(Recency)、购买频率(Frequency)、消费金额(Monetary)

提示:时间特征的周期性处理对电商聚类特别重要,考虑使用sin/cos转换处理星期、月份等周期性特征

1.4 数据标准化

K-Means基于距离计算,不同量纲的特征需要标准化:

from sklearn.preprocessing import StandardScaler scaler = StandardScaler() scaled_features = scaler.fit_transform(df[['recency','frequency','monetary']])

2. 特征工程:7个关键特征构建策略

特征工程决定了聚类结果的可解释性和业务价值。以下是电商用户分群中最关键的7类特征:

2.1 消费行为特征矩阵

构建用户消费行为的完整画像:

  1. 购买频次:单位时间内的订单数量
  2. 客单价分布:平均订单金额及波动情况
  3. 品类偏好:各商品类别的购买占比
  4. 促销敏感度:参与促销活动的订单比例
# 计算用户消费行为特征 user_features = df.groupby('user_id').agg({ 'order_id': 'count', # 购买频次 'order_amount': ['mean','std'], # 客单价均值与波动 'is_promotion': 'mean' # 促销参与率 })

2.2 时间模式特征

用户的时间行为模式往往能反映其消费习惯:

  • 购买时间偏好:早晨/午后/晚间/深夜
  • 购物间隔:两次购买的平均间隔天数
  • 活跃周期:用户活跃的高峰时间段

2.3 渠道偏好特征

不同渠道的用户可能具有显著差异:

渠道类型特征构建方法
移动端移动订单占比
PC端PC订单占比
小程序小程序使用频率
社交媒体社交引流转化率

2.4 商品交互特征

用户与商品的交互深度反映了其兴趣强度:

  1. 浏览深度:平均每次访问浏览的商品数量
  2. 收藏行为:收藏商品与购买商品的比例
  3. 评价参与度:留下评价的订单比例

2.5 支付与物流特征

支付和物流选择也能反映用户特征:

# 支付方式特征编码 payment_mapping = { '信用卡':0, '支付宝':1, '微信支付':2, '货到付款':3, '分期付款':4 } df['payment_encoded'] = df['payment_method'].map(payment_mapping)

2.6 用户价值分层特征

基于RFM模型构建用户价值指标:

# RFM评分计算 df['R_score'] = pd.qcut(df['recency'], q=5, labels=[5,4,3,2,1]) df['F_score'] = pd.qcut(df['frequency'], q=5, labels=[1,2,3,4,5]) df['M_score'] = pd.qcut(df['monetary'], q=5, labels=[1,2,3,4,5]) df['RFM_score'] = df['R_score'].astype(int) + df['F_score'].astype(int) + df['M_score'].astype(int)

2.7 行为序列特征

用户行为序列可以揭示更深层的模式:

  • 购买路径:浏览→加购→购买的转化路径
  • 跨品类关联:先后购买不同品类的关联性
  • 行为变化趋势:最近期的行为模式变化

3. 模型训练与优化

完成特征工程后,进入模型训练阶段:

3.1 确定最佳K值

使用肘部法则和轮廓系数结合确定最佳聚类数:

from sklearn.cluster import KMeans from sklearn.metrics import silhouette_score sse = [] silhouette = [] K_range = range(2,10) for k in K_range: kmeans = KMeans(n_clusters=k, random_state=42) kmeans.fit(scaled_features) sse.append(kmeans.inertia_) silhouette.append(silhouette_score(scaled_features, kmeans.labels_))

3.2 模型训练与评估

# 最终模型训练 best_k = 4 # 根据肘部法则确定 final_model = KMeans(n_clusters=best_k, random_state=42) clusters = final_model.fit_predict(scaled_features) # 评估轮廓系数 silhouette_avg = silhouette_score(scaled_features, clusters) print(f"轮廓系数: {silhouette_avg:.3f}")

3.3 聚类结果分析

分析各簇特征,为业务提供洞察:

  1. 高价值活跃用户:高频次、高金额、多渠道
  2. 潜在价值用户:中等频次但金额增长快
  3. 价格敏感用户:主要购买促销商品
  4. 流失风险用户:近期活跃度下降

4. 业务应用与策略制定

将聚类结果转化为业务行动:

4.1 精准营销策略

针对不同分群制定差异化策略:

用户分群营销策略预期效果
高价值用户专属VIP服务提升忠诚度
潜在用户交叉销售推荐提高客单价
价格敏感用户限时促销刺激复购
流失风险用户唤醒优惠防止流失

4.2 产品与体验优化

根据分群反馈优化产品:

  • 为高频用户优化快速购买流程
  • 为价格敏感用户提供更多折扣信息
  • 为高价值用户提供专属客服通道

4.3 动态分群更新机制

建立持续更新的分群体系:

  1. 每周更新用户特征数据
  2. 每月重新训练聚类模型
  3. 季度性评估分群业务效果

注意:避免过度依赖静态分群,用户行为会随时间变化,需要建立动态更新机制