数据挖掘案例-航空公司客户价值分析

文章目录
- 1. 案例背景
- 2. 分析方法与过程
- 2.1 分析流程步骤
- 2.2 分析过程
- 1. 数据探索分析
- 2. 描述性统计分析
- 3. 分布分析
- 1.客户基本信息分布分析
- 2. 客户乘机信息分布分析
- 3. 客户积分信息分布分析
- 4. 相关性分析
- 3. 数据预处理
- 3.1 数据清洗
- 3.2 属性约束
- 3. 3 数据转换
- 4. 模型构建
- 4. 1 客户聚类
- 4. 2 客户价值分析
- 4.3 模型应用
- 5. 总结思考
1. 案例背景
信息时代的来临使得企业营销焦点从产品中心转变为客户中心,客户关系管理成为企业的核心问题。客户关系管理的关键问题是客户分类,通过客户分类,区分无价值客户、高价值客户,企业针对不同价值的客户制定优化的个性化服务方案,采取不同营销策略,将有限营销资源集中于高价值客户,实现企业利润最大化目标。准确的客户分类结果是企业优化营销资源分配的重要依据,客户分类越来越成为客户关系管理中亟待解决的关键问题之一。
面对激烈的市场竞争,各个航空公司都推出了更优惠的营销方式来吸引更多的客户,国内某航空公司面临着常旅客流失、竞争力下降和航空资源未充分利用等经营危机。通过建立合理的客户价值评估模型,对客户进行分群,分析比较不同客户群的客户价值,并制定相应的营销策略,对不同的客户群提供个性化的客户服务是必须的和有效的。结合该航空公司已积累的大量的会员档案信息和其乘坐航班记录,实现以下目标。
•借助航空公司客户数据,对客户进行分类。
•对不同的客户类别进行特征分析,比较不同类客户的客户价值。
•对不同价值的客户类别提供个性化服务,制定相应的营销策略。
2. 分析方法与过程
2.1 分析流程步骤
1.抽取航空公司2012年4月1日至2014年3月31日的数据。
2.对抽取的数据进行数据探索分析与预处理,包括数据缺失值与异常值的探索分析,数据清洗,特征构建,标准化等操作。
3.基于RFM模型,使用K-Means算法进行客户分群。
4.针对模型结果得到不同价值的客户,采用不同的营销手段,提供定制化的服务。
总体流程:

2.2 分析过程
1. 数据探索分析
初始数据:

从航空公司系统内的客户基本信息、乘机信息以及积分信息等详细数据中,根据末次飞行日期(LAST_FLIGHT_DATE),以2014年3月31日为结束时间,选取宽度为两年的时间段作为分析观测窗口,抽取观测窗口2012年4月1日至2014年3月31日内有乘机记录的所有客户的详细数据形成历史数据,总共62988条记录。航空公司数据属性如下表所示。


2. 描述性统计分析
-
通过对原始数据观察发现数据中存在票价为空值的记录,同时存在票价最小值为0、折扣率最小值为0但总飞行公里数大于0的记录。票价为空值的数据可能是客户不存在乘机记录造成。其它的数据可能是客户乘坐0折机票或者积分兑换造成。
-
每列属性观测值中空值个数、最大值、最小值,如下表所示。
| 属性名称 | 空值记录数 | 最大值 | 最小值 |
|---|---|---|---|
| SUM_YR_1 | 551 | 239560 | 0 |
| SUM_YR_2 | 138 | 234188 | 0 |
| … | … | … | … |
| SEG_KM_SUM | 0 | 580717 | 368 |
| avg_discount | 0 | 1.5 | 0 |
实现代码:

3. 分布分析
分别从客户基本信息、乘机信息、积分信息3个角度进行数据探索,寻找客户的分布规律。
1.客户基本信息分布分析
选取客户基本信息中入会时间、性别、会员卡级别和年龄字段进行探索分析,探索客户的基本信息分布状况,得到各年份会员入会人数直方图、会员性别比例饼图、会员各级别人数条形图、会员年龄分布箱型图。
- 会员入会年份分析

实现代码:

- 会员性别分析

实现代码:

- 会员级别分析

代码实现:

2. 客户乘机信息分布分析
选取最后一次乘机至结束的时长、客户乘机信息中的飞行次数、总飞行公里数进行探索分析
- 会员年纪分布

实现代码:

- 客户飞行数据分析
选取最后一次乘机至结束的时长、客户乘机信息中飞行次数、总飞行公里数进行探索分析,探索客户的乘机信息分布状况。
客户最后一次乘机至结束的时长、客户乘机信息中飞行次数、总飞行公里数的箱线图


