航空客户价值分析特色LRFMC模型——RFM升级
本文转载自微信公众号TIpDM。
每每以为攀得众山小,可、每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~
———————————————————————————
我们说RFM模型由R(最近消费时间间隔)、F(消费频次)和M(消费总额)三个指标构成,通过该模型识别出高价值客户。但该模型并不完全适合所有行业,如航空行业,直接使用M指标并不能反映客户的真实价值,因为“长途低等舱”可能没有“短途高等舱”价值高。所以得根据实际行业灵活调整RFM模型的指标,本文就拿航空公司的数据为例,将RFM模型构建成L(入会至当前时间的间隔,反映可能的活跃时长)、R(最近消费时间距当前的间隔,反映当前的活跃状态)、F(乘机次数,反映客户的忠诚度)、M(飞行里程数,反映客户对乘机的依赖性)和C(舱位等级对应的折扣系数,侧面反映客户价值高低)5个指标。下面就利用这5个指标进行客户价值分群的实战:
#########设置工作空间####
setwd("D:/spss modeler/数据")
#######数据的读取
datafile=read.csv('./air_data.csv',header=T)
该数据集包含了条会员记录,涉及会员号、入会时间、首次登机时间、性别等44个字段。发现这么多字段中,正真能使用到的字段只有FFP_DATE(入会时间)、LOAD_TIME(观测窗口结束时间,可理解为当前时间)、FLIGHT_COUNT(乘机次数)、SUM_YR_1(票价收入1)、SUM_YR_2(票价收入2)、SEG_KM_SUM(飞行里程数)、LAST_FLIGHT_DATE(最后一次乘机时间)和avg_discount(舱位等级对应的平均折扣系数)。下面来看一下这些数据的分布情况:
##确定探索分析变量
col=c(15:18,20:29)#去掉日期型变量
###输出变量最值,缺失情况
summary(datafile[,col])
发现数据中存在异常,如票价收入为空或0、舱位等级对应的平均折扣系数为0。这样的异常可能是由于客户没有实际登机造成,故考虑将这样的数据剔除。具体操作如下:
###数据清洗代码###
####丢弃票价为空的记录
delet_na=datafile[-which(is.na(datafile$SUM_YR_1)|is.na(datafile$SUM_YR_2)),]
####丢弃票价为0,平均折扣率不为0,总飞行公里数大于0的记录
index=((delet_na$SUM_YR_1==0&delet_na$SUM_YR_2==0)
*(delet_na$avg_discount!=0)
*(delet_na$SEG_KM_SUM>0))
deletdata=delet_na[-which(index==1),]
####保存清洗后的数据
cleanedfile=deletdata
str(cleanedfile)
属性的规约
原始数据中的属性太多,根据航空公司价值LRFMC模型,选择与LRFMC指标相关的6个属性:FFP_DATE(入会时间)、LOAD_TIME(观测窗口结束时间,可理解为当前时间)、FLIGHT_COUNT(乘机次数)、SUM_YR_1(票价收入1)、SUM_YR_2(票价收入2)、SEG_KM_SUM(飞行里程数)、LAST_FLIGHT_DATE(最后一次乘机时间)和avg_discount(舱位等级对应的平均折扣系数)。下面来看一下这些数据的分布情况:
LRFMC<-c('FFP_DATE','LOAD_TIME','FLIGHT_COUNT','SUM_YR_1','SUM_YR_2','SEG_KM_SUM','LAST_FLIGHT_DATE','avg_discount')
cleanedfile_1<-cleanedfile[,LRFMC]
summary(cleanedfile_1)
str(cleanedfile_1)
从上面可以看出FFP_DATE,LOAD_TIME,LAST_FLIGHT_DATE,并不是数值型数据而是发现三个关于时间的字段均为因子型数据,需要将其转换为日期格式,用于下面计算时间差:
####时间数据的转化
####时间数据的转化
cleanedfile_1$FFP_DATE <-as.Date(cleanedfile_1$FFP_DATE)
cleanedfile_1$LOAD_TIME <-as.Date(cleanedfile_1$LOAD_TIME)
cleanedfile_1$LAST_FLIGHT_DATE<-as.Date(cleanedfile_1$LAST_FLIGHT_DATE)
数据格式的转化后的数据如下:
#L:入会至当前时间的间隔
#R:最近登机时间距当前的间隔
cleanedfile_1<- transform(cleanedfile_1,L=difftime(LOAD_TIME,FFP_DATE, units = 'days')/30, R =difftime(LOAD_TIME,LAST_FLIGHT_DATE, units = 'days')/30)
str(cleanedfile_1)
发现L和R这两个指标并不是数值型数据,而是difftime型,故需要将其转换为数值型:
##数值型的转化
cleanedfile_1$L <- as.numeric(cleanedfile_1$L)
cleanedfile_1$R <- as.numeric(cleanedfile_1$R)
str(cleanedfile_1)
发现缺失值,这里仍然将其剔除:
cleanedfile_1<-na.omit(cleanedfile_1)
目前5个指标值都有了,下面就需要根据每个客户的5个值对其进行分群,传统的方法是计算综合得分,然后排序一刀切,选出高价值、潜在价值和低价值客户。现在所使用的方法是k-means聚类算法,避免了人为的一刀切。由于k-means聚类算法是基于距离计算类与类之间的差别,然而这5个指标明显存在量纲上的差异,故需要标准化处理:
####数据标准化
#数据标准化处理
#########
cleanedfile_2=cleanedfile_1[,c('L','R','FLIGHT_COUNT','SEG_KM_SUM','avg_discount')]
#构建标准化函数
standard <- function(x) {
(x-min(x))/(max(x)-min(x))
}
zsredfile<-sapply(X=cleanedfile_2,FUN=standard)
colnames(zsredfile)=c("ZL","ZR","ZF","ZM","ZC")
head(zsredfile)
数据标准化如下
标准化数据之后,就可以使用k-means聚类算法将客户进行聚类,问题是该聚为几类呢?根据业务的理解与分析确定客户类别数量,即:分为五类,
#k-means聚类,设置聚类个数为5
set.seed(1234)
result<- kmeans(x =zsredfile, centers = 5)
###结果输出
type=result$cluster
table(type)###查看类别的分布
centervec=result$center
上图反馈了客户的聚类结果,但是从数据中很难快速的找出不同价值的客户,下面通过绘制雷达图来反映聚类结果:
###展现分类图
library(fpc)
plotcluster(zsredfile, result$cluster) #展现分类图
从上图可以看出五类人的基本分布情况,
#绘制雷达图
install.packages('fmsb')
library(fmsb)
max <- apply(centervec, 2, max)
min <- apply(centervec,2,min)
df = data.frame(rbind(max,min,centervec))
radarchart(df = df, seg=5, plty=1,vlcex=0.7)
从图中可知,黑色线是价值最高的,F和M值对应最高,C值次高,属于第2组人群;价值次高的是蓝色线人群,即第3组,该人群特征是C值最大;以此类推,海绿色线人群的价值最低,雷达图所围成的面积最小。还有一种办法能够最快的识别出价值由高到低的5类人群,即对5个人群各指标均值求和排序即可,因为数据都是标准化的,不受量纲影响,可直接求和排序:
order(apply(centervec,1,sum),decreasing = TRUE)
结果显示第2组人群最佳、其次是第3组人群,最差的是第5组人群。通过对比centers结果,能够很好的反映5组人群的价值高低:
客户群 |
排名 |
排名含义 |
客户群2 |
1 |
重要保持客户 |
客户群3 |
2 |
重要发展客户 |
客户群1 |
3 |
重要挽留客户 |
客户群4 |
4 |
一般客户 |
客户群5 |
5 |
低价值客户 |
每每以为攀得众山小,可、每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~
———————————————————————————
航空客户价值分析特色LRFMC模型——RFM升级的更多相关文章
- RFM模型的变形LRFMC模型与K-means算法的有机结合
应用场景: 可以应用在不同行业的客户分类管理上,比如航空公司,传统的RFM模型不再适用,通过RFM模型的变形LRFMC模型实现客户价值分析:基于消费者数据的精细化营销 应用价值: LRFMC模型构建之 ...
- 基于R语言的航空公司客户价值分析
分析航空公司现状 1.行业内竞争 民航的竞争除了三大航空公司之间的竞争之外,还将加入新崛起的各类小型航空公司.民营航空公司,甚至国外航空巨头.航空产品生产过剩,产品同质化特征愈加明显,于是航空公司从价 ...
- 使用ML.NET实现基于RFM模型的客户价值分析
RFM模型 在众多的客户价值分析模型中,RFM模型是被广泛应用的,尤其在零售和企业服务领域堪称经典的分类手段.它的核心定义从基本的交易数据中来,借助恰当的聚类算法,反映出对客户较为直观的分类指示,对于 ...
- Python数据挖掘-航空公司客户价值分析
出处:http://www.ithao123.cn/content-11127869.html 航空公司客户价值分析 目标:企业针对不同价值的客户制定个性化的服务,将有限的资源集中于高价值客户. 1. ...
- [Python数据挖掘]第7章、航空公司客户价值分析
一.背景和挖掘目标 二.分析方法与过程 客户价值识别最常用的是RFM模型(最近消费时间间隔Recency,消费频率Frequency,消费金额Monetary) 1.EDA(探索性数据分析) #对数据 ...
- 航空公司客户价值分析(KMeans聚类)
PS.图片可能不清楚,代码 数据集都在 https://github.com/xubin97/Data-Mining_exp1 项目介绍: 本案例的目标是客户价值识别,通过航空公司客户数据识别不同价值 ...
- 利用KMeans聚类进行航空公司客户价值分析
准确的客户分类的结果是企业优化营销资源的重要依据,本文利用了航空公司的部分数据,利用Kmeans聚类方法,对航空公司的客户进行了分类,来识别出不同的客户群体,从来发现有用的客户,从而对不同价值的客户类 ...
- 数据分析之客户价值模型(RFM)技术总结
作者 | leo 管理学中有一个重要概念那就是客户关系管理(CRM),它核心目的就是为了提高企业的核心竞争力,通过提高企业与客户间的交互,优化客户管理方式,从而实现吸引新客户.保留老客户以及将已有客户 ...
- 手动搭建I/O网络通信框架3:NIO编程模型,升级改造聊天室
第一章:手动搭建I/O网络通信框架1:Socket和ServerSocket入门实战,实现单聊 第二章:手动搭建I/O网络通信框架2:BIO编程模型实现群聊 在第二章中用BIO编程模型,简单的实现了一 ...
随机推荐
- 性能测试监控:Jmeter +InfluxDB +collectd +Grafana
虚拟机ip 192.168.180.128 Influxdb Influxdb是一个开源的分布式时序.时间和指标数据库,使用go语言编写,无需外部依赖. 它有三大特性: 时序性(Time Series ...
- 01_Linux软件源配置
一.国内软件源 阿里源:https://mirrors.aliyun.com/ 清华大学:https://mirrors.tuna.tsinghua.edu.cn/ 中科大 : https://mir ...
- python抢小米6自动化脚本
#!/bin/env python # coding=utf-8 from selenium import webdriver import time import unittest class Ge ...
- java对象序列化、反序列化
平时我们在Java内存中的对象,是无法进行IO操作或者网络通信的,因为在进行IO操作或者网络通信的时候,人家根本不知道内存中的对象是个什么东西,因此必须将对象以某种方式表示出来,即存储对象中的状态.一 ...
- NIO基础篇(一)
1.NIO与传统IO的比较 Java的NIO(New IO)是不同于旧IO的,旧的IO是基于字节流和字符流的,是阻塞的IO.NIO是基于通道(Channel)和缓冲区(Buffer)的,是非阻塞的IO ...
- 2018-01-08 学习随笔 SpirngBoot整合Mybatis进行主从数据库的动态切换,以及一些数据库层面和分布式事物的解决方案
先大概介绍一下主从数据库是什么?其实就是两个或N个数据库,一个或几个主负责写(当然也可以读),另一个或几个从只负责读.从数据库要记录主数据库的具体url以及BigLOG(二进制日志文件)的参数.原理就 ...
- boost编译随笔
boost下载地址 编译 生成bjam.exe 1.下载boost源码,可以直接使用上面给出的1.60.0版本 2.解压下载到的boost文件,例如解压到 x:\boost_1_60_0 3.使用Vi ...
- 模板方法模式和JDBCTemplate(一)
本篇博客的目录: 一:模板方法模式介绍 二:模板方法模式的简单实现 三:总结 一:模板方法模式的介绍 1.1:模板方法模式的定义 定义:一个操作中的算法的骨架,而将一些步骤延迟到子类中.Templat ...
- 异步任务利器Celery(一)介绍
django项目开发中遇到过一些问题,发送请求后服务器要进行一系列耗时非常长的操作,用户要等待很久的时间.可不可以立刻对用户返回响应,然后在后台运行那些操作呢? crontab定时任务很难达到这样的要 ...
- 【转】egametang框架简介
讨论QQ群 : 474643097 1.可用VS单步调试的分布式服务端,N变1 一般来说,分布式服务端要启动很多进程,一旦进程多了,单步调试就变得非常困难,导致服务端开发基本上靠打log来查找问题.平 ...