第7章 航空公司客户价值分析

7.1 背景与挖掘目标
客户分类,通过客户分类,区分无价值客户、高价值客户,将优先营销资源集中于高价值客户,实现企业利润最大化目标。
现在通过建立合理的客户价值评估模型,对客户进行分群,分析比较不同客户群的客户价值,并制定相应的营销策略,对不同的客户群提供个性化的客户服务是必须和有效的。(市场细分
 
根据数据实现以下目标:
1)借助航空公司客户数据,对客户进行分类
2)对不同的客户类别进行特征分析,比较不同类客户的客户价值
3)对不同价值的客户类别提供个性化服务,制定相应的策略营销
 
7.2 分析方法与过程
本案例的目标是客户价值识别,即通过航空公司客户数据识别不同价值的客户。
识别客户价值应用最广泛的模型是通过3个指标:
1)最近消费时间间隔Recency
2)消费频率Frequency
3)消费金额Monetary
来进行客户细分,识别高价值的客户,简称RFM模型
 
在RFM模型中,消费金额表示在一段时间内,客户购买该企业产品金额的总和。由于航空价受到运输距离、航位等级等多种因素影响,同样消费金额的不同旅客对航空公司的价值是不同的。所以消费金额这个指标并不适用于航空公司的客户价值分析。我们选择客户在一定时间内累积的飞行里程M和客户在一定时间内乘坐舱位所对应的折扣系数的平均值C两个指标代替消费金额。
 
本案例将客户关系长度L、消费时间间隔R、消费频率F、飞行里程M、折扣系数的平均值C五个指标作为航空公司识别客户价值,记为LRFMC模型。
L:会员入会时间距观测窗口结束的月数;
R:客户最近一次乘坐公司飞机距观测窗口结束的月数
F:客户在观测窗口内乘坐公司飞机的次数
M:客户在观测窗口内累计的飞行里程
C:客户在观测窗口内乘坐舱位所对应的折扣系数的平均值
 
针对航空公司LRFMC模型,如果采用传统的RFM模型分析的属性分箱法,也能够识别出最有价值的客户,但细分的客户群太多,提高了针对性营销的成本。因此本案例采用聚类的方法识别客户价值。
 
航空客运信息挖掘的步骤:
1)从航空公司的数据源中选择性抽取数据与新增数据抽取分别形成历史数据和增量数据
2)对步骤1中的两个数据集进行数据探索分析与预处理
3)利用步骤2 中的已经完成数据预处理的建模数据,基于旅客价值LRFMC模型进行客户分群,对各个客户群进行特征分析,识别出有价值的客户。
4)针对模型结果得到不同价值的客户,采用不同的营销手段,提供定制化的服务。
 
7.2.1 数据抽取
以2014-03-31为结束时间,选取宽度为2年的时间段作为分析观测窗口,抽取观测窗口内有乘机记录的所有客户的详细数据形成历史数据
对于后续新增的客户详细信息,以后续新增数据中最新的时间点作为结束时间,采用上述同样的方法进行抽取,形成增量数据
 
7.2.2 数据探索分析
 
本案例的探索分析是对数据进行缺失值分析与异常值分析,分析出数据的规律以及异常值。
通过对原始数据观察,发现票价存在空值,票价最小值为0,折扣率最小值为0,总飞行公里数大于0的记录。票价为空值的数据可能是客户不存在乘机记录造成的,其他数据可能是客户乘坐0折机票或者积分兑换产生的。
 1 import pandas as pd
 2 data=pd.read_csv(r'E:\siren\Python dataAnalyst\chapter7\demo\data\air_data.csv',encoding='utf-8')
 3 #对数据进行基本的描述
 4 #percentiles参数是指定计算多少的分位数表,T是转置
 5 explore=data.describe(percentiles=[],include='all').T
 6 
 7 #describe函数自动计算非空数值数,手动计算空值数
 8 explore['null']=len(data)-explore['count']
 9 #这里只选取部分探索结果
10 explore=explore[['null','max','min']]
11 #重命名表头
12 explore.columns=[u'空值',u'最大值',u'最小值']
13 #将explore文件导出
14 explore.to_excel(r'E:\siren\Python dataAnalyst\chapter7\demo\data\explore.xls')
 
7.2.3 数据预处理
本案例主要采用数据清洗、属性规约与数据变换的预处理方法。
1、数据清洗
通过数据分析探索发现,存在缺失值,票价最小值为0,折扣率最小值为0,总飞行公里数大于0的记录。
因为原始数据量较大,这类数据所占比例较小,对问题影响不大,因此进行丢弃处理。
具体做法:
1)丢弃票价为空的记录
2)丢弃票价为0,平均折扣率不为0、总飞行公里数大于0的记录。
1 #票价非空值保留
2 data=data[data['SUM_YR_1'].notnull()*data['SUM_YR_2'].notnull()]
3 
4 #只保留非空票价,或者平均值扣率与总飞行公里数同时为0的记录
5 index1=data['SUM_YR_1']!=0
6 index2=data['SUM_YR_2']!=0
7 index3=(data['SEG_KM_SUM']==0) & (data['avg_discount']==0)
8 
9 data=data[index1|index2|index3]
2.属性规约
原始数据中属性太多,根据航空公司客户价值LRFMC模型,选择与LRFMC指标相关的6个属性:FFP_DATE、LOAD_TIME、FLIGHT_COUNT、avg_discount、SEG_KM_SUM、LAST_TO_END。
删除与其不相关、弱相关或冗余的属性,例如,会员卡号、性别、工作城市、工作地所在省份、工作所在国家和年龄等属性。
 
