写点什么

提效客户体验管理:结合 K-Means 聚类和 RFM 模型的客户分群

作者:龙国富
  • 2022 年 5 月 22 日
  • 本文字数:3858 字

    阅读完需:约 13 分钟

提效客户体验管理:结合 K-Means 聚类和 RFM 模型的客户分群

公众号:龙国富,人因工程硕士。致力于终身学习和自我提升,分享用户研究、客户体验、服务科学等领域资讯,观点和个人见解。


前面在《应用 RFM 模型客户分群操作篇,提效客户体验管理》中,笔者基于 RFM 模型对一家新零售公司的客户进行了客户分群。我们知道 RFM 模型是客户分群的重要模型之一,它主要基于客户行为进行划分,识别客户价值情况,把客户划分为 8 种类型。


那么问题来了,一定要划分为 8 种客户类型吗?


在实际的客户体验管理过程中,并不是非得要这么做。比如,一些信用卡机构,只会把客户分为 4 种类型:逾期风险高,办理过分期交易;逾期风险中,频繁高额交易;逾期风险中低,频繁小额交易;逾期风险低,分期交易意向低。而某大型银行客户体量庞大,则会将客户分群超过 20 种类型,进一步精细化客户体验管理。


RFM 提供的是一种进行客户分群的思路,至于具体分群数,可以根据客户规模和业务目标而定。


本文将会基于之前新零售公司的数据集,结合 RFM 模型和 K-Means 聚类两种方式,依据客户数据表征的特性,找到合适的分群。


💡 练习数据集和实现代码可以通过公众号后台回复【RFM】获取。


通过本文,你可以了解到:

1、聚类(clustering)

2、聚类基本思想

3、K-Means

4、K-Means 优缺点

5、RFM + K-Means 案例应用

6、小结


1、聚类(clustering)


聚类,就是按照某个特定标准(比如"距离准则"),将一个数据集划分为有意义不同的类型或组(簇),使得相似性尽可能大的客户被划分到同一群,同时在不同群间能表现出明显的差异性。


简言之,就是聚类后,同一类数据尽可能聚在一起,不同类的数据尽量分离。


对于不同客户特性的相似性,会依据观测客户间的距离进行度量,比如数学意义上的欧氏距离(euclidean distance)和基于相关性的距离(correlation-based distance)。


对于聚类和分类,两者之间是有一定的差别的,探讨这个问题需要先引入两个概念,监督学习(supervised learning)和无监督学习(unsupervised learning)


分类会具备明确的规则和条件,像图书馆的藏书分类,按主题,按年代、地域、语言等等。以计算机的思维进行理解,即计算机可以从已知的训练数据集中进行"学习",从而获取对于分类逻辑的判别方法。当汇入未知类别的新数据进行分类时,可以依照训练所得的经验进行自动判断,而这种提供训练数据的过程通常叫做监督学习(supervised learning)。


而聚类没有确切的定义,并不会知道任何样本的类别标号。希望通过某种算法来把一组未知类别的样本划分成若干类别,期间不需要使用训练数据集进行学习。所以,聚类又被称为无监督学习(unsupervised learning)。


两者相比,聚类旨在验证数据之间的相似性或不相似性,更侧重于边界条件。


2、聚类基本思想


先看一个案例。在某年的美国总统大选中,候选人的得票数非常接近。相互竞争的候选人的普选票数 48.7% : 47.9%。这时候,如果有办法让 1% 的选民倒戈,将手中的选票投向另外的候选人,那么选举结果就会截然不同。


实际上,如果有针对性地妥善加以引导,少部分选民就会转换立场。尽管这类选举者占的比例较低,但当候选人的选票接近时,这些人的立场无疑会对选举结果产生非常大的影响。


首先收集选民的基本信息,听取选民声音中反馈满意或不满意的信息,因为选民关注的重要议题,很大可能左右选民的投票结果。


然后,将这些信息输入到某个聚类算法中。对聚类结果中的每一个群(最好选择最大群 ), 精心构造能够吸引该群选民的消息。


最后,开展竞选活动并观察上述做法是否有效,不断迭代调整,这就是聚类的大致原理。


对于一堆散落的点,先确定这些散落的点最后需要聚成几类,然后挑选随机挑选几个点作为初始中心点,再然后依据预先定好的启发式算法(heuristic algorithms)给数据点做迭代重置(iterative relocation),直到最后到达“类内的点都足够近,类间的点都足够远”的目标效果。


启发式算法主要包括了 K-Means,及其变体 K-Medoids、K-Modes、K-Medians、Kernel K-means 等算法。


本次将会选择最为经典的 K-Means 聚类+ RFM 模型,其他算法会在后续文章中更新。


3、K-Means


K-Means 是一种迭代求解的聚类分析算法,由于它可以发现 K 个不同的群, 且每个群的中心采用群中所含值的均值计算而成,也称之为 K-均值。其中,群数 K 须由用户指定。



👆🏻 K-Means 聚类过程图解


算法流程如下:

1)随机选择 K 个初始点作为质心(不必是数据中的点),每个对象初始地代表了一个簇的中心;

2)对剩余的每个对象,根据其与各群中心的距离,将它赋给最近的群;

3)重新计算每个群的平均值,更新为新的群中心;

4)不断重复 2、3,直到数据集中的所有点都距离它所对应的质心最近时结束。


4、K-Means 优缺点


K-Means 优点在于原理简单,容易实现,聚类效果好,对于大型数据集也是简单高效、时间复杂度、空间复杂度低。


