1. 背景与挖掘目标

1.1 背景

  1. 企业营销焦点从产品中心转变为客户中心,客户关系管理成为企业的核心问题
  2. 客户关系管理的关键问题是客户分类,通过客户分类,
  3. 针对不同价值的客户制定优化的个性化服务方案,采取不同营销策略

1.2 目标

  1. 借助航空公司客户数据,对客户进行分类。
  2. 对不同的客户类别进行特征分析,比较不同类客户的客户价值。
  3. 对不同价值的客户类别提供个性化服务,制定相应的营销策略。

2. 分析方法与过程

本案例的目标是客户价值识别。
识别客户价值应用最广泛的模型是通过3个指标(最近消费时间间隔(Recency)、消费频率(Frequency)和消费金额(Monetary))来进行客户细分,识别出高价值的客户,简称RFM模型

在RFM模型中,消费金额表示在一段时间内,客户购买该企业产品金额的总和。由于航空票价受到运输距离、舱位等级等多种因素影响,同样消费金额的不同旅客对航空公司的价值是不同的。例如,一位购买长航线、低等级舱位票的旅客与一位购买短航线、高等级舱位票的旅客相比,后者对于航空公司而言价值可能更高。因此,这个指标并不适用于航空公司的客户价值分析。

我们选择客户在一定时间内累积的飞行里程M和客户在一定时间内乘坐舱位所对应的折扣系数的平均值C两个指标代替消费金额。此外,考虑航空公司会员入会时间的长短在一定程度上能够影响客户价值,所以在模型中增加客户关系长度L,作为区分客户的另一指标。

本案例将客户关系长度L、消费时间间隔R、消费频率F、飞行里程M和折扣系数的平均值C五个指标作为航空公司识别客户价值指标(见表7-3 ),记为LRFMC模型

数据挖掘航空公司客户群特征描述表 分析航空业客户的类型_数据


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

数据挖掘航空公司客户群特征描述表 分析航空业客户的类型_python_02

本案例航空客户价值分析的总体流程

数据挖掘航空公司客户群特征描述表 分析航空业客户的类型_数据挖掘航空公司客户群特征描述表_03

航空客运信息挖掘主要包括以下步骤。

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

3. 数据加载与探索

import numpy as np
import pandas as pd

from sklearn.cluster import KMeans
data = pd.read_csv('./chapter7/demo/data/air_data.csv')
data.info()

数据挖掘航空公司客户群特征描述表 分析航空业客户的类型_数据分析_04

  • 有62988条数据,44个属性
explore = data.describe(percentiles= [], include= 'all').T # percentiles,统计中的百分位数
explore['null'] = len(data) - explore['count'] # 添加空值数量列
explore = explore[['null', 'max', 'min']]
explore

数据挖掘航空公司客户群特征描述表 分析航空业客户的类型_数据挖掘_05

  • 通过对数据观察发现原始数据中存在票价(SUM_YR)为空值,票价(SUM_YR)最小值为0、折扣率(avg_discount)最小值为0的记录。票价为空值的数据可能是客户不存在乘机记录造成,其他的数据可能是客户乘坐0折机票或者积分兑换产生的。

4. 数据预处理

4.1 数据清洗

通过数据探索分析,发现数据中存在缺失值,票价最小值为0、折扣率最小值为0的记录。由于原始数据量大,这类数据所占比例较小,对于问题影响不大,因此对其进行丢弃处理。具体处理方法如下。

  • 丢弃票价为空的记录。
  • 丢弃票价为0、平均折扣率不为0、总飞行公里数大于0的记录。
# 数据清洗
data = data[data['SUM_YR_1'].notnull() & data['SUM_YR_2'].notnull()]

index1 = (data['SUM_YR_1'] != 0) & (data['SEG_KM_SUM'] != 0) # 票价不为0且有总公里数,避免票价不为0却没有总公里数的错误数据
index2 = (data['SUM_YR_2'] != 0) & (data['SEG_KM_SUM'] != 0)
index3 = (data['SEG_KM_SUM'] != 0) & (data['avg_discount'] == 0) # 总飞行公里数不为0时平均折扣率为0,可能是0折机票或积分兑换(积分兑换算在平均折扣里吗)

data = data[index1 | index2 | index3] # 当三个判断都为false时丢弃该数据,index1,2票价为0时,index3:总公里数不为0,有折扣却不为0,票价异常,或总公里数等于0
data

4.2 属性规约

原始数据中属性太多,根据航空公司客户价值LRFMC模型,选择与LRFMC 指标相关的6个属性:FFP_DATE、LOAD_TIME、FLIGHT_COUNT、AVG_DISCOUNT、SEG_KM_SUM、LAST_TO_END。删除与其不相关、弱相关或冗余的属性,例如,会员卡号、性别、工作地城市、工作地所在省份、工作地所在国家和年龄等属性。

data = data[['LOAD_TIME', 'FFP_DATE', 'LAST_TO_END', 'FLIGHT_COUNT', 'SEG_KM_SUM', 'avg_discount']]
data

数据挖掘航空公司客户群特征描述表 分析航空业客户的类型_数据_06

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

5个指标的数据提取后,对每个指标数据分布情况进行分析,5个指标的取值范围数据差异较大,为了消除数量级数据带来的影响,需要对数据进行标准化处理。

L = (pd.to_datetime(data['LOAD_TIME']) - pd.to_datetime(data['FFP_DATE']))
lrfmc = pd.DataFrame((L / np.timedelta64(1, 'D')) / 30, columns= ['L'])

lrfmc['R'] = data['LAST_TO_END'] / 30

lrfmc['F'] = data['FLIGHT_COUNT']

