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 消费行为特征矩阵
构建用户消费行为的完整画像:
- 购买频次:单位时间内的订单数量
- 客单价分布:平均订单金额及波动情况
- 品类偏好:各商品类别的购买占比
- 促销敏感度:参与促销活动的订单比例
# 计算用户消费行为特征 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 商品交互特征
用户与商品的交互深度反映了其兴趣强度:
- 浏览深度:平均每次访问浏览的商品数量
- 收藏行为:收藏商品与购买商品的比例
- 评价参与度:留下评价的订单比例
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 聚类结果分析
分析各簇特征,为业务提供洞察:
- 高价值活跃用户:高频次、高金额、多渠道
- 潜在价值用户:中等频次但金额增长快
- 价格敏感用户:主要购买促销商品
- 流失风险用户:近期活跃度下降
4. 业务应用与策略制定
将聚类结果转化为业务行动:
4.1 精准营销策略
针对不同分群制定差异化策略:
| 用户分群 | 营销策略 | 预期效果 |
|---|---|---|
| 高价值用户 | 专属VIP服务 | 提升忠诚度 |
| 潜在用户 | 交叉销售推荐 | 提高客单价 |
| 价格敏感用户 | 限时促销 | 刺激复购 |
| 流失风险用户 | 唤醒优惠 | 防止流失 |
4.2 产品与体验优化
根据分群反馈优化产品:
- 为高频用户优化快速购买流程
- 为价格敏感用户提供更多折扣信息
- 为高价值用户提供专属客服通道
4.3 动态分群更新机制
建立持续更新的分群体系:
- 每周更新用户特征数据
- 每月重新训练聚类模型
- 季度性评估分群业务效果
注意:避免过度依赖静态分群,用户行为会随时间变化,需要建立动态更新机制