目录

1.背景与挖掘目标

2.分析方法与过程

2.1 总体流程

2.2 数据抽取

2.3 数据探索分析

2.4 数据预处理

2.4.1 数据清洗

2.4.2 属性规约

2.4.3 数据变换

2.5 模型构建

2.5.1 客户聚类

2.5.2 客户价值分析

2.5.3 客户流失分析

3.模型应用

4.结语

1.背景与挖掘目标

信息时代的来临使得企业营销焦点从产品中心转变为客户中心,客户关系管理成为企业的核心问题。客户关系管理的关键问题是客户分类,通过客户分类区分无价值客户、高价客户,企业针对不同价值的客户制定优化的个性化服务方案,采取不同营销策略,将有限营销资源集中于高价值客户,实现企业利润最大化目标。准确的客户分类结果是企业优化营销资源分配的重要依据,客户分类越来越成为客户关系管理中亟待解决的关键问题之一。

面对激烈的市场竞争,各个航空公司都推出了更优惠的营销方式来吸引更多客户,国内某航空公司面临着旅客流失、竞争力下降和航空资源未充分利用等经营危机。通过建立合理的客户价值评估模型,对客户进行分群,比较不同客户群的客户价值,并制定相应的营销策略,对不同的客户群提供个性化的客户服务是必须和有效的。

现需要通过航空公司提供的会员档案信息和乘坐航班的记录数据进行挖掘来实现以下目标:

(1)借助航空公司客户数据,对客户进行分类。

(2)对不同的客户类别进行特征分析,比较不同类客户的客户价值。

(3)对不同价值的客户类别提供个性化服务,制定相应的营销策略。

(4)对客户流失进行分析,分析流失客户特征。

数据属性表:

2.分析方法与过程

2.1 总体流程

挖掘的总体目标是客户价值识别,识别客户价值应用最广泛的模型是RFM模型。在RFM模型中,消费金额表示在一段时间内,客户购买该企业产品金额的总和。由于航空票价受到运输距离、舱位等级等多种因素影响,同样消费金额的不同旅客对航空公司的价值是不同的。例如,一位购买长航线、低等级舱位票的旅客与一位购买短航线、高等级舱位票的旅客相比,后者对于航空公司而言价值可能更高。因此,这个指标并不适用于航空公司的客户价值分析。因此选择客户在一定时间内累积的飞行里程M和客户在一定时间内乘坐舱位所对应的折扣系数的平均值C两个指标代替消费金额。此外,考虑航空公司会员入会时间的长短在一定程度上能够影响客户价值,所以在模型中增加客户关系长度L,作为区分客户的另一指标。

将客户关系长度L、消费时间间隔R、消费频率F、飞行里程M和折扣系数的平均值C五个指标作为航空公司识别客户价值指标,记为LRFMC模型。通过LRFMC模型的五个指标进行KMeans聚类,识别出最有价值客户。

指标含义:

挖掘流程:

航空公司客户数据挖掘主要包括以下步骤:

(1)从航空公司的数据源中进行选择性抽取与新增数据抽取分别形成历史数据和增量数据。

(2)对步骤(1)中形成的两个数据集进行数据探索性分析与预处理,包括数据缺失值与异常值的探索分析,数据的属性规约、清洗和变换。

(3)利用步骤(2)中形成的已完成数据预处理的建模数据,基于旅客价值LRFMC模型进行客户分群,对各个客户群进行特征分析,识别出有价值的客户。

(4)针对模型结果得到不同价值的客户,采用不同的营销手段,提供定制化的服务。

(5)对客户进行流失分析,对流失客户和准流失客户进行用户画像。

2.2 数据抽取

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

从航空公司系统内的客户基本信息、乘机信息以及积分信息等详细数据中,根据末次飞行日期(LAST_FLIGHT_DATE),抽取2012-04-01至2014-03-31内所有乘客的详细数据,总共62988条记录。其中包含了会员卡号、入会时间、性别、观察窗口结束时间、飞行公里数、飞行次数、飞行时间、乘机时间间隔和平均折扣率等44个属性。

2.3 数据探索分析

对数据进行缺失值与异常值分析,分析出数据的规律以及异常值。查找出每列属性观测值中的空值个数、最大值、平均值、最小值。

