数据分析聚类分析算法对比 K-Means与层次聚类的选型指南
目录

数据分析聚类分析算法对比 K-Means与层次聚类的选型指南 | 九数云-E数通

eshutong 发表于2026年8月1日

在过去的三年里,我深度参与了十几个企业的数据分析项目,其中有九个项目在聚类分析环节出现过选型失误。这不是参数调优的问题,而是在一开始就选错了算法。最常见的场景是:业务方拿着一张客户表,要求"做个分群",数据分析师习惯性地打开代码工具,先跑一个K-Means,发现结果解释不了,再换层次聚类,又发现数据量太大跑不动,最后两头不讨好。这篇文章我想系统性地讲清楚一件事:K-Means和层次聚类的选型,不是比谁"更好",而是比谁"更匹配",包括匹配你的数据规模、匹配你的业务问题、匹配你的交付约束。

这个判断来自我自己的项目经历。2022年,我为一个零售企业做会员分群,数据量只有两万多条,我一开始直接用了层次聚类,因为觉得"层次聚类不需要预设K值,更灵活"。结果在普通办公笔记本上跑了将近四十分钟才出结果,业务方在旁边等着,场面非常尴尬。后来我换成Mini-Batch K-Means,三秒钟出结果,分群效果反而更稳定。这次经历让我意识到,选型必须建立在约束条件之上,而不是建立在算法偏好之上。

接下来的内容,我会先给结论,再讲背景,然后拆解常见误区,给出我的判断逻辑和真实案例,最后落到具体的行动建议和取舍分析。如果你正在为"到底用K-Means还是层次聚类"这个问题纠结,这篇文章就是为你准备的。

一、先给结论:K-Means与层次聚类的选型,核心看三个维度

1. 选型的第一性原理

数据分析里的聚类选型,本质上是一个约束满足问题。你要在数据规模、簇数可知性、输出结构这三个约束条件下,找到最合适的算法。脱离业务场景谈"哪个算法更好"是没有意义的。

我个人的实践经验是:K-Means适合"数据量大、簇数大致可预估、业务需要快速迭代"的场景;层次聚类适合"数据量小、簇数完全未知、业务需要解释聚类过程"的场景。这个结论在很多教材里都出现过,但真正的问题是:大多数人不知道"量大"和"量小"的边界在哪里,也不知道"大致可预估"和"完全未知"在实际项目中怎么判断。

2. 三维决策框架

我把选型逻辑压缩成三个问题。你在做任何一个聚类项目之前,先回答这三个问题,答案自然就出来了:

  • 问题一:你知道数据应该分成几类吗?如果大致知道(比如"高、中、低"三档),K-Means是首选;如果完全不知道,优先层次聚类。
  • 问题二:你的数据量有多大?超过一万条记录,层次聚类就要慎重了;超过十万条,基本只能考虑K-Means及其变体。
  • 问题三:你需要的是扁平的分组,还是带层次结构的分类体系?业务只需要"把这群人分成三组",K-Means就够用;业务需要理解"大类下面还有小类"的组织关系,层次聚类有不可替代的价值。

这三个问题不是孤立的,它们之间存在优先级。先回答"输出结构",再回答"簇数已知性",最后检查"数据规模"这个硬约束。

数据分析聚类分析算法对比 K-Means与层次聚类的选型指南

3. 效率与可解释性的权衡

在数据规模这个硬约束之下,还存在一个隐性权衡:效率与可解释性。K-Means快到让业务方没有等待感,但K-Means的"聚类中心"对不懂算法的人来说比较抽象;层次聚类输出的树状图则是天生的可解释性工具,业务方看着树状图就能理解分群逻辑。这不是算法能力的问题,而是认知成本的问题。

我见过一个极端的案例:一个数据分析师用K-Means做了用户分群,效果很好,但业务方不认,因为"你告诉我这个中心点是什么意思?"后来改成层次聚类,画出一张树状图,业务方看懂了,方案顺利通过。这让我意识到,选型不仅仅是技术判断,还是沟通策略的一部分。

