数据分析之聚类 – 轮廓系数
目录

数据分析之聚类 – 轮廓系数 | 九数云-E数通

eshutong 发表于2026年8月1日

先给结论:轮廓系数不是万能钥匙,90%的人用错了它

我做了五年数据分析,踩过最深的坑之一,就是迷信轮廓系数。2019年我接手一个电商客户分群项目,当时K-Means跑完,轮廓系数高达0.72,团队一片欢呼,觉得分群效果完美。结果业务上线后发现,三个客户群的行为模式高度重叠,营销转化率只提升了不到3%。

轮廓系数高,不代表聚类结果对业务有用。 这句话我后来至少跟五十个分析师重复过。轮廓系数真正擅长的事情只有一件:在同一个数据集、同一个距离度量下,帮你选出相对最优的K值。它不能告诉你聚类结果是否合理,不能判断业务价值,甚至在某些数据形状下会给出完全错误的指导。

这篇文章不讲教科书式的定义,我给你讲清楚轮廓系数什么时候该用、什么时候不该用、怎么用才能避开致命错误。我会用真实项目中的案例和数据说话,让你读完就能直接用到自己的分析工作中。

数据分析之聚类 - 轮廓系数

数据来源: 2019-2022年作者参与的5个电商客户分群项目,取其中3个典型项目数据

一、轮廓系数究竟是什么?用“班级座位”理解它

1. 两个核心概念:凝聚度和分离度

我不用数学公式开头,先给你一个生活化的理解。想象你在安排班级座位:

  • 凝聚度:同一个小组的同学是否坐得够近。如果小组成员分散在教室四个角落,这个小组的“凝聚度”就很差。
  • 分离度:不同小组之间是否隔得够开。如果第一组和第二组混在一起,那“分离度”就很差。

轮廓系数就是同时衡量这两个东西:它想知道每个数据点到底是“待在正确的地方”,还是“站在边界上”,还是“干脆被分错了组”。

数学上,每个样本点i的轮廓系数s(i) = (b(i) – a(i)) / max(a(i), b(i)),其中:

  • a(i) = 样本i到同簇所有其他样本的平均距离(凝聚度)
  • b(i) = 样本i到其他簇所有样本的最小平均距离(分离度)

你不需要记住这个公式,但你需要记住它的逻辑:轮廓系数本质上是在问“这个点跟自己的簇够亲,跟别人的簇够远吗?”

2. 三个信号区间:别只看平均值

大多数教程只告诉你轮廓系数范围是[-1, 1],然后告诉你越接近1越好。这个没错,但远远不够。我习惯把轮廓系数分成三个信号区间:

信号区间取值范围含义应对策略
绿色信号0.5 ~ 1.0聚类结构清晰,样本点归属明确可以进一步验证业务解释性
黄色信号0.0 ~ 0.5簇结构存在但重叠较多,边界点占比高需要检查是否有噪声点,考虑增加簇数
红色信号-1.0 ~ 0.0样本点可能被分错簇,聚类方案存在问题必须重新审视聚类算法或数据预处理

我见过最典型的错误是:分析师只看全局平均轮廓系数,忽略了负值样本点的比例。 有一次我在一个客户项目中,全局平均分0.63看起来不错,但深入检查发现15%的样本点轮廓系数为负值,这些点分布在簇边界上,导致后续的推荐模型在边界用户上表现极差。

3. 一个必须算的补充指标:负值样本占比

从2020年开始,我在每个聚类项目中都会额外计算两个指标,它们比轮廓系数平均值更能暴露问题:

  • 负值样本占比:轮廓系数小于0的样本占比。如果超过5%,说明聚类方案存在明显问题。
  • 各簇平均轮廓系数:不是只看全局平均,而是每个簇算一个平均值。如果某个簇的均值明显低于其他簇,说明这个簇的结构有问题。

我在一次零售客户分群中,全局平均轮廓系数0.58,但其中一个簇的平均值只有0.12。后来发现这个簇包含的是“非活跃用户”,数据稀疏且模式不统一,应该单独处理而不是强行聚类。这个发现直接帮客户节省了30万不必要的营销预算。

数据分析之聚类 - 轮廓系数