import pandas as pddatafile = 'data/air_data.csv'
resultfile = 'tmp/explore.csv'data = pd.read_csv(datafile, encoding='utf-8')
explore = data.describe().T
explore['null'] = len(data) - explore['count']
explore = explore[['null', 'max', 'mean', 'min']]
explore.columns = ['空值数', '最大值', '平均值', '最小值']explore.to_csv(resultfile)
explore.sort_values('空值数', ascending=False)

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

2.4 数据预处理

2.4.1 数据清洗

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

(1)丢弃票价为空的记录;

(2)丢弃票价为0的记录。

datafile = 'data/air_data.csv'
cleanedfile = 'tmp/data_cleaned.csv'data = pd.read_csv(datafile, encoding='utf-8')# 去掉票价为空的数据
data = data[(data['SUM_YR_1'].notnull()) & (data['SUM_YR_2'].notnull())]# 保留票价非0、平均折扣率与总飞行公里数同时为0的记录
criteria1 = data['SUM_YR_1'] != 0
criteria2 = data['SUM_YR_2'] != 0data = data[criteria1 | criteria2]data.to_csv(cleanedfile, index=False)

2.4.2 属性规约

原始数据中属性太多,根据航空公司价值LRFMC模型,选择与LRFMC指标相关的6个属性:FFP_DATE、LOAD_TIME、FLIGHT_COUNT、AVG_DISCOUNT、SEG_KM_SUM、LAST_TO_END,删除与其不相关的属性。

datafile = 'tmp/data_cleaned.csv'data = pd.read_csv(datafile, encoding='utf-8')data = data[['LOAD_TIME', 'FFP_DATE', 'LAST_TO_END', 'FLIGHT_COUNT', 'SEG_KM_SUM', 'avg_discount']]
data.head(10)

经过属性选择后的数据集如下:

2.4.3 数据变换

原始数据中并没有直接给出LRFMC五个指标,需要通过原始数据提取这五个指标,具体的计算方式如下:

对数据指标进行提取:

data.insert(loc = data.columns.get_loc('FFP_DATE') + 1,column = 'L',value = (pd.to_datetime(data['LOAD_TIME']) - pd.to_datetime(data['FFP_DATE'])).dt.days
)data = data.loc[:,'L':]
data.columns = ['L', 'R', 'F', 'M', 'C']
data.head()

提取后的指标如下:

5个指标的数据提取后,对每个指标数据分布情况进行分析。

data.describe().loc[['min', 'max'],:]

其数据的取值范围如下:

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

zscoredfile = 'tmp/zscoreddata.csv'data = (data - data.mean()) / (data.std())
data.columns = ['Z'+i for i in data.columns]
data.to_csv(zscoredfile, index=False)
data.head(10)

标准化处理后, 形成ZL、ZR、ZF、ZM、ZC 5个属性的数据。

2.5 模型构建

客户价值分析模型构建主要由三个部分构成,第一个部分根据航空公司客户5个指标的数据,对客户进行聚类分析。第二部分结合业务对每个客户群进行特征分析,分析其客户价值,并对每个客户群进行排名。第三部分分析客户的流失,找出流失客户和准流失客户,分析两类群体的特征。

2.5.1 客户聚类

采用KMeans聚类算法对客户数据进行客户分群,聚成5类。

from sklearn.cluster import KMeans
datafile = 'tmp/zscoreddata.csv'
k = 5data = pd.read_csv(datafile)kmodel = KMeans(n_clusters=k, n_jobs=4)
kmodel.fit(data)

处理聚类结果

def get_cluster(data):labels = pd.Series(kmodel.labels_)nums = labels.value_counts().sort_index()types = pd.Series(['客户群'+str(i) for i in range(1, 6)])centers = pd.DataFrame(kmodel.cluster_centers_, columns=data.columns)new_data = pd.concat([types, nums, centers], axis='columns')new_data.columns = ['cluster_names', 'cluster_num', 'ZL', 'ZR', 'ZF', 'ZM', 'ZC']return new_datadata = get_cluster(data)

客户分群结果

2.5.2 客户价值分析

针对聚类结果进行特征分析