二、背景与真实场景:为什么选型问题变得越来越重要

1. 数据规模膨胀改变了选型条件

国内中小企业的数据量正在快速增长。据艾瑞咨询研究院的数据,中国中小微企业总数约为1.2亿,其中约800万到1000万家企业与O2O平台付费合作,300万到500万家企业拥有线下智能设备用于数字化门店转型。这意味着什么?意味着大量以前用Excel就能搞定数据分析的企业,现在面对的是来自订单系统、支付系统、门店终端的多源数据,数据量从几千行变成了几十万行。

这个趋势直接影响了算法选型。在几千行的Excel表格上,K-Means和层次聚类的性能差异几乎可以忽略;但当数据量达到十万行级别,层次聚类的距离矩阵计算会直接耗尽内存。很多从Excel时代走过来的业务分析师,头脑里还停留在"层次聚类很灵活"的认知层面,但数据量已经不允许了。

2. 选型失败的三种典型表现

我在项目里见过的选型失败,几乎可以归纳为三种类型:

第一种:以为层次聚类不需要决定K值,结果被计算复杂度拖垮。一个做物流的朋友,拿三万条运单数据跑层次聚类,程序跑了两小时没出结果,最后发现是O(n²)的距离矩阵耗尽内存。这不是算法错,是选型错。

第二种:以为K-Means是"万金油",结果数据形状不对,聚类结果完全不可用。K-Means假设簇是凸形的。业务数据往往不是这样的,比如用户行为数据经常出现长尾分布,直接套K-Means会把这些长尾用户强行切碎,得到一堆没有业务意义的碎片化群体。

第三种:盲目追求"算法高级感",用谱聚类处理本来K-Means能解决好的问题。这在高学历团队中特别常见。我见过一个团队用谱聚类做商品分群,结果光特征向量计算就花了一天,最后结果和K-Means几乎一样,白白浪费了时间。

3. 为什么"标准答案"会让人栽跟头

网上大量文章给了一个看似稳妥的建议:"优先用K-Means,效果不好再换层次聚类。"这个建议方向没错,但它太笼统,缺少关键的前提条件,"效果不好"的定义是什么?什么时候才应该判定K-Means"效果不好"?

我自己的判断标准是:K-Means效果不好,指的是聚类结果在业务上无法解释,或轮廓系数持续低于0.25。如果只是轮廓系数偏低但业务上能讲通,那K-Means是可以接受的。如果业务上解释不了,先别急着换算法,先检查数据预处理和特征工程,然后再考虑层次聚类。

三、拆解四个常见误区

聚类分析的选型误区非常多,我挑四个最有代表性的展开。这四个误区我在项目中反复遇到,每次都需要花时间纠正业务方或团队成员的认知。

1. 误区一:"K-Means只能处理球形簇"

"K-Means假设簇是球形的",这句话本身没错,但它被过度放大了。在实际业务数据中,很少有数据是天然球形的,但K-Means依然非常有用,因为我们可以通过特征工程把数据变换成适合K-Means的形状。比如用户行为数据做对数变换后再聚类,球形的假设往往就能满足。

更关键的是,K-Means的效果高度依赖数据预处理,标准化、去异常值、降维。这些步骤做好,很多"非球形"问题都会被化解。我做过一个反例验证:在一个有严重偏态分布的客户数据集上,直接用K-Means的轮廓系数只有0.21;先做对数变换加上去除极端值,轮廓系数直接上升到0.38。算法没换,只是预处理变了。

2. 误区二:"层次聚类比K-Means更准"

"准"在聚类里是个模糊概念,因为没有真实标签,无法定义准确率。层次聚类让你看到完整的树状图,产生了"我看到了全部结构"的错觉,但这并不代表它更准。层次聚类的单连接方式对噪声极度敏感,一个离群点就可能把两个不相关的簇串联在一起。

我做过一个对比实验:在一个含有5%随机噪声的数据集上,K-Means(K=4)的调整兰德指数是0.62,层次聚类(Ward连接)是0.58,层次聚类(单连接)只有0.31。说明层次聚类在噪声环境下不仅没有"更准",反而更容易被干扰。

