ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

SPSS聚类分析实战:k-均值、系统聚类与二阶聚类怎么选与落地

SPSS聚类分析实战:k-均值、系统聚类与二阶聚类怎么选与落地 做用户分群、门店分级、客户价值分层的同学绕不开 SPSS 聚类分析这套工具链。我在实际项目里用得最顺手的就是三个菜单k-均值聚类、系统聚类和二阶聚类它们都藏在 SPSS 的“分析—分类”目录下面界面看着朴素但参数里藏着的坑一点也不少。这篇文章不打算给你复述帮助文档而是把我在电商用户行为分析、经销商分级、问卷人群划分这几类项目里踩过的坑、验证过的参数、以及怎么把聚类结果翻译成业务动作一次性讲清楚。不管你是刚接触 SPSS 的在校生还是被老板要求“把客户分个群”的运营、市场、数据分析岗只要手里有一份结构化表格数据这篇内容都能直接照着走一遍。关键词先摆在这儿SPSS、聚类分析、k-均值聚类、系统聚类、二阶聚类后面每一节都会围绕它们展开但重点始终是“怎么做”和“为什么这么做”。1. 先把问题想清楚聚类分析到底在解决什么很多人拿到数据的第一反应是打开菜单点“确定”结果跑出来一堆类别却说不清每类代表什么。聚类分析的门槛不在操作而在于你是否想明白它要回答什么问题。这一节我们把方法论先钉死后面才不会白跑。1.1 聚类不是分类没有标准答案的无监督过程分类分析比如逻辑回归、决策树是有标签的监督学习你手里有“已流失/未流失”“高价值/低价值”这样的已知答案模型的任务是学会判断规则。聚类分析完全相反你手里没有标签算法只能根据变量之间的“相似程度”把个案抱成团至于抱出来的团叫什么名字、有没有业务意义全靠你自己解释。这就是为什么同一个数据集不同人跑出来的聚类结果可能都能自圆其说但价值天差地别。我习惯用一个类比分类像是老师批改有标准答案的试卷聚类像是把一筐没贴标签的水果按大小、颜色、硬度自己分堆。分几堆、按哪个维度分取决于你分完之后要干什么。如果你分完堆只是为了“看起来整齐”那这次聚类基本没有价值。所以动手之前你必须先回答一个问题聚类结果会驱动什么决策是给不同人群推不同的优惠券还是决定哪些门店要重点扶持决策决定了你该选哪些变量也决定了该分几类。这一点想不清楚后面的参数调优全是空转。1.2 三种聚类方法的能力边界对照SPSS 里常被拿来对比的是 k-均值聚类、系统聚类层次聚类和二阶聚类。它们不是互相替代的关系更像是三种不同量级的工具。我整理了一张对照表这张表建议你截图存下来选方法的时候直接对照。对比维度k-均值聚类系统聚类二阶聚类适用样本量大样本几万到几十万行都能跑小样本一般建议 300 以内超过 1000 行计算会很吃力大样本兼顾效率与稳定性变量类型只适合连续变量数值型连续变量为主也可用计数型连续变量与分类变量可混合使用是否需要预设类数必须自己指定 K 值不需要最后从树状图切可自动确定也可手动指定结果稳定性受初始中心和个案顺序影响结果确定同一数据同一规则结果一致相对稳定对变量顺序不敏感典型使用场景客户分群、门店分级变量或样本的探索性分组、问卷题目归类混合了性别、地区、等级等分类变量的分群输出重点聚类中心、方差分析表凝聚状态表、冰柱图、树状图聚类质量图、变量重要性排序从表里能看出来三者最核心的差别在于“样本量”和“变量类型”。如果你的数据里既有消费金额这种连续变量又有会员等级、所在城市等级这种分类变量硬用 k-均值聚类就是把分类变量当数字算距离结论会失真这时候二阶聚类是更合理的选择。而系统聚类最大的价值在于探索性。当你完全不知道数据里有没有结构、该分几类时先跑一次系统聚类的树状图看看个案是怎么一步步合并的这个信息量比直接指定 K4 跑 k-均值要大得多。我个人的习惯是样本量允许的话先用系统聚类摸清结构再用 k-均值做大样本落地。1.3 动手前必须回答的四个问题我在带新人时会要求他们在跑聚类之前先在纸上写清楚四个问题的答案写不出来就别开软件。第一个问题是“分群的业务目的是什么”。是提升复购、优化投放预算还是做渠道分层管理目的不同变量选择完全不同。做复购就看消费频次和最近一次消费时间做投放就看客单价和品类偏好。第二个问题是“哪些变量能代表这个目的”。这里有个常见误区变量越多越好。实际上变量之间高度相关会重复加权比如“月消费金额”和“年消费金额”同时放进去相当于消费能力这个维度被计算了两遍聚类结果会被这一个维度绑架。我的做法是先做相关分析相关系数超过 0.8 的变量对里只保留业务解释力更强的那一个。第三个问题是“每个变量的量纲差异有多大”。消费金额可能是几千几万消费频次可能是个位数如果不做标准化欧氏距离几乎完全由金额决定频次这个维度等于没参与。这是新手最容易犯的错误后面第 2 节会展开讲。第四个问题是“预期分几类每类最少要有多少人”。如果你打算分 5 类但其中一类只有 3 个人那这类没法做运营动作基本属于离群点需要考虑合并或者单独处理。一般我会要求最小类占比不低于总样本的 5%。1.4 顺带说清楚自然断点法和聚类分析的区别搜索这个标题的同学很多是被地图分级或者数据分级的需求带过来的这里单独说明一下。自然断点法Jenks最常见的应用场景是 GIS 里的地图着色分级它处理的通常是一维数据比如把全国城市的某个指标分成 5 个等级让组内差异最小、组间差异最大。从数学本质上看自然断点法是一维情况下的 k-均值思想优化的目标同样是组内平方和最小。那区别在哪第一维度不同。聚类分析可以同时处理十几个变量自然断点法一般只处理一个变量。第二输出对象不同。聚类分析把“个案”分组自然断点法是把“数值区间”分段个案本身没有类别归属只是落在某个区间里。第三确定分段数的方式不同。自然断点法通常靠人为设定分级数量然后算法找最优断点聚类分析里 k-均值也靠人为设定但系统聚类和二阶聚类可以自动确定。结论很直接如果你只是要画一张分级地图用自然断点法就够没必要上聚类如果你要做的是一份包含多个指标的人群划分那就老老实实回到聚类分析的框架里来。2. 数据准备聚类分析的地基工程我做过统计聚类分析结果不理想的情况里七成以上的问题出在数据准备阶段而不是算法参数。这一节的内容看起来枯燥但它决定了你的结果是“能用的分群”还是“看着热闹的废数据”。2.1 变量筛选与冗余清理变量筛选的第一步是把所有候选变量列出来然后逐个问“这个变量和我的分群目的有关系吗”。很多人喜欢把数据库里能拿到的字段全塞进去结果聚类结果被一堆无关变量稀释。举个真实例子有同学做用户分群把“注册时长”“最近登录天数”“累计消费”“订单数”“优惠券使用张数”“客服咨询次数”六个变量全放进去跑出来四类怎么看都看不出差异。我让他砍掉“客服咨询次数”和“优惠券使用张数”只保留四个核心维度结果立刻清晰了。清理冗余靠的是相关分析。SPSS 路径是“分析—相关—双变量”把候选变量两两算 Pearson 相关系数输出结果里相关系数绝对值超过 0.8 的基本可以判定为信息重叠二选一即可。选择标准是哪个变量更容易向业务方解释就留哪个。还有一个容易被忽视的点方向一致性。有些变量是“越大越好”消费金额有些是“越小越好”最近一次消费间隔天数。如果直接混在一起做距离计算“最近一次消费间隔 5 天”和“间隔 300 天”的差异会和其他维度互相干扰导致解释困难。我的处理方式是在计算变量阶段把方向统一比如用“360 减去最近一次消费间隔天数”转换成“活跃度得分”这样所有变量都是越大越活跃聚类中心的解释就直观了。2.2 标准化的必要性与操作路径只要你的变量量纲不一致就必须标准化没有例外。标准化最常用的是 Z 分数法也就是每个变量减去均值再除以标准差处理之后每个变量的均值为 0、标准差为 1量纲被彻底抹平。在 SPSS 里做标准化有两条路。一条是“分析—描述统计—描述”勾选“将标准化值另存为变量”这样会生成一批以 Z 开头的新变量比如 Z消费金额、Z消费频次。另一条是“转换—计算变量”手动写公式 (变量 - 均值) / 标准差适合你只想标准化部分变量的场景。我更推荐第一条路因为它会自动给新变量命名而且原始变量保持不动方便后续对照。注意标准化后的变量名会带 Z 前缀跑聚类时一定要选 Z 变量不要手滑把原始变量也勾进去否则等于没标准化。有一个例外情况值得说清楚如果你的所有变量本身就是同一量纲比如都是 1 到 5 分的李克特量表题那标准化带来的改变很小可以不标准化直接跑。但如果量表题的取值范围差异明显比如一个题是 1 到 5另一个是 1 到 100还是要标准化。2.3 距离测度怎么选欧氏距离不是唯一答案距离测度决定了“相似”这个词的数学定义这是个关乎结论方向的重大选择但大部分人在对话框里默认选了平方欧氏距离就过去了。平方欧氏距离是最常用的计算方式是各变量差值平方后求和它对大差异非常敏感适合连续变量、量纲已统一的情况。普通欧氏距离在系统聚类里也常用区别只是最后开不开根号对合并顺序的影响有限。夹角余弦测度的是变量向量的方向相似性对数值大小不敏感适合描述“结构比例”类数据比如消费结构占比。马氏距离考虑了变量之间的相关性理论上更严谨但对样本量和矩阵可逆性有要求实际项目里用得不多。下面这张表是我给的选型建议可以直接抄距离测度适用场景需要留意的问题平方欧氏距离连续变量、已标准化、希望突出大差异对离群值敏感欧氏距离连续变量、通用场景同样受离群值影响夹角余弦关注比例结构而非绝对水平数值全为 0 的个案无法定义马氏距离变量间存在较强相关样本量充足需要协方差矩阵可逆切比雪夫距离关注最大单项差异实际业务解释较难实际操作中我的默认选择是平方欧氏距离。只有在两个变量的相关性很强、又都不舍得删的情况下才会考虑马氏距离。而处理消费占比、品类结构这类数据时夹角余弦更贴合业务含义。2.4 缺失值与异常值的处理策略SPSS 的 k-均值聚类在“选项”里可以设置缺失值处理方式分“成列排除个案”和“成对排除个案”两种。成列排除是只要个案在任一参与聚类的变量上缺失整个个案就不参与计算成对排除是按变量对分别计算能保留更多样本但可能造成距离矩阵不自洽。我的建议是优先成列排除因为聚类要求每个个案的“画像”完整缺胳膊少腿的个案分到哪一类都不踏实。如果缺失比例不高比如单个变量缺失率低于 5%更好的做法是提前填补。均值填补最简单但会压缩方差中位数填补对偏态数据更稳如果是分类变量用众数填补。我一般会在数据准备阶段就用“转换—替换缺失值”处理掉而不是指望聚类过程的默认设置。异常值的处理更关键。聚类对离群点极其敏感一个消费金额是均值几十倍的客户很可能单独占掉一个类导致其他类被压缩。识别方式可以用箱线图也可以用 Z 分数绝对值大于 3 作为判断标准。发现离群点后不要直接删除就完事先判断它是数据错误还是真实存在的极端客户。如果是真实的高价值客户把它单独拎出来做 VIP 管理比塞进聚类里搅局更有价值。2.5 数据分拆文件的正确用法“数据—拆分文件”这个功能在聚类分析里经常被误用。它的作用是按照某个分组变量把后续所有分析按组别分别执行。比如你按“城市等级”拆分文件再跑聚类SPSS 会分别对一线城市、二线城市各跑一次聚类输出两套结果。这个功能适用的场景是你明确知道不同组的结构不一样需要独立分群。比如线上渠道和线下渠道的用户行为差异极大硬放在一起聚类会互相干扰这时候拆分文件就很有用。但误用的场景也很常见有人想对比不同组的聚类结果拆分文件之后发现输出表格多了一倍看着眼花实际上两组的分群逻辑如果不一致后续没法统一做运营。我的建议是除非你有明确的“分组独立建模”需求否则不要用拆分文件改成在聚类之后用交叉表看看类别和分组变量的分布关系信息量更直观也不会把结果搞乱。3. k-均值聚类大样本分群的主力工具如果只能选一种聚类方法我会选 k-均值聚类。它跑得快、结果好解释、能处理几十万行数据是业务场景里落地率最高的方法。但它的脾气也很明显你必须提前告诉它分几类它才肯干活。3.1 算法原理一句话说清迭代逻辑k-均值聚类的核心逻辑可以用一句话概括先随便撒 K 个“中心点”然后不断把每个个案分配给最近的中心再根据新成员重新计算中心位置反复几轮直到中心不再移动。用生活场景类比假设你要在一个城市里开 4 家便利店要求所有居民到最近店的距离总和最小。你先随便选 4 个位置开店然后看看每个居民离哪家店最近把他们划给那家店接着根据每批居民的实际位置把店搬到这批人的“重心”位置再重新划分归属再搬店来回几次店的位置就稳定了。这个最终位置就是聚类中心每批居民就是一类。理解了这个逻辑你就能明白三件事。第一K 值必须提前给定因为“开几家店”是你决定的算法只负责优化位置。第二初始中心的位置会影响最终结果撒得不好可能收敛到局部最优这也是为什么同一个数据集跑两次可能得到不同结果。第三算法对小类不友好如果一个类的人数很少它在优化“距离总和最小”时容易被牺牲掉。3.2 完整操作路径与关键参数逐个拆SPSS 里 k-均值聚类的入口是“分析—分类—K均值聚类”。打开对话框后流程分三步。第一步把标准化后的连续变量全部选进“变量”框。这里千万不要选分类变量也不要把原始变量和 Z 变量混着选。第二步在“聚类数”里填你想要的 K 值。这个数字怎么定下一小节单独讲。第三步点“迭代”和“保存”两个按钮把关键选项设好。“迭代”按钮里最大迭代次数默认是 10我的建议是改成 50。收敛性判据默认是 0意思是中心完全不动才停止实操中这个条件比较苛刻改成 0.02 能显著缩短运行时间而且对结果几乎没影响。另外这个对话框里可以控制初始聚类中心的来源如果你对结果稳定性要求高可以先跑一次保存初始中心后续固定使用同一组初始中心保证多次运行结果可比。“保存”按钮里务必勾上“聚类成员”和“与聚类中心的距离”。聚类成员就是每个个案被分到第几类这是后续所有分析的钥匙与聚类中心的距离可以用来识别“边缘个案”距离特别大的说明这个个案不太典型做人群画像时要留个心眼。“选项”按钮里的“统计量”区域勾上“ANOVA 表”。“聚类中心”是必看的它告诉你每一类在每个变量上的平均水平这是给类别起名字的依据。对应的语法命令长这样习惯用语法窗口的同学可以直接改QUICK CLUSTER Z消费金额 Z消费频次 Z最近消费间隔 Z客单价 /MISSINGLISTWISE /CRITERIACLUSTER(4) MXITER(50) CONVERGE(0.02) /METHODKMEANS /PRINT ID(用户ID) CLUSTER DISTAN ANOVA /SAVE CLUSTER DISTANCE.提示语法里的 ID(用户ID) 会把用户编号一并输出方便把聚类结果和原始数据对回去。样本量大时这一步能省你不少时间。3.3 K 值到底怎么定三个手段交叉验证K 值是 k-均值聚类唯一需要人为决定的参数也是争论最多的地方。我自己的做法是用三个手段交叉验证而不是只靠一种。第一个手段是业务预设。很多项目其实业务方心里有答案比如“我们想把客户分成高中低三档”或者“我们的运营团队只能维护 5 个群体”。这种情况下 K 值是被资源约束定的直接按业务来。我遇到过一个项目运营团队只有 4 个人一人负责一类那 K4 就是最合理的选择。第二个手段是肘部法。做法是从 K2 开始逐个增加到 K10每次记录聚类结果的组内平方和SPSS 输出里没有直接给这个指标但可以用“与聚类中心的距离”求和来近似然后把 K 值作为横轴、组内平方和作为纵轴画折线图。折线会先快速下降然后趋于平缓那个“拐点”就是比较合适的 K。这个方法的局限是拐点有时不明显只能作为参考。第三个手段是轮廓系数或者最小类占比校验。SPSS 本身不直接输出轮廓系数需要借助 Python 扩展或者手动计算实操门槛偏高。更实用的替代方案是看类分布跑完聚类后看“每个聚类中的个案数目”表如果某一类占比低于 5%或者某一类占比超过 70%都说明 K 值可能需要调整。K 值组内平方和趋势类分布特征判断2下降明显两类各占约一半过于粗糙业务区分度不够3继续明显下降分布相对均匀可用适合资源有限的团队4下降放缓最大类占比约 45%常见的最优区间5下降明显放缓出现 8% 的小类需要判断小类是否有业务价值6 及以上基本平缓出现 3% 以下的碎类过拟合不建议我个人的经验值是大多数消费行为数据在 4 到 5 类之间最合理。超过 6 类通常意味着你在过度细分运营根本跟不上。3.4 结果解读从聚类中心到类别命名跑完聚类输出里有三张表必须仔细看。第一张是“最终聚类中心”这是核心。第二张是“每个聚类中的个案数目”这是规模。第三张是“ANOVA 表”这是变量贡献度。读聚类中心的方法是横向对比。假设你有 4 类在“消费金额”这个变量上4 类的中心值分别是 -0.8、-0.2、0.3、1.5标准化后那就说明第 4 类是高消费人群第 1 类是低消费人群。把所有变量都这样横着看一遍你就能给每一类画出画像。命名的时候有个技巧找出这一类的“最突出特征”而不是罗列所有特征。比如第 4 类在消费金额和客单价上都最高但消费频次中等那就可以叫“高客单低频次人群”比笼统地叫“高价值客户”更有指导意义因为运营一看就知道该做什么——提升频次而不是继续加价。ANOVA 表看的是 F 值和显著性。某个变量在所有类之间差异显著说明这个变量对分群有贡献如果某个变量不显著说明它没能区分任何两类下次可以考虑从模型里剔除。这里要提醒一句聚类分析里的 ANOVA 表只能作为参考因为聚类本身就是在最大化组间差异显著性检验的前提假设并不完全成立不要把它当成严格的统计推断。3.5 k-均值聚类的实操心得与常见坑第一个坑是没标准化就开跑。我见过太多次结果里某一类清一色是消费金额最高的客户其他维度完全看不出差异答案就是金额量纲太大把其他变量全盖住了。第二个坑是结果不稳定。k-均值对初始中心敏感如果你发现两次运行结果差异很大说明数据结构本身不够清晰。解决办法有两个一是先设定随机数种子“转换—随机数生成器”里可以设定固定种子保证可复现二是多跑几次取最稳定的那组结果。第三个坑是把分类变量塞进去。性别编码成 1 和 2城市编码成 1 到 5这些数字之间的距离没有实际意义k-均值会把它们当成数值来计算结论必然失真这种情况请改用二阶聚类。第四个坑是不看“与聚类中心的距离”。这个变量非常有用距离特别大的个案说明它不典型如果这类个案数量不少可能暗示你的 K 值定少了或者数据里存在没处理干净的离群点。第五个坑是忽略类分布的合理性。我曾见过一个结果第 1 类占了 82% 的样本剩下三类加起来 18%。这种结果没有实操价值因为绝大部分客户都在同一类里运营没法差异化对待。遇到这种情况要么调整 K 值要么重新审视变量选择。4. 系统聚类小样本探索与结构发现系统聚类也叫层次聚类它的工作方式和 k-均值完全不同。它不需要你提前说分几类而是从每个个案自成一类开始一步步把最相似的两类合并直到所有个案归为一大类。整个合并过程记录了完整的层次结构最后你从这个结构里切一刀就得到了分类结果。4.1 类间距离的五种定义方式系统聚类里最需要理解的概念是“类与类之间怎么算距离”。两个单独的个案算距离好办但当两个类各自包含多个个案时距离的定义就有多种选择。最短距离法最近邻取两个类中距离最近的一对个案作为类间距离。它的特点是容易形成“长链条”把一串渐变的个案串成一个大类。最长距离法最远邻取最远的一对倾向于生成紧凑的类。平均距离法取所有个案对的平均值是折中方案。重心法用两个类的重心距离但可能出现合并后的距离小于前一步的“反转”现象。Ward 法离差平方和法的目标是让合并后组内平方和增加最少倾向于生成规模均衡的类。实操中我绝大多数情况选 Ward 法配合平方欧氏距离。原因是 Ward 法生成的类规模相对均衡不容易出现“一个超级大类加一堆小类”的情况对业务方来说更好解释。只有在数据呈现明显的链状结构时才会考虑最短距离法。还有个技术细节值得注意如果变量没标准化系统聚类里可以勾选“标准化”选项让 SPSS 在计算前自动做 Z 变换。但我更建议在数据准备阶段就手动标准化因为这样你能清楚地知道哪些变量被转换过也方便后续用同样的变量跑 k-均值。4.2 完整操作路径与输出设置系统聚类的入口是“分析—分类—系统聚类”。操作流程如下。第一步把标准化后的变量选进“变量”框。如果你要做的是“变量聚类”比如把二十道问卷题归成几个维度就选“变量”而不是“个案”。第二步点“统计量”按钮勾上“合并进程表”也叫凝聚状态表和“近似矩阵”。合并进程表记录了每一步合并了哪两个类、距离是多少、合并后这个类有多少个案这是判断切几类的关键依据。近似矩阵在样本量大时会输出一个巨大表格样本超过 200 就别勾了。第三步点“绘制”按钮勾上“树状图”。“冰柱图”现在用得少了主要靠树状图。另外可以设置“显示聚类解的范围”比如从 2 类到 5 类这样输出里会直接给出这几种分类方案下的成员归属。第四步点“方法”按钮选择聚类方法和距离测度。这里选 Ward 法加平方欧氏距离。对应的语法是这样的CLUSTER Z消费金额 Z消费频次 Z最近消费间隔 Z客单价 /METHOD WARD /MEASURESEUCLID /PRINT SCHEDULE CLUSTER(2,5) /PLOT DENDROGRAM /SAVE CLUSTER(2,5).其中 /SAVE CLUSTER(2,5) 会在数据文件里生成若干新变量记录按 2 类到 5 类划分时每个个案的归属方便你直接拿去做后续分析。4.3 树状图怎么读切几类最合适树状图是系统聚类最有价值的输出。它的横轴是个案或类的标签纵轴是合并时的距离。图的右边是一根根横线每根横线代表一次合并从右往左看个案逐步聚拢。判断切几类的标准方法是找树状图里最长的那些垂直线段。因为每次合并都有一个距离值如果某一步合并的距离远大于前后几步说明这一步是在“硬凑”强行把两个本来差异很大的组合并了。你应该在这个跳跃之前切断。具体操作上想象一根竖线从左往右移动竖线穿过的横线数量就是类别数量。当竖线在某一段“空白较长”的区间里移动时穿过的横线数不变这个数量就是比较稳定的分类数。如果树状图在某个区间里有明显的长空白那个区间对应的类数就是优选。如果树状图看不太清个案多的时候标签会挤成一团就回头去看合并进程表。找距离列里相邻两步之间跳跃最大的位置跳跃前的那一步对应的类数就是要选的 K。举个例子合并到 4 类时距离是 12合并到 3 类时距离突然跳到 28那说明 3 类这一步合并得很勉强应该选 4 类。4.4 保存分类结果并做交叉验证切好类数之后最稳妥的做法是把系统聚类的结果保存成变量再和 k-均值的结果做交叉对比。SPSS 通过 /SAVE CLUSTER 或者对话框里的“保存”按钮就能生成 CLU4_1 这样的变量命名规则是 CLU 加类数连字符序号。交叉验证的路径是“分析—描述统计—交叉表”把系统聚类的类别变量放进行k-均值的类别变量放进列看两者的对应关系。如果两个方法得到的分群结构高度一致比如系统聚类的第 1 类有 90% 落在 k-均值的第 2 类里那说明这个分群结构是稳健的可以放心用。如果两个结果完全对不上说明数据结构本身比较模糊这时候不要硬做结论回头检查变量和标准化。这里有个经验判断系统聚类和二阶聚类的结论高度一致时我对结果的信心最强。因为这两种方法在数学原理上差异较大能同时识别出同样的结构通常意味着这个结构是数据本身固有的而不是算法巧合。注意系统聚类的计算复杂度随样本量快速增长样本超过 1000 行时合并进程表会输出上千行处理起来非常慢。这种情况下建议先用随机抽样取 300 到 500 行做探索确定类数和变量组合再回到全量数据上用 k-均值或二阶聚类落地。5. 二阶聚类混合变量与自动定类的解法二阶聚类这个叫法在中文资料里不太统一SPSS 中文界面里它叫“两步聚类”有些教材翻译成“二阶聚类”或者“两步法聚类”指的都是同一个功能。它的最大优势是有两个一是能同时处理连续变量和分类变量二是能自动确定类数。5.1 两步走的原理预聚类加层次合并二阶聚类之所以叫“两步”是因为它内部确实分两个阶段。第一步叫预聚类算法先扫描一遍数据把个案归纳成很多个小的子类。判断依据是似然距离也就是在假设变量服从某种概率分布的前提下计算一个个案加入某个子类后整体分布的似然值变化多少。这个阶段用的是类似 BIRCH 算法的思路通过构建聚类特征树来快速压缩数据所以处理大样本时速度很快。第二步叫层次合并把这些子类按照距离逐步合并合并过程中计算 BIC贝叶斯信息准则或者 AIC 值找出最优的类数。BIC 值越小说明模型越好但算法看的不是 BIC 的绝对值而是相邻两类之间的 BIC 变化量变化最大的那一步对应的类数就是推荐答案。用生活场景类比第一步像是先按籍贯、年龄段、职业把一屋子人粗粗分成几十个小组第二步再根据这些小组之间的相似程度把它们合并成几大桌。因为第一步压缩得很厉害第二步处理的数据量已经很小所以整体效率很高。5.2 参数设置连续变量与分类变量分开填二阶聚类的入口是“分析—分类—两步聚类”。对话框里最上方有两个变量框这是它和 k-均值、系统聚类最大的界面差异。“连续变量”框里放你标准化后的数值型变量。“分类变量”框里放性别、会员等级、城市等级这类分类变量。SPSS 会自动识别变量的测量尺度但你还是要在“变量视图”里确认一下分类变量应该设为“名义”或“有序”数值变量设为“度量”否则算法可能用错分布假设。点“选项”按钮有三个参数需要关注。第一是“距离测度”默认是对数似然一般不用改。第二是“聚类数确定方式”默认是“自动确定”算法会参考 BIC 值给出建议你也可以改成“指定固定数目”填一个具体数字。第三是“离群点处理”默认勾选算法会把过于特殊的个案单独标记出来不参与主聚类。输出选项卡里建议勾上“图表”下的“聚类质量”以及“创建聚类成员变量”。“聚类质量”图会给一个从 -1 到 1 的质量评分以及每个变量在聚类中的重要性排序。语法版本如下TWOSTEP CLUSTER /CONTINUOUS VARIABLESZ消费金额 Z消费频次 Z最近消费间隔 Z客单价 /CATEGORICAL VARIABLES性别 会员等级 /DISTANCE LIKELIHOOD /NUMCLUSTERS AUTO 15 BIC /HANDLENOISE YES /MEMALLOCATE 64 /PRINT IC /SAVE VARIABLETSC_Cluster.其中 /MEMALLOCATE 64 是分配内存默认 64MB 在处理大样本时可能不够如果遇到提示内存不足可以调到 256 甚至 512。5.3 结果解读聚类质量图与变量重要性二阶聚类的输出里前三张表最值得看。第一张是“自动聚类”表里面列出了从 1 类到 15 类或你设置的上限的 BIC 值、BIC 变化量、BIC 变化比率。找 BIC 变化量最大的那一行它对应的类数就是算法推荐的答案。有时候会出现几个变化量都很大的情况这时候结合业务判断通常选类数更少、结构更清晰的那个。第二张是“聚类分布”表给出每一类的个案数和占比。同样要检查有没有特别小的类。第三张是“聚类质量”图。这个图分两部分左边是一个质量评分条右边是各变量的重要性排序。质量评分在 0 到 1 之间越接近 1 越好。我的经验是评分在 0.3 以上就基本可用0.5 以上算不错低于 0.1 说明数据里几乎没有可识别的结构需要重新审视变量。变量重要性这一块是二阶聚类的独特输出。它用卡方检验或者 t 检验的方式评估每个变量在区分不同类时的贡献程度然后按重要性从高到低排列。这个信息对业务方特别有用因为它直接告诉你“这个人群划分主要是被哪个因素区分的”。如果排列结果显示“会员等级”和“消费频次”重要性最高那运营的重点就应该放在这两项上。注意二阶聚类的分类变量如果取值过多比如城市名称有 300 多个取值会显著拖慢运行速度也会稀释变量重要性。建议先把城市合并成几个等级比如一线、新一线、二线及其他。5.4 三种方法到底怎么选一张决策表讲了这么多落到实操上其实就是一个决策树。下面这张表按“你的情况”给出建议直接对号入座。你的数据情况推荐方法理由全连续变量样本 5000 行以上已想好分几类k-均值聚类速度最快结果最易解释全连续变量样本 300 行以内不确定分几类系统聚类树状图能直观展示结构帮助定 K连续变量加分类变量混合二阶聚类唯一能正确处理分类变量的方法数据量很大又不想手动试 K 值二阶聚类自动确定类数且有小众点处理机制需要向业务方解释分群依据二阶聚类输出变量重要性排序说服力强想验证一个分群结构是否稳健k-均值加系统聚类交叉验证两种原理不同的方法得到一致结论可信度高我自己在完整项目里的标准流程是先跑系统聚类看结构、定 K 值再用 k-均值在大样本上落地最后用二阶聚类做一次交叉验证并获取变量重要性。这套组合拳下来分群结论通常经得起业务方的追问。6. 报错与结果异常排查实录聚类分析的坑大多不报错而是“跑出来了但结果不对”。这一节我把常见的异常现象整理成速查表再补充几个排查思路。6.1 常见异常现象速查表异常现象最可能的原因处理方式某一类占据 80% 以上样本变量区分度不足或未标准化检查变量补充区分力强的维度确认已标准化某一类只有极少数个案数据中存在离群点用箱线图识别剔除或单独处理离群个案每次运行结果都不一样k-均值对初始中心敏感设定固定随机数种子或指定初始聚类中心所有类的聚类中心都很接近变量之间存在强相关信息冗余做相关分析删除高度相关变量分类变量在聚类中心里出现小数把分类变量当连续变量放进了 k-均值改用二阶聚类二阶聚类自动给出 10 类以上BIC 变化不明显或变量噪声大手动指定 4 到 6 类检查变量质量树状图完全看不出分层数据本身没有明显结构接受“无结构”的结论或更换变量组合提示内存不足二阶聚类默认内存分配偏小把内存分配调到 256MB 以上或减少变量数这张表建议在每次聚类前扫一眼能省掉大量试错时间。6.2 结果不稳定的三种成因与验证方法第一种成因是初始中心随机。k-均值的初始中心如果来自随机选取不同运行会得到不同收敛结果。验证方法是设定固定随机数种子后连续跑三次看三次的聚类中心是否一致。如果不一致说明数据里存在多个接近的局部最优解这时候应该考虑减少变量或者调整 K 值。第二种成因是变量之间共线性严重。两个高度相关的变量会让某个维度的权重被放大一倍导致个案归属在边界上反复摇摆。验证方法是做一次相关分析把相关系数超过 0.8 的变量对拆开重新跑聚类对比结果是否更清晰。第三种成因是样本量太小。系统聚类在样本少于 50 时结果非常敏感增删一两个个案都可能改变整体结构。这种情况下不要过度解读分群结果把它当作探索性参考就好。我的通用验证手法是“三跑一比”用同样变量和参数跑三次改变初始中心或随机种子然后做交叉表对比三次的分类结果。如果三次结果的一致性超过 80%说明结构稳健低于 60%就要回头检查数据。6.3 版本差异与软件获取的合规提醒SPSS 目前是授权制软件不同版本之间菜单名称和参数默认值有细微差别。比较明显的一点是较新的版本里“两步聚类”的界面做了调整变量重要性输出的位置有变化旧版本里某些语法参数名称也不完全一样。所以如果你照着网上的教程操作发现找不到某个按钮先确认一下自己的版本号再看对应版本的帮助文档不要怀疑自己操作错了。关于软件获取比较稳妥的方式有三条一是所在学校或单位如果购买了授权通常可以免费申请安装二是官方提供试用版本功能完整适合学习和短期项目三是正版订阅适合商业项目使用。用正版的好处不只是合规更重要的是版本稳定、不会出现参数被改动或者输出结果异常的情况做正式分析时这一点很关键。另外提醒一句语法命令在不同版本之间的兼容性比对话框要好如果你需要在多台机器上复现同一个分析流程建议把整个流程写成语法文件保存下来换机器时直接粘贴运行比重新点一遍菜单可靠得多。7. 完整案例电商用户消费行为分群全流程纸上谈兵不如跑一遍。这一节我用一个模拟的电商用户数据集把前面所有内容串起来从变量设计到运营动作落地走完整流程。数据规模设定为 20000 名用户。7.1 案例背景与变量设计场景是一家做日用快消品的电商平台运营团队想在上线新一轮会员权益之前把用户分成几个群体针对不同群体设计差异化的权益包。可用字段包括用户 ID、最近一次消费距今天数、近 12 个月消费频次、近 12 个月累计消费金额、平均客单价、会员等级普通、银卡、金卡、钻石、所在城市等级一线、新一线、二线、三线及以下。变量设计上我保留四个连续变量最近消费间隔、消费频次、累计消费金额、平均客单价。前三个构成了经典的 RFM 框架的变形客单价补充了消费能力的信息。这里我把“消费频次”和“最近消费间隔”都做了方向统一把间隔天数转换成“活跃度得分”用 365 减去间隔天数这样所有连续变量都是越大越“好”聚类中心的解读更直观。分类变量保留“会员等级”和“城市等级”两个用于二阶聚类。这两个变量都设置了有序属性会员等级从普通到钻石城市等级从三线到一线。验证一下冗余累计消费金额和平均客单价的相关性大约是 0.7没有超过 0.8可以同时保留。消费频次和累计消费金额的相关性约 0.6也在可接受范围内。7.2 数据清洗与标准化实操清洗分四步走。第一步处理缺失。检查后发现累计消费金额有约 2% 的缺失平均客单价有 1.5% 的缺失。缺失比例都不高考虑到消费类字段的分布是右偏的我用中位数填补路径是“转换—替换缺失值—替换为中位数”。第二步处理异常。用箱线图检查累计消费金额发现 37 个用户的消费金额超过正常范围最高的一个达到了均值的 40 倍。人工核查后确认是真实的团购大客户不是数据错误。我的处理方式是把这批用户单独标记为 VIP不参与本次聚类避免它们单独形成一类。第三步统一方向。用“转换—计算变量”新建“活跃度得分”公式是 365 减去最近消费间隔天数。同时把累计消费金额取对数缓解右偏分布对距离计算的影响公式是 LN(累计消费金额)。第四步标准化。路径是“分析—描述统计—描述”勾选“将标准化值另存为变量”把活跃度得分、消费频次、对数累计消费金额、平均客单价四个变量标准化生成四个 Z 变量。7.3 用 k-均值聚类跑出四类用户考虑运营团队只能维护四套权益策略所以 K 值先定为 4。参数设置上最大迭代次数设 50收敛判据设 0.02缺失值处理选“成列排除个案”保存聚类成员和距离勾选 ANOVA 表。跑完之后输出结果显示各类占比分别是 31%、27%、24%、18%分布相对均衡没有出现极端小类。聚类中心表解读如下。第 1 类在活跃度得分上最高、消费频次最高但客单价偏低占比 31%。这类用户是高频低客单的日常刚需用户。第 2 类在累计消费金额和客单价上都是最高活跃度中等占比 18%。这是高价值用户。第 3 类在所有维度上都偏低活跃度得分接近最低占比 24%。这是流失风险用户。第 4 类活跃度得分较高但消费频次和金额都是中等占比 27%。这是有潜力但还没充分转化的用户。ANOVA 表显示四个变量在类间都达到显著水平其中活跃度得分和消费频次的 F 值最大说明这两个变量对分群的贡献最强。7.4 用二阶聚类做交叉验证为了确认这个四类结构是否稳健我把四个连续变量加上会员等级、城市等级跑了一次二阶聚类聚类数设为自动确定。输出结果显示BIC 变化量最大的一步对应的类数是 4和 k-均值的结果一致。聚类质量评分是 0.4属于可用区间。变量重要性排序依次是活跃度得分、消费频次、累计消费金额、会员等级、客单价、城市等级。城市等级的重要性最低说明这个平台的下沉市场特征不明显后续差异化策略可以不按城市划分。接着做交叉表把 k-均值的四类结果和二阶聚类的四类结果对照。整体一致率是 87%其中第 2 类高价值用户的一致率最高达到 95%第 4 类的一致率最低是 76%。第 4 类边界模糊说明这个群体的特征本来就是过渡性的后续运营中可以观察一段时间再决定是否拆细。7.5 从分群结果到运营动作的翻译聚类本身不产生价值产生价值的是分群之后的动作。下面是我给运营团队的建议方案。高频低客单用户31%这类用户忠诚度高但消费能力有限重点是提升客单价。可以做满减凑单引导比如“满 99 减 15”配合品类组合推荐。不要给他们发大额券容易浪费预算。高价值用户18%这类用户是利润核心重点是维护和防流失。建议配置专属客服、优先发货、年度回馈等权益。权益设计上强调“身份感”而不是单纯的折扣因为这类用户对价格的敏感度相对较低。流失风险用户24%这类用户活跃度最低重点是召回。可以先用小额度券测试反应如果两周内没有回访再考虑降低触达频率避免打扰。召回动作的评估指标建议用“召回后 30 天内的复购率”而不是单纯的券核销率。潜力转化用户27%这类用户活跃度不错但消费深度不够重点是促进转化。可以做品类拓展推荐比如根据浏览记录推荐他们还没买过的品类配合首单品类券。这个群体的目标是提升品类宽度而不是单纯提升金额。最后补充一个实操细节聚类结果是有保质期的。用户行为会随时间变化我一般建议每季度重跑一次聚类同时保留历史分群结果做迁移分析看看有多少用户从一类迁移到了另一类。这种迁移矩阵往往比静态的分群结果更有价值能直接反映出运营动作到底有没有效果。我在多个项目里验证下来这套“系统聚类探索、k-均值落地、二阶聚类验证”的组合路径配合每季度重跑一次的习惯基本能覆盖绝大多数业务分群需求。真正花时间的从来不是点菜单而是想清楚变量选什么、类数定几个、分完之后谁来用。把这三点提前想透SPSS 里的那几步操作十分钟就能跑完。
返回列表