京公网安备 11010802034615号
经营许可证编号:京B2-20210330
CDA数据分析师 出品
作者:CDA教研组
编辑:JYD
聚类算法是属于无监督的机器学习方法;机器学习里把算法分为有监督和无监督的算法,所谓有监督,即我想研究的数据集有目标数据,白话点就是建模里大家常说的那个y,如我想基于公司数据库已经有的相关数据集训练一个模型,用来预测客户是否会流失,从数据库中得到的数据集里是有一个特征(一列)是客户是否流失的,可能1代表流失,0代表不会流失;但业务的初期或者数据库中没有该特征,即手中无y,那该怎么办?如对客户进行价值分群,此时对于这种目标明确,但确实缺少y这一列这种分析需求,可考虑聚类算法来实现。
首先简单阐述一下聚类算法的思想,其逻辑是计算观测值之间的距离,然后根据距离来进行分组(簇),目的是组内之间的距离尽可能小,而组与组之间的距离大(即差异大)来达到分类(分组)的目的,得到的结果可以用来做数据挖掘。
回到我们的标题,我们说聚类算法是无监督的机器学习,没有y,那怎么还说心中要有y呢?我们看下面的一个例子。
图1
如图1给出一些弹珠,我们的需求是将这些不同差异的弹珠做聚类分析,可这些弹珠不同的差异太多了在不同的角度上,如果你心里没有目的,是很难将这些弹珠做好聚类分群的。
如果我们的目的是根据弹珠的体积大小这个目的进行分群的话,可能会聚成三类,即图2里的大中小三种体积;
图2
如果我们的需求是根据弹珠的透明程度,可能会分成图3所示的2类:透明的一类和不透明的一类;
图3
那如果我们的关注点是弹珠的颜色,可能会成为图4所示的几类,红色系、黄色系、蓝色系和紫色系等;
图4
上面的例子我们可以看到,即使对于同一笔资料,根据需求的不同,聚类分群的结果也不太一样,如果一个商业需求,分析师没有目的或者会错需求的话,那挖掘出来的结果大概率是不会满意的。
聚类算法要解决三个问题:
1.如何表示观测值之间的相似性
2.如何根据这些相似性将类似的观测值分到同一个类
3.对所有的观测值分好类之后,如何对每一个类(群、组、簇这些说法都可)进行特征描述
对于第一个问题,怎么计算观测值之间的相似性呢,计算距离,常见的计算距离方法有曼哈顿距离、欧式距离。
图5是曼哈顿距离的公式和演示
图5
曼哈顿距离,即算直角距离,如图5中object1和object2两个观测点的虚线(直角)距离就是曼哈顿距离,R是指相应特征的范围;图6是一个计算的例子。
图6
两个观测值,分别有年纪和收入两个维度,对其使用曼哈顿距离计算其距离为0.4。
下面要讲的另外一种距离是欧式距离,欧式距离我们很早就接触过,比如两个点在二维坐标轴上x(x1,x2)和y(y1,y2)他们的欧式距离平方就是(x1-y1)^2+(x2-y2)^2;
图7是欧式距离的公式,欧式距离是Minkowski距离的一种推广。
图7
这就是使用计算距离的公式来表示观察与观察之间的相似性。
那么第二个问题:如何根据这些相似性将类似的观测值分到同一个类?这就是涉及到聚类的算法。
聚类算法根据样本的不同处理会有很多种方法,这里会介绍层次聚类和基于划分聚类里的kmeans聚类(该两种聚类商业上经常用)。
层次聚类,也有译成系统聚类,指的是形成类相似度层次图谱,便于直观的确定类之间的划分。该方法可以得到较理想的分类,但是难以处理大量样本。
层次聚类的算法步骤是:
1.计算点与点之间的距离
2.将最近的两个观测点聚为一类,将其看做一个整体(类)计算与其他类之前的距离
3.一直重复上述过程,直至所有的观测被聚为一类
如图8是系统聚类的一个聚类过程演示:首先计算点与点之间的距离,如我们计算点1和点3之间的距离,发现其两个点相对来说较近,我们把该两个点化为一类叫类1,我们发现点2和点5距离第二近,所以也合并起来归为一个类2,接着计算发现,点4与点5较为近,但是点5已经和点2合并了,所以呢点4、点2和点5合并成类3,接着点与点的距离矩阵告诉我们点1和点2的距离为第四近,但是点2、5、4已经是类3了,点1也属于类1,所以类1和类3合并成类4,类4再和点6合并为最后的类5。
图8
分层聚类到底分几个类呢,往往是通过层次树(树形图)来结合业务来决定的,图9是上面演示聚类结果的层次树。
图9
层次树的x轴是观测点,y轴是距离,聚类分析的目的是组内之间的距离小,组与组之间的距离尽可能大(差异明显),从y轴画一条平行于x轴的直线,如我在y轴0.1到0.15之间画一条平行x轴的直线,与层次图有4个交点,意思是说分成了4个类(组),且这时组间距离是最大的(有4个交点的上平行线和下平行线之间的距离),1和3分成一组,2和5分成1组,4,6单独一个组,这时算法角度给出的最优分组,但是也要结合业务场景,比如算法角度给出分成20组组间差异最大,但是分成20个群进行针对性营销显然大部分业务是不合适的。
我们刚才说,近的点划分到一个类,那么怎么计算类与类之间的距离?如果把各观测点圈在一个椭圆里的话,即怎么去计算两个椭圆的距离?
计算类与类之间的距离方法也有很多,如平均链接法、重心法、Ward最小方差法;下面只介绍用的频率高的Ward最小方差法。
所谓Ward最小方差法,是思想是使各个观测之间的离差平方和最小。
图10是该方法的计算公式,其特点是较少受到异常值的影响,适用范围广。
图10
图11数据演示怎么计算各观测之间的离差平方和
图11
以上图为例,一开始如果将AB合成一组,那么此时SS的值是
如果将CD合成一个组,其SS值是
当合并成3组时,如果是AB、CD和E的组合,那么SS的值是1+4+0=5,以同样的计算方式,可以得到不同的分组情况和相应的SS值,如下图。
我们找出SS值最小的分组,上图看到分成4群即AB分成一类,C、D、E单独一类离差平方和最小(为1),分成3群时最小的SS值是3.5,其他情况下的分群数量最小SS值也可看出。
接下来我们讲层次聚类的建模流程。
1. 针对业务需求,我们select到相关的数据集,通常要经过处理才能进行分析:
a) 缺失值
b) 异常值(极大或极小)
c) 分类变量需要转化为哑变量(0/1数值)
d) 分类变量类别过多
当然有些算法允许有缺失值、异常值等资料,如决策树,但聚类不支持这些情况,所以要处理。
2.要做变量标准化
变量的量纲的不一样引起计算距离的偏差,因此要统一,统一的方式有两种方法:
3.不同维度的变量,相关性尽量低
图12演示了大部分公司业务普遍性的变量分类模式,如图12,将数据分成购买记录数据(如消费频率、消费的间隔周期等)、消费习惯行为等数据(如消费的区域)、第三方行为数据(如网络浏览偏好等)。
图12
层次聚类的一大优点是可以结合聚类可视化来对聚类结果进行业务上的理解和验证,图13是几个省份的经济数据聚类结果,肉眼观察,如果你分成4的话,那上海、广东是单独一类,天津、广西、福建、辽宁、河北是另外一类,浙江、江苏、山东、是第四类,那么现在看看算法的聚类跟我看左图的肉眼观察是否一致,如果一致,那说明算法在解释上也是很好的;
不过看右边的树形图展示,其两类是建议的,即福建、辽宁、河北、天津、广西是一类,其他省份为另外一类,因为这样划分类与类之间的距离最长(差异最大),这里根据你的聚类观察结合业务需求分成4类,或者根据算法的建议分成2类且能在商业情景下能够得到解释也可(这里根据当时各省的情况,上海跟山东划分一类应该不合理的,上海是一线城市,这里分成4类合适点)。
图13
值得一提的是层次分类可以得到较为理想的分类数量,但是难处理大量样本数据。所以我们需要讲另外一种聚类方法。
第二种要讲的聚类是叫kmeans聚类,也就是我们常说的k均值聚类。
1.选择数据,初始化中心点
2.将离中心点较近的点划分到相应的类
3.更新类的中心
4.重新将离数据近的点划分到相应的类
5.反复进行上面3,4步骤,直到分类的结果不再变化
图14是该算法一个简单的演示。
图14
首先在我需要分类的数据上随机选5个中心点(即K=5),然后计算观测点与中心点的距离,划分到相应的中心点所属的群里,接着不用第一次设置的中心点,现在重新设置5个中心点的位置,继续计算观测点与现在中心点的位置,基于远近划分到相应的5个不同群中,反复重复这种设置中心点,划分数据这种操作,直到数据的划分情况不再发生变动。
2.变量标准化
3.不同维度的变量,相关性尽量低
4.确定合适的分群个数
不过在K值选择上主要推荐轮廓系数(Silhouette Coefficient),并结合以下注意事项:
图15是轮廓系数的公式
样本轮廓系数
整体轮廓系数
图15
其中a(i)表示观测i到同一类内观测点距离的均值,b(i)表示观测点i到不同类内所有点距离的均值的最小值,S(i)表示观测i的轮廓系数,若a(i)小于b(i)则说明该观测点在聚类的类中是合理的,此时a(i)/b(i)的值趋向于0,那么S(i)越接近1,聚类的效果越好;若a(i)大于b(i),说明观测点还不如在别的类中,聚类的效果不好,此时b(i)/a(i)的值趋向于0,从而S(i)趋向于-1,若a(i)=b(i),则不能判断观测点i在哪个类效果中较好,此时S(i)为0,S(i)的值域-1到1,其值越小表示聚类的效果越差,其值越大代表聚类效果好,将所以观测点的轮廓系数值相加求均值,就可以得到整个已聚类数据集的轮廓系数,同样,衡量其聚类好坏的标准与单个观测点的轮廓系数的衡量方式是一致的。
不过这里还需注意一下,Kmeans处理大量样本聚类有优势,但聚类的结果展示上不如层次聚类有好理解和可解释性,所以使用kmeans聚类后,所做的聚类事后分析,往往要借助决策树形图来辅助理解。
5.聚类事后分析
聚类分好后需要拿来给营销相关人员看,这就需要分类的结果可解释性好:里面到底是怎么根据不同维度来将数据分群的,然后跟业务经验得到验证;这里借助决策树的可视化(决策树图)来实现,我们知道决策树是有监督的学习方法,这里的处理就是把上面聚类算法得到的类别看成目标y,根据之前的各维度特征来使用决策树算法。如图16是一个先聚类后再用决策树的一个可视化结果展示。
图16
怎么看决策树的可视化图呢,从上到下,最上面的叫根节点,其中value是一个含四个元素的列表,意思是分成4类,往下的剪头叫拆分,直到不能再拆分的每个“矩形”叫叶子节点,中间衔接的“矩形”叫决策节点;
那怎么从决策树形图看出分类结果的好坏以及对每个群进行描述达到可解释的目的?
我们看value里是否其中一个元素的数值要远远大于其他的,如在第三层,value=18750远远大于47,1060,29,意思是说有18750个点被划分到了class为2的类里,这一层其他class类的划分情况也是很“干净”的,所以决策树在第三层的时候(划分4类)分类效果就很好了;
那么怎么解读呢,比如class2的用户群特点是:不用柜台(TBM<-0.07)、也不用ATM POS机(ATM POS<=-0.374),那么显然这类客户什么都不用,说明在该银行业务当中,class2这类群体是流失客户,再看看class0这类群体特征:不用柜台,但是用POS机,很可能是这些喜欢方便,取款金额频繁,取款金融少等这些特点的人群,其他两个类同样可以根据这种树形图来解释。
回答第三个问题,对所有的观测值分好类之后,如何对每一个类进行特征描述?
聚类的结果要详细的作描述性统计,甚至作抽样的客户访谈,以了解客户的真实情况,因此让业务人员满足客户管理的目标,是聚类的终极目的。
上述建模流程是聚类的一般性流程,其实就应用角度来说,快速聚类两种运用场景是:
1. 发现异常情况:如果不对数据进行任何形式的转换,只是经过中心标准化或级差标准化就进行快速聚类,会根据数据分布特征得到聚类结果。这种聚类会将极端数据聚为几类。这种方法适用于统计分析之前的异常值剔除,对异常行为的挖掘,比如监控银行账户是否有洗钱行为、监控POS机是有从事套现、监控某个终端是否是电话卡养卡客户等等。
2. 将个案数据做划分:出于客户细分目的的聚类分析一般希望聚类结果为大致平均的几大类,因此需要将数据进行转换,这种方法适用场景包括客户消费行为聚类、客户积分使用行为聚类等等。
文章的最后,我们再来总结一下本文的内容,就算法角度,讲了层次聚类和kmeans聚类,就建模层面来说,通常的流程是:变量归一化=>分布转换=>主成分=>聚类,归一化我们是希望剔除掉不同量纲,范围的影响(因为要计算距离),而分布转换这个步骤是因为我们希望将客户均匀的分为若干类,在变量上,我们希望不同维度下的变量,相关性程度较低,对于多维的数据集来说,可以使用主成分分析来将变量进行降维;而使用聚类算法得到分群数量需要进行事后分析,来跟业务经验进行验证,达到可解释且可进行客户画像的目的。
如果应用需求是发现异常情况下的聚类,其流程为变量归一化=>主成分=>聚类,因为这种需求会根据数据分布特征得到聚类结果,未分布转换情况下,这种聚类会将极端数据聚为几类,从而帮助我们对异常行为进行挖掘。
数据分析咨询请扫描二维码
若不方便扫码,搜微信号:CDAshujufenxi
一、问题:为什么 ID 会"断号" 很多刚接触 MySQL 的同学都会有一个困惑:表里的主键 ID 是自增的,删了中间几行数据之后,ID 变 ...
2026-10-22一、问题场景:为什么会重复 JOIN 同一个子查询 在写复杂 SQL 时,经常遇到这种需求:同一张表或同一个聚合子查询,要和主表关联 ...
2026-10-22人力资源专员是HR体系的执行入口。招聘信息发布、简历初筛、面试安排、考勤汇总、入离职手续、劳动合同与档案管理,大多由这个岗 ...
2026-10-22人力资源经理问“必学技巧”,真正要解决的不是知识清单不够长,而是时间有限、业务催得紧,学完却用不上。更有效的路径是:先用 ...
2026-10-22内容营销岗位的核心任务,不是“把文案写得更漂亮”,而是围绕目标受众,用持续的内容供给影响认知、推动转化并沉淀复购。它至少 ...
2026-10-22理财经理培训课程很多,难的是判断“先学什么、后学什么、学完能做什么”。与其按课程名称罗列,不如先看岗位任务:客户分层与维 ...
2026-10-22理财经理的知识结构,可以先用一句话概括:合规与产品知识决定“不出错”,客户经营与资产配置决定“够不够专业”,市场研判与数 ...
2026-10-22经济学背景做数据分析,优势不在工具,而在问题意识:供需如何相互作用、成本与收益如何权衡、变量之间是相关还是因果。真正的缺 ...
2026-10-22需要,但要把“需要”理解准确。经济学本身就在处理数据:GDP、物价、就业、企业营收、问卷调研,都是经济分析的原料。真正的区 ...
2026-10-22经济学分析能力不是单一技能,它至少由三层构成:把现实问题转成可检验假设的理论框架能力、用数据与统计方法验证假设的工具能力 ...
2026-10-22金融分析师的知识提升,先补的不是更多模型,而是让结论可复核的底层能力。按任务顺序,大致是四层:财务与业务理解、指标口径管 ...
2026-10-22金融分析师的“通用技能”,指换到不同机构、不同行业组仍用得上的底层能力,而非某家公司内部系统的操作经验。按任务拆,日常要 ...
2026-10-22先给结论:数据分析证书不是金融分析师的准入条件,招聘方也不会因为一张证书就直接判断你能做分析。要不要考,取决于你当前任务 ...
2026-10-22金融分析师的核心技能,不是“会看K线”或“会讲宏观”,而是能把一家公司、一个行业或一类资产,转化为可核查的数据判断与书面 ...
2026-10-22产品经理的知识提升,不是把需求文档、原型、SQL、数据分析、项目管理都学一遍,而是先对准目标岗位的真实任务,找出自己最缺的 ...
2026-10-22产品专员提升工作知识,最有效的方式不是先囤课程,而是围绕日常交付的四件事来补:需求调研与优先级判断、原型与PRD表达、竞品 ...
2026-10-22产品运营专员提升个人能力,常见误区是先把Excel、SQL、Python列成一张学习清单,然后从第一个工具开始学。更有效的做法是先回答 ...
2026-10-22产品运营的能力提升,最怕从“课程目录”出发:今天学增长模型,明天背SQL语法,学完却说不清自己负责的功能为什么激活率低。更 ...
2026-10-22产品经理的技能和影响力不是两条分开的赛道。技能决定你能不能把问题分析清楚、把方案设计对;影响力决定你的判断能否被团队接受 ...
2026-10-22产品经理要学的数据分析能力,不是“会写SQL”或“会用BI工具”这么简单。更准确地说,是围绕需求评估、功能迭代、指标监控、实 ...
2026-10-22