提效客户体验管理:结合K-Means聚类和RFM模型的客户分群
前面在《 应用 RFM 模型客户分群操作篇,提效客户体验管理 》中,笔者基于 RFM 模型对一家新零售公司的客户进行了客户分群。我们知道 RFM 模型是客户分群的重要模型之一,它主要基于客户行为进行划分,识别客户价值情况,把客户划分为 8 种类型。
那么问题来了,一定要划分为 8 种客户类型吗?
在实际的客户体验管理过程中,并不是非得要这么做。比如,一些信用卡机构, 只会把客户分为 4 种类型 :逾期风险高,办理过分期交易;逾期风险中,频繁高额交易;逾期风险中低,频繁小额交易;逾期风险低,分期交易意向低。而某大型银行客户体量庞大,则 会将客户分群超过 20 种类型 ,进一步精细化客户体验管理。
RFM 提供的是一种进行客户分群的思路,至于具体分群数,可以根据客户规模和业务目标而定。
本文将会基于之前新零售公司的数据集,结合 RFM 模型和 K-Means 聚类两种方式,依据客户数据表征的特性,找到合适的分群。
通过本文,你可以了解到:
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 案例应用
笔者使用的是 R Studio 进行案例演示。如果你有其他的源数据,要想在 R Studio 中进行聚类分析,应该按照如下要求准备数据:
1) 行必须是观测值(个体或样本),列必须是变量。
2) 任何缺失数据都必须删除。
3) 必须对数据进行标准化。
步骤 1:
install.packages( "factoextra" ) install.packages( "cluster" )
数据预处理完后,如果没有安装 factoextra( 用于对聚类结 果进行可视化 ) 、cluster( 用以对数据进行聚 类计算 ),需要先进行安装。
步骤 2:
#载入包 library(factoextra) library(cluster) #导入已经处理好的数据集 → RFM_Dataset.csv rfm_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 包 中包含许多用于聚类分析和可视化的函数,包括:
函数 | 功能 |
---|---|
dist(fviz_dist, get_dist) | 距离矩阵的计算与可视化 |
get_clust_tendency | 评估聚类趋势 |
fviz_nbclust(fviz_gap_stat) | 确定最佳的聚类数 |
fviz_dend | 树状图的增强版可视化 |
fviz_cluster | 聚类结果的可视化 |
fviz_mclust | 基于模型的聚类结果的可视化 |
fviz_silhouette | 聚类中的轮廓信息的可视化 |
hcut | 分层聚类的计算并剪切树 |
hkmeans | 分层的k均值聚类 |
eclust | 聚类分析的可视化增强版 |
利用“手肘法”,找到最佳聚类数目。 随着聚类数 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 模型进行客户分群的思路,希望对你有所启发。