实操AI算法:K-Means用户分群应用案例

2019-04-02

本文介绍了如何用AI聚类算法中的K-Means来对用户进行分群,以及在过程中需要留心的几个K-Means算法注意点。

从产品策划的角度看,不同的用户对产品可能有着不同的需求,所以需要针对不同的用户设计不同的产品功能。从产品运营的角度看,不同的用户对于产品的贡献度不同,需要区别对待。于是我们需要对用户进行分群,而在过去,我们通常采用某种规则来对用户进行分群,例如经典的RFM模型。

基于规则的分群方法都需要由专家来定义规则,但是当用户行为发生变化的时候,规则往往很难及时适应。为了解决这个问题,我们可以尝试使用Ai聚类算法中的K-Means来对用户进行分群。

一、算法背景

K-Means又称为K均值聚类,在1967年由美国加州大学的詹姆斯·麦昆教授首次提出(James·B·MacQueen),但类似的算法思想可以追述到1957年的劳埃德算法(Lloydalgorithm)。

劳埃德算法的思想是先把所有需要分组的数据先随机分为k个初始化组(K可以是任意不大于样本数的正整数),然后计算每组的中心点,根据中心点的位置把数据分到离它最近的中心点,并根据最近原则重新分组。以此循环不断的计算中心并重新分组,直到结果收敛,即数据不再改变分组为止。

K-Means算法则是在劳埃德算法的基础上进行的改良,将第一步随机分为K个初始化组改为选取K个点,点的位置可以随机,也可以为了减少计算量而人工指定某些特定的点,后续流程没有变化,依然是循环计算每个数据到中心点的距离并重新分组直到结果收敛,以下是算法的流程图:

零编程实操AI算法:K-Means用户分群应用案例

二、算法详解

K-Means算法理论上可以支持任意维度的数据,但为了方便作图演示,我们用一个简单的二维数据作为例子来看一下。

假定我们有以下4个数据需要进行分组:

零编程实操AI算法:K-Means用户分群应用案例

首先我们需要选择K个点作为初始中心,每一个点代表一个聚类中心,从图上我们可以看出应该分成2类,所以K的值定义为2,分别是点A和点B。然后随机给这两个中心点赋值,我们就暂定为A(0,0)和B(9,12)。

零编程实操AI算法:K-Means用户分群应用案例

第二步,对于样本中的数据对象,根据点与点的距离公式计算他们与聚类中心的欧氏距离,按距离最近的准则将他们分到距离他们最近的聚类中心所对应的类。

零编程实操AI算法:K-Means用户分群应用案例

计算后的结果如下,数据1和数据2距离A点更近,数据3和数据4距离B点更近,所以将数据1和2划为A类,数据3和4划为B类。

零编程实操AI算法:K-Means用户分群应用案例

第三步,更新聚类中心位置,将每个类别中所有数据的均值作为该类别的聚类中心,那么A组的聚类中心为A=((2+1)/2,(2+4)/2)=(1.5,3),B组的聚类中心为B=((7+8)/2,(6+10)/2)=(7.5,8),如下图所示。

零编程实操AI算法:K-Means用户分群应用案例

根据新的聚类中心,重复进行第二步的计算,计算后的结果如下:

零编程实操AI算法:K-Means用户分群应用案例

我们发现数据与新的聚类中心点的距离变近了,但是分组的情况并没有改变,依然是数据1和2为A组,数据3和4为B组,说明算法已经收敛,可以结束循环。如果在这一步的聚类结果与之前的结果还有差异,那么就还需要返回第二步继续进行循环计算,直到结果不再改变为止。

在上面这个例子中,通过肉眼观察,我们可以通过人工判断K值为2比较合适,但是如果数据量非常庞大,人工就很难判断了,这也是K-Means算法的一个缺点——需要由人工指定K的值。

那么是否有方法可以帮助我们判断K应该为多少比较合适呢,当然有。我们可以通过手肘法来确定K的个数,手肘法的核心指标是SSE(Sum of the Squared Error,误差平方和),计算公式如下:

零编程实操AI算法:K-Means用户分群应用案例

SSE是计算每个数据与聚类中心的距离平方和,当和越小说明聚类中心越接近分组真正的中心点。K当分组数量越多时,SSE的值越小,所以当分组数量接近最佳分组数之后,再增加K的数量会让SSE下降幅度变小,随着K的不断增大而逐渐平缓,形成一个拐点,拐点对应的K值就是数据真实的分组数,因为函数的形状非常像一个手肘,所以才称为手肘法,如下图所示,当K取值为4之后的趋势明显变小。

零编程实操AI算法:K-Means用户分群应用案例

接下来我们用一个实际的案例,来看一下在工作中如何应用K-Means算法。

三、实操案例

通过爬虫获取2018年2月1日到2019年2月1日,在人人都是产品经理社区上发表文章的作者及对应文章的阅读量,收藏量和点赞量。

零编程实操AI算法:K-Means用户分群应用案例

业务目标是使用K-Means算法对作者进行分群,使用的工具是Excel+SPSS,我们先在Excel中进行数据清洗,然后在SPSS中进行聚类。

第一步,我们需要将作者去重,然后将每个作者1年内发表的所有文章所获得的阅读量、收藏量、点赞量累加起来

我们新增一个sheet2,将作者列复制到sheet2中,然后选中复制后的作者列,点击“数据”tab下的“删除重复项”按钮,每位作者只保留唯一数据。

零编程实操AI算法:K-Means用户分群应用案例

第二步,将原始数据中完整的作者列和数据复制到新sheet的I到L列,并从B列开始分别创建汇总阅读量,汇总收藏量和汇总点赞量3个新的数据列。选中B2单元格,在输入框中输入累加公式:=SUMIF(I:I,A2,J:J),然后按回车得到求和结果。

SUMIF需要输入3个参数,分别是条件区域,求和条件,实际求和区域。意思是在条件区域内如果发现了符合求和条件的数据,则对实际求和区域中的数值进行求和。