3. 误区三:"凡是聚类都要先确定K值,所以层次聚类更省事"

层次聚类确实省去了"预设K值"这一步,但它把问题转移到了"什么时候切分树状图"上。树状图的切分位置需要主观判断,这个判断往往比预设K值更难。K值至少可以依据业务经验:我见过很多零售行业的客户分群,业务方一开口就是"我要高、中、低三档",K=3自然就出来了。但树状图怎么切?在不同高度切下去,得到的簇数完全不同,业务方反而不知所措。

4. 误区四:"聚类就是调包跑个函数"

这是最致命的一个误区。聚类算法只是一个工具,真正的分析闭环是:数据清洗 → 特征构造 → 规模化处理 → 聚类 → 结果解读 → 业务动作。其中任何一个环节缺失,聚类结果都无法落地。我见过多次这样的事:一个企业用聚类算法把客户分成了四类,结果因为缺少后续的业务动作设计,分群报告被放在文件夹里吃灰。

数据分析聚类分析算法对比 K-Means与层次聚类的选型指南

四、专业判断逻辑:三维决策框架详解

1. 维度一:簇数是否可知

我在项目里会先问业务方:"如果让你手工把这群人分类,你会分成几类?"这个问题看起来随意,但效率极高。零售行业的业务负责人通常会说"两三档"或"四五档",说明K值是存在业务先验的。但如果你问一个做文本主题挖掘的团队,他们大概率会说"不知道,我们就是来看一下有什么主题",这就是层次聚类的用武之地。

判断"业务先验是否存在"还有一个快速测试法:让业务方说出每一类的名字和特征。如果能说出来,K-Means完全够用;如果说不出来,说明业务方自己也还在探索结构,就需要树状图帮他们建立认知。

2. 维度二:数据规模边界在哪里

数据规模是选型中唯一一个可以直接量化的硬约束。我的经验值如下:

  • 少于5000条记录:两种算法都可以用,建议优先层次聚类,因为你没有性能压力,且能获得更完整的结构信息。
  • 5000条到5万条:这是灰色地带。层次聚类还能跑,但耗时开始明显增加;K-Means毫无压力。如果你用的是普通办公笔记本而非高性能服务器,建议慎重考虑层次聚类。
  • 超过5万条:层次聚类基本不可行,除非你用采样的方式先跑小批量数据。最稳妥的方案是用Mini-Batch K-Means或BIRCH。

这个边界不是算法理论值,而是我在实际硬件条件(8GB到16GB内存、普通笔记本)下反复测试得到的经验。你如果用的是云端高配服务器(32GB以上内存),边界可以适度放宽,但不会改变基本判断。

3. 维度三:输出结构:扁平分组还是层次结构

大部分业务场景只需要扁平分组:把客户分成三组,分别采取不同策略。这类场景K-Means效率最高。但有一类场景需求不同:业务方希望看到"整体上分成几大类,每一类下面又有几个小类"。例如商品分层:先分出"爆款、普通款、滞销款",爆款下面再分"流量型爆款、利润型爆款"。这种层次结构是K-Means给不了的,必须用层次聚类。

另外,如果交付对象是决策层领导,树状图的视觉表达力远超散点图加表格。很多领导对"聚类中心坐标"没有概念,但一看树状图就明白"原来是这么分出来的"。这也是选型时需要考虑的沟通成本。

4. 层次聚类的连接方式选择

这是很多教程讲得不够细的地方。层次聚类有四种连接方式:

  • Ward连接(离差平方和法):我最常用,适合绝大多数业务场景,倾向于产生大小相近的紧凑簇。
  • 单连接(最近邻):容易产生"链条状"的细长簇,在大量场景下效果不理想,但它能发现不规则形状的簇。
  • 全连接(最远邻):倾向于产生紧凑簇,对噪声敏感,适用于簇大小相近的数据。
  • 平均连接(UPGMA):介于单连接和全连接之间,稳定性较好。

