目录
找到了更详细(指的是探索性分析)的版本
航空公司客户价值分析(正版/超详细/附数据)
1背景与挖掘目标
客户关系管理是企业的核心业务。客户管理的关键在于客户分类。通过客户分类,区分无价值和高价值客户,再针对不同价值的客户制定个性化服务方案,不同的营销策略,将有限的企业资源集中于高价值客户,实现企业利润最大化。
面对激烈竞争,各个航空公司都推出了推广营销活动来吸引更多客户,国内某航空 公司面临 旅客流失/竞争力下降和航空资源未充分利用等经营危机。
- 通过建立合理的客户价值评估模型,对客户进行分类,比较分析不同客户群体的价值并制定相应营销策略,提供个性化客户服务,是必须和有效的。
该航空公司已积累大量会员档案信息和乘坐航班记录,部分列见下:
1.1 航空信息属性表(一部分列)
- 客户基本信息
- MEMBER_NO: 会员卡号
- FFP_DATE: 入会时间
- FIRST_FLIGHT_DATE: 第一次飞行日期
- GENDER: 性别
- FFP_TLER: 会员卡级别
- WORK_CITY: 工作地城市
- WORK_PROVINCE: 工作地省份
- WORK_COUNTRY: 工作地国家
- AGE: 年龄
- 乘机信息
- FLIGHT_COUNT: 观测窗口内的飞行次数(观测窗口:观测的时间段)
- LOAD_TIME: 观测窗口的结束时间
- LAST_TO_END: 最后一次乘机时间至观测窗口结束时长
- AVG_DISCOUNT: 平均折扣率
- SUM_YR: 观测窗口的票价收入
- SEG_KM_SUM: 观测窗口的总飞行公里数
- LAST_FLIGHT_DATE: 末次飞行日期
- AVG_INTERVAL: 平均乘机时间间隔
- MAX_INTERVAL: 最大乘机间隔
- 积分信息
- EXCHANGE_COUNT: 积分兑换次数
- EP_SUM: 总精英积分
- PROMOPTIVE_SUM: 促销积分
- PARTNER_SUM: 合作伙伴积分
- POINTS_SUM: 总累计积分
- POINT_NOTELIGHT: 非乘机的积分变动次数
- PB_SUM: 总基本积分
根据这些数据,实现以下目标:
- 根据数据,对客户进行分类
- 对不同的客户类别进行特征分析,比较不同类客户的客户价值
- 对不同价值的客户类别提供个性化服务,指定相应营销策略
1.2 分析方法和过程
本案例目标是客户价值识别,识别客户价值最广泛的模型是通过三个指标进行客户细分,识别高价值客户,简称RFM模型
- 最近消费时间间隔,Recency
- 消费频率,Frequency
- 消费金额,Monetary
- 一段时间内,客户购买该企业产品金额的总和
- 由于航空票价受运输距离/仓位等级等多种因素影响,消费金额指导意义不大(如一个长航线低等仓位旅客与一个短航线高等仓位旅客,前者花费大但后者对航空公司可能更有价值。
- 我们选择
- 客户在一定时间内累积的飞行里程M
- 客户在一定时间内乘坐仓位所对应的折扣系数平均值C
两个指标代替消费金额。
此外,航空公司会员入会时间长短也能够影响客户价值,模型中增加客户关系长度L
总之:5个指标作为航空公司识别客户价值指标,记为LRFMC模型
航空公司LRFMC模型
- L:会员入会时间距观测窗口结束的月数
- R:客户最近一次乘坐公司飞机距观测窗口结束的月数(最近消费时间间隔)
- F:客户在观测窗口内乘坐公司飞机的次数
- M:客户在观测窗口内累计的飞行里程
- C:客户在观测窗口内乘坐仓位所对应的折扣系数的平均值
本例采用聚类来识别客户价值,通过5个指标进行K-Means聚类,识别出最有价值客户
航空客运信息挖掘主要包含以下步骤:
- 从航空公司数据源种进行选择性抽取与新增数据抽取,分别形成历史数据和增量数据
- 对上面两个数据集进行数据探索和预处理,包括缺失值异常值处理,属性规约,清洗/变换
- 利用完备数据,基于旅客价值LRFMC模型进行客户分群,对各个客户群进行特征分析,识别有价值客户
- 针对模型结果得到不同价值的客户,采用不同营销手段,提供定制化服务
- 导入需要用的库
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
- 读取一下文件,parse_dates将目标列设置成日期格式
# 读取
data = pd.read_csv(r'data\air_data.csv',parse_dates=['FFP_DATE','FIRST_FLIGHT_DATE','LOAD_TIME','LAST_FLIGHT_DATE'])
data
- 检查数据类型
data.info(),data.shape
- 查看基本统计数据并手动计算缺失值
# 查看基本统计数据
explore = data.describe().T
explore
# 手动计算缺失值
# data.shape[0] # 客户量
# explore['count'] #统计有效计数量
explore['null'] = data.shape[0] - explore['count']
explore
# 指定列检查
e1 = explore[['null','max','min']]
e1
2 数据预处理
主要用数据清洗/属性规约和数据变换的预处理方法
数据清洗:数据中有缺失值,或 票价最小值为0,或(折扣率最小值为0 和 总飞行公里数大于0)的记录,
由于原始数据量大,这类数据比例很小,丢弃处理
- 丢弃票价为空的记录
- 保留:票价不为0,或 平均折扣率 和 总飞行公里数都大于0 的记录
# 删除两列票价值为空的数据行
data = data[(data['SUM_YR_1'].notnull()) & (data['SUM_YR_2'].notnull())]
data
数据量减少
- 删除两列票价值为0的数据行
- 保留:票价不为0,或 平均折扣率 和 总飞行公里数都大
# 删除两列票价值为0的数据行
# 保留:票价不为0,或 平均折扣率 和 总飞行公里数都大于0 的记录
index1 = data.SUM_YR_1 != 0
index2 = data.SUM_YR_2 != 0
index3 = (data.avg_discount == 0) & (data.SEG_KM_SUM == 0)
data = data[index1|index2|index3]
data
数据量再一次减少
- 属性规约:原始数据中属性太多,根据LRFMC模型,只保留和模型指标相关的6个属性
-
FFP_DATE
-
LOAD_TIME
-
FLIGHT_COUNT
-
avg_discount
- 折扣系数的平均值为什么有些会大于1或者小于0,找到一些相关知识点,但没有弄懂,比较贴切的是收益=E*(1-p),(1-p)就是你的折扣系数,出自折扣系数是什么意思?;还有就是折扣率为1-1.5表示,折扣为1%–1.5%,出自什么是折扣率;折扣率为1-1.5表示什么?;再了解一下打折机票的计算方法打折机票怎么算的啊?:
平均折扣率应该如何计算?
- 折扣系数的平均值为什么有些会大于1或者小于0,找到一些相关知识点,但没有弄懂,比较贴切的是收益=E*(1-p),(1-p)就是你的折扣系数,出自折扣系数是什么意思?;还有就是折扣率为1-1.5表示,折扣为1%–1.5%,出自什么是折扣率;折扣率为1-1.5表示什么?;再了解一下打折机票的计算方法打折机票怎么算的啊?:
-
SEG_KM_SUM
-
LAST_TO_END
-
# 属性规约:原始数据中属性太多,根据LRFMC模型,只保留和模型指标相关的6个属性
data2 = data[['FFP_DATE', 'LOAD_TIME', 'FLIGHT_COUNT', 'avg_discount', 'SEG_KM_SUM', 'LAST_TO_END']]
data2
- 数据变换:将数据转为适当的个数,以适应算法挖掘需要,本例采用属性构造和数据标准化方式
原始数据没有直接给出LRFMC五个指标,需要通过数据自行计算提取指标
L = LOAD_TIME - FFP_DATE,会员入会时间距观测窗口结束的月数 = 观测窗口结束时间 - 入会时间
R = LAST_TO_END,客户最近一次乘坐飞机距观测窗口结束的月数 = 最后一次乘机时间至观测窗口末端时长
F = FLIGHT_COUNT,客户在观测窗口内乘坐公司飞机的次数=