数据分析可视案例丨大数据助力航空公司转型(上)

数据时代,各行各业在面向客户制定运营策略、营销策略时,都希望能够针对不同的客户推行不同的策略,实现精准化运营,以期获取最大的转化率。客户关系管理是精准化运营的基础,而客户关系管理的核心是客户分类。通过客户分类,对客户群体进行细分,区别出低价值客户、高价值客户,对不同的客户群体开展不同的个性化服务,将有限的资源合理地分配给不同价值的客户,实现效益最大化。

航空公司的客户运营一直是客户运营标杆,积分换里程,积分兑奖品,VIP候机室,积分兑优质乘机餐,会员优先选座等一系列花式操作令乘客们目不暇接,然而在数据时代的今天,各行各业都玩起了用户运营,以互联网公司为首,以各种手段吸引用户关注,仿佛都成了用户运营专家,在会员泛滥的今天,航空公司如何通过精细化运营提升用户的贡献量、活跃度和忠诚度,就是本文研究的课题,本文将使用航空公司客户数据,操作结合RFM模型,采用K-Means聚类算法,对客户进行分群,比较不同类别客户的客户价值,从而制定相应的营销策略。

01背景与挖掘目标

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

面对激烈的市场竞争,各个航空公司都推出了更优惠的营销方式来吸引更多的客户,国内某航空公司面临着常旅客流失、竞争力下降和航空资源未充分利用等经营危机。通过建立合理的客户价值评估模型,对客户进行分群,分析比较不同客户群的客户价值,并制定相应的营销策略,对不同的客户群提供个性化的客户服务是必须的和有效的。结合该航空公司已积累的大量的会员档案信息和其乘坐航班记录,实现以下目标。

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

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

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

02分析方法与过程

全球经济环境和市场环境已经悄然改变,企业的业务逐步从以产品为主导转向以客户需求为主导。一种全新的“以客户为中心”的业务模式正在形成并被提升到前所未有的高度。然而与客户保持关系需要花费成本,企业所拥有的客户中只有一部分能为企业带来利润。企业的资源也是有限的,忽视高潜力的客户而对所有客户都提供同样的服务,将使企业的资源无法发挥其最大效用去创造最大化的利润。任何企业要想生存和发展,都必须获得利润,追求利润最大化是企业生存和发展的宗旨之一。所以企业不可能也不应该和所有的客户都保持同样的关系。客户营销战略的倡导者Jay & Adam Curry从国外数百家公司进行了客户营销实施的经验中提炼了如下经验。

  1. 公司收入的80%来自顶端的20%的客户。

  2. 20%的客户其利润率100%。

  3. 90%以上的收入来自现有客户。

  4. 大部分的营销预算经常被用在非现有客户上。

  5. 5%至30%的客户在客户金字塔中具有升级潜力。

  6. 客户金字塔中客户升级2%,意味着销售收入增加10%,利润增加50%。

这些经验也许并不完全准确,但是它揭示了新时代客户分化的趋势,也说明了对客户价值分析的迫切性和必要性。如果把客户的营利性加以分析,就会发现客户盈利结构已发生了重大变化,只有特定的一部分客户给企业带来了利润。企业如果想获得长期发展,必须对这类客户做到有效的识别和管理。如果用同样的方法应对所有与企业有业务往来的客户,必然不会获得成功。

众多的企业管理者虽然知道客户价值分析的重要性,但对如何进行客户价值分析却知之甚少。如何全方位,多角度的考虑客户价值因素,进行有效的客户价值分析,这是摆在所有企业面前需要认真思索的一个问题。只有甄选出有价值的客户并将精力集中在这些客户身上,才能有效地提升企业的竞争力,使企业获得更大的发展。

在客户价值分析领域,最具影响力并得到实证检验的理论与模型有:客户终生价值理论,客户价值金字塔模型,策略评估矩阵分析法和RFM客户价值分析模型等。

03分析步骤与流程

航空客户价值分析案例的总体流程如图1所示。主要包括以下4个步骤。

  1. 抽取航空公司2012年4月1日至2014年3月31日的数据。

  2. 对抽取的数据进行数据探索分析与预处理,包括数据缺失值与异常值的探索分析,数据清洗,特征构建,标准化等操作。

  3. 基于RFM模型,使用K-Means算法进行客户分群。

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

图片

图 1  航空客运数据分析建模总体流程

04

数据探索分析

从航空公司系统内的客户基本信息、乘机信息以及积分信息等详细数据中,根据末次飞行日期(LAST_FLIGHT_DATE),以2014年3月31日为结束时间,选取宽度为两年的时间段作为分析观测窗口,抽取观测窗口2012年4月1日至2014年3月31日内有乘机记录的所有客户的详细数据形成历史数据,总共62988条记录。其中包含了如会员卡号,入会时间,性别,年龄,会员卡级别,工作地城市,工作地所在省份,工作地所在国家,观测窗口结束时间,观测窗口乘机积分,飞行公里数,飞行次数,飞行时间,乘机时间间隔,平均折扣率等44个属性,如表1所示。

图片

表1航空公司数据属性说明