实现代码:

3. 客户积分信息分布分析
选取积分兑换次数、总累计积分进行探索分析,探索客户的积分信息分布状况
客户积分兑换次数直方图和总累计积分分布箱线图。


代码实现:

4. 相关性分析
客户信息的属性间存在相关性,选取入会时间、会员卡级别、客户年龄、飞行次数、总飞行公里数、最近一次乘机至结束时长、积分兑换次数、总累计积分属性,通过相关系数矩阵与热力图分析各属性间的相关性。
相关性矩阵:

热力图:

实现代码:

3. 数据预处理
数据预处理方法:

3.1 数据清洗
通过对数据观察发现原始数据中存在票价为空值,票价最小值为0、折扣率最小值为0、总飞行公里数大于0的记录。票价为空值的数据可能是客户不存在乘机记录造成。其他的数据可能是客户乘坐0折机票或者积分兑换造成。由于原始数据量大,这类数据所占比例较小,对于问题影响不大,因此对其进行丢弃处理。同时,数据探索时发现部分年龄大于100记录,也进行丢弃处理,具体处理方法如下。
(1) 丢弃票价为空的记录。
(2) 保留票价不为0的,或者平均折扣率不为0且总飞行公里数大于0的记录。
(3) 丢弃年龄大于100的记录。
使用pandas对满足清洗条件的数据进行丢弃,处理方法为满足清洗条件的一行数据全部丢弃。
代码实现:

3.2 属性约束
通过航空公司客户数据识别不同价值的客户,识别客户价值应用最广泛的模型是RFM模型。
- RFM 模型介绍
-
R(Recency)指的是最近一次消费时间与截止时间的间隔。通常情况下,最近一次消费时间与截止时间的间隔越短,对即时提供的商品或是服务也最有可能感兴趣。
-
F(Frequency)指顾客在某段时间内所消费的次数。可以说消费频率越高的顾客,也是满意度越高的顾客,其忠诚度也就越高,顾客价值也就越大。
-
M(Monetary)指顾客在某段时间内所消费的金额。消费金额越大的顾客,他们的消费能力自然也就越大,这就是所谓“20%的顾客贡献了80%的销售额”的二八法则。
- RFM 模型解读
RFM模型包括3个特征,无法用平面坐标系来展示,所以这里使用三维坐标系进行展示,如图 所示,x轴表示R特征(Recency),y轴表示F特(Frequency),z轴表示M指标(Monetary)。每个轴一般会用5级表示程度,1为最小,5为最大

- 航空公司客户价值分析的 LRFMC 模型
在RFM模型中,消费金额表示在一段时间内,客户购买该企业产品金额的总和。由于航空票价受到运输距离,舱位等级等多种因素影响,同样消费金额的不同旅客对航空公司的价值是不同的,比如一位购买长航线,低等级舱位票的旅客与一位购买短航线,高等级舱位票的旅客相比,后者对于航空公司而言价值可能更高。因此这个特征并不适合用于航空公司的客户价值分析。
客户关系长度L,消费时间间隔R,消费频率F,飞行里程M和折扣系数的平均值C五个特征作为航空公司识别客户价值特征,如下表所示,记为LRFMC模型。
| 模型 | L | R | F | M | C |
|---|---|---|---|---|---|
| 航空公司LRFMC模型 | 会员入会时间距观测窗口结束的月数 | 客户最近一次乘坐公司飞机距观测窗口结束的月数 | 客户在观测窗口内乘坐公司飞机的次数 | 客户在观测窗口内累计的飞行里程 | 客户在观测窗口内乘坐舱位所对应的折扣系数的平均值 |
原始数据中属性太多,根据航空公司客户价值LRFMC模型,选择与LRFMC指标相关的六个属性:FFP_DATE、LOAD_TIME、FLIGHT_COUNT、AVG_DISCOUNT、SEG_KM_SUM、LAST_TO_END。删除与其不相关、弱相关或冗余的属性,属性选择后的数据集如下表。
| FFP_DATE | LOAD_TIME | LAST_ TO_END | FLIGHT_ COUNT | SEG_ KM_SUM | avg_discount |
|---|---|---|---|---|---|
| 2006/11/2 | 2014/3/31 | 1 | 210 | 580717 | 0.961639 |
| 2007/2/19 | 2014/3/31 | 7 | 140 | 293678 | 1.252314 |
| 2007/2/1 | 2014/3/31 | 11 | 135 | 283712 | 1.254676 |
| 2008/8/22 | 2014/3/31 | 97 | 23 | 281336 | 1.090870 |
| 2009/4/10 | 2014/3/31 | 5 | 152 | 309928 | 0.970658 |
| … | … | … | … | … | … |
3. 3 数据转换
数据变换是将数据转换成“适当的”格式,以适应挖掘任务及算法的需要。
主要采用的数据变换方式:
- 属性构造
- 数据标准化
1.会员入会时间距观测窗口结束的月数L=会员入会时长

