胡慧华
菜单
首页人工智能机器学习深度学习智能体项目实践关于我
← 返回机器学习课程

K-MEANS · COURSE 05

这些客户,应该分成几组?

我们只有购买频率和平均客单价,没有“正确客户类型”标签。请先下载并观察数据,再尝试发现自然分组。
下载24条客户教学数据 · CSV ↓
购买频率平均客单价

你直觉上看到了几组客户?

01

无监督学习

没有标准答案,算法如何分组?

聚类会根据特征相似程度自动形成群组。K-means中的K,表示希望算法最终形成的簇数量。
分类先有正确标签

学习“什么特征对应什么类别”。

聚类没有预设标签

先寻找相似样本,再由业务解释群组。

簇编号只是 0、1、2、3,不等于“高价值客户”等业务名称。命名需要观察每组特征后再决定。

02

距离与质心

离哪个中心更近,就先归到哪一组

01初始化质心

先放置K个中心点

02分配样本

每个客户归到最近质心

03更新质心

计算每簇样本平均位置

04重复迭代

直到质心基本不再移动

距离 = √[(购买频率差)² + (客单价差)²]实际建模前会先标准化,避免金额数值远大于频率而主导距离。
03

INTERACTIVE LAB

亲手完成一次质心迭代

先选择K值,再按步骤观察质心、分组与更新结果。
试着切换 K,并依次点击步骤,观察同一批客户如何形成不同分群。
购买频率平均客单价

数据还没有分组。

04

模型选择

K值应该选多少?

肘部法则比较不同K值的簇内距离平方和。下降开始明显变缓的位置,可以作为候选。
K=27.82
K=33.94
K=41.86
K=51.52
K=61.31

图中K=4后下降幅度明显变小,因此4可以作为候选,但最终仍要结合业务是否能够解释和使用这些群组。

05

关键前处理

不同单位,会让距离判断失真

未标准化

客单价可能是数百元,购买频率只有个位或十位。金额差异容易主导距离。

→ StandardScaler →
标准化后

两个特征都转换到相近尺度,距离能同时考虑频率和金额。

06

PYTHON / SCIKIT-LEARN

用代码完成客户分群

kmeans.py

01import pandas as pd

02from sklearn.preprocessing import StandardScaler

03from sklearn.cluster import KMeans

04data = pd.read_csv("customer-segmentation-teaching.csv")

05features = ["purchase_frequency", "average_order_amount"]

06X = data[features]

07scaler = StandardScaler()

08X_scaled = scaler.fit_transform(X)

09model = KMeans(n_clusters=4, random_state=42, n_init=10)

10data["cluster"] = model.fit_predict(X_scaled)

11centers = scaler.inverse_transform(model.cluster_centers_)

12print(data[["customer_id", "cluster"]])

13print(centers)

07

使用边界

适合发现结构,但不会自动给出业务答案

适用

客户分群、门店分组、商品分组、行为模式发现

局限

需要预设K、对初始质心敏感、受异常值影响、偏好近似球形簇

提醒

标准化特征、多次初始化、结合轮廓系数和业务解释验证

08

KNOWLEDGE CHECK

检查你是否理解了K-means

当前答对 0 / 5 题。

K-means 属于哪类学习?

K 表示什么?

质心如何更新?

为什么通常需要标准化?

分群完成后可以直接命名为高价值客户吗?

COURSE 05 · SUMMARY

K-means用距离寻找群组,用质心描述群组中心

  1. 没有标签也能发现数据结构。
  2. K决定希望形成的簇数量。
  3. 样本分配与质心更新会反复进行。
  4. 标准化避免数值尺度主导距离。
  5. 算法只负责分组,业务仍需解释结果。