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

7.1 背景与挖掘目标

信息时代的来临使得企业营销焦点从产品中心转变为客户中心,客户关系管理成为企业的核心问题。通过客户分类,区分无价值客户、高价值客户,企业针对不同价值的客户制定优化的个性化服务方案,采取不同营销策略,将有限营销资源集中于高价值客户,实现企业利润最大化目标。
通过建立合理的客户价值评估模型,对客户进行分群,分析比较不同客户群的客户价值,并制定相应的营销策略,对不同客户群提供个性化的客户服务是必须和有效的。
挖掘目标:
1)借助航空公司客户数据,对客户进行 分类;
2)对不同的客户类别进行特征分析,比较不同类客户的客户价值;
3)对不同价值的客户类别提供个性化服务,制定相应的营销策略。

7.2 分析方法与过程

识别客户价值应用最广泛的模型是通过3个指标(最近消费时间间隔(Recency)、消费频率(Frequency),消费金额(Monetary))来进行客户细分,识别出高价值的客户,简称RFM模型
在RFM模型中,消费金额表示一段时间内,客户购买该企业产品金额的总和。由运输距离、舱位等级等对航空票价的影响,这个指标不适用于航空公司的客户价值分析。因此选择客户在一定时间内累积的飞行里程M和客户在一定时间内乘坐舱位所对应的折扣系数的平均值C两个指标代替消费金额。考虑航空公司会员入会时间的长短在一定程度上能够影响客户价值,所以模型中增加客户关系长度L,作为区分客户的另一指标。
因此本案例的客户价值标航空公司LRFMC模型如下:
1)L:会员入会时间距观测窗口结束的月数
2)R:客户最近一次乘坐公司飞机距观测窗口结束的月数
3)F:客户在观测窗口内乘坐公司飞机的次数
4)M:客户在观测窗口内累计的飞行里程
5)C:客户在观测窗口内乘坐舱位所对应的折扣系数的平均值

若采用传统RFM模型分析的属性分箱方法,该方法是依据属性的平均值进行划分,其中大于平均值的表示为↑,小于平均值的表示↓。但由于本案例有五个指标,导致细分的客户群太多,提高了针对性营销的成本,因此采用聚类的方法识别客户聚类。通过对航空公司客户价值的LRFMC模型的五个指标进行K-Means聚类,识别出最有价值客户。

数据挖掘步骤:
1)从航空公司的数据源中进行选择性抽取与新增数据抽取分别形成历史数据和增量数据。
2)对步骤1)中形成的两个数据集进行数据探索分析与预处理,包括数据缺失值与异常值的探索分析,数据的属性规约、清洗和变换。
3)利用步骤2)中形成的已完成数据预处理的建模数据,基于旅客价值LRFMC模型进行客户分群,对各个客户群进行特征分析,识别出有价值的客户。
4)针对模型结果得到不同价值的客户,采用不同的营销手段,提供定制化的服务。

7.2.1 数据抽取

以2014-03-31为结束时间,选取宽度为两年的时间段作为分析观测窗口,抽取观测窗口内有乘机记录的所有客户的详细数据形成历史数据。对于后续新增的客户详细信息,以后续新增数据中最新的时间点作为结束时间,采用上述同样的方法进行抽取,形成增量数据

7.2.2 数据探索分析

首先对数据进行缺失值分析与异常值。

import pandas as pddatafile = './demo/data/air_data.csv'
resultfile = './demo/tmp/explore.xlsx'data = pd.read_csv(datafile, encoding='utf-8')  # 读取原始数据,指定UTF-8编码
explore = data.describe(percentiles=[], include='all').T
# 包括对数据的基本描述,percentiles参数是指定计算多少的分为数表;T是转置,转置后更方便查阅
# print(explore)
explore['null'] = len(data)-explore['count']  # describe函数自动计算非空值数,需要手动计算空值数explore = explore[['null', 'max', 'min']]
explore.columns = ['空值数', '最大值', '最小值']  # 表头重命名
'''
describe()函数自动计算的字段有count(非空值数)、unique(唯一值数)、top(频数最高者)、freq(最高频数)、mean(平均值)、std(方差)、
min(最小值)、50%(中位数)、max(最大值)
'''explore.to_excel(resultfile)  # 导出结果

对数据观察发现原始数据中存在票价为空值,票价最小值为0、折扣率最小值为0、总飞行公里数大于0的记录。票价为空值的数据可能是客户不存在乘机记录造成,其他的数据可能是客户乘坐0折机票或者积分兑换产生的。

7.2.3 数据预处理