import numpy as np
from matplotlib import pyplot as pltplt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False   def plot_radar(data):colors = ['tomato', 'darkorange', 'limegreen', 'darkcyan', 'royalblue']names = data['cluster_names'].tolist()labels = data.columns.tolist()[2:]centers = pd.concat([data.iloc[:, 2:], data.iloc[:, 2]], axis=1)centers = np.array(centers)n = len(labels)angles = np.linspace(0, 2*np.pi, n, endpoint=False)angles = np.concatenate((angles, [angles[0]]))fig = plt.figure(figsize=(6, 6), dpi=100)ax = fig.add_subplot(111, polar=True)floor = np.floor(centers.min())ceil = np.ceil(centers.max())for i in range(n):ax.plot([angles[i], angles[i]], [floor, ceil], lw=0.5, color='grey')for i in range(len(names)):ax.plot(angles, centers[i], colors[i], label=names[i])plt.fill(angles, centers[i], facecolor=colors[i], alpha=0.2)ax.set_thetagrids(angles * 180 / np.pi, labels)plt.legend(loc='lower right', bbox_to_anchor=(1.5, 0.0))ax.set_theta_zero_location('N')ax.spines['polar'].set_visible(False)plt.show()plot_radar(data)

针对聚类结果进行特征分析,理论上说,R属性反映的是客户最近一次乘机的时间,应该越小越好,其它则越大越好:

(1)客户群1在F、M属性上最大,在R属性上最小;

(2)客户群2在五个属性上都较小;

(3)客户群3在C属性上最大;

(4)客户群4在L属性上最大,在其他属性上较小;

(5)客户群5在R属性上最大,在F、M属性上最小。

基于上述特征的描述,将客户分为五个等级的客户类别:重要保持客户、重要发展客户、重要挽留客户、一般客户、新客户,每种客户类别特征如下:

根据每种客户类型的特征,对各类客户群进行客户价值排名,结果如下:

将客户类型匹配到每一位客户,供业务部门针对不同的客户进行营销:

datafile = 'tmp/data_cleaned.csv'
marksfile = 'tmp/marksdata.csv'data = pd.read_csv(datafile, encoding='utf-8')labels = kmodel.labels_
customer_type = []d = {0: '重要保持客户', 1: '新客户', 2: '重要发展客户', 3: '一般客户', 4: '重要挽留客户'}
for i in range(len(labels)):customer_type.append(d[labels[i]])new_data = pd.concat([data, pd.DataFrame(customer_type, columns=['customer_type'])], axis='columns')
new_data.to_csv(marksfile, index=False)
new_data.head()

2.5.3 客户流失分析

对流失的客户进行分析,需要划分客户流失类型的界限,按以下规则对流失客户进行定义:
(1)准流失客户:第二年乘坐航班次数与第一年乘坐航班次数的比例在[0.05, 0.2) 范围内且入会时间大于1年;
(2)流失客户:第二年乘坐航班次数与第一年乘坐航班次数的比例在[0, 0.05) 范围内且入会时间大于1年;
(3)未流失客户:不属于准流失客户和流失客户群体的客户

这里需要构建一个指标:流失类型(K),流失类型(K) = 第二年乘坐航班次数(L1Y_Flight_Count) / 第一年乘坐航班次数(P1Y_Flight_Count),加入之前的LRFMC模型,生成LRFMCK模型

def load_data():datafile = 'tmp/data_cleaned.csv'data = pd.read_csv(datafile, encoding='utf-8')data = data[['LOAD_TIME', 'FFP_DATE', 'LAST_TO_END', 'FLIGHT_COUNT', 'SEG_KM_SUM', 'avg_discount','P1Y_Flight_Count', 'L1Y_Flight_Count']]return datadef LRFMCK(data):data.insert(loc = data.columns.get_loc('FFP_DATE') + 1,column = 'L',value = (pd.to_datetime(data['LOAD_TIME']) - pd.to_datetime(data['FFP_DATE'])).dt.days)data = data.loc[:,'L':]temp = data['L1Y_Flight_Count'] / data['P1Y_Flight_Count']for i in range(len(temp)):if (0.05 <= temp[i] < 0.2) and (data['L'][i] > 365):temp[i] = '准流失客户'elif (temp[i] < 0.05) and (data['L'][i] > 365):temp[i] = '流失客户'else:temp[i] = '未流失客户'data['K'] = tempdata = data[['L', 'LAST_TO_END', 'FLIGHT_COUNT', 'SEG_KM_SUM', 'avg_discount', 'K']]data.columns = ['L', 'R', 'F', 'M', 'C', 'K']return datadef zscore(data):old_data = datanew_data = (data.loc[:, :'C'] - data.loc[:, :'C'].mean()) / data.loc[:, :'C'].std()new_data.columns = ['Z'+i for i in data.loc[:, :'C'].columns]new_data['K'] = old_data['K']return new_datadata = load_data()data2 = LRFMCK(data)data3 = zscore(data2)
data3.to_csv('tmp/churn_zscored.csv', index=False)
data3