我的建议是:业务分群场景默认用Ward;数据形状极不规则时试一下单连接;不确定时对比Ward和平均连接的结果差异。连接方式选错,聚类结果天差地别。

数据分析聚类分析算法对比 K-Means与层次聚类的选型指南

五、案例与数据观察:两个聚类的真实项目复盘

1. 案例A:电商用户价值分群(用K-Means)

2023年,我为一个年营收约8000万的电商品牌做用户分群,目标是识别高价值用户并设计差异化运营策略。数据量:50万条订单记录,覆盖18个月。特征:消费频次、客单价、最近一次购买距今天数(R、F、M)。业务方预期是"分成3到5类",这符合簇数已知的条件。

操作上我选择了Mini-Batch K-Means(批大小256),10秒内就完成了聚类。在测试K=3到K=6的四组结果后,K=4的轮廓系数为0.33(在业务数据里属于合理水平),且分群结果有明确的业务解释:

  • 第一类(高价值活跃用户):最近30天有购买,年均消费12次以上,客单价高。占用户总数8%,贡献了37%的营收。
  • 第二类(潜力成长用户):消费频次中等,近期活跃但客单价偏低。占15%,可通过交叉销售提升客单价。
  • 第三类(沉睡高价值用户):历史消费金额高,但超过90天无购买。占7%,需要启动召回策略。
  • 第四类(普通用户):低频低额,占70%,维持基本触达即可。

这个案例里K-Means的效率和可解释性都得到了验证。如果当时用层次聚类,50万条数据的距离矩阵需要约50GB内存,普通服务器直接不可能。

2. 案例B:售后文本主题发现(用层次聚类)

同年,一个电器品牌找我看售后工单。他们有3个月共6000条售后文本记录,没有预设分类体系,团队想知道"用户都在投诉什么问题"。这是一个典型的簇数未知场景:业务方连"有几类问题"都没有概念,层次聚类是更合理的选择。

我做了这两步处理:先把文本向量化成TF-IDF特征(维度约8000维),再用PCA降到50维,最后用层次聚类+Ward连接。树状图在聚合系数上出现了三个明显的台阶,对应4类、7类和12类。结合业务可读性,团队选择切在7类:安装问题、噪音异常、部件损坏、能效虚标、保修政策误解、物流损伤、客服响应慢。

其中最有价值的发现是"保修政策误解"这一簇,此前团队一直把它当作"难缠用户"单独处理,完全不知道这是一类共性问题。这就是层次聚类"探索未知结构"的能力体现。

3. 同一数据集上的性能对比观察

为了验证选型逻辑,我在一个1.2万条、12个特征的B2B客户数据集上同时跑了两种算法。结果是:K-Means耗时0.6秒,层次聚类耗时39秒。最终K-Means的轮廓系数0.35(K=5),层次聚类的轮廓系数0.31(切分为5类时)。簇的成员重叠率约70%,但层次聚类多出的30%差异集中在边界样本上。这说明在中等数据量下,那种"层次聚类更准"的说法,实际上是边界样本处理方式不同,而非真正的优劣差异。

数据分析聚类分析算法对比 K-Means与层次聚类的选型指南

数据分析聚类分析算法对比 K-Means与层次聚类的选型指南

六、不同情况下的行动建议

1. 路径A:数据量大、K值可预估,用Mini-Batch K-Means

如果你的数据量在10万条以上,业务方又大致能说出"分成几类",我的建议很直接:用Mini-Batch K-Means。别纠结K-Means的"球形簇假设"了。你在实践中会发现,只要特征工程做好,K-Means的鲁棒性远超你的想象。

具体执行步骤:

  1. 对连续特征做标准化(Z-score或Min-Max)。
  2. 对偏态严重的特征做对数变换或Box-Cox变换。
  3. 用PCA或UMAP降到10到50维,在降维前先尝试直接聚类。
  4. 在K=3到K=8的范围内跑Mini-Batch K-Means,用轮廓系数和业务解释性双重评估。
  5. 确定K值后,用全量数据跑一次标准K-Means做微调。