2.客户最近一次乘坐公司飞机距观测窗口结束的月数R=最后一次乘机时间至观察窗口末端时长(单位:月)

3.客户在观测窗口内乘坐公司飞机的次数F=观测窗口的飞行次数(单位:次)

4.客户在观测时间内在公司累计的飞行里程M=观测窗口总飞行公里数(单位:公里)

5.客户在观测时间内乘坐舱位所对应的折扣系数的平均值C=平均折扣率(单位:无)

在完成五个指标的数据提取后,对每个指标数据分布情况进行分析,其数据的取值范围如表所示。
| 属性名称 | L | R | F | M | C |
|---|---|---|---|---|---|
| 最小值 | 12.23 | 0.03 | 2 | 368 | 0.14 |
| 最大值 | 114.63 | 24.37 | 213 | 580717 | 1.5 |
从表中数据可以发现,五个指标的取值范围数据差异较大,为了消除数量级数据带来的影响,需要对数据进行标准化处理。
标准差标准化处理后,形成ZL、ZR、ZF、ZM、ZC五个属性的数据。
| ZL | ZR | ZF | ZM | ZC |
|---|---|---|---|---|
| 1.43571897 | -0.94495516 | 14.03412875 | 26.76136996 | 1.29555058 |
| 1.30716214 | -0.9119018 | 9.07328567 | 13.1269701 | 2.86819902 |
| 1.32839171 | -0.88986623 | 8.71893974 | 12.65358345 | 2.88097321 |
| 0.65848092 | -0.41610151 | 0.78159082 | 12.54072306 | 1.99472974 |
| 0.38603481 | -0.92291959 | 9.92371591 | 13.89884778 | 1.3443455 |
| … | … | … | … | … |
实现代码:

4. 模型构建
客户价值分析模型构建主要由两个部分构成,第一个部分根据航空公司客户五个指标的数据,对客户作聚类分群。第二部分结合业务对每个客户群进行特征分析,分析其客户价值,并对每个客户群进行排名。
4. 1 客户聚类
采用K-Means聚类算法对客户数据进行客户分群,聚成五类(需要结合业务的理解与分析来确定客户的类别数量)。
使用scikit-learn库下的聚类子库(sklearn.cluster)可以实现K-Means聚类算法。使用标准化后的数据进行聚类,


4. 2 客户价值分析
针对聚类结果进行特征分析,绘制客户分群雷达图。


定义5个等级的客户类别:重要保持客户,重要发展客户,重要挽留客户,一般客户,低价值客户。每种客户类别的特征如图所示。

