1. 聚类分析到底在解决什么问题
1.1 聚类分析的核心思路
先聊点实在的。很多人第一次接触聚类分析,教材上写得云山雾绕,什么距离度量、类间距离、凝聚法分裂法,看得人头皮发麻。但聚类分析的本质其实特别朴素:把一堆没有标签的样本,按照“像不像”自动分成几堆,分完之后同一堆里的样本尽量像,不同堆之间的样本尽量不像。
注意这里的关键词——没有标签。这是聚类和分类最本质的区别。分类是已经知道有几类、每一类长什么样,然后拿着标签去训练模型,属于有监督学习;聚类是啥都不知道,纯粹看数据本身的亲疏远近,属于无监督学习。所以聚类分析特别适合做探索性分析,尤其是当你对数据心里没底、想先看看大概能分成几拨人的时候。
举一个我很喜欢的例子。你去逛超市,想观察顾客的购物习惯,但你不可能提前知道“这届顾客能分成几类”。聚类分析上场之后,它可能会告诉你:有一拨人只买打折商品,有一拨人专注生鲜果蔬区,有一拨人直奔进口食品货架,还有一拨人主要在收银台附近的冲动消费区转悠。这个“自动分堆”的过程,就是聚类。
在SPSS里,聚类分析不是一个菜单项,而是三个菜单项:K-means聚类、系统聚类、二阶聚类。这三兄弟各有各的脾气,选错了很容易得出一个“看起来是那么回事、实际上经不起推敲”的结果。这篇文章就先从原理和选型讲起,配上完整的SPSS实操流程和结果解读,帮你把这三种方法从里到外吃透。
1.2 聚类分析最常见的应用场景
聚类分析的应用面比很多人想象中要宽得多,这里列几个我实际接触过的场景,给大家找找感觉。
第一类是用户分群。互联网公司的运营同学最常干的事,把用户按消费行为、活跃程度、访问时长等维度分成几个群,然后针对不同群做差异化运营。比如电商平台把用户分成价格敏感型、品质追求型、冲动消费型、沉睡唤醒型,后续的优惠券面额、推荐策略、短信话术全部跟着群走。我见过一个做会员运营的朋友,用K-means把十万级用户分成五类之后,整体营销转化率提升了将近三成,这就是聚类分析直接变现的典型例子。
第二类是市场细分。传统的市场细分靠经验拍脑袋,或者靠人口统计学变量硬切。聚类分析可以把消费者的态度、偏好、购买力、信息获取渠道等一堆变量扔进去,让数据自己说话。结果出来之后你会发现,原来“25到35岁女性”这个标签下面,至少还能分出两三种消费心态完全不同的人,这对于产品定位和新品研发很有参考价值。
第三类是异常检测。聚类的一个天然副产品是离群点——那些跟谁都长得不像的样本。在金融风控里,异常交易往往就藏在这种“格格不入”的样本里。虽然专门的异常检测算法很多,但聚类分析作为第一道粗筛工具,性价比还是蛮高的。
第四类是生物信息学和医学。基因表达谱聚类、疾病亚型划分,这类场景里系统聚类用得特别多,因为研究者不仅想看分几类,还想看类与类之间的亲缘关系,系统聚类画出来的树状图正好能满足这个需求。
还有一些相对小众但很实用的场景,比如对问卷中的开放性文本做主题聚类、对店铺商圈做竞争格局分析、对传感器时序数据做状态识别,这里就不展开了。总而言之,只要你的核心诉求是“给数据找结构”,聚类分析大概率能帮上忙。
2. 三大聚类方法的核心原理与选型逻辑
2.1 K-means聚类:原理与脾气
K-means大概是知名度最高的一种聚类算法,它的原理可以用八个字概括:近朱者赤,近墨者黑。具体操作是:你先告诉它“我要分成K类”,它随机挑K个点当“临时群主”,然后让所有样本站到自己最近的群主那边去,接着算出每个群的重心,把这个重心当成新的群主,再让所有样本重新站队。如此反复迭代,直到群主的位置不再变化,聚类就完成了。
这里有几个重要的细节需要展开说一下。
第一,K是人为指定的,算法本身不会告诉你“这个数据天然分成几类”,这是K-means最大的一个使用门槛,同时也是它灵活的地方。你可以先在SPSS里跑一个系统聚类或二阶聚类粗定K的范围,再用K-means去做精细划分,这个组合拳下面会讲到。
第二,K-means的本质是优化一个目标函数——各类样本到各自类中心的距离平方和(组内平方和,英文缩写SSE)。迭代的过程就是在不断降低这个指标,直到收敛。所以判断聚类质量时,SSE的下降曲线是一个很有用的参考。
第三,K-means对初始中心的选择比较敏感。跑同一个数据集,换了随机种子,结果可能不一样。SPSS里默认是挑选距离尽可能远的样本作为初始中心,这个策略比纯随机要好不少。但还是建议多跑几次看看结果稳不稳定,如果每次聚类中心差得离谱,说明数据本身可能没有清晰的簇结构。
第四,K-means对异常值非常敏感。因为聚类中心是用均值算的,万一数据里有个极端离群点,聚类中心很可能会被它“带跑偏”。所以做K-means之前,强烈建议先做一次描述性统计检查一下数据分布,有极端值的先处理掉。
第五,K-means隐含着对簇形状的假设——它偏向于发现“球形”的簇。两个狗骨头形状的簇挨在一起,K-means大概率会从中间一刀切,切出一条边界线,而不是沿着骨头的形状走。所以如果你的数据簇形状特别不规则,K-means不一定是最优解。
适用场景:样本量比较大(几千到几万都不怕)、变量是连续型数值、簇的形状大致是凸的、你不介意手工指定K值。在电商用户分群这种场景里,K-means往往是首选,因为它跑得快、结果容易解释。
2.2 系统聚类:原理与适用边界
系统聚类也叫层次聚类,名字听起来很有学问,实际思路很简单:先让每个样本自己是一类,然后找距离最近的两类合并,合并后再找距离最近的两类合并,直到所有样本合并成一类为止。这个过程是从下往上走的,所以也叫“凝聚法”。反过来从上往下拆,叫“分裂法”,但实际用得更多的是凝聚法。
系统聚类和K-means最大的区别是:你不需要事先指定分成几类。算法会把从“一个样本一类”到“所有样本一类”的完整过程都跑一遍,最后给你一张树状图(谱系图),图上一目了然地展示着样本是怎么一步步合并到一起的。你在谱系图上找一根合适的“横切位置”,就能确定聚类数。
但系统聚类也有它明显的短板。
最大的短板是计算量。每一轮合并都要算一次两两距离,样本量一上来计算开销就很可观。拿SPSS来说,系统聚类一般建议样本量不超过几百个,你要是扔进去五千个样本,机器可能直接卡死。有人可能听说过“系统聚类也支持几百个样本”,但实际跑下来你会发现,输出那一堆树状图上的样本编号密密麻麻站在一起,啥也看不清。所以系统聚类的使用边界一般控制在300个样本以内,最好一两百个。
系统聚类的第二大短板是它对变量的类型和量纲比较敏感。分类变量、有序变量、连续变量混在一起的时候,距离计算比较麻烦,你需要小心选择距离度量方式。而且变量如果带着不同量纲(比如年龄和收入),必须做标准化,不然收入会主导距离的计算,聚类结果的解释容易出偏差。
第三个容易踩的坑是类间距离的测度方法选择。系统聚类的“合并最近的两类”听起来简单,但“两类之间的距离”到底怎么算,有好多种定义。最短距离法(单连接)、最长距离法(完全连接)、平均联结法(组间平均连接)、离差平方和法(Ward法)……这些统称为“类间距离测度”,选哪种会直接改变聚类结果。
适用场景:样本量不大(一两百以内)、想通过谱系图直观感受类间关系、不预先指定聚类数、想了解聚类过程的分步合并逻辑。比如医学上做病例亚型分析、生物学上做物种亲缘关系分析,用系统聚类就很合适。
2.3 二阶聚类:原理与独特优势
二阶聚类(TwoStep Cluster)是SPSS里比较新的一种聚类方法,它的设计初衷是解决K-means和系统聚类都不太好解决的问题——大规模样本 + 混合类型变量(连续变量和分类变量同时出现)。
“二阶”这个名字,指的是它的算法分两步走。第一步叫“预聚类”,算法快速扫描一遍数据,把样本粗略地分成很多很多个“小簇”,本质上是用一个改进的顺序聚类方法在建一棵CF树(聚类特征树)。第二步叫“正式聚类”,把预聚类得到的小簇当成新的“样本”,再用凝聚法逐层合并,直到得到合适的聚类数。这样就把“样本量大”和“层次聚类”这两个原本矛盾的东西给调和了,既能处理大数据,又能享受到层次聚类的灵活性和自动定类功能。
二阶聚类的另一个核心竞争力是:它能自动确定最佳聚类数。系统聚类要靠人看谱系图切位置,K-means要靠人跑肘部法则去试K,二阶聚类内部有一个基于Schwarz贝叶斯准则(BIC)的机制,它会自动比较不同聚类数下的模型效果,帮你挑一个“合适的类数”。虽然这个“合适”不是说绝对最优,但作为探索阶段的第一步,能省下大量试错的时间。
混合类型变量处理是二阶聚类的看家本领。比如用户数据里既有年龄、消费金额这类连续变量,又有性别、渠道来源、是否会员这类分类变量,K-means没法直接用,系统聚类对分类变量也头疼,但二阶聚类可以一把梭。它计算距离的方式基于对数似然距离,可以把两种类型的变量统一到一个框架里处理。
适用场景:样本量几千到几十万都不怕;变量里既有连续型又有分类型;不想手动指定聚类数;需要自动评估聚类质量。在客户分群、市场细分这类“数据量大+变量类型杂”的实战场景中,二阶聚类几乎是为它们量身定做的。
2.4 三种方法放在一起怎么选
聊完了原理,这里直接给一张总结对比表,方便你按场景对号入座。
| 对比维度 | K-means聚类 | 系统聚类 | 二阶聚类 |
|---|---|---|---|
| 是否需要指定聚类数 | 是,K值由用户给定 | 否,通过谱系图确定 | 否,算法自动确定 |
| 对样本量的适应性 | 大样本友好,万级轻松 | 小样本(一般几百以内) | 大样本友好,十万级也可处理 |
| 变量类型要求 | 主要是连续变量 | 连续/分类都可,但处理较麻烦 | 连续+分类混合友好 |
| 对异常值敏感度 | 比较敏感 | 中等 | 中等 |
| 是否得到谱系图 | 否 | 是 | 否,但可输出聚类质量图 |
| 常用场景 | 用户分群、图像分割 | 样本量小的探索分析 | 市场细分、客户价值分层 |
| 类间距离/算法核心 | 最小化组内SSE | 多种类间距离测度方式 | 预聚类+凝聚法,基于BIC定K |
这张表是不是看着有点选择困难?别慌,我给一个实战性的选型建议:
如果你手里的数据是干干净净的连续变量、样本量几千上万、而且你大概心里有数分3到5类,直接上K-means,分析起来最快、最直接。
如果你手里的数据变量类型很杂(既有连续又有分类)、样本量又不小、还不想自己去猜K值,优先考虑二阶聚类,这是SPSS里最省心的选项。
如果你面对的是一两百个样本,想做一次深入的探索性分析,尤其是想看样本之间的亲疏层次关系,用系统聚类,配合谱系图来讲故事。
很多实际项目里这三种方法不是互斥的,而是组合拳关系。我自己最常用的一套流程是:先用二阶聚类或系统聚类摸清大概分几类合适,再用K-means做最终的精分割,这样既有层次聚类“定K”的合理性,又有K-means大样本下的执行效率。
3. 数据准备与SPSS实操公共流程
3.1 数据结构与前置检查:别急着开跑
在SPSS里做任何聚类之前,数据准备这一环的优先级比大多数人想象得要高。很多人在这一步偷懒,结果聚类跑出来一团浆糊,回头还怪算法不行。根据我的经验,70%的聚类失败案例,问题都出在数据准备阶段。
首先是数据格式。SPSS的聚类分析要求数据是一个“宽格式”的数据表,每一行是一个样本(比如一个用户、一个患者、一家门店),每一列是一个参与聚类的变量。千万不要把数据存成长格式,那在SPSS里很难直接用于聚类。
其次要看变量的测量尺度。K-means聚类的变量应该是连续变量(Scale),这是硬性要求。如果你非要把“性别”这种分类变量塞进K-means,SPSS虽然不会报错,但结果会非常奇怪,因为算法压根没法合理地计算“男女之间的平均距离”。系统聚类稍微宽容一点,分类变量也能处理,但在距离度量和解释上都麻烦。二阶聚类则对混合类型变量最友好,这也是它最值得推荐的原因之一。
然后是样本量检查。K-means和二阶聚类对样本量下限要求较低,理论上30个以上就能跑,但太少的话聚类结果的稳定性堪忧。系统聚类则相反,样本量过大会直接卡死。所以跑之前先看一眼你的数据有多少行,心里有个数。
缺失值问题一定要重视。K-means和系统聚类对待缺失值的态度比较粗暴——个案删除法,也就是说只要有任意一个聚类变量缺失,这一个样本就被整个扔掉了。如果你的数据里缺失率很高,聚类后样本量可能砍掉一大截。二阶聚类提供了对缺失值的处理选项,但最保守的做法还是提前把缺失值处理好,比如用均值替换、回归填补,或者干脆删除缺失比例过高的样本。
还要做一次数据的离群值检查。我前面提过K-means对离群点很敏感,系统聚类和二阶聚类同样会被离群点干扰。最简单的办法是先用描述性统计看看每个变量的最小值、最大值、均值和标准差,如果发现某个变量的标准差分分钟比均值还大好几倍,或者出现了明显不合理的极端值,建议先处理掉。
3.2 SPSS里做标准化:这一步能救命
标准化(Normalization,SPSS里也叫Z得分)是聚类分析里最容易被忽略但又极其关键的一步。为什么?因为聚类的本质是基于距离的,而距离计算对量纲极度敏感。
举个例子。假设你的数据里有两个变量:年龄(20到60岁)和年收入(5万到100万)。如果直接拿原始值算欧氏距离,年龄的贡献在收入面前可以被忽略不计——年龄30岁的差距也就是30,但收入30万的差距是300000。算法会觉得收入是决定聚类的主要因素,而年龄基本不起作用。这显然不是你想要的结果。让每个变量都做一次标准化,让它们的均值变成0、标准差变成1,就能让它们站在同一条起跑线上。
在SPSS里做标准化的操作非常简单:
- 点菜单栏的分析 → 描述统计 → 描述…
- 把要标准化的变量选入右侧变量框
- 勾选左下角的“将标准化值另存为变量”
- 点确定
跑完之后,数据视图里会多出几列以“Z”开头的变量,那才是你真正应该送进聚类分析里的变量。这里有一个小细节,SPSS描述统计生成的Z得分的算法是: Z = (原始值 − 变量的均值)/变量的标准差。这个公式本身很简单,但它在聚类中的意义是让每个变量对距离的贡献大致相等。
顺便说一个常见的疑问:如果我的变量本身就是同一种量纲(比如全是百分比,或全是金额),还需要标准化吗?我的建议是,只要变量范围和分布差异不大,不标准化问题不大;但如果你拿不准,标准化永远不出错,而且标准化之后对结果的解释也不会产生负面影响。
3.3 一个拿来练手的案例数据
讲了这么多理论,接下来给一个具体的案例,后面所有SPSS实操和结果解读都用这份数据来说话。
假设某电商平台想对用户做细分,运营团队整理了一份抽样数据,包含200个活跃用户的三个变量:
- 年龄(Age):连续变量,取值范围18到60岁
- 月均消费金额(Spending):连续变量,单位是元,取值范围50到2000
- 月均购买频次(Frequency):连续变量,取值范围1到20次
为了演示标准化的重要性,这三个变量的量纲差异非常大,恰好像是前面说的那种“年龄和收入打架”的情形。实际项目中变量的数量肯定不止三个,但三个足够讲清原理了。
在SPSS里新建数据集,录入或者导入这200行×4列的数据(第一列是用户ID,后三列是变量)。导入方式可以是直接在SPSS数据视图里粘贴,也可以用文件 → 导入数据 → Excel导入外部文件。导入之后先在变量视图里确认每一个变量的测量尺度设置正确——年龄、月均消费金额、月均购买频次都应该设为“度量”(Scale),类型为数值。
如果这份数据是别人给你的,跑聚类之前一定要先用描述性统计看一下三个变量的基本分布,做到心中有数。这一步虽然是常识,但很多人跳过了,后面解读聚类结果的时候才发现某个变量的极端值把整个聚类带偏了,又要返工。
接下来的实操部分,我先把这份数据用三种方法各跑一遍,然后手把手带你解读输出结果。
4. 三种聚类方法在SPSS里的完整实操流程
4.1 K-means聚类的操作步骤与参数设置
在SPSS里跑K-means聚类的步骤不长,但每一步的参数设置都有讲究。
第一步,处理变量。先把原始变量做标准化(操作见3.2),然后用标准化后的Z得分变量跑聚类。这一步我不想再重复强调重要性,但后面结果解读的时候你会发现,标准化和不标准化跑出来的聚类结果,差别大得吓人。
第二步,打开对话框。点分析 → 分类 → K-均值聚类…,弹出K-means聚类对话框。
第三步,选变量。把标准化之后的三个变量(Z年龄、Z月均消费金额、Z月均购买频次)选入右侧的“变量”框。注意这里选的是标准化变量,不是原始变量。
第四步,指定类别数。在“聚类数”框里填上你打算分的类别数量。这一步非常关键。前面说了K-means需要手动指定K值,怎么选K值我留到第五部分专门讲。这里先按最常见的做法,填4,也就是先把用户分成四大类,后面再结合数据调整。
第五步,关于个案标注。如果数据里有用户ID,可以把它选入“个案标注依据”框,这样聚类结果会带上个案标签,方便你反查每个用户被分到了哪一类。这一步不是必须的,但强烈建议做,聚类完了想回看某一个用户的具体归属时,有标签会顺手很多。
第六步,选择输出和保存。点击“保存”按钮,勾选“聚类成员”,SPSS会在原数据里新增一列“QCL_1”,数值1、2、3、4分别代表这名用户被分到了第几类。点击“选项”按钮,勾选“初始聚类中心”和“ANOVA表”,前者可以看到算法第一轮迭代的起点,后者可以辅助判断聚类变量对分类的贡献程度。
第七步,点确定,跑结果。K-means的运行速度很快,200个样本基本瞬间出结果。
4.2 K-means结果怎么读:初始中心、迭代历史、最终中心与ANOVA表
K-means跑完,结果查看器窗口里会输出四张表,挨个说。
第一张表叫“初始聚类中心”。这张表展示的是算法在第一次迭代之前选的4个聚类中心长什么样。你会发现这里的值不是Z得分,而是标准化之前的原始值,比如某个初始中心年龄是56、月均消费金额是1830,另一个中心年龄是22、月均消费金额是120。SPSS挑初始中心时是选那些彼此之间距离较远的点,这样迭代收敛会更快。这张表本身不是重点,重点是多跑几次看看初始中心差别大不大,如果差别很大,说明聚类结果对初始值敏感,要多跑几次取稳定结果。
第二张表叫“迭代历史记录”。这张表最有价值的用途是看算法收敛得快不快。迭代历史表中每一行是一次迭代,表格告诉你本轮迭代后聚类中心的变化量。如果“变化量”迅速从十几降到零点几再到0,说明收敛得很干脆;如果迭代了几十次还在小幅波动,说明数据里的簇结构不够清晰,你可能需要考虑换个K值或者换一种方法。
第三张表叫“最终聚类中心”。这张表是整个K-means输出的核心,它是你给每一类用户“画像”的依据。比如输出结果显示:
- 聚类1:Z年龄偏高、Z消费金额很低、Z购买频次很低
- 聚类2:Z年龄中等、Z消费金额很高、Z购买频次很高
- 聚类3:Z年龄偏低、Z消费金额中等、Z购买频次中等
- 聚类4:Z年龄中等、Z消费金额很低、Z购买频次很高
这种数据一摆出来,用户画像就清楚了:聚类2是“高价值高频次的核心用户”,聚类1是“高龄低频低消费的沉睡用户”,聚类4是“买得勤但客单低的薅羊毛型用户”。给类别命名这件事,必须在看完最终聚类中心之后再做,顺序千万不能反。
第四张表是“ANOVA表”。它会列出每一个聚类变量在不同类之间的方差检验结果。最核心的看点是Sig.(显著性)那一列,如果某个变量的Sig.大于0.05,说明这个变量在不同类之间差异不显著,换言之它对聚类几乎没有贡献,可以考虑删掉。注意这里有一个很多人会犯的误读——ANOVA表的F值与显著性只是描述性的参考,不是严格意义上的统计检验,因为聚类本身就是为了让各类差异最大化,再用差异去检验聚类效果,逻辑上有点循环论证。但作为筛选聚类变量的参考指标,它是很好用的。
最后还有一张“每个聚类中的个案数量”表,看的是各类的样本量分布。样本量分布很关键,如果你分成4类之后有一类只有3个人,那这个结果基本不可用,需要减少K值或者检查是不是离群点干扰了聚类。
4.3 系统聚类的SPSS操作与谱系图判读
系统聚类的操作路径是分析 → 分类 → 系统聚类…,对话框打开之后有几个关键参数需要设置。
变量区:把三个标准化变量选入“变量”,把用户ID选入“个案标注依据”。
聚类方式:“聚类”这个选项里有两个选择——个案(按样本聚类)和变量(按变量聚类)。绝大多数场景下选“个案”,因为我们要把用户分群,而不是把变量分群。
统计量选项卡:勾选“谱系图”(这是系统聚类的核心输出)。另外“凝聚状态表”(Agglomeration Schedule)建议勾上,这张表记录了每一轮合并的细节,虽然信息密度比较高,但对进阶用户来说是判断聚类数的重要依据。如果样本量比较大,凝聚状态表会很长,200个样本会输出199行,这时你可以不看细节,重点关注后三列“系数”的变化。
绘制选项卡:勾选“谱系图”,方向选“垂直”。如果是小样本(小于50个),谱系图会很清爽;样本上百之后,谱系图底部的样本编号会挤在一起,但整体树形结构还是能看清楚的。
方法选项卡:这是系统聚类最关键的一个设置。“聚类方法”下拉框里有好几个选项,我建议优先选择“组间联接”(也叫平均联结法,Between-groups linkage),这是最常用、最稳健的选项,对噪声数据不太敏感。“度量标准”里选“平方欧氏距离”。这两个搭配是系统聚类的默认组合,也是绝大多数教材推荐的标准配置,适用于连续性变量。
跑完之后,最有价值的输出是那张谱系图。怎么从谱系图确定聚类数呢?我的经验是:在树状图上横着切一刀,想象一条水平线从图的最顶端慢慢往下移动,每穿过一条竖线,就多出一个类。找到一个“竖线最稀疏、最空旷”的位置停住,那个高度对应的聚类数就是比较自然的类别数。如果在这个空旷带上有2到4根线穿过,说明数据在这个聚类数附近有相对清晰的结构。
需要注意的是,系统聚类一旦确定了聚类数,后续的分析流程和K-means是一样的——把每个样本的所属类别保存下来(“保存”按钮里选“单一方案”,填类别数),然后做各类别的描述统计和交叉分析。
4.4 二阶聚类操作与自动定类解读
二阶聚类的操作路径是分析 → 分类 → 二阶聚类…,对话框设置相对简单,但每个选项都值得仔细看。
第一步,变量选择。连续变量(年龄、月均消费金额、月均购买频次)选入“连续变量”,如果有分类变量,把它们选入“分类变量”。我们的案例数据三个都是连续变量,所以全放连续变量框里。
第二步,距离度量。SPSS给了两个选项:“对数似然”和“欧氏距离”。欧氏距离只适用于全部变量都是连续变量的情况,对数似然则是“连续+分类混合”场景下的标配。如果全是连续变量,用欧氏距离没问题;如果变量类型混着来,必须选对数似然。为了演示二阶聚类的最大优势,同时也为了保险,我建议直接选对数似然,它对纯连续变量同样适用。
第三步,聚类数。这里有两个选项:自动确定聚类数和指定固定聚类数。二阶聚类的卖点就是自动定类,所以首选“自动确定聚类数”。旁边还有个“设置最大聚类数”的勾选项,默认是15。自动定类不是无限让你分,它会在1到15的范围内帮你选一个“最佳值”。如果你自己心里对K值有偏好,可以改小上限,但探索阶段建议先让它自由发挥。
第四步,输出选项。勾选“创建聚类成员”保存每个样本的类别归属,勾选“模型查看器”可以生成可视化结果。聚类质量图也会默认输出,这张图用“轮廓系数”衡量聚类质量,当数值大于0.5时,一般认为聚类质量良好;0.2到0.5之间说明结构一般;小于0.2则说明数据点比较分散,聚类结果参考价值有限。
跑完之后,二阶聚类的结果输出和其他两种方法风格差异很大,一大亮点是“聚类大小”图——一个条形图能直观看出各类样本占比。还有一个更实用的输出是“聚类比较”图,它把每个变量在每个类中的分布画在一起,你一眼就能看出哪一类在哪个变量上更突出,比看数字快多了。
在二阶聚类的输出里,最重要的一张表是“聚类频率”,它会列出自动选定的聚类数以及每一类的样本量和占比。比如输出显示自动聚类数为3,聚类1有90人占45%,聚类2有65人占32.5%,聚类3有45人占22.5%。分布均衡,没有出现某类只有个位数的尴尬情况,这个聚类数就比较可信。
5. 常见问题与避坑实录
5.1 聚类数到底怎么定才科学
这是后台被问到最多的问题,也是聚类分析实操中最大的一个坎。之前我们提到了三种方法各有各的定类思路:系统聚类看谱系图,二阶聚类看BIC自动选,K-means需要手动指定。那K-means的K值到底怎么定?这里分享一个最常用也最靠谱的方法——肘部法则。
跑法很简单:设置K从2到8依次递增,每跑一次记下“组内平方和”(SSE),然后以K为横轴、SSE为纵轴画折线图。随着K增大,SSE一定是下降的(因为类越多,每个类越紧凑),关键是看这个折线的形状。折线先快速下降,然后变成平缓下降,中间那个拐弯的点像一个手肘,这个“肘部”对应的K就是相对合理的聚类数。
为什么?因为聚类数太少,类内的紧凑度不够,SSE很高;聚类数超过某个临界点之后,再增加类别数对SSE的改善幅度会大幅减少,说明你已经吞掉了数据的主要结构,继续细分只是“把同一类人从中间再切开”而已,意义不大。
此外还有两种直觉法可以配合使用。
一种是业务可解释性判断。如果你分了6类,结果里有两类在业务上根本无法区分——消费水平差不多、年龄差不多、行为模式也差不多,那说明K值取大了,6类其实本质上只有5类。相反,如果4类的每一类都能讲出一个有区分度的业务故事,那4就是好选择。
另一种是各类占比均衡性判断。好的聚类结果不应该出现“某类占90%、其他类别加起来10%”的极端情况。如果出现这种结果,要么是K值取小了,要么是数据里有大量离群点干扰,需要回到数据准备阶段排查。
5.2 为什么标准化之后聚类结果反而“不对”了
这个问题我第一次遇到时也愣了半天。明明标准化能让变量站在同一起跑线上,为什么标准化之后的聚类结果看起来还不如不标准化的直观?
其实不是标准化错了,而是你还没有适应“标准化后的聚类中心”的解读方式。不标准化时,聚类中心显示的是“年龄45岁、月均消费800元”这种一眼就能看懂的数字;标准化之后,聚类中心变成“年龄的Z得分0.5、消费金额的Z得分-1.2”,看起来得先在脑子里换算一遍才能反应过来是什么含义。
这完全是解读习惯的问题。解法很直接:聚类跑完后,把“聚类成员”那一列保存下来,然后用分析 → 比较平均值 → 均值,分别以聚类类别为分组变量、以原始变量为因变量做均值描述。这样最终呈现出来的就是原始量纲下的用户画像,既享受了标准化的好处,又保留了业务可读性。
另外还需要提醒一点:标准化之前处理异常值这件事不能省。标准化虽然能统一量纲,但它对“少数极端值导致均值被拉偏”这种情况也无能为力。数据里如果真有极端值,标准化的结果会把它变得更极端(因为标准差被撑大后,其他数据会被压缩得更厉害),聚类反而更容易出问题。
5.3 三种聚类结果对不上,该信谁
一个很常见的场景:同一份数据,K-means分出来4类,系统聚类分出来3类,二阶聚类分出来5类。这时候新手通常会慌,怀疑是不是自己哪一步操作错了。其实没必要慌,三种算法原理不同、对数据结构的假设不同,结果有差异是常态。
正确的处理思路是这样:先看二阶聚类的BIC自动定类结果和聚类质量图的轮廓系数,如果质量得分良好(大于0.5),那么以它推荐的聚类数为基准。然后回到K-means,把K值设成二阶聚类推荐的数,再跑一次,对比最终聚类中心表里的用户画像,看看关键维度上的人群特征是不是逻辑一致。最后拿起系统聚类的谱系图,在推荐聚类数的位置切一刀,看看那些“有争议的边界样本”到底被分到哪边。
如果三种方法在划分大方向上一致(比如都能区分出高价值人群、普通人群、低活跃人群),只是在细分程度上不同,那说明数据的核心结构是稳健的。这时候影响用户画像细节的主要是K值的选择,而不是算法。我个人的经验是用二阶聚类定K范围、用K-means做最终建模,然后用系统聚类的谱系图来给业务方讲“类与类之间的关系”,三者各司其职。
5.4 SPSS版本差异与常见报错
SPSS的版本差异在聚类分析菜单上体现得比较明显。老一些的版本里二阶聚类叫“TwoStep Cluster”,新版本可能翻译为“两步聚类”或“二阶聚类”,菜单位置一般在分析 → 分类下面,仔细找都能找到。K-means在部分版本里叫“K-均值聚类”,系统聚类叫“系统聚类”或“层次聚类”。
比较常见的报错有两种。一种是在K-means里选了分类变量,结果聚类中心里的取值全是0和1,输出看起来很奇怪。这是因为SPSS把分类变量当数值处理了,距离计算没有任何业务意义。解决办法是重新检视变量测量尺度,分类变量不要放进K-means的变量框。
另一种系统聚类常见的问题是样本量过大导致运行卡顿。这种情况是正常的计算瓶颈,毕竟系统聚类的时间复杂度接近O(n²)。如果你的样本量超过1000,建议直接放弃系统聚类,换用二阶聚类或K-means,这是更务实的方案。
还有一个体验层面但很影响效率的小问题:如果数据量大,保存聚类成员后SPSS会在原数据表里新增一列,如果反复跑聚类,数据里会积累QCL_1、QCL_2、QCL_3好几列“聚类成员”。跑多了之后要把用不上的旧列删掉,免得后面自己都分不清哪一次结果对应哪一次运行。我习惯的做法是每次聚类前先给数据文件复制一个副本,在副本上操作,跑乱了就重新复制。
5.5 聚类完怎么输出有说服力的报告
最后聊一个很多人忽略的环节——聚类分析的报告呈现。算法跑完只是第一步,能把聚类结果讲清楚、让不懂统计的业务方信任你的结论,才是真正的功夫。
我的固定套路是三个部分。
第一部分叫“聚类结果概览”,放一张各类别样本量占比的表格,配合一张柱状图,让人先有个整体印象。
第二部分叫“各类别画像对比”,这是最核心的部分。用均值表列出每个类别在每个关键变量上的平均表现,最好全部换算成原始变量的单位(比如年龄、月均消费额、购买频次),不要用Z得分。有条件的话,用折线图把所有类别的标准化均值放在同一张图里,一眼就能看出不同类在不同维度上的起伏。
第三部分叫“业务解读与行动建议”,这是真正加分的部分。给每一类起一个业务上能听懂的名字,比如“高价值高频次核心用户”“价格敏感低频用户”“高潜力年轻用户”,然后在每一类下面写两条具体的运营建议。比如对高价值用户建议做专属客服和定向新品推荐,对价格敏感用户建议多推优惠券和促销活动,对高潜力年轻用户建议做成长体系激励。
很多人在报告里堆一堆表格,对方根本不知道看了能怎么用。记住一句话,聚类分析的终点不是“分出了几类”,而是“分出来之后能干什么”。有了行动建议,报告的价值才真正体现出来。
用SPSS做聚类分析,整个流程走下来你会发现,真正花时间的不是点菜单,而是数据准备、方法选型和结果解读这几步。我个人的体会是,三种聚类方法各有各的适用边界,没有哪种是“最好的”,只有“在这个数据和业务场景下最合适的”。多跑几组参数对比一下,结合业务常识去解读和验证,聚类分析就能成为你数据分析工具箱里特别顺手的一把武器。希望这篇实战梳理能帮你在自己的数据上少走一些弯路。