京公网安备 11010802034615号
经营许可证编号:京B2-20210330
数据分析:手把手教你做客户价值分群
当前各企业对客户关系管理(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)
该数据集包含了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 <- 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)
发现数据中存在异常,如票价收入为空或0、舱位等级对应的平均折扣系数为0。这样的异常可能是由于客户没有实际登机造成,故考虑将这样的数据剔除。具体操作如下:
#剔除异常数据
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)
发现L和R这两个指标并不是数值型数据,而是difftime型,故需要将其转换为数值型:
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类,即:
不妨我们就将客户分类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)
从图中可知,黄色线是价值最高的,F和M值对应最高,C值次高,属于第7组人群;价值次高的是绿色线人群,即第5组,该人群特征是C值最大;以此类推,灰色线人群的价值最低,雷达图所围成的面积最小。还有一种办法能够最快的识别出价值由高到低的8类人群,即对8个人群各指标均值求和排序即可,因为数据都是标准化的,不受量纲影响,可直接求和排序:
order(apply(centers,1,sum),decreasing = TRUE)
结果显示第7组人群最佳、其次是第5组人群,最差的是第8组人群。通过对比centers结果,能够很好的反映8组人群的价值高低:
数据分析咨询请扫描二维码
若不方便扫码,搜微信号:CDAshujufenxi
【核心关键词】贷款、报表、课程、专业、建模、缺失值、营销、互联网、银行、办公自动化、数据分析、数据预处理、特征工程、贷 ...
2026-06-05在数据库数据查询、业务报表统计、多表关联分析中,LEFT JOIN左连接是使用率最高的SQL关联查询语句。其核心特性是保留左表全部数 ...
2026-06-05 很多数据分析师能熟练地写SQL、做透视表、算描述性统计,但当被问到“如何预测用户流失概率”“如何归因销量下滑的关键因素 ...
2026-06-05任何一款产品从诞生、普及到最终退出市场,都会遵循一套固定的发展规律,这就是产品生命周期理论。在市场竞争日益激烈、产品迭代 ...
2026-06-04在Excel数据分析、办公统计、业务报表制作场景中,数据透视表是数据汇总、分类统计、快速复盘的核心工具,能够高效完成海量原始 ...
2026-06-04 很多数据分析师拿到数据就开始清洗、建模,但当被问到“这批数据属于什么类型——结构化还是非结构化?分类变量还是数值变量 ...
2026-06-04在问卷调查与社会科学数据分析中,卡方检验是最常用、最基础的非参数检验方法,广泛应用于市场调研、用户分析、行为统计、满意度 ...
2026-06-03【核心关键词】贷款、报表、课程、专业、建模、缺失值、营销、互联网、银行、办公自动化、数据分析、数据预处理、特征工程、贷 ...
2026-06-03 很多数据分析师画过趋势图、做过业绩预测,但当被问到“这个月销售额增长20%,到底是长期趋势自然增长,还是促销活动的短期 ...
2026-06-03逻辑回归是数据分析、机器学习、统计建模中应用最广泛的二分类预测模型,常用于风险判断、行为预测、归因分析等场景。在SPSS、Py ...
2026-06-02数字经济时代,市场竞争日趋同质化,用户消费需求愈发个性化、多元化,传统依托经验、粗放式、广撒网的营销模式弊端日益凸显。长 ...
2026-06-02 很多数据分析师做过按月份的销售额趋势图,画过按天的流量折线图,但当被问到“时间序列和普通数据有什么本质区别”“季节性 ...
2026-06-02在市场竞争日趋饱和、用户需求不断细分的当下,企业创业创新、产品迭代与市场拓展不再依赖经验决策,而是需要系统化、工具化的商 ...
2026-06-01【核心关键词】调度、岗位、数据库、企业、报表、培训、程序、数据分析、数据加工、业务部门、企业数据、调度工具、业务指标、 ...
2026-06-01 很多数据分析师能熟练地计算指标、搭建标签体系,但当被问到“画像到底在解决什么问题”“画像和标签是什么关系”“画像如何 ...
2026-06-01在数据统计分析、数据清洗、异常值识别与数据分布研究中,箱型图是最直观、高效、专业的可视化分析工具。相较于柱状图、折线图仅 ...
2026-05-29Tkinter是Python内置的标准GUI图形界面库,具备无需额外安装、调用简单、兼容性强、轻量化高效等优势,是Python快速开发桌面小程 ...
2026-05-29 很多分析师在设计标签时思路清晰,但真到落地环节却面临“数据在手,不知如何转化为可用标签”的困境:或因加工方式选择不当 ...
2026-05-29【核心关键词】大数据、经理、专业、金融、客户、传统、建模、数据产品、互联网金融、产品经理、数据分析、金融行业、数据模型 ...
2026-05-28 很多分析师每天和数据打交道,但当被问到“标签是什么”“标签和指标有什么区别”“标签体系如何设计”时,却常常答不上来。 ...
2026-05-28