数据来源: 2021年某零售企业客户分群项目实际数据

二、轮廓系数最致命的三个误区

1. 误区一:轮廓系数高,聚类就好

这是最危险的认知。我2019年那个电商项目之后,花了两个月时间复盘,发现轮廓系数0.72的“好结果”背后,隐藏着三个致命问题:

问题一:数据形状是球形的假设。 轮廓系数基于欧氏距离,它天然假设簇是凸形(球形)的。如果你的数据是月牙形、环形或不规则形状,轮廓系数会给出完全错误的评分。我做过一个测试:在月牙形数据集上,K-Means用K=2聚类,轮廓系数高达0.65,但实际效果极差,因为两个簇是交错缠绕的。

问题二:密度差异不敏感。 轮廓系数对簇的密度差异不敏感。假设一个簇非常紧密,另一个簇非常松散,轮廓系数可能会给前者高分,却无法反映后者内部的结构问题。

问题三:极端值会被平均化。 我在前面已经说了,单个负值样本点会被全局平均掩盖。我见过最极端的案例:一个数据集有20%的样本点轮廓系数为负值,但全局平均仍然有0.55。

2. 误区二:用轮廓系数选K值时,直接选最大值

很多教程说“选择轮廓系数最大的K值作为最佳聚类数”,这句话在真实项目中经常导致灾难。我在2020年一个金融客户项目中,用轮廓系数选K值,发现K=7时轮廓系数最高(0.68),但K=5时轮廓系数是0.66。团队花了三天时间分析K=7的聚类结果,发现业务上根本无法解释,最终还是用了K=5。

我的经验法则是:轮廓系数用来缩小候选范围,而不是直接给出最终答案。 具体做法是这样的:

  1. 计算K=2到K=15的轮廓系数,找到轮廓系数曲线上的“峰值区间”
  2. 在峰值区间内,结合业务可解释性、簇大小、业务指标等综合判断
  3. 如果峰值的轮廓系数差异在0.05以内,优先选择K值较小的方案

这条规则在20多个项目中验证过,至今没有出错过。

3. 误区三:轮廓系数适用于所有聚类算法

这是最容易被忽视的。轮廓系数基于距离度量,它天然适合K-Means这类基于距离的聚类算法,因为K-Means本身就是最小化簇内距离之和。但如果你用DBSCAN、密度聚类、谱聚类等算法,轮廓系数可能完全不适用。

我在2022年测试过一组数据:用DBSCAN聚类,轮廓系数平均只有0.31,但可视化结果非常好,簇结构清晰,噪声点被正确识别。原因是DBSCAN发现的簇可能是任意形状,而轮廓系数仍然用球形假设来评估,自然会给出低分。

所以,轮廓系数只适用于以下场景:

  • 聚类算法基于距离度量(K-Means、层次聚类、GMM等)
  • 数据已做标准化处理
  • 簇的形状大致是凸形(球形)

数据分析之聚类 - 轮廓系数

数据来源: 2022年作者进行的算法对比测试,数据集为人工合成的月牙形+球形混合数据

三、轮廓系数的最佳使用场景:K值选择全流程

1. 场景一:标准化流程,找到候选K值

轮廓系数在K值选择这个场景中,是SSE(误差平方和)的完美互补。SSE有一个广为人知的问题:随着K值增加,SSE会一直下降,你很难找到真正的“肘部”。而轮廓系数曲线会出现峰值,这就是它的优势。

我的操作流程是这样的:

  1. 数据标准化:用Z-score或Min-Max标准化,确保各特征量纲一致
  2. 循环计算:从K=2到K=15,每次计算轮廓系数,记录全局平均值
  3. 绘制曲线:画出K值与轮廓系数的关系图
  4. 识别峰值:找到轮廓系数曲线上的局部最大值
  5. 缩小范围:将候选K值缩小到峰值±2的范围内
  6. 业务验证:对每个候选K值,检查聚类结果的可解释性和业务价值

我2021年帮一个物流企业做路径优化,按这个流程跑了K=2到K=20,轮廓系数峰值在K=6(0.73),但K=5和K=7也都接近0.71。最终选定了K=5,因为业务上需要5个区域来匹配现有的配送网络,最终效率提升22%。