区分流失类型后的客户数据

客户流失比例

data3['K'].value_counts()

可以看到流失客户比例达到1/6,是一个很大的比例,需要制定相应的召回策略对流失客户进行召回。

需要对流失客户与准流失客户进行特征分析,先对数据进行标准化。

churnd_data = data3[data3['K'] != '未流失客户'].groupby('K').mean().reset_index()

特征分析

流失客户的特点是:很长时间没有乘坐过公司的航班,乘坐次数和乘坐里程也很少,推测乘坐航班需求减少或对公司的航班不再感兴趣,这点需要更深一步进行挖掘和了解。

准流失客户的特点是:较长时间未乘坐过公司航班,高于总客户群的平均水平,需要制定策略稳定这类客户群。

3.模型应用

根据对各个客户群进行特征分析,采取下面一些营销手段和策略,为航空公司的价值客户群管理提供参考。

(1)会员的升级与保级
航空公司的会员可以分为白金卡会员、金卡会员、银卡会员、普通卡会员,其中非普通卡会员可以统称为航空公司的精英会员。虽然各个航空公司都有自己的特点和规定,但会员制的管理方法是大同小异的。成为精英会员一般都是要求在一定时间内积累一定的飞行里程或航段,达到这种要求后就会在有效期内成为精英会员,并享受相应的高级别服务。有效期快结束时,根据相关评价方法确定客户是否有资格继续作为精英会员,然后对该客户进行相应的升级或降级。

然而,由于许多客户并没有意识到或根本不了解会员升级或保级的时间与要求,经常在评价期过后才发现自己其实只差一点就可以实现升级或保级,错过了机会,使之前的里程积累白白损失。同时,这种认知还可能导致客户的不满,干脆放弃在本公司的消费。

因此,航空公司可以在对会员升级或保级进行评价的时间点之前,对那些接近但尚未达到要求的较高消费客户进行适当提醒甚至采取一些促销行动,刺激他们通过消费达到相应标准,这样既可以获得收益,同时也提高了客户的满意度,增加了公司的精英会员。

(2)首次兑换
航空公司最能够吸引客户的内容就是客户可以通过消费积累的里程来兑换免票或免费升舱等。各个航空公司都有一个首次兑换标准,也就是当客户的里程或航段积累到一定程度时才可以实现第一次兑换,这个标准会高于正常的里程兑换标准。但是很多公司的里程积累随着时间会进行一定的削减,例如有的公司会在年末对该年积累的里程进行折半处理。这样会导致许多不了解情况的会员白白损失自己好不容易积累的里程,甚至总是难以实现首次兑换。同样,这也会引起客户的不满或流失。可以采取的措施是从数据库中提取出接近但尚未达到首次兑换标准的会员,对他们进行提醒或促销,使他们通过消费达到标准。一旦实现了首次兑换,客户在本公司进行再次消费兑换就比在其他公司进行兑换要容易许多,在一定程度上等于提高了转移成本。另外,在一些特殊的时间点之前给客户一些提醒,这样可以增加客户的满意度。

(3)交叉销售
通过发行联名卡等于非航空类企业合作,使客户在其他企业消费过程中获得本公司的积分,增强与公司的联系,提高他们的忠诚度。例如,可以查看重要客户在非航空类合作伙伴处的里程积累情况,找出他们习惯的里程积累方式,对他们进行相应促销。

客户识别期和发展期为客户关系打下基石,但是这两个时期带来的客户关系是短暂的、不稳定的。企业要获取长期的利润,必须具有稳定的、高质量的客户。保持客户对于企业是至关重要的,不仅因为争取一个新客户的成本远远高于维持老客户的成本,更重要的是客户流失会造成公司收益的直接损失。因此,在这一时期,航空公司应该努力维系客户关系,使之处于较高的水准,最大化生命周期内公司与客户的互动价值,并使这样的高水平尽可能延长。对于这一阶段的客户,主要应该通过提供优质的服务产品和提高服务水平来提高客户的满意度。通过对旅客数据库的数据挖掘、进行客户细分,可以获得重要保持客户的名单。这类客户的平均折扣率(C)较高(一般所乘航班的舱位等级较高),最近乘坐过本公司航班(R)低,乘坐的次数(F)或里程(M)较高。他们是航空公司的高价值客户,是最为理想的客户类型,对航空公司的贡献最大,所占比例却较小。航空公司应该优先将资源投放到他们身上,对他们进行差异化管理和一对一营销,提高这类客户的忠诚度与满意度,尽可能延长这类客户的高消费水平。

