7.2 分析方法与过程
本案例的目标是客户价值识别,即通过航空公司客户数据识别不同价值的客户。识别客户价值应用最广泛的模型是通过3个指标(最近消费时间间隔(Recency)、消费频率(Frequency)和消费金额(Monetary))来进行客户细分,识别出高价值的客户,简称RFM模型[15]。
在RFM模型中,消费金额表示在一段时间内,客户购买该企业产品金额的总和。由于航空票价受到运输距离、舱位等级等多种因素影响,同样消费金额的不同旅客对航空公司的价值是不同的。例如,一位购买长航线、低等级舱位票的旅客与一位购买短航线、高等级舱位票的旅客相比,后者对于航空公司而言价值可能更高。因此,这个指标并不适用于航空公司的客户价值分析[15]。我们选择客户在一定时间内累积的飞行里程M和客户在一定时间内乘坐舱位所对应的折扣系数的平均值C两个指标代替消费金额。此外,考虑航空公司会员入会时间的长短在一定程度上能够影响客户价值,所以在模型中增加客户关系长度L,作为区分客户的另一指标。
本案例将客户关系长度L、消费时间间隔R、消费频率F、飞行里程M和折扣系数的平均值C五个指标作为航空公司识别客户价值指标(见表7-3),记为LRFMC模型。
表7-3 指标含义
针对航空公司LRFMC模型,如果采用传统RFM模型分析的属性分箱方法,如图7-1所示[16](它是依据属性的平均值进行划分,其中大于平均值的表示为↑,小于平均值的表示为↓),虽然也能够识别出最有价值的客户,但是细分的客户群太多,提高了针对性营销的成本。因此,本案例采用聚类的方法识别客户价值。通过对航空公司客户价值的LRFMC模型的五个指标进行K-Means聚类,识别出最有价值客户。
图7-1 RFM模型分析
本案例航空客户价值分析的总体流程如图7-2所示。
图7-2 航空客运数据挖掘建模总体流程
航空客运信息挖掘主要包括以下步骤。
1)从航空公司的数据源中进行选择性抽取与新增数据抽取分别形成历史数据和增量数据。
2)对步骤1)中形成的两个数据集进行数据探索分析与预处理,包括数据缺失值与异常值的探索分析,数据的属性规约、清洗和变换。
3)利用步骤2)中形成的已完成数据预处理的建模数据,基于旅客价值LRFMC模型进行客户分群,对各个客户群进行特征分析,识别出有价值的客户。
4)针对模型结果得到不同价值的客户,采用不同的营销手段,提供定制化的服务。
7.2.1 数据抽取
以2014-03-31为结束时间,选取宽度为两年的时间段作为分析观测窗口,抽取观测窗口内有乘机记录的所有客户的详细数据形成历史数据。对于后续新增的客户详细信息,以后续新增数据中最新的时间点作为结束时间,采用上述同样的方法进行抽取,形成增量数据。
从航空公司系统内的客户基本信息、乘机信息以及积分信息等详细数据中,根据末次飞行日期(LAST_FLIGHT_DATE),抽取2012-04-01至2014-03-31内所有乘客的详细数据,总共有62988条记录。其中包含了会员卡号、入会时间、性别、年龄、会员卡级别、工作地城市、工作地所在省份、工作地所在国家、观测窗口结束时间、观测窗口乘机积分、飞行公里数、飞行次数、飞行时间、乘机时间间隔和平均折扣率等44个属性。
7.2.2 数据探索分析
本案例的探索分析是对数据进行缺失值分析与异常值分析,分析出数据的规律以及异常值。通过对数据观察发现原始数据中存在票价为空值,票价最小值为0、折扣率最小值为0、总飞行公里数大于0的记录。票价为空值的数据可能是客户不存在乘机记录造成,其他的数据可能是客户乘坐0折机票或者积分兑换产生的。
查找每列属性观测值中空值个数、最大值、最小值的Python代码如代码清单7-1所示。
代码清单7-1 数据探索分析代码
#-*- coding: utf-8 -*- #对数据进行基本的探索 #返回缺失值个数以及最大最小值 import pandas as pd datafile= '../data/air_data.csv' #航空原始数据,第一行为属性标签 resultfile = '../tmp/explore.xls' #数据探索结果表 data = pd.read_csv(datafile, encoding = 'utf-8') #读取原始数据,指定UTF-8编码(需要用 文本编辑器将数据转换为UTF-8编码) explore = data.describe(percentiles = [], include = 'all').T #包括对数据的基本描述, percentiles参数是指定计算多少的分位数表(如1/4分位数、中位数等);T是转置,转置后更方便查阅 explore['null'] = len(data)-explore['count'] #describe()函数自动计算非空值数,需要手 动计算空值数 explore = explore[['null', 'max', 'min']] explore.columns = [u'空值数', u'最大值', u'最小值'] #表头重命名 '''这里只选取部分探索结果。 describe()函数自动计算的字段有count(非空值数)、unique(唯一值数)、top(频数最高者)、freq (最高频数)、mean(平均值)、std(方差)、min(最小值)、50%(中位数)、max(最大值)''' explore.to_excel(resultfile) #导出结果
代码详见:示例程序/code/data_explore.py
根据上面的代码得到的探索结果见表7-4。
表7-4 数据探索分析结果表
7.2.3 数据预处理
本案例主要采用数据清洗、属性规约与数据变换的预处理方法。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论