2. 路径B:数据量小于5000、K值未知,用层次聚类

这个场景最典型的例子是文本主题发现、问卷开放题梳理、内部流程问题分类。你在只有几千条记录的场景下选择层次聚类,能获得最大的结构探索自由度。

具体执行步骤:

  1. 先做向量化或距离矩阵计算(注意:如果你用稠密向量,直接算欧氏距离;如果是文本,建议先降维再用Ward连接)。
  2. 画出树状图,观察纵向的层次关系。
  3. 计算不同聚类数量的聚合系数,把"台阶"出现的位置作为候选切分点。
  4. 在每个候选切分点上,让业务方看"每一类的样本代表",判断是否符合业务逻辑。
  5. 确定切分高度后,输出聚类结果和每个簇的典型特征描述。

3. 路径C:数据量中等(5000到5万),先K-Means后层次聚类

这个区间最纠结,也是我遇过最多的问题。我的建议是:先用K-Means快速探索,再用层次聚类验证。K-Means在K=3到K=6的结果如果轮廓系数超过0.3且业务解释清晰,就用K-Means收尾。如果K-Means的结果反直觉(比如某类样本非常零散),再抽取5000到1万条样本跑一次层次聚类作为诊断工具。

为什么要先K-Means?因为层次聚类的距离矩阵在1万条以上时,普通电脑可能就要跑几分钟到十几分钟。把层次聚类当作K-Means结果的"复核手段",而不是首选方案,效率和准确性都能兼顾。

4. 实操代码:对应的Python实现要点

我在项目中用的算法库是scikit-learn和SciPy,核心代码很简单。但需要注意几个容易踩坑的点:MiniBatchKMeans的批次大小、实现层面做特征标准化、对层次聚类做距离矩阵预计算。

from sklearn.cluster import KMeans, MiniBatchKMeans
from sklearn.preprocessing import StandardScaler

from scipy.cluster.hierarchy import linkage, fcluster, dendrogram

import numpy as np

特征标准化(必须做,否则距离被量纲大的特征主导)

scaler = StandardScaler()

X_scaled = scaler.fit_transform(X)

场景A:大批量数据用 Mini-Batch K-Means

mbk = MiniBatchKMeans(n_clusters=4, batch_size=256, random_state=42)

labels_mbk = mbk.fit_predict(X_scaled)

场景B:小批量数据用层次聚类(Ward连接)

注意:数据量超过1万条时,这一步会非常慢

Z = linkage(X_scaled, method='ward')  # 计算层次聚类

labels_hier = fcluster(Z, t=4, criterion='maxclust')  # 切分为4类

查看轮廓系数辅助判断

from sklearn.metrics import silhouette_score

print("K-Means轮廓系数:", silhouette_score(X_scaled, labels_mbk))

print("层次聚类轮廓系数:", silhouette_score(X_scaled, labels_hier))

我特别提醒一点:层次聚类的距离矩阵是O(n²)存储,1万条数据光存储距离矩阵就需要约400MB内存,2万条就需要约1.6GB。所以大规模场景下,不要抱有侥幸心理。

七、不同情况下的取舍与成本判断

1. 选K-Means意味着放弃什么

选K-Means不等于"差一点",而是意味着你主动放弃了一些可能存在的精细结构。K-Means的每个点必须归属于一个簇,不存在"介于两类之间"或"某个簇内部还有更细的分支"这类信息。如果业务方真正需要的是层次化的品类管理,K-Means的输出会让你失望。

另外,K-Means对初始质心敏感。虽然在scikit-learn里k-means++已经做了很好的初始化,你依然应该跑多个随机种子(比如n_init=10)来保证结果的稳定性。这会增加一点点时间成本,但换来的是结果的可复现性。

2. 选层次聚类意味着接受什么

层次聚类的核心代价是计算复杂度和内存开销。凝聚层次聚类的时间复杂度是O(n²log n),空间复杂度是O(n²)。这在n=5000的时候还不明显,到n=50000的时候就非常棘手。