本案例主要采用数据清洗、属性规约与数据变换的预处理方法。
1.数据清洗
由于原始数据量大,缺失值数据所占比例较小,对于问题影响不大,因此对其进行丢弃处理:
1)丢弃票价为空的记录。
2)丢弃票价为0、平均折扣率不为0、总飞行公里数大于0的记录。(坐过该公司的飞机,且票价为0但折扣率不为0的异常值)

import pandas as pddatafile = './demo/data/air_data.csv'
cleanedfile = './demo/tmp/data_cleaned.csv'data = pd.read_csv(datafile, encoding='utf-8')  # 读取原始数据,指定UTF-8编码
data = data[data['SUM_YR_1'].notnull()*data['SUM_YR_2'].notnull()]  # 票价非空值才保留,SUM_YR是观测窗口的票价收入# 只保留票价非零的,或者平均折扣率与总飞行公里数同时为0的记录
index1 = data['SUM_YR_1'] != 0
index2 = data['SUM_YR_2'] != 0
index3 = (data['SEG_KM_SUM'] == 0) & (data['avg_discount'] == 0)  # SEG_KM_SUM是观测窗口的总飞行公里数,avg_discount是平均折扣率
data = data[index1 | index2 | index3]data.to_csv(cleanedfile)

2.属性规约
原始数据中属性太多,根据航空公司客户价值LRFMC模型,选择与LRFMC指标相关的6个属性:FFP_DATE、LOAD_TIME、FLIGHT_COUNT、AVG_DISCOUNT、SEG_KM_SUM、LAST_TO_END。

# 属性规约
selectedfile = './demo/tmp/data_selected.csv'
data = data[['LOAD_TIME', 'FFP_DATE', 'LAST_TO_END', 'FLIGHT_COUNT', 'SEG_KM_SUM', 'avg_discount']]  # 选取指标相关数据
data.to_csv(selectedfile)

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
客户在观测时间内乘坐舱位所对应的折扣系数的平均值=平均折扣率[单位:无]

import numpy as np
# 属性构造
changedfile = './demo/tmp/data_changed.csv'
lt = pd.to_datetime(data['LOAD_TIME'])  # 将LOAD_TIME转为日期属性
fpd = pd.to_datetime(data['FFP_DATE'])  # 将FFP_DATE转为日期属性
data['LOAD_TIME'] = lt - fpd  # 得到日期偏移量
data['LOAD_TIME'] = data['LOAD_TIME'].map(lambda x: x/np.timedelta64(1,'M'))  # 计算L,转换为月份精度
del(data['FFP_DATE'])  # 删除FFP_DATE列
data.columns = ['L', 'R', 'F', 'M', 'C']  # 表头重命名
# print(data)
data.to_csv(changedfile, index=False)explore = data.describe(percentiles=[], include='all')
explore = explore.loc[['min', 'max']]
explore.index = ['最小值', '最大值']  # 表头重命名
print(explore)


从表中数据发现,5个指标的取值范围数据差异较大,为了消除数量级数据带来的影响,需要对数据进行标准化处理。

import pandas as pddatafile = './demo/tmp/data_changed.csv'  # 需要进行标准化的数据文件
zscoredfile = './demo/tmp/zscored_data.xlsx'  # 标准差化后的数据存储路径文件# 标准化处理
data = pd.read_csv(datafile)
data = (data - data.mean(axis=0))/(data.std(axis=0))  # 标准化变换
data.columns = ['Z'+i for i in data.columns]  # 表头重命名
print(data)data.to_excel(zscoredfile, index=False)

标准化后的部分数据:

7.2.4 模型构建

客户价值分析模型构建主要又两部分构成,第一个部分根据航空公司客户5个指标的数据,对客户进行聚类分群。第二个部分结合业务对每个客户群进行特征分析,分析其客户价值,并对每个客户群进行排名
1.客户聚类
采用K-Means聚类算法对客户数据进行客户分群,聚成5类(需要结合业务的理解与分析来确定客户的类别数量)

# 读取数据并进行聚类分析
outputfile = './demo/tmp/cluster_result.xlsx'
data = pd.read_excel(inputfile)  # 读取数据# 调用K-Means算法,进行聚类分析
kmodel = KMeans(n_clusters=k)
kmodel.fit(data)  # 训练模型# 储存结果
cc = pd.DataFrame(kmodel.cluster_centers_, columns=['ZL','ZR','ZF','ZM','ZC'], index=['客户群1', '客户群2','客户群3', '客户群4', '客户群5']) # 查看聚类中心
# print(cc)
labels = kmodel.labels_  # 查看各样本对应的类别
# print(labels)
# print(pd.Series(kmodel.labels_).value_counts().sort_index())
labels = pd.Series(labels).value_counts().sort_index()
# print(labels)
df = pd.DataFrame(labels)  # 创建df对象保存结果
df.columns = ['聚类个数']
df.index = ['客户群1', '客户群2', '客户群3', '客户群4', '客户群5']df = pd.concat([df, cc], axis=1)  # 按列标签合并两个表格
# print(df)
df.to_excel(outputfile)