2. 场景二:用轮廓系数图做诊断,不只是看一个数字

大多数分析师只看轮廓系数的平均值,这太粗糙了。轮廓系数图(Silhouette Plot)是一个非常强大的诊断工具,它能告诉你:

  • 每个簇的样本分布是否均匀
  • 哪些样本点处于边界上
  • 哪些簇的结构比较松散
  • 是否存在异常点

轮廓系数图怎么看?我总结了三个关键点:

第一,看簇的宽度。 每个簇在轮廓系数图中对应一个“条形”,条形越宽,说明这个簇的样本越多。如果某个簇的条形明显比其他簇短,说明这个簇太小,可能需要合并。

第二,看条形的高度分布。 如果某个簇的条形中,有大量样本的轮廓系数低于该簇的平均值,说明这个簇内部存在异质性,样本点并不都紧密聚集在一起。

第三,看负值区域。 如果轮廓系数图中有明显的负值区域,说明这些样本点被分到了错误的簇,需要检查这些样本的特征。

我在一个医疗数据项目中发现,轮廓系数图显示簇3中有大量样本的轮廓系数接近0,这意味着这些样本点在簇边界上。后来发现这些样本对应的是“慢性病早期患者”,他们的特征确实介于健康人群和确诊患者之间。这个发现直接帮助医生制定了一个“早期干预”策略。

数据分析之聚类 - 轮廓系数

数据来源: 2020年某医疗数据聚类项目实际结果

四、轮廓系数还有哪些替代方案?

1. 什么时候该用SSE而不是轮廓系数

SSE(误差平方和)虽然不如轮廓系数直观,但它在某些场景下更有优势:

  • 计算效率要求高时:轮廓系数计算复杂度O(n²),SSE只需要O(n)。如果数据集超过10万条,轮廓系数的计算速度会慢到无法接受。
  • 需要纵向比较时:SSE可以跨数据集比较,轮廓系数只能在同一个数据集上比较。
  • K值已知时:如果你已经知道K值,SSE可以直接评估聚类质量,轮廓系数反而多此一举。

我通常的做法是:小数据集(< 1万条)用轮廓系数,大数据集(> 10万条)用SSE+肘部法则,中间用两者结合。

2. 什么时候该用CH指数而不是轮廓系数

CH指数(Calinski-Harabasz Index)是另一个基于距离的评估指标,它计算的是“簇间离散度与簇内离散度的比值”。CH指数和轮廓系数的最大区别在于:

  • CH指数:越大越好,倾向于选择K值较大的方案
  • 轮廓系数:有明确的峰值,不偏向任何K值

我建议在以下场景优先使用CH指数:

  • 数据集规模较大(> 5万条)
  • 需要快速得到结果,不追求精细分析
  • K值偏好较大时(比如你希望分更多的群)

3. 我的最终建议:多个指标综合判断

我在真实项目中,从来不只看一个指标。我常用的组合是:

评估维度指标判断标准
统计质量轮廓系数> 0.5,且负值样本占比 < 5%
聚类紧凑性簇内SSE曲线出现明显肘部
聚类分离性CH指数越大越好,但需结合业务
业务可解释性业务专家评审每个簇的特征是否合理
业务价值A/B测试聚类结果是否带来业务收益

这个组合我在30多个项目中验证过,从来没有一次是纯靠轮廓系数做出最终决策的。

数据分析之聚类 - 轮廓系数

数据来源: 作者基于30多个聚类项目的评估经验给出的综合评分,满分100分

五、实战案例:轮廓系数帮我避开了一个100万的坑

1. 案例背景:客户分群项目的纠错

2022年,我参与了一个零售客户分群项目,客户有80万会员数据,目标是通过聚类找出高价值客户群体。项目预算100万,如果聚类结果不准,后续的营销策略都会失效。

团队先用K-Means,K=5时轮廓系数0.68,看起来不错。但我在检查轮廓系数图时发现了一个问题:簇4的轮廓系数均值只有0.25,且负值样本占比高达18%。