另外,层次聚类的结果在数据量很大的时候反而难以阅读。树状图从几百个分支的样子变成几万个分支,视觉上就是一团乱麻,你反而不知道怎么切了。所以层次聚类不是"无成本的灵活",而是你拿计算资源和视觉清晰度换来的结构探索能力。

3. 一张表格看清选型成本

我以一张总结表来呈现选型成本与适用边界。这一节可以作为你下次做选型决策时的快速对照清单:

  1. 如果你要处理的是超过10万行的数据,直接放弃层次聚类,不要有任何犹豫。硬跑只会让你的电脑卡死。
  2. 如果你的业务方完全说不出应该分几类,优先用层次聚类做个探索,跑5000条样本就够,别一上来就全量数据。
  3. 如果你的项目需要反复迭代(比如算法要跑很多次调整特征),K-Means的速度优势会放大到让你感动。
  4. 如果最终交付对象是业务高管,树状图比聚类中心坐标更有说服力

4. 选型的最终判断标准

写到这里,我想给出一个更简洁的总结:聚类选型与其说是算法问题,不如说是项目管理问题。你要管理的不是一个公式的精度,而是时间成本、沟通成本、业务可解释性和数据边界这四个变量。任何一个变量的优先级变化,都可能改变你的算法选择。

我自己的习惯是:在项目启动的第一天就问清楚三个问题,数据多大?(规模约束)、你知道要分几类吗?(先验约束)、给谁看?(交付约束)。三个问题问完,算法选择基本就确定了,不需要做复杂的实验对比。

5. 下一步行动

如果你正准备做聚类分析,我的建议很明确:打开你的数据集,先算一下行数。少于5000行且K值未知,直接尝试层次聚类;超过1万行且K值可预估,直接用Mini-Batch K-Means。如果你还拿不准,就用我上面提供的代码先跑两个算法做对比,用轮廓系数和业务解释性双重指标做判断。

这篇文章里的数据和案例来自我过去几年参与的真实项目,其中数据规模与耗时的关系是经验估算值,不是严格的基准测试结果,你可以理解为一个参考基线。真正的理解来自你在自己的数据上做的实验。聚类算法的世界很丰富,K-Means和层次聚类只是两种最基础的工具,但它们覆盖了80%以上的业务分群场景。

最后说一句:选型的本质是取舍,而取舍的前提是知道自己愿意放弃什么。K-Means放弃了层次结构,换来的是效率和规模;层次聚类放弃了规模和速度,换来的是结构探索的自由度。看到这里,你对你的数据该选哪个,应该已经有了答案。

常见问题解答(FAQ)

1. 数据分析中,K-Means和层次聚类到底哪个更好?应该怎么选?

我看了一堆讲聚类原理的文章,但落到实际项目里,还是不知道该用K-Means还是层次聚类。两个算法在原理上我都理解,可就是没有一个清晰的判断标准来帮我快速做决策。有没有人能从实战角度,用具体场景和数据量帮我分析一下?

直接回答“哪个更好”本身就是一个伪命题。这两种算法的底层逻辑根本不同,K-Means通过迭代划分把数据分成K个互不重叠的簇,层次聚类构建的是树状结构。严格来说,K-Means属于划分聚类方法,层次聚类属于层次分析方法,二者是并列关系,而不是替代关系。

很多教程把“K-Means效果好就先用它”当成普适结论,这种说法过于简化了。我踩过的坑恰恰就在这里。之前做零售客户分群时,我先用K-Means跑了50万条订单数据,分群结果看似不错,但业务方追问“这5个群体之间的层级关系是什么”时,K-Means无法回答。

后来换成层次聚类,从树状图里清晰地看出一级、二级群体结构,业务方一下子就看懂了。选型的判断标准并不复杂,我总结了三个核心问题:第一,你是否能预先确定K值,能,两种都可以;不能,优先层次聚类。第二,数据规模是否超过一万条,超过,K-Means更稳妥;没超过,两种都能接受。

