当前各企业对客户关系管理(CRM)显得尤为关注,只有不断地保留并增加老客户黏性及挖掘潜客新客户,才能使企业生存的更好,更久。说到CRM,我刚开始接触的就是RFM模型,通过该模型将客户分为高价值、潜在价值和低价值。当每一个用户打上不同的价值标签时,就可以有针对性的实施营销策略,将有限的资源投入到高价值客户中,产生最大的利润。有关RFM模型,曾写过一篇实战: RFM模型使用(可点击查看)。 下文将有别于《实战: RFM模型使用》,在计算价值标签时,避免人为干扰,通过聚类的方法将目标人群分为三六九等。具体我们通过下面的实例来说明。 本文应用到的实例数据来源于《R语言数据分析与挖掘实战》一书,数据为某航空公司会员信息及乘机信息,通过构建LRFMC模型,实现客户价值分群。 我们说RFM模型由R(最近消费时间间隔)、F(消费频次)和M(消费总额)三个指标构成,通过该模型识别出高价值客户。但该模型并不完全适合所有行业,如航空行业,直接使用M指标并不能反映客户的真实价值,因为“长途低等舱”可能没有“短途高等舱”价值高;如网吧行业,可能“长在线时长低时单价”客户比“短在线时长高时单价”客户价值还高,因为网吧更希望看到是客户来的次数及上网时长。所以得根据实际行业灵活调整RFM模型的指标,本文就拿航空公司的数据为例,将RFM模型构建成L(入会至当前时间的间隔,反映可能的活跃时长)、R(最近消费时间距当前的间隔,反映当前的活跃状态)、F(乘机次数,反映客户的忠诚度)、M(飞行里程数,反映客户对乘机的依赖性)和C(舱位等级对应的折扣系数,侧面反映客户价值高低)5个指标。下面就利用这5个指标进行客户价值分群的实战: #读取航空数据 flight <- read.csv(file = file.choose()) #查看数据结构及概览 dim(flight) names(flight)
vars <- c('FFP_DATE','LOAD_TIME','FLIGHT_COUNT','SUM_YR_1','SUM_YR_2','SEG_KM_SUM','LAST_FLIGHT_DATE','avg_discount') flight2 <- flight[,vars] summary(flight2)
#剔除异常数据 attach(flight2) clear_flight <- flight2[-which(SUM_YR_1==0 | SUM_YR_2==0 | is.na(SUM_YR_1)==1 | is.na(SUM_YR_2)==1 | avg_discount==0),] #查看数据字段类型 str(clear_flight)
clear_flight$FFP_DATE <- as.Date(clear_flight$FFP_DATE) clear_flight$LOAD_TIME <- as.Date(clear_flight$LOAD_TIME) clear_flight$LAST_FLIGHT_DATE <- as.Date(clear_flight$LAST_FLIGHT_DATE) 数据清洗完后,需要计算上面提到的LRFMC五个指标,具体脚本如下: #L:入会至当前时间的间隔 #R:最近登机时间距当前的间隔 clear_flight <- transform(clear_flight, L = difftime(LOAD_TIME,FFP_DATE, units = 'days')/30, R = difftime(LOAD_TIME,LAST_FLIGHT_DATE, units = 'days')/30) str(clear_flight)
clear_flight$L <- as.numeric(clear_flight$L) clear_flight$R <- as.numeric(clear_flight$R) #查看数据结构 summary(clear_flight)
clear_flight <- clear_flight[-which(is.na(clear_flight$LAST_FLIGHT_DATE)==1),] 目前5个指标值都有了,下面就需要根据每个客户的5个值对其进行分群,传统的方法是计算综合得分,然后排序一刀切,选出高价值、潜在价值和低价值客户。现在所使用的方法是k-means聚类算法,避免了人为的一刀切。由于k-means聚类算法是基于距离计算类与类之间的差别,然而这5个指标明显存在量纲上的差异,故需要标准化处理: #数据标准化处理 standard <- data.frame(scale(x = clear_flight[,c('L','R','FLIGHT_COUNT','SEG_KM_SUM','avg_discount')])) names(standard) <- c('L','R','F','M','C') 标准化数据之后,就可以使用k-means聚类算法将客户进行聚类,问题是该聚为几类呢?根据传统的RFM模型,将价值标签分为8类,即:
#k-means聚类,设置聚类个数为8 set.seed(1234) clust <- kmeans(x = standard, centers = 8) #查看8个类中各指标均值情况 centers <- clust$centers centers #查看8个类中的会员量 table(clust$cluster)
#绘制雷达图 install.packages('fmsb') library(fmsb) max <- apply(centers, 2, max) min <- apply(centers,2,min) df = data.frame(rbind(max,min,centers)) radarchart(df = df, seg=5, plty=1,vlcex=0.7)
order(apply(centers,1,sum),decreasing = TRUE)
文中脚本及数据可至如下链接下载: https:///cxptA4UJRxfpL 访问密码 27ef 参考数据 《R语言数据分析与挖掘实战》 每天进步一点点2015 学习与分享,取长补短,关注小号!
|
|