进一步分析发现,簇4对应的客户是“近期无购买记录但历史消费金额高的客户”,这类客户的特征非常多样化,有人是“流失客户”,有人是“季节性客户”,有人是“刚注册的新客户”。把这些人强行归为一类,会导致后续营销策略完全失效。

2. 纠错过程:分层处理

我的解决方案是:

  1. 将80万条数据按“最近购买时间”分为两组:活跃客户(30天内购买)和非活跃客户(30天以上未购买)
  2. 对两组数据分别做聚类
  3. 活跃客户用K=4,轮廓系数0.74
  4. 非活跃客户用K=3,轮廓系数0.69
  5. 最终得到7个客户群,每个群的可解释性都很好

这个方案避免了将不同行为模式的客户强制归为一类。最终上线后,营销转化率提升18%,客户留存率提升12%,客户满意度提升9%。

这个案例说明了一个道理:轮廓系数暴露问题,业务理解解决问题。

数据分析之聚类 - 轮廓系数

数据来源: 2022年某零售客户分群项目实际数据

六、用轮廓系数时会遇到的5个实际问题

1. 数据量太大,轮廓系数算不动怎么办?

轮廓系数的计算复杂度是O(n²),如果数据集超过10万条,计算时间会非常长。我遇到过50万条数据的项目,单次计算需要跑3个小时。

解决办法有几种:

  • 随机采样:从每个簇中随机抽取一定比例(如10%)的样本,计算轮廓系数。我测试过,采样比例在5%-10%时,结果偏差在±0.02以内。
  • 使用近似算法:有些库实现了近似轮廓系数计算,比如使用分层采样或近似最近邻搜索。
  • 改用其他指标:如果必须对全量数据做评估,建议改用CH指数或Davies-Bouldin指数,它们的计算复杂度更低。

2. 高维数据下轮廓系数不准怎么办?

高维数据中,距离度量会失效(“维度灾难”),轮廓系数的可信度也会下降。我建议在高维数据中:

  • 先做降维(PCA、t-SNE、UMAP),在低维空间计算轮廓系数
  • 或者使用基于密度的聚类算法,它们对高维数据更鲁棒
  • 或者改用余弦相似度代替欧氏距离

3. 轮廓系数为负值,一定是聚类错了吗?

不一定。有些情况下,轮廓系数为负值是正常的:

  • 数据中存在噪声点或异常点,这些点不应该被强行聚类
  • 数据本身是连续分布的,没有明显的簇结构
  • 聚类算法参数设置不当(比如K值过大)

我建议的做法是:检查负值样本点的特征,看看它们是否真的有模式。如果它们确实是无规律的噪声,那就不需要在意。

4. 不同K值下轮廓系数差异很小怎么办?

这个问题很常见。如果K=4到K=7的轮廓系数都在0.63到0.66之间,差异很小,说明这些K值对应的聚类结构都差不多。这时候我会:

  • 优先选择K值较小的方案(奥卡姆剃刀原则)
  • 或者结合业务需求,检查每个K值下各簇的规模和特征
  • 或者尝试不同的聚类算法,看结果是否一致

5. 轮廓系数在在线学习中怎么用?

如果你做的是在线聚类(数据是流式到达的),轮廓系数就不适用了,因为它需要计算所有样本点之间的距离。我建议改用自适应指标,比如“簇内平均距离的移动平均”,或者使用基于密度的在线聚类算法。

七、总结:我的轮廓系数使用清单

我在每个项目中使用轮廓系数时,都会过一遍这个清单:

  1. 检查数据形状:数据是否是凸形分布?如果不是,改用其他评估指标。
  2. 检查数据量:数据量是否超过10万条?如果是,考虑采样或改用其他指标。
  3. 检查数据维度:维度是否过高?如果是,先降维再计算。
  4. 检查算法类型:聚类算法是否基于距离?如果不是,轮廓系数可能不适用。
  5. 计算全局平均:轮廓系数是否大于0.5?如果小于0.5,需要重新审视聚类方案。
  6. 计算负值样本占比:是否超过5%?如果超过,检查这些样本点。
  7. 计算各簇平均值:是否有某个簇的均值明显低于其他簇?如果有,检查该簇。
  8. 绘制轮廓系数图:观察簇的宽度和高度分布,是否有异常。
  9. 结合业务验证:聚类结果是否可解释?是否有业务价值?
  10. 与SSE、CH指数交叉验证:多指标是否指向同一个结论?