4.3 模型应用
根据对各个客户群进行特征分析,采取下面的一些营销手段和策略,为航空公司的价值客户群管理提供参考。
1.会员的升级与保级:航空公司可以在对会员升级或保级进行评价的时间点之前,对那些接近但尚未达到要求的较高消费客户进行适当提醒甚至采取一些促销活动,刺激他们通过消费达到相应标准。这样既可以获得收益,同时也提高了客户的满意度,增加了公司的精英会员。
2.首次兑换:采取的措施是从数据库中提取出接近但尚未达到首次兑换标准的会员,对他们进行提醒或促销,使他们通过消费达到标准。一旦实现了首次兑换,客户在本公司进行再次消费兑换就比在其他公司进行兑换要容易许多,在一定程度上等于提高了转移的成本。
3.交叉销售:通过发行联名卡等与非航空类企业的合作,使客户在其他企业的消费过程中获得本公司的积分,增强与公司的联系,提高他们的忠诚度。
5. 总结思考
由于在航空客户关系管理中客户流失的问题未被重视,故对航空公司造成了巨大的损害。客户流失对利润增长造成的负面影响非常大,仅次于公司规模、市场占有率、单位成本等因素的影响。客户与航空公司之间的关系越长久,给公司带来的利润就会越高。所以流失一个客户,比获得一个新客户对公司的损失更大。因为要获得新客户,需要在销售、市场、广告和人员工资上花费很多的费用,并且大多数新客户产生的利润还不如那些流失的老客户多。
因此,在国内航空市场竞争日益激烈的背景下,航空公司在客户流失方面应该引起足够的重视。如何改善流失问题,继而提高客户满意度、忠诚度是航空公司维护自身市场并面对激烈竞争的一件大事,客户流失分析将成为帮助航空公司开展持续改进活动的指南。
客户流失分析可以针对目前老客户进行分类预测。针对航空公司客户信息数据,可以进行老客户以及客户类型的定义(其中将飞行次数大于6次的客户定义为老客户,已流失客户定义为:第二年飞行次数与第一年飞行次数比例小于50%的客户;准流失客户定义为:第二年飞行次数与第一年飞行次数比例在区间[50%,90%)内的客户;未流失客户定义为:第二年飞行次数与第一年飞行次数比例大于90%的客户)。同时需要选取客户信息中的关键属性如:会员卡级别、客户类型(流失、准流失、未流失)、平均乘机时间间隔、平均折扣率、积分兑换次数、非乘机积分总和、单位里程票价、单位里程积分等。随机选取数据的80%作为分类的训练样本,剩余的20%作为测试样本。构建客户的流失模型,运用模型预测未来客户的类别归属(未流失、准流失,或已流失)。
相关文章:
数据挖掘案例-航空公司客户价值分析
文章目录 1. 案例背景2. 分析方法与过程2.1 分析流程步骤2.2 分析过程1. 数据探索分析2. 描述性统计分析3. 分布分析1.客户基本信息分布分析2. 客户乘机信息分布分析3. 客户积分信息分布分析 4. 相关性分析 3. 数据预处理3.1 数据清洗3.2 属性约束3. 3 数据转换 4. 模型构建4. …...
决策树与机器学习实战【代码为主】
文章目录 🛴🛴引言🛴🛴决策树使用案例🛴🛴numpy库生成模拟数据案例🛴🛴决策树回归问题🛴🛴决策树多分类问题 🛴🛴引言 决策树是一种经…...
从感知机到神经网络
感知机 一、感知机是什么二、用感知机搭建简单逻辑电路2.1 与门2.2 与非门2.3 或门 三、感知机的局限性3.1 异或门3.2 线性和非线性 四、多层感知机4.1 已有门电路的组合4.2 Python异或门的实现 五、感知机模型5.1 感知机模型5.2 感知机损失函数5.3 感知机学习算法 六、感知机原…...
【HMGD】STM32/GD32 I2C DMA 主从通信
STM32 I2C配置 主机配置 主机只要配置速度就行 从机配置 从机配置相同速度,可以设置第二地址 因为我的板子上面已经有了上拉电阻,所以可以直接通信 STM32 I2C DMA 定长主从通信代码示例 int state 0; static uint8_t I2C_recvBuf[10] {0}; stat…...
leecode 226 翻转二叉树、101 对称二叉树、104 二叉树的最大深度
leecode 226 翻转二叉树、101 对称二叉树、104 二叉树的最大深度 leecode 226 翻转二叉树 题目链接 :https://leetcode.cn/problems/invert-binary-tree/description/ 题目 给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。…...
Redux基础
简介 状态管理工具,集中式管理react、vue、angular等应用中多个组件的状态,是一个库,使用之后可以清晰的知道应用里发生了什么以及数据是如何修改,如何更新的 在项目中添加 Redux 并不是必须的,根据项目需求选择是否引入 Redux 三个原则 …...
国外目标公司的任何一个联系人也许都有意义
我们说跟进一个项目,最好能够联系上拥有决策权的人,不然中间隔着几重关系,所有的更新都需要层层审批申报,特别麻烦,总是要等,也许等到最后就是一场空。如果能够直接和老板或者是拍板的人沟通,则…...
因为本地证书太旧或不全导致的 HTTPS 访问失败问题20240520
因为本地证书太旧或不全导致的 HTTPS 访问失败问题 在生产环境中,我们经常需要使用 curl 命令来测试和调试 HTTPS URL。然而,最近我遇到了一个棘手的问题:在测试环境中使用 curl 可以正常访问某个 URL,但在生产环境中却遇到了 SS…...
Lua获取表的长度
1.代码 -- 创建一个表并添加一些元素 local myTable {10, 20, 30, 40}-- 打印表的长度 print(#myTable) -- 输出 4,因为表中有 4 个元素-- 使用 # 来遍历表中的所有元素 for i 1, #myTable doprint(myTable[i]) end -- 这将依次打印 10, 20, 30, 40...
python九九乘法表的打印思考及实现
新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一、问题引入 九九乘法表的显示需求 二、问题分析 嵌套循环的概念 屏幕宽度与换行的考虑…...
2.Spring中用到的设计模式
Spring框架中使用了多种设计模式来构建其强大且灵活的功能,这里举例说明Spring中的一些功能使用到的设计模式。 工厂模式:Spring容器本质是一个大工厂,使用工厂模式通过BeanFactory和ApplicationContext这两个核心接口来创建和管理bean对象。…...
.NET调用阿里云人脸核身服务端 (ExecuteServerSideVerification)简易流程保姆级教学
需要注意的是,以下内容仅限基础调用 功能说明 该功能是输入核验人的姓名和身份证以及人脸照片,去阿里库里面匹配,3个信息是否一致,一致则验证通过,需要注意的是,人脸有遮挡,或者刘海࿰…...
[大师C语言(第十二篇)]C语言堆排序技术详解
引言 堆排序(Heap Sort)是一种基于比较的排序算法,它利用堆这种数据结构的特点来进行排序。堆是一种近似完全二叉树的结构,并同时满足堆积的性质:即子节点的键值或索引总是小于(或者大于)它的父…...
Activity启动流程要点
一、Activity启动流程 Activity的启动流程一般是通过调用startActivity或者是startActivityForResult来开始的startActivity内部也是通过调用startActivityForResult来启动Activity,只不过传递的requestCode小于0Activity的启动流程涉及到多个进程之间的通讯这里主…...
lua 计算第几周
需求 计算当前赛季的开始和结束日期,2024年1月1日周一是第1周的开始,每两周是一个赛季。 lua代码 没有处理时区问题 local const 24 * 60 * 60 --一整天的时间戳 local server_time 1716595200--todo:修改服务器时间 local date os.date("*t…...
负载均衡策略
...
海外网红营销新趋势:“快闪式”营销如何迅速提升品牌曝光度
在当今数字化时代,海外网红营销已成为品牌迅速触达全球消费者、提升品牌曝光度和刺激销售的重要手段。其中,“快闪式”营销以其独特的时效性、创意性和互动性,成为品牌与海外网红合作的新趋势。本文Nox聚星将和大家探讨如何利用海外网红的影响…...
速看!打造专属数字化能力模型的七大关键!
在数字化浪潮中,企业如何打造适应自身发展的数字化能力模型?这是许多企业面临的重要课题。今天,通过众多企业使用蚓链数字化生态解决方案实践总结,为大家分享至关重要的七大经验,助你开启数字化转型之旅! 1…...
青蛙跳台阶问题
本期介绍🍖 主要介绍:青蛙跳台阶问题,青蛙跳台阶与斐波那契数列的关系👀。 文章目录 1. 题目2. 递归解题思路3. 迭代解题思路 1. 题目 从前有一只青蛙他想跳台阶,有n级台阶,青蛙一次可以跳1级台阶ÿ…...
linux日常运维2
下载linux离线安装包---- 利用 Downloadonly 插件下载 RPM 软件包及其所有依赖包 1. 先找个可以上网的linux操作系统,这里是以centos7操作系统为例,如果要使用centos6就先安装一个centos6的系统,然后让他可以上网,后面步骤如下 a.…...
19c补丁后oracle属主变化,导致不能识别磁盘组
补丁后服务器重启,数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后,存在与用户组权限相关的问题。具体表现为,Oracle 实例的运行用户(oracle)和集…...
vscode里如何用git
打开vs终端执行如下: 1 初始化 Git 仓库(如果尚未初始化) git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...
云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?
大家好,欢迎来到《云原生核心技术》系列的第七篇! 在上一篇,我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在,我们就像一个拥有了一块崭新数字土地的农场主,是时…...
React Native 开发环境搭建(全平台详解)
React Native 开发环境搭建(全平台详解) 在开始使用 React Native 开发移动应用之前,正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南,涵盖 macOS 和 Windows 平台的配置步骤,如何在 Android 和 iOS…...
React Native在HarmonyOS 5.0阅读类应用开发中的实践
一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强,React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 (1)使用React Native…...
[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?
论文网址:pdf 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正!文章偏向于笔记,谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...
Keil 中设置 STM32 Flash 和 RAM 地址详解
文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...
C# 类和继承(抽象类)
抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...
JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作
一、上下文切换 即使单核CPU也可以进行多线程执行代码,CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短,所以CPU会不断地切换线程执行,从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...
深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南
🚀 C extern 关键字深度解析:跨文件编程的终极指南 📅 更新时间:2025年6月5日 🏷️ 标签:C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言🔥一、extern 是什么?&…...
