Python:航空公司客户价值分析实战
一、背景及挖掘目标
1、行业背景
随着大数据的来临,传统的商业模式正在被一个新的营销模式—“数据化营销”所替代,采取不同的营销策略,将有限的资源集中在高价值的客户上,实现企业利润的最大化目标。
面对激烈的市场竞争,国内的某航空公司面临着旅客流失、竞争力下降、航空资源未充分利用等危机,通过建立合理的客户价值评估模型,对客户进行分群,分析比较不同客户群的客户价值,并制定相应的营销策略,对不同的客户群提供个性化的客户服务是非常必要的。
2、挖掘目标
⑴借助航空公司的客户数据,对客户进行分类;
⑵对不同类的客户类别进行特征分析,比较不同类客户的客户价值;
⑶从营销角度讲,客户价值分析实际上是一个市场细分问题,解决市场细分问题比较常用的方法是聚类分析;
⑷对不同价值的客户类别提供个性化的服务,并且制定相应的营销策略,使得公司的利益最大化。
二、分析方法及流程
1、分析方法
RFM模型是衡量客户价值和客户创利能力的重要工具和手段,它通过一个客户的近期购买行为、购买的总体频次以及购买的总体金额三个指标来描述客户的价值状况。分别为:最近消费时间间隔(Recently)、消费频率(Frequency)、消费金额(Money)。
在RFM模型的基础上,结合具体的业务背景,来对航空公司进行客户价值分析。我们选择在一定时间内累积的飞行里程数(M)和客户在一定时间内乘坐舱位对应的折扣系数的平均值C来代替消费金额指标。此外,航空公司会员入会时间的长短在一定时间内会影响客户价值,模型中增加了客户关系长度指标L。
利用客户入会时长L、消费时间间隔R、消费频率F、飞行里程数M以及折扣系数的平均值C来作为航空公司识别客户价值指标,见表1,记为LRFMC模型。
表1:指标含义
指标 |
对应含义 |
L |
会员入会时间距离观测窗口结束的月数 |
R |
客户最后一次乘坐飞机距离观测窗口结束的月数 |
F |
客户在观测窗口乘坐飞机的次数 |
M |
客户在观测窗口内累计飞行里程数 |
C |
客户在观测窗口乘坐舱位对应的折扣系数的平均值C |
采用聚类分析的方法识别客户价值。通过对航空公司客户价值LRFMC五个指标进行K-Means聚类,识别最有价值客户。
2、分析流程
2.1分析流程
⑴从航空公司的数据源中进行数据提取;
⑵对数据进行数据探索以及数据预处理工作,包括数据的缺失值及异常值处理、数据的属性规约以及数据的变换等;
⑶对处理过的数据进行建模工作,基于旅客价值LRFMC模型进行客户分群,对各个客户进行特征提取,识别出有价值的客户;
⑷ 对不同价值的客户类别提供个性化的服务,并且制定相应的营销策略,使得公司的利益最大化。
具体数据分析流程如图1所示:
图1:LRFMC模型建模的总体流程
2.2数据抽取
选取时间宽度为两年的数据进行分析,抽取观测窗口有乘机记录的客户的详细数据形成历史数据。对后续新增客户的信息,按照后续新增数据最新的时间节点作为结束时间,形成新增数据。
2.3数据探索性分析
主要是进行缺失值分析和异常值分析,通过对数据的观察,发现原始数据中存在票价为空值,票价最小值为0、折扣率最小值为0、总飞行公里数大于0的记录,这个都是属于缺失值和异常值的范畴。
<textarea readonly="readonly" name="code" class="python">
#-*- coding: utf-8 -*-
#对数据进行基本的探索,返回缺失值以及最大值,最小值
import pandas as pd
datafile = 'data/air_data.csv' #航空原始数据文件
resultfile = 'explore_result.xls' #数据探索结果文件
#将数据导入
data = pd.read_csv(datafile,encoding='utf-8')
#查看数据的各个属性的相关信息
data.info()
#将每个属性的描述性统计量展示
explore=data.describe(percentiles=[],include='all').T
#计算属性对应的空值个数
explore['null']=len(data)-explore['count']
#选取部分探索内容
explore = explore[['null','max','min']]
#属性列名的重命名
explore.columns = [u'空值记录数',u'最大值',u'最小值']
#对索引命名
explore.index.name=u'属性名称'
#将探索的结果保存到excel文件
explore.to_excel(resultfile,header=True)
<textarea>
数据探索分析结果表(部分)
2.4数据预处理
2.4.1数据清洗
由于原始数据量比较大,上述被定义为缺失值和异常值的样本量很小,对问题的分学习影响不大,因此选择的是剔除缺失值和异常值。
<textarea readonly="readonly" name="code" class="python">
#-*- coding: utf-8 -*-
#数据清洗,过滤掉不符合规则的数据
import pandas as pd
datafile = 'data/air_data.csv'#航空数据源文件
cleanedfile = 'cleaned_data.csv'#数据被清洗后保存的文件
#导入航空客户数据原文件
data = pd.read_csv(datafile,encoding='utf-8')
#删除票价为空的记录
data = data[(data['SUM_YR_1'].notnull())&(data['SUM_YR_2'].notnull())]
#删除异常记录:保留票价非0,或者平均折扣率和总飞行公里数同时为0的记录
index1 = (data['SUM_YR_1']!=0)|(data['SUM_YR_2']!=0)
index2 = (data['SEG_KM_SUM']==0)&(data['avg_discount']==0)
data = data[index1|index2]
#导出结果
data.to_csv(cleanedfile)
<textarea>
2.4.2属性规约
基于航空公司客户价值的LRFMC模型,选择与LRFMC指标相关的6个属性,其中选取了LOAD_TIME(观测窗口的结束时间),FFP_DATE(观测窗口的开始时间),LAST_TO_END(最后一次乘机时间至观测窗口结束时长),FLIGHT_COUNT(观测窗口的飞行次数),SEG_KM_SUM(观测窗口的总飞行公里数),avg_discount(平均折扣率),删除其余不必要的属性。
2.4.3数据变换
⑴属性构造
由于在原始数据并没有完整的给出LRFMC模型的5个指标,需要通过原始变量提炼相应指标,具体的计算公式如下:
会员入会时间=观测窗口的结束时间-观测窗口的开始时间(单位:月)
L=LOAD_TIME- FFP_DATE
客户最近一次乘坐飞机距离窗口结束的月数=最后一次乘机时间至观测窗口结束时长(单位:月)
R= LAST_TO_END
客户在观测窗口乘坐飞机的次数=观测窗口的飞行次数(单位:次)
F= FLIGHT_COUNT
客户在观测时间内的累计飞行里程=观测窗口的总飞行公里数(单位:公里)
M= SEG_KM_SUM
客户在观测时间内乘坐舱位所对应的的折扣系数的平均值=平均折扣率(单位:无)
C= avg_discount
⑵数据的标准化处理
通过R语言中的summary函数来查看每个指标数据的分布情况,其数据取值范围如表2所示,发现五个指标的数据差异较大,为了消除数据数量级较大带来的影响,对数据进行了标准化处理。
表2:LRFMC指标取值范围
属性名称 |
L |
R |
F |
M |
C |
最大值 |
12.17 |
1.0 |
2.00 |
368 |
0.0000 |
中位数 |
42.57 |
105.0 |
7.00 |
10198 |
0.7121 |
均值 |
49.62 |
172.5 |
11.97 |
17320 |
0.7221 |
最小值 |
114.57 |
731.0 |
213.00 |
580717 |
1.5000 |
<textarea readonly="readonly" name="code" class="python">
#-*- coding: utf-8 -*-
#属性规约,删除冗余属性,只保留相关属性
import pandas as pd
import numpy as np
datafile = 'cleaned_data.csv'#被清洗后的航空数据文件
resultfile = 'scale_data.csv'#数据被属性规约后保存的文件
#导入被清洗过后的数据文件(选取的数据子集)
data=pd.read_csv(datafile,encoding='utf-8')
#编写函数:属性规约、数据变换函数
def reduction_data(data):data = data[['LOAD_TIME','FFP_DATE','FLIGHT_COUNT','avg_discount','SEG_KM_SUM','LAST_TO_END']]#数据变换:将结束时间转换为时间类型d_loadtime=pd.to_datetime(data['LOAD_TIME'])#数据变换:将入会时间转换为时间类型d_ffpdate=pd.to_datetime(data['FFP_DATE'])#客户入会时长需要另外计算,入会时长按照月来进行计算recency=d_loadtime-d_ffpdate #得到的是天数temp_data=data.copy()#将入会时长由天数转为月数temp_data['L']=recency.map(lambda x: x / np.timedelta64(30 * 24 * 60, 'm'))temp_data['R'] = data['LAST_TO_END']temp_data['F'] = data['FLIGHT_COUNT']temp_data['M'] = data['SEG_KM_SUM']temp_data['C'] = data['avg_discount']new_data = temp_data[['L', 'R', 'F', 'M', 'C']]return new_data#调用属性规约、变换函数,得到建模数据new_data
new_data = reduction_data(data)
#查看LRFMC各个指标的取值范围,判断是否需要进行标准化
new_data.describe()
<textarea>
<textarea readonly="readonly" name="code" class="python">
#由以上结果可知5个指标的取值范围差异太大,需要标准化处理
ascore_data=(new_data-new_data.mean(axis=0))/(new_data.std(axis=0))
#将属性列名重命名
ascore_data.columns=['ZL','ZR','ZF','ZM','ZC']
#将标准化后的数据保存到excel文件
ascore_data.to_csv(resultfile,index=False)
<textarea>
2.4.4模型构建
LRFMC模型主要由两个部分组成,第一部分是根据航空公司业务指标,对客户进行聚类分群;第二部分是对每个业务群进行特征分析,分析客户价值,并采取特定的营销手段,来使得公司的利润最大化。
<textarea readonly="readonly" name="code" class="python">
#-*- coding: utf-8 -*-
#K-Means聚类算法
import pandas as pd
from sklearn.cluster import KMeans #导入K均值聚类算法
inputfile = 'scale_data.csv'
#聚类数目
k=5
#将标准化后的数据导入建模
data = pd.read_csv(inputfile,encoding="utf-8")
#建立模型
kmodel=KMeans(n_clusters=k,n_jobs=4)
#训练模型
kmodel.fit(data)
r1 = pd.Series(kmodel.labels_)
#每个聚类对应的样本个数
r1=r1.value_counts()
#聚类的中心
r2=pd.DataFrame(kmodel.cluster_centers_)
#将r1和r2进行列合并
r=pd.concat([r2,r1],axis=1)
#列名命名
r.columns=list(data.columns)+['聚类个数']
#起索引名称
r.index.name='聚类类别'
#重新设置索引
r.index=([u'客户群体1',u'客户群体2',u'客户群体3',u'客户群体4',u'客户群体5'])
#将聚类结果保存到excel文件
r.to_excel('result_cluster.xls')
<textarea>
⑴客户聚类结果
对数据进行聚类分群如下表所示:
表3:客户聚类结果
聚类类别 |
聚类个数 |
聚类中心 |
||||
ZL |
ZR |
ZF |
ZM |
ZC |
||
客户群1 |
5336 |
0.48296123 |
-0.79944875 |
2.48351216 |
2.42472275 |
0.3087468 |
客户群2 |
15745 |
1.16049784 |
-0.37732916 |
-0.37732916 |
-0.09498699 |
-0.1557095 |
客户群3 |
12134 |
-0.31370040 |
1.68554920 |
-0.57392324 |
-0.53674300 |
-0.1743790 |
客户群4 |
24666 |
-0.70030743 |
-0.41494899 |
-0.16116894 |
-0.16107783 |
-0.2530821 |
客户群5 |
4170 |
0.05542063 |
-0.00249783 |
-0.22544385 |
-0.22944009 |
2.1972694 |
⑵客户价值分析
图2:客户群特征分析图
重要保持客户(客户群1):
这类客户的平均折扣率(C)较高(一般所乘航班的舱位的等级较高),最近乘坐过本公司航班(R)低,乘坐的次数(F)或里程(M)较高。他们是公司的高价值客户,是最理想的客户类型,对航空公司的贡献率大,但是所占的比例较小。
航空公司应当优先将资源投放在他们身上,对他们做到一对一精准营销,比如提供相应的优惠政策,提高这类客户的忠诚度和满意度,尽可能延长这类客户的高消费水平。
重要发展客户(客户群5):
这类客户的平均折扣率(C)较高,最近乘坐过本公司航班(R)低,乘坐的次数(F)或里程(M)较低。这类客户入会时长(L)短,他们是公司的潜在价值客户。
航空公司在运营过程中也要相应加大对这部分客户的投入,比如以短信和邮件的方式询问客户是否满意、提供适当的优惠服务等,加强这类客户的满意度,使他们逐渐成为公司的忠实客户。
重要挽留客户(客户群2):
这类客户的平均折扣率(C)、乘坐的次数(F)或里程(M)较高,但是已经较长时间已经没有乘坐过本公司航班,即(R)较高或者乘坐的频率变小,他们是公司的重要挽留客户。
航空公司在运营过程中要积极推测这类客户的异常情况,进行竞争分析,观察其他航空公司有什么营销策略,然后采取有针对性的营销手段,延长客户的生命周期。
一般和低价值客户(客户群3、4):
这类客户的平均折扣率(C)较低,最近乘坐过本公司航班(R)低,乘坐的次数(F)或里程(M)较低。入会时长(L)也较短,因此可能只是在机票打折的时候才会乘坐本航班。
重要发展客户、重要保持客户、重要挽留客户可以称作为客户生命周期管理中的发展期、稳定期、衰退期三个阶段。
⑶模型应用
①会员的升级和保级
对那些接近但尚未达到的高消费客户采取一定的促销活动,刺激他们通过消费达到相应的升级标准。
②首次兑现
对那些接近但尚未达到首次兑现机票的会员,对他们进行提醒,使他们达到首次兑现标准。
三、数据清洗、建模、评估的个人总结
1、 数据简单查看
(1)查看数据的维度:shape
(2)查看数据的属性(列名):columns
(3)查看数据类型:info
(4)查看前5列:head()
2、 数据缺失值处理
(1)查看数据的缺失值情况
explore=data.describe(percentiles=[],include=’all’).T
explore[‘null’]=len(data)-explore[‘count’]
explore=explore[[‘null’,’min’,’max’]]
(2)缺失值的处理
1.插补法:
用该属性的平均值/中位数/众数进行插补data[1].fillna(data[1].mean())
用固定值data.fillna(value=0)
最近邻插补法 data[1].fillna(method=”ffill|bfill”)
2.直接删除data.dropna() #将函数有缺失值的一行记录删除
3.保留缺失值不处理
3、数据异常值处理
(1)describe()函数进行简单查看,比如:最大值、最下值等
(2)boxplot()函数绘制箱线图
(3)异常值处理
删除:将函数异常值的记录删除
视为缺失值来处理
平均值修正:可用前后两个观测值的平均值修正
保留不处理
4、数据变换
(1)结合业务先删除那些和分析无关的指标
(2)corr()函数计算数据样本的相关系数矩阵
(3)删除重复值
#查看c1和c2列重复数据和非重复数据的计数分布
df.duplicated(subset=[‘c1’,’c2’],keep=”first”).value_counts()
#删除后面重复值,默认保留第一个
df.drop_duplicates(subset=[“c1”,”c2”],keep=”first”,inplace=True)
(4)将数据转换成适当的格式,以适应数据挖掘任务及算法
(5)将数据标准化
注:不同评价指标往往有不同的量纲,数值间的差异可能很大,不进行处理可能会影响到数据分析的结果。
最小——最大规范化 (data-data.min())/ (data.max()-data.min())
零——均值规范化 (data-data.mean()) /data.std()
5、模型评估
(1)混淆矩阵
查准率/准确率 = (挑出的西瓜有多少比例是好瓜)
查全率/召回率 = (好瓜中有多少比例被挑选出来)
(2)ROC曲线
真正率 = (查全率)——> 纵坐标
假正率 = (1-真反率)——>横坐标
(3)AUC值
被定义为ROC曲线下的面积,这个值不会大于1,AUC作为数值可以直观评价分类器的好坏,值越大越好。
Python:航空公司客户价值分析实战相关推荐
- python航空公司客户价值分析
1.航空公司部分数据特征说明及LRFMC模型介绍及K-Means聚类算法介绍 2.开始数据分析 - 数据探索 Part Ⅰ:数据预处理 数据清洗 数据集成 数据归约 数据变换 Part Ⅱ:建模分析和 ...
- 《Python数据分析与挖掘实战》第7章——航空公司客户价值分析(kmeans)
本文是基于<Python数据分析与挖掘实战>的实战部分的第七章的数据--<航空公司客户价值分析>做的分析. 旨在补充原文中的细节代码,并给出文中涉及到的内容的完整代码. 1)在 ...
- 航空公司客户价值分析python实战
航空公司客户价值分析(K_Means聚类分析) 最近在看黄红梅.张良均老师主编的<Python数据分析与应用>,拿书里的案例练练手. 本案例将使用航空公司客户数据,结合RFM模型,采用K_ ...
- Python数据挖掘:利用聚类算法进行航空公司客户价值分析
无小意丶 个人博客地址:无小意 知乎主页:无小意丶 公众号: 数据路(shuju_lu) 刚刚开始写博客,希望能保持关注,会继续努力. 以数据相关为主,互联网为辅进行文章发布. 本文是<Pyth ...
- Python数据挖掘-RFM模型K-means聚类分析-航空公司客户价值分析
使用教材:<Python数据分析与挖掘实战> 模型:RFM模型 算法:K-means聚类:其他方法还用到了层次聚类 数据:需要数据的可以评论里call. 内容: (1)案例: 航空公司客户 ...
- python客户价值分析_Python数据分析与应用航空公司客户价值分析.ppt
Python数据分析与应用航空公司客户价值分析.ppt 大数据,成就未来 * 大数据挖掘专家 * 大数据挖掘专家 大数据,成就未来 航空公司客户价值分析 * 目录 分析航空公司现状 1. 行业内竞争 ...
- 数据分析与挖掘实战-航空公司客户价值分析
航空公司客户价值分析 项目背景 信息时代的到来注定营销焦点从产品中心转到了用户中心,客户关系管理成为企业的核心问题. 客户关系管理的关键问题则是客户分类,通过分类区分客户价值的有无和高低,针对不同类别 ...
- python客户价值分析_航空公司客户价值分析实例
第8章 航空公司客户价值分析 传统的识别客户价值应用最广泛的模型主要通过3个指标(最近消费时间间隔(Recency).消费频率(Frequency)和消费金额(Monetary))来进行客户细分,识别 ...
- 数据分析实战:航空公司客户价值分析
一.背景目标 通过对航空公司客户数据分析,对客户进行分类: 比较不同客户的客户价值,并制定不同的服务和营销策略 二.数据探索分析 2.1 数据概况 数据时间范围: 2012年4月1日至2014年3月3 ...
最新文章
- python3 dict 转 json 不ascii转码 去除空格
- JNI开发之锅炉压力监控器
- XCode6 生成prefix.pch文件
- 深入理解 sudo 与 su 之间的区别
- java tree类子项的添加和删除_使用Java实现二叉树的添加,删除,获取以及遍历...
- JS-键盘事件之方向键移动元素
- Jenkins 使用 maven 出现C:\Windows\system32\config\systemprofile的解决
- 水电缴费系统php源码_水电缴费管理系统
- 修复 Windows 10 设置界面里面混乱的语言翻译
- [车联网安全自学篇] Android安全之Android中常用权限手册「必备」
- Jupyter Notebook切换conda虚拟环境
- mysql 分数相加_分数求和
- matlab中Add什么意思,add detail是什么意思
- 风雨砥砺,岁月如歌——Angular项目组件发布概要
- layui 登录页面样式+短信接口
- win7 系统下实现音量控制
- 2021年,薪酬最高的5种编程语言
- mSystems:华南农大揭示水稻SST基因调控根际微生物协同耐盐机制
- MySQL5.7执行mysqld命令出现Can‘t change dir to ‘C:\Program Files\MySQL\MySQL Server 5.7\data\‘错误
- 视频号打造个人ip,普通人如何逆袭翻盘