专栏名称: 爱数据原统计网
中国统计网(www.itongji.cn),国内最大的数据分析门户网站。提供数据分析行业资讯,统计百科知识、数据分析、商业智能(BI)、数据挖掘技术,Excel、SPSS、SAS、R等数据分析软件等在线学习平台。
目录
相关文章推荐
51好读  ›  专栏  ›  爱数据原统计网

客户价值分群,你会吗?

爱数据原统计网  · 公众号  · BI  · 2017-01-20 17:37

正文

当前各企业对客户关系管理(CRM)显得尤为关注,只有不断地保留并增加老客户黏性及挖掘潜客新客户,才能使企业生存的更好,更久。说到CRM,我刚开始接触的就是RFM模型,通过该模型将客户分为高价值、潜在价值和低价值。当每一个用户打上不同的价值标签时,就可以有针对性的实施营销策略,将有限的资源投入到高价值客户中,产生最大的利润。



在计算价值标签时,避免人为干扰,通过聚类的方法将目标人群分为三六九等。具体我们通过下面的实例来说明。


本文应用到的实例数据来源于《R语言数据分析与挖掘实战》一书,数据为某航空公司会员信息及乘机信息,通过构建LRFMC模型,实现客户价值分群


我们说RFM模型由R(最近消费时间间隔)、F(消费频次)和M(消费总额)三个指标构成,通过该模型识别出高价值客户。但该模型并不完全适合所有行业如航空行业,直接使用M指标并不能反映客户的真实价值,因为“长途低等舱”可能没有“短途高等舱”价值高;如网吧行业,可能“长在线时长低时单价”客户比“短在线时长高时单价”客户价值还高,因为网吧更希望看到是客户来的次数及上网时长。所以得根据实际行业灵活调整RFM模型的指标,本文就拿航空公司的数据为例,将RFM模型构建成L(入会至当前时间的间隔,反映可能的活跃时长)、R(最近消费时间距当前的间隔,反映当前的活跃状态)、F(乘机次数,反映客户的忠诚度)、M(飞行里程数,反映客户对乘机的依赖性)和C(舱位等级对应的折扣系数,侧面反映客户价值高低)5个指标。下面就利用这5个指标进行客户价值分群的实战:


#读取航空数据

flight

#查看数据结构及概览

dim(flight)

names(flight)



该数据集包含了62988条会员记录,涉及会员号、入会时间、首次登机时间、性别等44个字段。发现这么多字段中,正真能使用到的字段只有FFP_DATE(入会时间)、LOAD_TIME(观测窗口结束时间,可理解为当前时间)、FLIGHT_COUNT(乘机次数)、SUM_YR_1(票价收入1)、SUM_YR_2(票价收入2)、SEG_KM_SUM(飞行里程数)、LAST_FLIGHT_DATE(最后一次乘机时间)和avg_discount(舱位等级对应的平均折扣系数)。下面来看一下这些数据的分布情况:


vars

flight2

summary(flight2)



发现数据中存在异常,如票价收入为空或0、舱位等级对应的平均折扣系数为0。这样的异常可能是由于客户没有实际登机造成,故考虑将这样的数据剔除。具体操作如下:


#剔除异常数据

attach(flight2)

clear_flight

#查看数据字段类型

str(clear_flight)



发现三个关于时间的字段均为因子型数据,需要将其转换为日期格式,用于下面计算时间差:


clear_flight$FFP_DATE

clear_flight$LOAD_TIME

clear_flight$LAST_FLIGHT_DATE


数据清洗完后,需要计算上面提到的LRFMC五个指标,具体脚本如下:


#L:入会至当前时间的间隔

#R:最近登机时间距当前的间隔

clear_flight

str(clear_flight)



发现L和R这两个指标并不是数值型数据,而是difftime型,故需要将其转换为数值型:


clear_flight$L

clear_flight$R

#查看数据结构

summary(clear_flight)



发现缺失值,这里仍然将其剔除:


clear_flight

目前5个指标值都有了,下面就需要根据每个客户的5个值对其进行分群,传统的方法是计算综合得分,然后排序一刀切,选出高价值、潜在价值和低价值客户。现在所使用的方法是k-means聚类算法,避免了人为的一刀切。由于k-means聚类算法是基于距离计算类与类之间的差别,然而这5个指标明显存在量纲上的差异,故需要标准化处理


#数据标准化处理

standard

names(standard)

标准化数据之后,就可以使用k-means聚类算法将客户进行聚类,问题是该聚为几类呢?根据传统的RFM模型,将价值标签分为8类,即:



不妨我们就将客户分类8个群体,即:


#k-means聚类,设置聚类个数为8

set.seed(1234)

clust

#查看8个类中各指标均值情况

centers

centers

#查看8个类中的会员量

table(clust$cluster)



上图反馈了客户的聚类结果,但是从数据中很难快速的找出不同价值的客户,下面通过绘制雷达图来反映聚类结果:


#绘制雷达图

install.packages('fmsb')

library(fmsb)

max

min

df = data.frame(rbind(max,min,centers))


radarchart(df = df, seg=5, plty=1,vlcex=0.7)



从图中可知,黄色线是价值最高的,F和M值对应最高,C值次高,属于第7组人群;价值次高的是绿色线人群,即第5组,该人群特征是C值最大;以此类推,灰色线人群的价值最低,雷达图所围成的面积最小。还有一种办法能够最快的识别出价值由高到低的8类人群,即对8个人群各指标均值求和排序即可,因为数据都是标准化的,不受量纲影响,可直接求和排序:


order(apply(centers,1,sum),decreasing = TRUE)



结果显示第7组人群最佳、其次是第5组人群,最差的是第8组人群。通过对比centers结果,能够很好的反映8组人群的价值高低:



文中脚本及数据可至如下链接下载:


https://yunpan.cn/cxptA4UJRxfpL  访问密码 27ef


End.


作者:刘顺祥(中国统计网特邀认证作者)


本文为中国统计网原创文章,需要转载请联系中国统计网(小编微信:itongjilove),转载时请注明作者及出处,并保留本文链接。