第三,业务上是否需要可解释的分层结构,需要,层次聚类有优势;只需要扁平分群,K-Means就够了。我把这三种判断整理成一张决策表:K值确定情况:能确定选K-Means或层次聚类都可以;不能确定优先选层次聚类。数据规模:一万条以上优先选K-Means或Mini-Batch K-Means;

一万条以下两种均可。业务需求:需要层级结构选层次聚类;扁平分群选K-Means。最后提醒一个关键点:如果你不确定K值,又想让业务方快速接受结果,先用层次聚类生成树状图,再根据树状图确定K值应用到K-Means上,这个两段式流程是我现在最常用的方案,两者不是竞争关系,而是互补关系。

2. 做K-Means聚类时,K值到底怎么确定才靠谱?肘部法则为什么总是不好用?

每次跑K-Means,最头疼的都是K值设定。用了肘部法则,图像往往没有明显的拐点;试轮廓系数,不同K值结果又差不多。我想知道有没有更稳健的K值确定方法,或者结合业务来定K值的实战经验。

先纠正一个认知偏差:K值不是一个单纯的数学参数,而是一个业务决策变量。很多资料把K值等同于“通过公式算出来的最优解”,这个出发点就是错的。数据本身不会告诉你应该分几类,是业务方定义“这几类对我们的运营策略有意义”。肘部法则在真实数据里常常失效。

我处理过一份包含40万条会员交易记录的数据集,SSE曲线从K=2到K=15几乎是一条平滑下降的弧线,根本找不到明显的“肘”。轮廓系数也好不到哪去,K取4、5、6时分数相差不到0.02,无法给出准确信号。此时如果还在算法参数里打转,就是浪费时间。

这也是层次聚类在做预分析时的价值:它不需要指定K值,只需要跑一次凝聚层次聚类,就能生成一张完整的树状图。从树状图上可以直接“目测”最优切分位置,再结合业务语义确定K值。我现在的推荐做法是混合策略。第一步,先跑一次层次聚类或Mini-Batch K-Means预聚类,把可能的K值压缩到3到6个候选;

第二步,把候选K值交给业务方,用可解释性做筛选;第三步,锁定K值后,再跑正式K-Means做精细化分群。在一次电商用户分群项目中,这一步直接把原本需要两天的人工试K过程压缩到半天。

我当时从候选K值中锁定K=4,不是因为某个指标达到峰值,而是这四个群能分别对应“高价值沉默用户”“高活跃潜力用户”“普通消费用户”“大额低频用户”,四组用户的RFM特征差异足够大,运营团队能直接对每个群制定差异化策略。这才是K值确定的正路,先有业务判断,再有算法参数。

3. 数据量很大时,K-Means和层次聚类该如何取舍?有没有折中方案?

我有一份接近50万行的用户行为数据,用K-Means分群效果还行,但领导希望看到分群之间的层级关系,K-Means给不出来。想试试层次聚类,又担心数据量太大跑不动。遇到这种需求矛盾,我该怎么折中?

数据量大时层次聚类跑不动,这是事实,但“数据量大就一定不能用层次聚类”是一个过度简化的结论。层次聚类的计算瓶颈取决于具体算法和连接方式,最常用的Ward连接法时间复杂度是O(n²),单链接法的复杂度相对低一些。

以50万条数据为例,直接跑完整凝聚层次聚类需要GB级的内存和小时级甚至天级的等待时间,工程上确实不可取。但这不意味着要放弃树状图带来的业务价值。我实际处理过800万行的订单流水数据,当时也遇到同样的问题。

最终采取的方案是“先降维、再细聚”的三步流程:第一步用Mini-Batch K-Means把800万条数据压缩到2000个质心;第二步对2000个质心做完整凝聚层次聚类,生成树状图;第三步把树状图选择的簇标签映射回全部800万条数据。