1. 描述性统计分析 

通过对原始数据观察发现数据中存在票价为空值的记录,同时存在票价最小值为0、折扣率最小值为0但总飞行公里数大于0的记录。票价为空值的数据可能是客户不存在乘机记录造成。其它的数据可能是客户乘坐0折机票或者积分兑换造成。

查找每列属性观测值中空值个数、最大值、最小值,如代码清单1所示。

# 对数据进行基本的探索# 返回缺失值个数以及最大最小值import pandas as pddatafile= '../data/air_data.csv'  # 航空原始数据,第一行为属性标签resultfile = '../tmp/explore.csv'  # 数据探索结果表
# 读取原始数据,指定UTF-8编码(需要用文本编辑器将数据装换为UTF-8编码)data = pd.read_csv(datafile, encoding = 'utf-8')
# 包括对数据的基本描述,percentiles参数是指定计算多少的分位数表(如1/4分位数、中位数等)explore = data.describe(percentiles = [], include = 'all').T
# describe()函数自动计算非空值数,需要手动计算空值数explore['null'] = len(data)-explore['count']
explore = explore[['null', 'max', 'min']]explore.columns = [u'空值数', u'最大值', u'最小值']  # 表头重命名'''这里只选取部分探索结describe()函数自动计算的字段有count(非空值数)、unique(唯一值数)、top(频数最高者)、freq(最高频数)、mean(平均值)、std(方差)、min(最小值)、50%(中位数)、max(最大值)'''
explore.to_csv(resultfile)  # 导出结果

根据代码清单 71得到的探索结果见表2。

图片

表2数据探索分析结果表

2. 分布分析 

分别从客户基本信息、乘机信息、积分信息3个角度进行数据探索,寻找客户的分布规律。

2.1 客户基本信息分布分析

选取客户基本信息中入会时间、性别、会员卡级别和年龄字段进行探索分析,探索客户的基本信息分布状况,如代码清单2所示。

# 客户信息类别# 提取会员入会年份from datetime import datetimeffp = data['FFP_DATE'].apply(lambda x:datetime.strptime(x,'%Y/%m/%d'))ffp_year = ffp.map(lambda x : x.year)# 绘制各年份会员入会人数直方图fig = plt.figure(figsize=(8 ,5))  # 设置画布大小plt.rcParams['font.sans-serif'] = 'SimHei'  # 设置中文显示plt.rcParams['axes.unicode_minus'] = Falseplt.hist(ffp_year, bins='auto', color='#0504aa')plt.xlabel('年份')plt.ylabel('入会人数')plt.title('各年份会员入会人数')plt.show()plt.close# 提取会员不同性别人数male = pd.value_counts(data['GENDER'])['男']female = pd.value_counts(data['GENDER'])['女']
# 绘制会员性别比例饼图fig = plt.figure(figsize=(7 ,4))  # 设置画布大小plt.pie([ male, female], labels=['男','女'], colors=['lightskyblue', 'lightcoral'],       autopct='%1.1f%%')plt.title('会员性别比例')plt.show()plt.close
# 提取不同级别会员的人数lv_four = pd.value_counts(data['FFP_TIER'])[4]lv_five = pd.value_counts(data['FFP_TIER'])[5]lv_six = pd.value_counts(data['FFP_TIER'])[6]# 绘制会员各级别人数条形图fig = plt.figure(figsize=(8 ,5))  # 设置画布大小plt.bar(left=range(3), height=[lv_four,lv_five,lv_six], width=0.4, alpha=0.8, color='skyblue')plt.xticks([index for index in range(3)], ['4','5','6'])plt.xlabel('会员等级')plt.ylabel('会员人数')plt.title('会员各级别人数')plt.show()plt.close()
# 提取会员年龄age = data['AGE'].dropna()age = age.astype('int64')# 绘制会员年龄分布箱型图fig = plt.figure(figsize=(5 ,10))plt.boxplot(age,            patch_artist=True,            labels = ['会员年龄'],  # 设置x轴标题            boxprops = {'facecolor':'lightblue'})  # 设置填充颜色plt.title('会员年龄分布箱线图')# 显示y坐标轴的底线plt.grid(axis='y')plt.show()plt.close

代码清单2  探索客户的基本信息分布状况

通过代码清单2得到各年份会员入会人数直方图,如图2所示,入会人数随年份增长而增加在2012年达到最高峰。

图片

图2   各年份会员入会人数

通过代码清单2得到会员性别比例饼图,如图3所示,可以看出男性会员明显比女性会员多。

图片

图3 会员性别比例

通过代码清单2得到会员各级别人数条形图,如图4所示,可以看出绝大部分会员为4级会员,仅有少数会员为5级和6级会员。

图片

图4 会员各级别人数

得到会员年龄分布箱型图,如图 5所示,可以看出大部分会员年龄集中在30~50岁之间,极少量的会员年龄小于20岁或高于60岁,且存在一个超过100岁的异常数据。

图片

图5  会员年龄分布

2.2 客户乘机信息分布分析

选取最后一次乘机至结束的时长、客户乘机信息中飞行次数、总飞行公里数进行探索分析,探索客户的乘机信息分布状况,如代码清单3所示。​​​​​​​