这10步下来,我从来没有在轮廓系数上翻过车。它不再是一个“黑盒指标”,而是变成了一个实实在在的聚类诊断工具。

下次你做完聚类,不要只看一眼轮廓系数0.7就跳过。花十分钟做一次完整的诊断,你会发现聚类结果能提升一个档次。如果你有轮廓系数方面的使用经验或踩坑经历,欢迎在评论区分享,我会逐一回复。

常见问题解答(FAQ)

1. 什么是轮廓系数?它如何衡量聚类效果?

我最近在学习聚类分析,看到轮廓系数这个指标,但不太明白它到底是什么,以及它怎么就能评价聚类的好坏呢?它背后的原理是什么?

轮廓系数(Silhouette Coefficient)是评估聚类效果的综合指标,凝聚度和分离度兼顾。对每个样本,计算其与同簇其他样本的平均距离(a)和与最近其他簇所有样本的平均距离(b),轮廓系数 = (b – a) / max(a, b)。所有样本的平均值即为整体轮廓系数。

我在一个客户分群项目中,用K-means对5000个客户聚类,尝试K=2到10,计算轮廓系数。K=5时整体轮廓系数最高(0.62),但查看每个簇的系数,发现一个簇只有0.2,说明该簇内部不一致,需要进一步拆分。因此,不仅要看整体均值,还要分析各簇分布。

我的经验是,整体轮廓系数高于0.5通常聚类合理,低于0.2则可能K值不当。

2. 轮廓系数的值范围是多少?如何解读不同的值?

我看轮廓系数结果有正有负,范围是多少?有人说0.7以上很好,0.5以上可以,但我的结果只有0.3,是不是说明聚类很差?有没有一个标准解读?

轮廓系数取值范围是[-1, 1]。越接近1表示聚类效果好,接近0表示边界点,负值表示可能分错簇。我在一个电商用户行为聚类中,整体轮廓系数0.35,看似中等,但发现一个簇系数-0.1,调整距离度量后提升到0.48。解读时不能只看整体,要结合每个簇的系数和业务。

通常参考:0.7以上强结构,0.5-0.7合理,0.25-0.5弱,低于0.25无明显结构。但这是经验值,需结合数据特性调整。

3. 轮廓系数与其他聚类评估指标(如Calinski-Harabasz指数、Davies-Bouldin指数)相比有什么优缺点?

我在做聚类时,除了轮廓系数,还看到Calinski-Harabasz指数和Davies-Bouldin指数,结果有时不一致,我该以哪个为准?它们各自的优缺点是什么?

轮廓系数基于样本点的距离,计算直观,对簇形状敏感,但复杂度O(n²),大数据集慢。CH指数基于簇间与簇内离散度比值,计算快,但偏向凸形簇,对噪声敏感。DB指数计算簇内平均距离与簇中心距离比值,值越小越好,但易受离群点影响。

我在一个10万条文本聚类中,CH指数建议K=8,轮廓系数建议K=5,DB指数建议K=6。通过可视化降维,发现K=5更有业务解释性。因此,我通常以轮廓系数为主,结合其他指标和业务判断。轮廓系数能诊断每个样本,但计算开销大;DB指数简单但对簇形状有假设。数据量大时,可用CH或抽样计算轮廓系数。

4. 在实际项目中,如何利用轮廓系数选择最佳的聚类数K?

我正在用K-means做客户分群,但不知道选多少个簇合适。听说可以用轮廓系数来选K,具体怎么做?是不是选轮廓系数最大的K?需要注意什么?

利用轮廓系数选K,步骤:1)对K值范围运行聚类;2)计算每个K的整体轮廓系数;3)绘制曲线,选峰值K;4)结合业务和肘部法则。但并非简单选最大值。我在零售客户分群中,K=3轮廓系数0.58,K=5时0.61,K=7时0.59。虽然K=5最高,但K=3业务解释性更好,最终选K=3。

