文章期号:20190616
抓住主要客户,合理配置资源是成功的关键
作者:李璐
学校:昆士兰大学 信息系统和会计双专业在读
一、聚类分析回顾
前面的文章已经提到过,聚类分析其实就是近朱者赤。
通过计算相似性,将一个数据集中的数据分为人为规定的几个“簇”,也就是几类。比较常见的K均值聚类算法中的K就是这个簇数。
从客户管理的角度来看,聚类算法对于公司对客户的分类有很大的帮助。不过要注意的是,这种算法不是无往不利的,他有两大主要缺陷:其一是有些数据集本身的特征并不适合用这种方法,其二是通过算法得出的几个分类很难命名和解读。
二、客户关系管理
不同的公司对客户关系有不同的管理方法。那些收集了大量客户信息的互联网公司暂且不论,因为他们对大数据的挖掘可以说是达到了令人发指的地步。本文主要讨论的是那些相对传统的,只记录简单的客户交易数据的公司。对于这种公司,相对主流的客户管理办法是客户终生价值(Customer Lifetime Value, CLV)和RFM模型。
CLV讨论的是客户在未来可能为公司带来的价值,RFM则是从三个维度来看这个客户过去对公司的贡献。CLV的计算方法有很多,不同公司因经营模式等问题会采用不同的计算方法。RFM则相对固定一些,其中:
- R=Recency 代表该用户最近一次交易;
- F=Frequency 代表用户交易频率;
- M=Monetary 代表用户平均单次交易金额。
本文将采用RFM和CLV相结合的方式对某公司数据进行分析。
三、聚类分析与客户关系
本文将要介绍的是如何使用聚类算法将计算得出的客户RFM价值分类,再用CLV给不同类别的客户进行排名聚类,这样公司就能因地制宜,因人而异,合理配置资源来优化不同CLV客户群的管理方法。
四、数据集获取
本文使用的是UCI网站上的一个英国小型在线商城的用户交易数据。有兴趣的同学们可以从这个链接下载:https://archive.ics.uci.edu/ml/datasets/Online Retail#
为方便读者阅读,本文将列名翻译了一下:
整个数据集包含了541,909行数据。经过一系列的观察,在这个数据库中发现了各种无用数据,如财务调整、存货损毁等。最终清理出去近十四万行,所剩即将作为本文的分析对象。
五、RFM的计算
计算后,我们得到的是4,334个客户的RFM数据总结:
好了,将这个数据导入R Studio工具,运用R语言开始正式分析。
六、分析过程
6.1,数值范围的统一
简单做一个点阵图,可以看到不同的变量有不同的数值范围,非常不利于理解和造成成分的偏移,需要统一数据的量纲:
所以,我们通过算法,将每一列的数值调整为从0到10。具体实现方法,是先定义一个公式,再将公式应用于整个数据集,其中公式为:
在R语言中,则这样实现的:
代码语言:javascript复制# create function to calculate the score of RFM values
score <- function(x){return(((x-min(x))/(max(x)-min(x)))*10}
# apply the function to the dataset
RFMscore <- as.data.frame(lapply(Data[2:4],score))
这种方法能在保证数据分布规律不变的基础上,统一数值范围。
6.2,K值的确定
Kmeans中的K有很多方法可以确定。
有的人会比较喜欢通过枚举法,即一个一个的试,看哪一个图比较合理,因为这种分类是没有所谓对错的,最终结果是要看分析者能不能从中的到对公司有益的知识。
本文采用的“胳膊肘方法”:
代码语言:javascript复制noc <- (nrow((RFMscore)-1)) * sum(apply(RFMscore,2,var))
for(i in 2:15)
noc[i] <- sum(kmeans(RFMscore, centers=i)$withinss)
代码语言:javascript复制plot(1:15, noc, type="b", xlab= "number of clusters",
ylab= "within groups sum of squares")
这个图表示的是随着簇数的增长,其:组内平方和的降低。
因为这个图长得像人的胳膊肘,所以被亲切的成为胳膊肘方法(Elbow Method)。
其选取方法也比较简单实用,通过这种图,我们可以选取四个或者五个作为本案例的簇数——因为在簇数大于4之后,其组内平方和趋于稳定,再细分下去也没有必要了。
6.3,K均值聚类
R语言实现K均值聚类计算以及可视化处理:
代码语言:javascript复制# K为5的聚类(很简单是不是)
kmeans(RFMscore,5)
# 提出分类的值
RFMCluster <- kmeans(RFMscore,5)
RFMCluster$cluster <- as.factor(RFMCluster$cluster)
# 使用rgl 语言包对数据进行可视化处理
library(rgl)
plot3d(RFMscore$Recency, RFMscore$Frequency, RFMscore$Monetary, col = RFMCluster$cluster, size = 5)
plot(RFMscore$Frequency, RFMscore$Monetary, col=RFMCluster3$cluster)
plot(RFMscore$Monetary, RFMscore$Recency, col=RFMCluster3$cluster)
这个三维图中一个颜色就代表一个分类,在R Studio中可以对这个图进行拖拽,从不同角度来观察。为了方便读者理解,以下三张图为三个不同维度的平面图:
很难说这个分类是成功还是失败。这个数据集里数据的分布是比较集中的,主要在Recency这条轴上。
左图为组内客户数量在总客户中的比例,右图为组内贡献销售额对总销售额的占比。
可以看出第三类无论是人数上还是贡献度上都是第一名,而第五组虽然人数最少但是销售额却占到了24%。剩余三组则都属于人多但是购买力不足的。
再来看一下各组的数据平均值与三个变量重要程度乘积(这里就不细说了,涉及到复杂的评估):
6.4,分类命名与对策
在分类之后,一个比较重要的步骤是命名。寻找一个合适的名称也是一门学问。之后是针对每类客户给出最优的建议,可以有的放矢了。
这部分呢,虽然有写……
但是不想在这里说了。
就交给市场部门的人吧。
感谢拜读,觉得有价值,点个在看。