2.客户价值分析
对聚类结果画雷达图

#画出特征雷达图,代码接KMeans_cluster.pyimport numpy as np
import matplotlib.pyplot as plt
import matplotlib as mplmpl.rcParams['font.sans-serif'] = ['KaiTi', 'SimHei', 'FangSong']  # 汉字字体,优先使用楷体,如果找不到楷体,则使用黑体
mpl.rcParams['font.size'] = 12  # 字体大小
mpl.rcParams['axes.unicode_minus'] = False  # 正常显示负号labels = data.columns  #标签
print(labels)
k = 5 #数据个数
plot_data = kmodel.cluster_centers_
print(plot_data)
color = ['b', 'g', 'r', 'c', 'y'] #指定颜色angles = np.linspace(0, 2*np.pi, k, endpoint=False)
plot_data = np.concatenate((plot_data, plot_data[:,[0]]), axis=1) # 闭合
angles = np.concatenate((angles, [angles[0]])) # 闭合
# print(angles)fig = plt.figure()
ax = fig.add_subplot(111, polar=True) #polar参数!!
for i in range(len(plot_data)):ax.plot(angles, plot_data[i], 'o-', color = color[i], label = '客户群'+str(i+1), linewidth=2)# 画线ax.set_rgrids(np.arange(0.01, 4.0, 0.5), np.arange(-1, 3.0, 0.5), fontproperties="SimHei")
ax.set_thetagrids(angles[0:5] * 180/np.pi, labels, fontproperties="SimHei")
plt.legend(loc = 4)
plt.show()

这里每一圈的数值是有问题的。。但不知道怎么调整,数值主要以上面的表格为准,雷达图提供一个大概分布,并且由于每次聚类后的类标号都不同。所以分析还是根据书上的图来

根据图分析得到客户群特征描述表:

群类别 优势特征 弱势特征
客户群1 F(最大) M(最大) R(最小)
客户群2 L(最大) F(最小) M(最小)
客户群3 F(最小) M(最小) R (最大)
客户群4 L(最小) C(最小)
客户群5 C R(最小) F(次小) M(次小)

再次复述五个指标的含义为:平均折扣率(C)、最近乘坐过本公司航班(R)、乘坐次数(F)、里程(M)、入会时长(L)
因此定义五个等级的客户类别:
1)重要保持客户:这类客户C较高,R低,F或M较高。对这类用户,公司应优先将资源投放到他们身上,对他们进行差异化管理和一对一营销,提高这类客户的忠诚度和满意度,尽可能延长这类客户的高水平消费。
2)重要发展客户:这类客户C较高,R低,但F或M较低,L短,是潜在价值客户。公司要努力促使这类客户增加在本公司的乘机消费和合作伙伴处的消费。通过客户价值的提升,加强这类客户的满意度,提高他们转向竞争对手的转移成本,使他们逐渐成为公司的忠诚客户。
3)重要挽留客户:这类客户C、F或M较高,但R高或乘坐频率小。公司应该根据这些客户的最近消费时间、消费次数的变化情况,推测客户消费的异动状况,并列出客户名单,对其重点联系,采取一定营销手段,延长客户的生命周期。
4)一般与低价值客户:这类客户的C很低,R高,F或M较低,L短。


其中重要发展客户、重要保持客户、重要挽留客户这三类重要客户分别可以归入客户生命周期管理的发展期、稳定期、衰退期这三个阶段。
对各类客户群进行客户价值排名:

客户群 排名 排名含义
客户群1 1 重要保持客户
客户群5 2 重要发展客户
客户群2 3 重要挽留用户
客户群4 4 一般客户
客户群3 5 低价值客户

本模型采用历史数据进行建模,随着时间的变化,分析数据的观测窗口也在变换。根据经验建议:每个半年训练一次模型比较合适。如果增量数据的实际情况与判断结果差异大,需要业务部门重点关注,查看变化大的原因以及确认模型的稳定性。如果模型稳定性变化大,需要重新训练模型进行调整。