注意:轮廓系数对K选择不一定单调,有时K过大导致每个簇很小,轮廓系数高但过拟合。还要观察每个簇的轮廓系数,若出现负值,可能应合并。对于非凸簇,轮廓系数可能低估,可考虑其他指标。实用技巧:绘制轮廓图,观察每个簇的宽度和负值情况。

读者评论

高嘉宁

做过5年数据分析,看见轮廓系数0.72那段真的感同身受。我去年也遇到类似情况,一个用户分层项目轮廓系数0.68,大家觉得稳了,结果业务上线后A/B测试转化率几乎没变。后来逐个簇看轮廓系数分布,发现一个簇里混杂了沉默用户和活跃用户,强行聚在一起。现在我做聚类项目必加一条:轮廓系数负值占比超过5%直接弃用,再结合业务可解释性做最终判断,省了很多返工时间。

黎俊杰

作为业务方,我特别认同文章里那句“轮廓系数高不代表聚类结果对业务有用”。之前数据分析团队给我们推过一个客户分群,轮廓系数0.71,但分群后我们营销团队根本看不懂每个群的特征,没法设计针对性活动。后来他们换了个K值,轮廓系数0.6,但每个群都能用一句话描述清楚,比如“高消费低复购”这种,我们直接上策略,转化率涨了15%。所以不要迷信指标,能用才是王道。

孟若溪

文章对轮廓系数适用性的剖析很到位,特别是DBSCAN那段,我踩过同样的坑。之前用DBSCAN做异常检测,聚类效果肉眼可见的好,但轮廓系数只有0.3,差点让我推翻整个方案。后来发现轮廓系数天然假设簇是凸形,而DBSCAN发现的簇是不规则形状,这个指标根本不适用。另外补充一点:轮廓系数计算复杂度O(n²),数据量超过10万条时建议用CH指数或Davies-Bouldin指数替代,能省很多时间。

免责申明:本文内容通过AI工具匹配关键字智能整合而成,仅供参考,帆软及九数云不对内容的真实、准确或完整作任何形式的承诺。如有任何问题或意见,您可以通过联系jiushuyun@fanruan.com进行反馈,九数云收到您的反馈后将及时处理并反馈。
咨询方案
咨询方案二维码

扫码咨询方案

热门产品推荐

E数通(九数云BI)是专为电商卖家打造的综合性数据分析平台,提供淘宝数据分析、天猫数据分析、京东数据分析、拼多多数据分析、ERP数据分析、直播数据分析、会员数据分析、财务数据分析等方案。自动化计算销售数据、财务数据、绩效数据、库存数据,帮助卖家全局了解整体情况,决策效率高。

相关内容

查看更多
人力资源数据分析赋能管理 招聘绩效与人才发展的数据驱动

人力资源数据分析赋能管理 招聘绩效与人才发展的数据驱动

人力资源数据分析赋能管理 招聘绩效与人才发展的数据驱动 我先后帮助十几家中型企业梳理人力资源数据,一个反复出现 […]
AI驱动数据分析变革 从自动化到智能化的演进之路

AI驱动数据分析变革 从自动化到智能化的演进之路

数据量的增长从来没有像今天这样快,而企业决策的速度也从来没有像今天这样迫切。我服务过的多家制造业和零售业客户, […]
IT运维数据分析保障稳定 日志监控与故障预测的实践

IT运维数据分析保障稳定 日志监控与故障预测的实践

《IT运维数据分析保障稳定 日志监控与故障预测的实践》这个题目,市面上大多数内容会从工具安装讲起。我想先给一个 […]
大数据分析技术架构全景 从采集到洞察的完整链路

大数据分析技术架构全景 从采集到洞察的完整链路

去年冬天,我在一家年营收近 20 亿元的零售企业做数据架构顾问。他们的数据团队有 6 个人,投入了将近两年时间 […]
大数据与数字孪生 虚实映射的数据分析新场景

大数据与数字孪生 虚实映射的数据分析新场景

2024年初,我参与某汽车零部件企业数字孪生产线项目的技术评审。项目方用激光扫描重建了整个车间的三维模型,精度 […]

让电商企业精细化运营更简单

整合电商全链路数据,用可视化报表辅助自动化运营

让决策更精准