首页 > 代码库 > 航空公司客户价值分析
航空公司客户价值分析
数据集:http://pan.baidu.com/s/1clfQY6
挖掘目标
(1) 根据航空公司客户数据对客户进行分类。
(2) 对不同的客户类别进行特征分析,比价不同类客户的客户价值。
(3) 对不同价值的客户类别提供个性化服务,制定相应的营销策略。
分析方法与过程
识别客户价值应用最广泛的模型指标:最近消费时间间隔,消费频率,消费金额(RFM模型)。
本案例考虑项目指标(LRFMC模型):
(1) 客户关系长度L:航空公司会员时间的长短。
(2) 是消费时间间隔R。
(3) 消费频率F。
(4) 飞行里程M。
(5) 折扣系数的平均值C。
观测窗口:以过去某个时间段为结束时间,某一时间长度作为宽度,得到历史时间范围内的一个时间段。
LRFMC模型指标含义:
(1) L:会员入会时间距观测窗口结束的月数。
(2) R:客户最近一次乘坐公司飞机距离观测窗口结束的月数。
(3) F:客户在观测窗口内乘坐公司飞机的次数。
(4) M:客户在观测窗口内累计的飞行里程碑。
(5) C:客户在观测窗口内乘坐仓位所对应的折扣系数的平均值。
方法:本案例采用聚类的方法,通过对航空公司客户价值的LRFMC模型的五个指标进行K-Means聚类,识别客户价值。
总体流程:数据抽取->数据预处理(数据清洗(缺失值填补舍弃等),属性规约(提取需要特征数据),数据变换(转换适当格式))->建模->结果
代码实践
1. 数据抽取
以2014-03-31为结束时间,选取宽度为两年的时间段为分析窗口,抽取观测窗口内有乘机记录的所有客户的详细数据形成历史数据。
抽取2012-04-01至2014-03-31所有乘客的详细数据,总共62988条,44个属性。
2. 数据探索分析
查找每列属性观测值个数,最大值,最小值。完整代码如下:
1 # -*- coding: UTF-8 -*- 2 #对数据进行基本的探索 3 #返回缺失值个数以及最大值最小值 4 5 import pandas as pd 6 7 datafile=‘air_data.csv‘#航空原始数据,第一行为属性标签 8 9 resultfile=‘explore.xls‘#数据探索结果表 10 11 data=http://www.mamicode.com/pd.read_csv(datafile,encoding=‘utf-8‘) #读取原始数据,指定UTF-8编码(需要用文本编辑器将数据转换为UTF-8) 12 explore=data.describe(percentiles=[],include=‘all‘).T #.T对数据进行转置,方便查阅,percentiles是指定计算多少的分位数(如1/4分位数,中位数) 13 ‘‘‘describe()函数自动计算字段count(非空值),unique(唯一值),top(频数最高者),freq(最高频数),std(方差),min(最小值), 14 50%(中位数),max(最大值)‘‘‘ 15 16 explore[‘null‘]=len(data)-explore[‘count‘] #describe()函数自动计算非空值,需要手动计算空值,每个属性空值数 17 explore=explore[[‘null‘,‘max‘,‘min‘]] 18 explore.columns=[u‘空值数‘,u‘最大值‘,u‘最小值‘] #表头重命名 19 20 explore.to_excel(resultfile) #导出结果
效果如下:
3.数据预处理
数据清洗,属性规约,数据变换。
3.1数据清洗
通过数据探索分析,发现数据中存在缺失值,由于原始数据量大,这类数据量少,对其进行丢弃处理。
(1)丢弃票价为空的记录。
(2)丢弃票价为0、平均折扣率不为0、总飞行公里数等于0的记录。
满足清洗条件的一行数据全部丢弃,使用Pandas对满足清洗条件的数据进行丢弃。
完整代码如下:
1 # -*- coding: UTF-8 -*- 2 # 数据清洗,过滤掉不符合规则的数据 3 4 import pandas as pd 5 6 datafile = ‘air_data.csv‘ # 航空原始数据,第一行为属性标签 7 cleanedfile = ‘data_cleaned.scv‘ # 数据清洗后保存文件 8 9 data = http://www.mamicode.com/pd.read_csv(datafile, encoding=‘utf-8‘) # 读取原始数据,指定UTF-8编码 10 data = http://www.mamicode.com/data[data[‘SUM_YR_1‘].notnull() * 11 data[‘SUM_YR_2‘].notnull()] # 票价非空值才保留 12 13 # 只保留票价非零的,或者平均折扣率与总飞行公里数同时为0的记录 14 index1 = data[‘SUM_YR_1‘] != 0 # 属性下面返回True或者False 15 index2 = data[‘SUM_YR_2‘] != 0 16 index3 = (data[‘SEG_KM_SUM‘] == 0) & (data[‘avg_discount‘] == 0) # 该规则是与‘ 17 18 data = http://www.mamicode.com/data[index1 | index2 | index3] 19 20 data.to_csv(cleanedfile, encoding=‘utf-8‘) # 导出实验结果
3.2属性规约
根据我们建立的LRFMC模型,提取这五个特征,删除语气不相关的属性。
3.3数据变换
将数据变换成‘适当的’格式。通过数据变换来构造这个五个特征。
计算方式如下:
(1) L=LOAD_TIME-FFP_DATE
会员入会时间距观测窗口结束的月数=观测窗口的结束时间-入会时间[单位:月]
(2) R=LAST_TO_END
客户最近一次乘坐公司飞机距观测窗口结束的月数=最后一次乘机时间至观测窗口末端时长[单位:月]
(3)F=FLIGHT_COUNT
客户在观测窗口内乘坐公司飞机的次数=观测窗口飞行次数[单位:次]
(4)M=SEG_KM_SUM
客户在观测时间内在公司累计的飞行里程=观测窗口的总飞行里数[单位:公里]
(5)C=AVG_DISCOUNT
客户在观测时间内乘坐舱位所对应的折扣系数的平均值=平均折扣率[单位:无]
提取5个特征后生成文件:zscoredata.xls
发现5个特征取值范围差异较大,现对数据进行标准化
1 # -*- coding: UTF-8 -*- 2 # 对数据进行基本的探索 3 # 返回缺失值个数以及最大值最小值 4 5 import pandas as pd 6 7 datafile = ‘zscoredata.xls‘ # 航空原始数据,第一行为属性标签 8 zscoredfile = ‘zscoreddata.xls‘ # 标准化后的数据储存路径 9 10 # 标准化处理 11 data =http://www.mamicode.com/ pd.read_excel(datafile) 12 data = http://www.mamicode.com/(data - data.mean(axis=0)) / (data.std(axis=0)) # 标准化变换 13 14 data.columns = [‘Z‘ + i for i in data.columns] # 表头重命名 15 16 data.to_excel(zscoredfile, index=False) # 写入数据,False不要序列
4.构建模型
客户价值分析模型包括两个:
(1) 根据5个特征对客户进行聚类分群。
(2) 对每个客户群进行特征分析,分析客户价值,并对每个客户进行排名。
完整代码如下:
1 #-*- coding: utf-8 -*- 2 #K-Means聚类算法 3 4 import pandas as pd 5 from sklearn.cluster import KMeans #导入K均值聚类算法 6 7 inputfile = ‘zscoreddata.xls‘ #待聚类的数据文件 8 k = 5 #需要进行的聚类类别数 9 10 #读取数据并进行聚类分析 11 data = http://www.mamicode.com/pd.read_excel(inputfile) #读取数据 12 13 #调用k-means算法,进行聚类分析 14 if __name__==‘__main__‘: 15 kmodel = KMeans(n_clusters = k, n_jobs = 8) #n_jobs是并行数,一般等于CPU数较好 16 kmodel.fit(data) #训练模型 17 18 kmodel.cluster_centers_ #查看聚类中心 19 kmodel.labels_ #查看各样本对应的类别
客户价值分析:
根据聚类结果构造客户群特征分析图。
根据特征值大小总结出每个群体优势特征和弱势特征,将客户群分为四类:
a重要保持客户:平均折扣率高,乘坐次数或里程高,最近坐过本公司航班。
b重要发展客户:平均折扣率较高,乘坐次数和里程较低。
c重要挽留客户:平均折扣率,乘坐次数或者里程较高,较长时间没坐本公司航班。
d一般与低价值客户:折扣率低,较长时间未做本公司航班,乘坐次数或里程较低,入会时长短。
航空公司客户价值分析