当然,也有一些缺点。需要预先设定 K 值,对最先的 K 个点选取很敏感;对噪声和离群值非常敏感;只用于 numerical 类型数据;不能解决非凸(non-convex)数据。受离群值影响大,最重要是数据集大时结果容易局部最优。


每种类型的算法都会有它的特点,都有侧重解决问题的面向。在应用之前,先理解不同算法的内在逻辑、作用、应用场景,结合实践经验,选出最合适的算法模型来达到业务目标。


5、RFM + K-Means 案例应用


💡 练习数据集和实现代码可以通过公众号后台回复【RFM】获取。


笔者使用的是 R Studio 进行案例演示。如果你有其他的源数据,要想在 R Studio 中进行聚类分析,应该按照如下要求准备数据:


1) 行必须是观测值(个体或样本),列必须是变量。

2) 任何缺失数据都必须删除。

3) 必须对数据进行标准化。


步骤 1:

install.packages("factoextra")install.packages("cluster")
复制代码

数据预处理完后,如果没有安装 factoextra(用于对聚类结果进行可视化) 、cluster(用以对数据进行聚类计算),需要先进行安装。


步骤 2:

#载入包library(factoextra)library(cluster)#导入已经处理好的数据集 → RFM_Dataset.csvrfm_data <- read.csv("/Users/guofu.long/Desktop/RFM_Dataset.csv", header = TRUE)data_1 <- rfm_data[,1:4]head(data_1)#查看数据行列数、字符类型、描述性统计量dim(data_1)str(data_1)summary(data_1)
复制代码

这里使用的 RFM_Dataset.csv 数据是在《应用 RFM 模型客户分群操作篇,提效客户体验管理》中处理好 RFM 对应值。导入数据后,对数据进行适当的观察,比如数据行列数、字符类型、描述性统计量等。


步骤 3:

data_2 <- data_1[,2:4]#数据标准化data_3 <- scale(data_2)head(data_3)
复制代码

由于同一个数据集合中经常包含不同类别的变量。这样会导致这些变量的值域可能大不相同,如果使用原值域将会使得值域大的变量被赋予更多的权重。


针对这个问题,标准化可以使得不同的特征具有相同的尺度,消除特征之间的差异性。当原始数据不同维度上的特征的尺度(单位)不一致时,需要标准化步骤对数据进行预处理。


📢 RFM_Dataset.csv 数据集笔者其实已经将尺度转化统一计分方式,为了凸显这个步骤的重要性,特别再加以说明。


R 语言中 scale 函数提供数据标准化功能,指中心化之后的数据在除以数据集的标准差,即数据集中的各项数据减去数据集的均值再除以数据集的标准差。


特别需要注意 scale 函数不接受含有字符串的数据框,使用前要进行转换。


步骤 4:

#设置随机数种子,保证可重复set.seed(1234)#手肘法,确定最佳聚类数目fviz_nbclust(data_3, kmeans, method = "wss") + geom_vline(xintercept = 3, linetype = 2)
复制代码

为保证实验可重复进行,需设定随机数种子。


factoextra 包中包含许多用于聚类分析和可视化的函数,包括:



利用“手肘法”,找到最佳聚类数目。随着聚类数 K 的增大,样本划分会更加精细,每个群的聚合程度会逐渐提高,那么误差平方和 SSE 自然会逐渐变小。


即随着聚类数目增多,每一个类别中数量越来越少,距离越来越近,因此 WSS 值肯定是随着聚类数目增多而减少的,所以关注的是斜率的变化



👆🏻 聚类数趋势图


在 WWS 随着 K 值的继续增大而减少得很缓慢时,认为进一步增大聚类数效果也并不能增强,也就是说 SSE 和 K 的关系图是一个手肘的形状,存在的这个“肘点”就是最佳聚类数目从 1 类到 3 类下降得很快,之后下降得很慢,所以最佳聚类个数选为 3。


步骤 5:

#进行聚类result <- kmeans(data_3,3)
复制代码

💡 kmeans 函数还提供了像 iter.max(最大迭代次数)、 nstart(起始随机分区的数量)等等,有需要可以根据函数用法自行调整,这里使用的是默认的参数设定。


步骤 6:

#可视化聚类fviz_cluster(result, data = data_3)
复制代码

使用 factoextra 包生成的聚类后的分布图。



👆🏻 聚类划分图


步骤 7:

#聚类结果导出result_output <- data.frame(data_1[,1:4],result$cluster)write.csv(result_output,file="/Users/guofu.long/Desktop/result_output.csv",row.names=T,quote=F)
复制代码

聚类结果列表。



👆🏻 客户分群匹配列表


6、小结


最后,利用 K-Means 聚类算法和 RFM 模型得到客户分群只是开始,由于聚类(即数学上的相似性)所产生的客户分群,分群本身不能直接产生价值,无论分群用的是啥模型,最后的结果也只是一个数据标签而已。还需要结合数据本身的特点和业务特性进行意义赋予,才能够产生与之匹配的运营行动方案。


观察聚类后被分为 3 种类型的公司客户,群体表现上可以看出,3 种类别可以划分为【类别 1 : 类别 2 : 类别 3 = 高价值 : 中价值 : 低价值】。


客户体验管理依据对应的类型采取行动方案。


本文提供的仅仅是区别于单一使用 RFM 模型进行客户分群的思路,希望对你有所启发。


点击这里,可以加我微信,进入客户体验交流群~



本文完.

发布于: 刚刚阅读数: 6
用户头像

龙国富

关注

关注公众号:龙国富。 2018.04.20 加入

做客户体验和SaaS的~

评论

发布
暂无评论
提效客户体验管理:结合 K-Means 聚类和 RFM 模型的客户分群_RFM_龙国富_InfoQ写作社区