4.结语

(1)本项目通过对航空公司客户数据的挖掘,识别出了五种客户类型,分别为:重要保持客户、重要发展客户、重要挽留客户、一般客户、新客户,对每种客户的特征进行用户画像,将每种客户特征匹配到客户数据源,方便业务部门对不同客户进行针对性营销。同时识别了流失客户和准流失客户,对这两类客户进行了用户画像。

(2)针对挖掘模型的结果,提出了一些营销手段和策略,为航空公司的价值客户群管理提供参考。

窗口属性 客户矩形_航空公司客户价值分析相关推荐

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

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

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

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

  3. 基于机器学习的航空公司客户价值分析与流失预测

    温馨提示:文末有 CSDN 平台官方提供的学长 Wechat / QQ 名片 :) 1. 项目背景 面对激烈的市场竞争,各个航空公司相继推出了更优惠的营销方式来吸引更多的客户,国内某航空公司面临着常旅 ...

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

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

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

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

  6. 毕业设计之 ---基于大数据分析的航空公司客户价值分析

    文章目录 0 前言 1 数据分析背景 2 分析策略 2.1 航空公司客户价值分析的LRFMC模型 2.2 数据 2.3 分析模型 3 开始分析 3.1 数据预处理 3.1.1 数据预览 3.1.2 数 ...

  7. 航空公司客户价值分析(附完整代码)

    一.什么是客户价值分析:   客户价值分析是以客户为中心,从客户需求出发,搞清楚客户需要什么,他们有怎样的一个特征,需要什么样的产品,然后设计相应的产品,通过对客户分群从而满足客户的需求.进行客户价值 ...

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

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

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

    面对激烈的市场竞争,各航空公司相继推出更优惠的营销模式来吸引客户,并通过建立合理的客户价值评估模型对客户进行分类,分析比较不同客户群体的价值,并制定相应的营销策略,对不同客户群体提供个性化的服务.现某 ...

最新文章

  1. 腾讯大佬用了12小时讲完的Python,整整400集,拿走不谢!
  2. 不知道什么期刊会议是国内计算机行业所承认的好会,顶会?中国计算机协会ccf了解一下!祝你圆梦顶刊、顶会
  3. 弹性文件服务解密 -- 块存储、文件存储、对象存储的区别
  4. java jdom_JAVA JDOM生成XML
  5. Message和handler传递对象
  6. centos7安装最新稳定版nginx
  7. Eclipse中servlet显示无法导入javax.servlet包问题的解决方案
  8. coin3d核心类整理
  9. php调用声卡,利用vb测声卡_visualbasic教程
  10. OC 技术 获取设备的UDID添加到开发者账号(视频)
  11. idea 设置版权信息
  12. 计算机控制电缆单价,zr-djyvrp3X2X0.5阻燃计算机控制电缆单价
  13. java manager层_在阿里Java大牛们都是这样对Java项目代码分层的
  14. 港科百创 | 一清创新完成Pre-A+轮战略融资
  15. 杂谈(20210405)
  16. 极米投影、坚果投影、当贝投影,三大品牌对比来了
  17. java 红外光谱数据库_【分享】免费的20个谱图数据库 - 晶体 - 小木虫 - 学术 科研 互动社区...
  18. 用友文件服务器不存在,用友T6软件备份提示超时已过期,错误'53'文件不存在
  19. 基于jsp+mysql+Spring+SpringMVC+mybatis的ssm汽车配件管理系统
  20. 一文搞懂大数据开发,大数据开发体系详解

热门文章

  1. android23 imei 权限,android------关于API 23的权限问题
  2. 安卓9去掉搜索栏_安卓福音,史上最强搞机工具箱,一键修手机
  3. java扫描注解_使用Spring Java注释扫描
  4. npm更改为淘宝镜像
  5. mysql length函数_初识LLDB 调试 MySQL-爱可生
  6. matlab从flove,Matlab玩出新高度,变身表白女友神器_善良995的博客-CSDN博客
  7. python将字符串中的数字相加求和的实现
  8. python怎么设置字段_Django Model中字段(field)的各种选项说明
  9. n1Linux分辨率,看看诺基亚曾经的六款平板电脑 N1不是第一
  10. python开多少进程合适_python多进程基础