K-modes聚类实战:用Python处理电商用户品类偏好数据(附完整代码)
电商平台每天产生海量用户行为数据,其中品类偏好这类离散型数据往往藏着金矿——但传统聚类方法面对"男装/女装/童装"这样的类别标签时束手无策。上周帮某母婴电商做用户分群时,我们发现用K-means处理品类数据会导致聚类中心失去业务意义,直到切换成K-modes算法才真正捕捉到用户偏好的本质差异。
1. 为什么离散数据需要特殊处理?
去年分析某服装电商数据集时遇到典型场景:500万用户对20个品类的点击数据,每个品类用字符串标识(如"women_dress")。最初尝试用One-Hot编码+K-means,结果聚类中心出现[0.3, 0.7]这类无法解释的数值——你总不能告诉业务方"这个用户群体有30%的概率喜欢女装"吧?
离散数据的核心特征是:
- 无序性:品类ID "A1001"和"A1002"没有大小关系
- 排他性:用户选择"母婴"品类时,不可能同时选择"数码"
- 频率特征:用户点击"家居"3次比点击1次更能说明偏好强度
python复制# 错误示范:用K-means处理品类数据
from sklearn.cluster import KMeans
kmeans = KMeans(n_clusters=3).fit(one_hot_data) # 输出无意义的数值型中心点
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 汉明距离:离散世界的测量尺
在电子产品质检中,我们常用汉明距离比较二进制序列差异。这个思想迁移到用户偏好分析同样有效——把每个用户看作多维特征向量,维度值代表品类选择状态。
计算示例:
| 用户 | 品类A | 品类B | 品类C |
|---|---|---|---|
| 用户1 | 1 | 0 | 1 |
| 用户2 | 0 | 1 | 1 |
这两个用户的汉明距离=2(品类A和品类B取值不同)
python复制from scipy.spatial.distance import hamming
distance = hamming([1,0,1], [0,1,1]) * 3 # 需要乘以维度数
注意:实际业务中要考虑品类权重,比如大家