3.数据变换
数据变换是将数据转换成“适当”的格式,以适应挖掘任务及算法的需要。本案例中主要采用的数据变换方式为属性构造和数据标准化。
因为原始数据中并没有直接给出LRFMC五个指标,需要通过原始数据提取这五个指标,具体计算如下:
1)L=LOAD_TIME-FFP_DATE
会员入会时间距观测窗口结束的月数=观测窗口的结束时间-入会时间【单位:月】
2)R=LAST_TO_END
客户最近一次乘坐公司飞机距观测窗口结束的月数=最后一次乘机时间至观察窗口末端时长【单位:月】
3)F=FLIGHT_COUNT
客户在观测窗口内乘坐公司飞机的次数=观测窗口的总飞行次数【单位:月】
4)M=SEG_KM_SUM
客户在观测时间内在公司累计的飞行里程=观测窗口的总飞行公里数【单位:公里】
5)C=AVG_DISCOUNT
客户在观测时间内乘坐舱位多对应的折扣系数的平均值=平均折扣率【单位:无】
 
方法一、具体提取办法:
 1 import datetime
 2 #将数据转换为时间格式
 3 data['LOAD_TIME']=pd.to_datetime(data['LOAD_TIME'])
 4 data['FFP_DATE']=pd.to_datetime(data['FFP_DATE'])
 5 #求时间差
 6 data['L']=data['LOAD_TIME']-data['FFP_DATE']
 7 
 8 # 将间隔时间转成月份为单位
 9 data['L']=data['L']/np.timedelta64(1, 'M')
10 
11 data['R']=data['LAST_TO_END']
12 data['F']=data['FLIGHT_COUNT']
13 data['M']=data['SEG_KM_SUM']
14 data['C']=data['avg_discount']
15 
16 data=data[['L','R','F','M','C']]
17 data_T=data.describe()
18 data_T.loc[['min','max']]

方法二、也可以直接导入书中自带的数据集:

data=pd.read_excel(r'E:\siren\Python dataAnalyst\chapter7\demo\data\zscoredata.xls')

对数据进行标准差标准化处理:

1 data=(data-data.mean(axis=0))/(data.std(axis=0))
2 data.columns=['Z'+i for i in data.columns]
标准差标准化:也叫零-均值规范化
经过处理的数据的均值为0,标准差为1.
(注:在本书的第4章中的4.3.2 规范化中有介绍)
 
7.2.4 模型构建
客户价值分析模型构建主要由两部分构成,第一部分根据航空公司客户5个指标的数据,对客户进行聚类分群。第二部分结合业务对每个客户群进行特征分析,分析客户价值,并对每个客户群进行排名。
1、客户聚类
采用K-Means聚类算法对客户数据进行客户分群,聚成5类(需要结合业务的理解与分析来确定客户的类别数量)
 1 from sklearn.cluster import KMeans
 2 k=5
 3 kmodel=KMeans(n_clusters=k,n_jobs=4)
 4 kmodel.fit(data)
 5 
 6 labels = kmodel.labels_#查看各样本类别
 7 demo = pd.DataFrame(labels,columns=['numbers'])
 8 demo1= pd.DataFrame(kmodel.cluster_centers_, columns=data.columns) # 保存聚类中心
 9 demo2= demo['numbers'].value_counts() # 确定各个类的数目
10  
11 demo4 = pd.concat([demo2,demo1],axis=1)
12 demo4.index.name='labels'
13 
14 kmodel.cluster_centers_
15 kmodel.labels_

2.客户价值分析

针对聚类结果进行特征分析,其中
  优势 劣势 数目
客户群1 C R、F、M 最少 5
客户群2   C、L 最多1
客户群3   R、M、F 3
客户群4 L、F、M   2
客户群5 M、F、R   4
分析:
客户群1的数量最少,所乘航班折扣率较高(一般所乘航班的等级较高),属于重要发展客户。
客户群2的数量较多,所乘航班折扣率较低,加入会员时间短,这类客户一般在打折时才会乘坐航班,属于一般客户。
客户群3,乘坐次数很少,累计总飞行公里数较少,很久没有乘坐飞机,属于低价值客户。
客户群4的数量较多,加入会员时间长,但是最近乘坐频率变小,属于重要挽留客户。
客户群5,累计总飞行公里数较大,飞行次数较多,最近乘坐过飞机,属于重要保持客户。
 
客户价值排名:
客户群 排名 排名含义
客户群5 1 重要保持客户
客户群1 2 重要发展客户
客户群4 3 重要挽留客户
客户群2 4 一般客户
客户群3 5 低价值客户
其中重要发展客户、重要保持客户、重要挽留客户分别对应客户生命周期管理的发展期、稳定期、衰退期。
 
3. 模型应用
根据对每个客户群进行特征分析,采取针对性营销:
1)会员升级与保级--客户群4(数量较大)
2)首次兑换--客户群2
3)交叉销售--客户群5
posted @ 2018-08-02 17:36  平淡才是真~~  阅读(5156)  评论(0编辑  收藏  举报