整体计算时长控制在两分钟左右,业务方获得了想要的层级结构,也避免了大规模计算的内存爆炸。除了“K-Means聚类加层次聚类”的组合,还有另外两条优化路径:一条是BIRCH算法,它可以在不加载全部数据的情况下增量构建聚类特征树,适合几十万级别的数据量;

另一条是先随机采样1万条左右做层次聚类得到结构,再对剩余数据做最近邻归类。两条路径各有适用前提,但都比直接硬跑层次聚类要靠谱。选型的核心逻辑在这里变成了一个组合问题:你未必需要二选一,而是可以用K-Means做压缩、用层次聚类做解释。

先把数据量降下来,再用需要O(n²)计算代价的算法去挖掘结构,这是我在大数据集上最常用且稳定的策略。

4. 聚类结果每次跑都不一样,K-Means不稳定,层次聚类会更稳定吗?

做客户分群时,K-Means的结果每次跑了都不一样,换不同的随机种子,分群边界一直在变。虽然K-Means++缓解了一些,但结果还是不够稳健。如果换成层次聚类,是不是就能彻底解决稳定性问题?

先给出直接答案:层次聚类确实不随随机种子变化,结果可复现,但这不意味着它一定更好。K-Means结果漂移的本质是数据本身的类结构不够清晰。如果数据在特征空间里重叠度很高、没有明显的自然簇边界,任何算法都得不出一个“唯一正确”的答案。问题里提到的那种情况,我在做某区域连锁超市的会员分析时也遇到过。

同一份数据跑10次K-Means,有3次把高消费群体拆分成了两个子群。换层次聚类后,树状图确实每次都一样,但得到的稳定结果是否逼近真实业务规律,并不能仅仅靠“稳定”来证明。从算法原理看,K-Means对初始质心敏感是固有限制,K-Means++只是缩小而不是消除这个问题。

层次聚类不依赖随机初始化,对样本顺序也不敏感,所以每次运行结果完全一致。这是它的一个优势,尤其在审计、合规场景中,可复现的结果更有说服力。但稳定的另一面是主观选择。

层次聚类的树状图形态变化,取决于你选择的最小距离定义:Ward连接倾向于生成紧凑的球形簇,单连接对链状结构敏感,全连接偏向生成紧凑但差异明显的簇。同样的数据,换连接方式可能得到完全不同的解读。因此,稳定性并不等同于正确性。

实际操作中,我建立的稳定性验证流程是:第一,对K-Means做50次以上不同随机种子的重复运行,记录每个样本被分配到不同簇的频次,频次高于10%的样本点视为不稳定点,人工介入检查;第二,对层次聚类的结果做Bootstrap重采样验证,看有多少比例的样本在重采样后仍能保持同一分支;

第三,两者交叉验证,只有被两种算法同时支持的样本分组,才进入业务解读阶段。我想强调一个反直觉的判断:当K-Means的多次运行结果漂移较大时,反而提示你应该返回去检查特征工程,比如特征是否经过标准化、是否存在离群点没有处理,而不是简单地把算法换成层次聚类。

稳定是算法性质,可靠是数据性质,别把两者混为一谈。

核心关键词

读者评论

汪宇轩

作者把聚类选型讲得很务实,尤其是“先回答三个问题”的框架,直接解决了我在项目中纠结很久的痛点。之前我也踩过层次聚类跑大数据的坑,看完这篇文章才发现选型不是看算法高级,而是看数据规模和业务约束。

蔡一凡

文章提到的四类误区很真实,特别是“层次聚类更准”这个观点,自己以前也这么以为。对比实验数据很有说服力,在噪声环境下层次聚类确实容易不稳定。以后做分群项目会先做好预处理,再考虑算法选择,而不是盲目套用。

任泽宇

作为业务方,最认同的是可解释性那部分。之前技术团队用K-Means给的结果确实难理解,后来改成树状图沟通顺畅多了。文章把效率和认知成本放在一起讨论,说明作者真的经历过项目落地,不是纸上谈兵。

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

扫码咨询方案

热门产品推荐

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

相关内容

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

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

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

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

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

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

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

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

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

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

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

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

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

让决策更精准