python数据与挖掘实战学习:实战篇 第七章航空公司客户价值分析笔记相关推荐

  1. 《Python数据分析与挖掘实战》第7章——航空公司客户价值分析(kmeans)

    本文是基于<Python数据分析与挖掘实战>的实战部分的第七章的数据--<航空公司客户价值分析>做的分析. 旨在补充原文中的细节代码,并给出文中涉及到的内容的完整代码. 1)在 ...

  2. python客户价值分析_航空公司客户价值分析实例

    第8章 航空公司客户价值分析 传统的识别客户价值应用最广泛的模型主要通过3个指标(最近消费时间间隔(Recency).消费频率(Frequency)和消费金额(Monetary))来进行客户细分,识别 ...

  3. 数据分析与挖掘实战-航空公司客户价值分析

    航空公司客户价值分析 项目背景 信息时代的到来注定营销焦点从产品中心转到了用户中心,客户关系管理成为企业的核心问题. 客户关系管理的关键问题则是客户分类,通过分类区分客户价值的有无和高低,针对不同类别 ...

  4. 航空公司客户价值分析python实战

    航空公司客户价值分析(K_Means聚类分析) 最近在看黄红梅.张良均老师主编的<Python数据分析与应用>,拿书里的案例练练手. 本案例将使用航空公司客户数据,结合RFM模型,采用K_ ...

  5. Wireshark数据抓包分析(网络协议篇)第1章网络协议抓包概述

    Wireshark数据抓包分析(网络协议篇)第1章网络协议抓包概述 网络协议是用于不同计算机之间进行网络通信的.网络协议是网络上所有设备(如网络服务器.计算机.交换机.路由器等)之间通信规则的集合,它 ...

  6. 数据分析实战:航空公司客户价值分析

    一.背景目标 通过对航空公司客户数据分析,对客户进行分类: 比较不同客户的客户价值,并制定不同的服务和营销策略 二.数据探索分析 2.1 数据概况 数据时间范围: 2012年4月1日至2014年3月3 ...

  7. Python数据挖掘:利用聚类算法进行航空公司客户价值分析

    无小意丶 个人博客地址:无小意 知乎主页:无小意丶 公众号: 数据路(shuju_lu) 刚刚开始写博客,希望能保持关注,会继续努力. 以数据相关为主,互联网为辅进行文章发布. 本文是<Pyth ...

  8. Python数据挖掘-RFM模型K-means聚类分析-航空公司客户价值分析

    使用教材:<Python数据分析与挖掘实战> 模型:RFM模型 算法:K-means聚类:其他方法还用到了层次聚类 数据:需要数据的可以评论里call. 内容: (1)案例: 航空公司客户 ...

  9. python航空公司客户价值分析

    1.航空公司部分数据特征说明及LRFMC模型介绍及K-Means聚类算法介绍 2.开始数据分析 - 数据探索 Part Ⅰ:数据预处理 数据清洗 数据集成 数据归约 数据变换 Part Ⅱ:建模分析和 ...

  10. python客户价值分析_Python数据分析与应用航空公司客户价值分析.ppt

    Python数据分析与应用航空公司客户价值分析.ppt 大数据,成就未来 * 大数据挖掘专家 * 大数据挖掘专家 大数据,成就未来 航空公司客户价值分析 * 目录 分析航空公司现状 1. 行业内竞争 ...

最新文章

  1. 16 级高代 II 思考题十的多种证明
  2. 180608-Git工具之Stash
  3. WINCE6.0+S3C2443下WatchDog学习
  4. Hibernate中的3中状态
  5. 使用Project客户端和Project Server进行项目管理 - android开发实例 - 博客园
  6. Linux基础知识大全(持续更新)
  7. 手把手教你电脑下载b站视频
  8. sucks倒计时插件笔记
  9. 劝你别把开源的数据分析项目写在简历上了!!!
  10. Java中的private关键字
  11. 教育类电影:《爆裂鼓手》
  12. Windows修改注册表实现开机自启动
  13. HDU6143 Killer Names(数论)
  14. 教学管理系统的设计与实现(二)(数据库设计)
  15. File和path的用法
  16. 【Matlab数理统计知识点合集】新手入门第十三天
  17. 深入浅出 proxy 系列之一:Proxy 是什么
  18. (二) 简单认识Emacs
  19. 第三方直接订阅公众号的功能
  20. 这套表情包,居然开源了

热门文章

  1. box-sizing
  2. cubeIDE快速开发流程
  3. PHPWord 表格居中和合并单元格
  4. 程序员副业那些事:聊聊出书和录视频
  5. 此电脑创建桌面快捷方式
  6. 单播、多播(组播)和广播解释
  7. 创业19年的湖南竞网如何拥抱数字化转型,按下成长加速键?
  8. 获取并处理中文维基百科语料
  9. [转]c# 语音卡控制--语音卡电话呼叫系统
  10. 论文发表如何选择期刊