lrfmc['M'] = data['SEG_KM_SUM']

lrfmc['C'] = data['avg_discount']
lrfmc

数据挖掘航空公司客户群特征描述表 分析航空业客户的类型_数据_07

lrfmc = (lrfmc - lrfmc.mean()) / lrfmc.std()
lrfmc.columns = ['Z' + i for i in lrfmc.columns]
lrfmc

数据挖掘航空公司客户群特征描述表 分析航空业客户的类型_数据挖掘航空公司客户群特征描述表_08

5. 模型构建

5.1 客户聚类

k = 5

kmodel = KMeans(n_clusters= k)
kmodel.fit(lrfmc)
result = pd.DataFrame({"聚类类别": ['客户群1', '客户群2', '客户群3', '客户群4', '客户群5']})

c1 = pd.Series(kmodel.labels_).value_counts()
r2 = pd.DataFrame(kmodel.cluster_centers_)
r = pd.concat([c1, r2], axis=1)

result = pd.concat([result, r], axis =1)
result.columns = ['聚类类别', '聚类个数', 'ZL', 'ZR', 'ZF', 'ZM', 'ZC']
result

数据挖掘航空公司客户群特征描述表 分析航空业客户的类型_python_09

5.2 客户价值分析

result_lp = result.iloc[:, 2:]

import plotly.graph_objects as go

fig = go.Figure()

categories = ['ZL', 'ZR', 'ZF', 'ZM', 'ZC']

fig.add_trace(go.Scatterpolar(r= result_lp.loc[0], theta= categories, fill= 'toself', name= '客户群1'))
fig.add_trace(go.Scatterpolar(r= result_lp.loc[1], theta= categories, fill= 'toself', name= '客户群2'))
fig.add_trace(go.Scatterpolar(r= result_lp.loc[2], theta= categories, fill= 'toself', name= '客户群3'))
fig.add_trace(go.Scatterpolar(r= result_lp.loc[3], theta= categories, fill= 'toself', name= '客户群4'))
fig.add_trace(go.Scatterpolar(r= result_lp.loc[4], theta= categories, fill= 'toself', name= '客户群5'))

fig.update_layout(polar= dict(radialaxis= dict(visible= True,range = [-1, 2.5])))


fig.show()

数据挖掘航空公司客户群特征描述表 分析航空业客户的类型_数据_10

  • 针对聚类结果进行特征分析,如图。其中,客户群1在F、M属性上最大,在R属性上最小;客户群2在L属性上最大;客户群3在L、R属性上最小;客户群4在R属性上最大,在F、M属性上最小;客户群5在C属性上最大。结合业务分析,通过比较各个指标在群间的大小对某一个群的特征进行评价分析。例如客户群1在F、M属性最大,在R指标最小,因此可以说F、M、R在客户群Ⅰ是优势特征。以此类推,F、M在客户群4上是劣势特征。从而总结出每个群的优势和弱势特征。

    由上述的特征分析的图表说明每个客户群的都有显著不同的表现特征,基于该特征描述,本案例定义五个等级的客户类别:重要保持客户、重要发展客户、重要挽留客户、一般客户、低价值客户。他们之间的区别如图7-4所示,其中每种客户类别的特征如下:
  • 重要保持客户:这类客户的平均折扣率(C)较高(一般所乘航班的舱位等级较高),最近乘坐过本公司航班(R)低,乘坐的次数(F)或里程(M)较高。他们是航空公司的高价值客户,是最为理想的客户类型,对航空公司的贡献最大,所占比例却较小。航空公司应该优先将资源投放到他们身上,对他们进行差异化管理和一对一营销,提高这类客户的忠诚度与满意度,尽可能延长这类客户的高水平消费。
  • 重要发展客户:这类客户的平均折扣率(C)较高,最近乘坐过本公司航班(R)低,但乘坐次数(F)或乘坐里程(M)较低。这类客户入会时长(L)短,他们是航空公司的潜在价值客户。虽然这类客户的当前价值并不是很高,但却有很大的发展潜力。航空公司要努力促使这类客户增加在本公司的乘机消费和合作伙伴处的消费,也就是增加客户的钱包份额。通过客户价值的提升,加强这类客户的满意度,提高他们转向竞争对手的转移成本,使他们逐渐成为公司的忠诚客户。
  • 重要挽留客户:这类客户过去所乘航班的平均折扣率©、乘坐次数(F)或者里程(M)较高,但是较长时间已经没有乘坐本公司的航班(R)高或是乘坐频率变小。他们客户价值变化的不确定性很高。由于这些客户衰退的原因各不相同,所以掌握客户的最新信息、维持与客户的互动就显得尤为重要。航空公司应该根据这些客户的最近消费时间、消费次数的变化情况,推测客户消费的异动状况,并列出客户名单,对其重点联系,采取一定的营销手段,延长客户的生命周期。
  • 一般与低价值客户:这类客户所乘航班的平均折扣率(C)很低,较长时间没有乘坐过本公司航班(R)高,乘坐的次数(F)或里程(M)较低,入会时长(L)短。他们是航空公司的一般用户与低价值客户,可能是在航空公司机票打折促销时,才会乘
    坐本公司航班。

数据挖掘航空公司客户群特征描述表 分析航空业客户的类型_数据分析_11

其中,重要发展客户、重要保持客户、重要挽留客户这三类重要客户分别可以归人客户生命周期管理的发展期、稳定期、衰退期三个阶段。
根据每种客户类型的特征,对各类客户群进行客户价值排名。针对不同类型的客户群提供不同的产品和服务,提升重要发展客户的价值、稳定和延长重要保持客户的高水平消费、防范重要挽留客户的流失并积极进行关系恢复。