lte = data['LAST_TO_END']fc = data['FLIGHT_COUNT']sks = data['SEG_KM_SUM']
# 绘制最后乘机至结束时长箱线图fig = plt.figure(figsize=(5 ,8))plt.boxplot(lte,            patch_artist=True,            labels = ['时长'],  # 设置x轴标题            boxprops = {'facecolor':'lightblue'})  # 设置填充颜色
plt.title('会员最后乘机至结束时长分布箱线图')# 显示y坐标轴的底线plt.grid(axis='y')plt.show()plt.close
# 绘制客户飞行次数箱线图fig = plt.figure(figsize=(5 ,8))plt.boxplot(fc,            patch_artist=True,            labels = ['飞行次数'],  # 设置x轴标题            boxprops = {'facecolor':'lightblue'})  # 设置填充颜色plt.title('会员飞行次数分布箱线图')# 显示y坐标轴的底线plt.grid(axis='y')plt.show()plt.close
# 绘制客户总飞行公里数箱线图fig = plt.figure(figsize=(5 ,10))plt.boxplot(sks,            patch_artist=True,            labels = ['总飞行公里数'],  # 设置x轴标题            boxprops = {'facecolor':'lightblue'})  # 设置填充颜色plt.title('客户总飞行公里数箱线图')# 显示y坐标轴的底线plt.grid(axis='y')plt.show()plt.close

代码清单3探索客户乘机信息分布状况

通过代码清单3得到客户最后一次乘机至结束的时长、客户乘机信息中飞行次数、总飞行公里数的箱线图如图 6、图7所示。

图片

图6  客户最后一次乘机至结束的时长箱线图

图片

图7  客户飞行次数与

总飞行公里数的箱线图

如图 6所示,客户的入会时长主要分布在50~300的区间内,另外有一部分客户群体分布在600以上的区间,可分为两个群体。如图 7所示,客户的飞行次数与总飞行公里数也明显的分为两个群体,大部分客户集中在箱线图的中的下方的箱体中,少数客户分散分布在箱体上界的上方,这部分用户很可能是高价值客户,因为其飞行次数和总飞行公里数明显超过在箱体内的客户。

2.3 客户积分信息分布分析

选取积分兑换次数、总累计积分进行探索分析,探索客户的积分信息分布状况,如代码清单4所示。

# 积分信息类别# 提取会员积分兑换次数ec = data['EXCHANGE_COUNT']# 绘制会员兑换积分次数直方图fig = plt.figure(figsize=(8 ,5))  # 设置画布大小plt.hist(ec, bins=5, color='#0504aa')plt.xlabel('兑换次数')plt.ylabel('会员人数')plt.title('会员兑换积分次数分布直方图')plt.show()plt.close
# 提取会员总累计积分ps = data['Points_Sum']# 绘制会员总累计积分箱线图fig = plt.figure(figsize=(5 ,8))plt.boxplot(ps,            patch_artist=True,            labels = ['总累计积分'],  # 设置x轴标题            boxprops = {'facecolor':'lightblue'})  # 设置填充颜色plt.title('客户总累计积分箱线图')# 显示y坐标轴的底线plt.grid(axis='y')plt.show()plt.close

代码清单4探索客户积分信息分布状况

通过代码清单4得到客户积分兑换次数直方图和总累计积分分布箱线图,分别如图 8、图9所示。

图片

图8 客户积分兑换次数直方图

图片

图9 客户总累计积分

通过图 8可以看出,绝大部分客户的兑换次数在0~10的区间内,这表示大部分客户都很少进行积分兑换。通过图 9可以看出,一部分客户集中在箱体中,少部分客户分散分布在箱体上方,这部分客户的积分要明显高于箱体内的客户。

3. 相关性分析

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

# 提取属性并合并为新数据集data_corr = data[['FFP_TIER','FLIGHT_COUNT','LAST_TO_END',                  'SEG_KM_SUM','EXCHANGE_COUNT','Points_Sum']]age1 = data['AGE'].fillna(0)data_corr['AGE'] = age1.astype('int64')data_corr['ffp_year'] = ffp_year
# 计算相关性矩阵dt_corr = data_corr.corr(method='pearson')print('相关性矩阵为:\n',dt_corr) # 绘制热力图import seaborn as snsplt.subplots(figsize=(10, 10)) # 设置画面大小sns.heatmap(dt_corr, annot=True, vmax=1, square=True, cmap='Blues')plt.show()plt.close

代码清单 5相关系数矩阵与热力图

通过代码清单5得到相关系数矩阵如表3所示,得到热力图如图10所示,可以看出部分属性间具有较强的相关性,如FLIGHT_COUNT(飞行次数)属性与SEG_KM_SUM(总公里数)属性;也有部分属性与其他属性的相关性都较弱,如AGE(年龄)属性与EXCHANGE_COUNT(积分兑换次数)属性。

图片

表 3 相关系数矩阵

图片

图10  热力图

* RFM模型及K-Means聚类算法实操详解,见下期:

《大数据助力航空公司转型(下)》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值