cluster 簇

聚类分析作为一种多元统计分析方法(研究多个自变量与因变量相互关系的一组统计理论和方法),其目的在于按照个体或样本的特征将其分类,使得同一类别下的个体具有尽可能高的同质性,而不同类别/组别之间则是尽可能高的异质性

常见应用:
用户分割:将用户划分到不同的组别中,并根据簇的特性而推送不同的信息。
广告欺诈检测:发现正常与异常的用户数据,识别其中的欺诈行为。

image.png
二维维度(2个变量)下的聚类分析图

如上图,数据被分类为三个不同的 ,每个簇有特征。显然,聚类分析是一种无监督学习,是在缺乏标签的前提下的一种分类模型。当我们对数据进行聚类后并得到簇后,一般会单独对每个簇进行深入分析,从而得到更加细致的结果。

常见的聚类方法:
K 均值(K-Means)
谱聚类(Spectral Clustering)
层次聚类(Hierarchical Clustering)

选择合适的聚类算法

最重要的选择标准是 数据量

当数据量超过 5 万条数据以后,K 均值 可能是比较实际的算法,但效果往往不是非常好。K 均值算法最大的优点就是运行速度快,能够处理的数据量大,且易于理解。但缺点也很明显,就是算法性能有限,在高维上可能不是最佳选项。
一个显著的问题信号是,如果多次运行 K 均值的结果都有很大差异,那么有很高的概率K均值不适合当前数据,要对结果谨慎的分析。

方法 A :在数据量不大时,可以优先尝试其他算法。当数据量过大时,可以试试 HDBSCAN。仅当数据量巨大,且无法降维或者降低数量时,再尝试使用 K 均值。

方法 B:对原始数据进行多次随机采样得到多个小样本,并在小样本上聚类,并融合结果。比如原始数据是 100 万,那么从中随机采样出 100 个数据量等于 1 万的样本,并在 100 个小数据集上用更为复杂的算法进行聚类,并最终融合结果。

使用什么变量

举个简单的例子,我们现在有很多客户的商品购买信息,以及他们的个人信息,是否该用购买信息+个人信息来进行聚类呢?

未必,我们需要首先回答最重要的一个问题:我们要解决什么问题?
如果我们用个人信息,如性别、年龄进行聚类,那么结果会被这些变量所影响,而变成了对性别和年龄的聚类。所以我们应该先问自己,「客户购物习惯」更重要还是「客户的个人信息」更重要?

如果我们最在意的是客户怎么花钱,以及购物特征,那就应该完全排除客户的个人信息(如年龄性别家庭住址),仅使用购买相关的数据进行聚类。这样的聚类结果才是完全由购买情况所驱动的,而不会受到用户个人信息的影响。

那该如何更好的利用客户的个人信息呢?这个应该被用在聚类之后。当我们得到聚类结果后,可以对每个簇进行分析,分析簇中用户的个人情况,比如高净值客户的平均年龄、居住区域、开什么车。无关变量不应该作为输入,而应该得到聚类结果后作为分析变量。

如何分析变量的重要性?

如何证明聚类的结果有意义?

主要有三种方法:

A 人为验证是否符合商业逻辑
比如我们对彩票用户进行聚类,得到4个簇

  • 高购买力忠实客户:花了很多钱的忠实客户,他们可能常年购买且花费不菲
  • 普通忠实客户:常年购买,但每次的购买额度都不大
  • 刺激性消费单次购买者:只购买了几次,但是一掷千金
  • 谨慎的单次购买者:只购买了几次,每次买的都很谨慎

B 预先设定评估标准
预先设定一些评估标准,比如簇内的紧凑度和簇间的疏离度,或者定义好的函数如 Silhouette Coefficient。一般来说设定一个好的评估标准并不容易,所以不能死板的单纯依赖评估函数。

C 可视化证明
通过可视化来证明不同簇之间的差异性。因为我们一般有超过两个变量,所以会需要先对数据进行压缩,比如很多流形学习的方法多维缩放(multi-dimensional scaling)。

**