航空公司客户价值分析(实训教程)"/>
航空公司客户价值分析(实训教程)
一、数据探索
1.导入用到的模块。
import numpy as npimport pandas as pdimport datetimeimport seaborn as snsimport matplotlib.pyplot as pltfrom datetime import datetimefrom sklearn.cluster import KMeans
2.导入航空数据。
airline_data = pd.read_csv(r'D:/实训/air_data.csv' , encoding="gb18030")print('原始数据概况为:',airline_data.shape)
可以得到数据记录数为62988行,字段数为44个。
3.查看数据类型。
print(data.info())
4.城市的出现次数前10的数据。
chengshi= data.groupby('WORK_CITY')['MEMBER_NO']x=chengshi.nunique().sort_values(ascending=False)print(x[:10].index)
可以看出在城市出现的次数排名中广州是最多的。
5.工作城市分布状况。
plt.figure(figsize=(12,9))plt.rcParams['axes.unicode_minus'] = False plt.rcParams['font.sans-serif'] = ['SimHei']plt.title("工作城市分布状况")plt.xlabel("城市")plt.ylabel("人数")plt.bar(x[:10].index,x[:10].values,width=0.4)
6.客户入会时间状况。
plt.rcParams['axes.unicode_minus'] = Falseplt.rcParams['font.sans-serif'] = ['SimHei']ffp=data['FFP_DATE'].apply(lambda x:datetime.strptime(x,'%Y/%m/%d'))ffp_year=ffp.map(lambda x:x.year)plt.title("客户入会时间状况")plt.xlabel("年份")plt.ylabel("数量")plt.hist(ffp_year,bins='auto')plt.show()plt.close()
7.年龄分布状况。
x=data['AGE']bins=[0,10,20,30,40,50,60,70,80,90,100]ages=pd.cut(x,bins)count=ages.value_counts()plt.figure(figsize=(20,9))plt.rcParams['axes.unicode_minus'] = Falseplt.rcParams['font.sans-serif'] = ['SimHei']plt.title("年龄分布状况")plt.pie(count.values,labels=count.index,autopct="%1.1f%%",colors=['red','pink','black','blue','white','pink','yellow','gold','yellow'],shadow=True)
年龄分布的情况主要分布在30到40和40到50之间。
8.男女比例状况。
man=pd.value_counts(data['GENDER'])['男']woman=pd.value_counts(data['GENDER'])['女']plt.title("男女比例状况")plt.pie([man,woman],labels=['男','女'],explode=[0.02,0.05],autopct="%1.1f%%",colors=['blue','white'],shadow=True)plt.show()plt.close()
男女比例占3:1
9.会员卡级别
lv4=pd.value_counts(data['FFP_TIER'])[4]lv5=pd.value_counts(data['FFP_TIER'])[5]lv6=pd.value_counts(data['FFP_TIER'])[6]y_lv=[lv4,lv5,lv6]x_lv=[4,5,6]plt.bar(x_lv,y_lv,width=0.4,)plt.title("会员卡级别")plt.xlabel("级别")plt.ylabel("数量")plt.show()plt.close()
可以看出大多数客户级别4,少数客户是级别5和级别6。
10.飞行次数分布。
x=data['FLIGHT_COUNT']bins=[0,25,50,75,100,125,150,175,200,225]ages=pd.cut(x,bins)count=ages.value_counts()plt.figure(figsize=(20,10))plt.rcParams['axes.unicode_minus'] = Falseplt.rcParams['font.sans-serif'] = ['SimHei']plt.title("飞行次数分布")plt.pie(count.values,labels=count.index,autopct="%1.1f%%",colors=['red','pink','white','blue','white','pink','yellow','pink','black'],shadow=True)
可以看出0-25次的飞行次数最多。
11.总飞行公里数分布。
x=data['SEG_KM_SUM']bins=[0,10000,20000,30000,40000,50000,60000]ages=pd.cut(x,bins)count=ages.value_counts()#print(ages)print(count)plt.figure(figsize=(20,9))plt.rcParams['axes.unicode_minus'] = Falseplt.rcParams['font.sans-serif'] = ['SimHei']plt.title("总飞行公里数分布")# print(count.values)# print(count.index)plt.pie(count.values,labels=count.index,autopct="%1.1f%%",colors=['red','pink','black','blue','white','yellow','pink','gold','yellow'],shadow=True)
可以看出一半的总飞行公里数分布是在0到1000。
12.时间间隔分布。
x=data['AVG_INTERVAL']bins=[0,7,31,90,180,365,730]ages=pd.cut(x,bins)count=ages.value_counts()print(count)plt.figure(figsize=(20,9))plt.rcParams['axes.unicode_minus'] = Falseplt.rcParams['font.sans-serif'] = ['SimHei']plt.rcParams['axes.unicode_minus'] = Falseplt.title("时间间隔分布")plt.pie(count.values,labels=count.index,autopct="%1.1f%%",colors=['red','pink','black','blue','white','yellow','pink','gold','yellow'],shadow=True)
可以看出大部分客户的时间间隔的分布在一周到三个月中。
二、数据预处理
1.缺失值降序排序。
data.isnull().sum().sort_values(ascending=False)
可以看出只有工作省份,工作城市,第一年总票价,年龄,第二年总票价,工作国家,性别有缺失值。
2.查看是否有重复值。
data.duplicated().sum()
可以看出没有重复值。
3.分析异常值,进行删除法处理。
i1=data['SUM_YR_1']!=0i2=data['SUM_YR_2']!=0i3=(data['SEG_KM_SUM']>0)&(data['avg_discount']!=0)data=data[(i1|i2)&i3]print("data:",data)
过滤数据。
4.去除票价为空的记录。
exp1 = airline_data["SUM_YR_1"].notnull()exp2 = airline_data["SUM_YR_2"].notnull()exp = exp1 & exp2data=airline_data.loc[exp,:]print('data: ',airline_data)
去除了票价为空的记录。
5.计算皮尔森相关系数。
airdata=data[['FFP_DATE','FFP_TIER','AGE','LAST_TO_END','FLIGHT_COUNT','SEG_KM_SUM','EXCHANGE_COUNT','Points_Sum']]airdata['FFP_DATE']=data['FFP_DATE']corr=airdata.corr(method='pearson')print("相关性矩阵:\n",corr)
6.热力图。
plt.subplots(figsize=(10,10))sns.heatmap(corr,annot=True,vmax=1,square=True,cmap='Blues')plt.show()plt.close()
(1)L:会员入会时间距离观测窗口结束的月数LOAD_TIME - FFP_DATE。
(2)R:客户最后一次乘坐飞机距离观测窗口结束的月数LAST_TO_END。
(3)F:客户在观察窗口内乘坐飞机的次数 FLIGHT_COUNT。
(4)M:由于票价受折扣、舱位等多种因素影响,使用票价作为M参数,数据波动太大,这里使用飞行里程数作为M参数,观测窗口的总飞行公里数SEG_KM_SUM。
(5)C:观测时间内乘坐舱位所对应的的折扣系数的平均值 AVG_DISCOUNT。
三、建模评估
1.LRFMC情况分布。
L=pd.to_datetime(data['LOAD_TIME'])-pd.to_datetime(data['FFP_DATE'])L = L.astype('str').str.split().str[0]L = L.astype('int')/30atte=pd.concat([L,data['LAST_TO_END'],data['FLIGHT_COUNT'],data['SEG_KM_SUM'],data['avg_discount']],axis=1)atte.columns=['L','R','F','M','C']atte.head()
2.K-Mean聚类。
3.各类的聚类中心。
r2=pd.DataFrame(model.cluster_centers_,columns=['L','R','F','M','C'])print("各类的聚类中心:\n",r2)r3=pd.Series(['客户群1','客户群2','客户群3','客户群4','客户群5'])r4=pd.concat([r3,r1,r2],axis=1)r4.columns=['聚类类别','聚类个数','L','R','F','M','C']r4
4.绘制雷达。
四、模型的应用场景
航空公司的会员可以分为白金卡会员、金卡会员、银卡会员和普通卡会员,其中非普通 卡会员可以统称为航空公司的精英会员。虽然各个航空公司都有自己的特点和规定,但会员 制的管理方法是大同小异的。成为精英会员一般都是要求在一定时间内(如一年)积累一定的 飞行里程或航段,达到这种要求后就会在有效期内(通常为两年)成为精英会员,并享受相应 的高级别服务。有效期快结束时,根据相关评价方法确定客户是否有资格继续作为精英会员, 然后对该客户进行相应的升级或降级。
然而,由于许多客户并没有意识到或根本不了解会员升级或保级的时间与要求(相关的 文件说明往往复杂且不易理解),经常在评价期过后才发现自己其实只差一点就可以实现升 级或保级,却错过了机会,使之前的里程积累白白损失。同时,这种认知还可能导致客因此, 航空公司在对会员升级或保级进行评价的时间点之前,可以对那些接近但尚未户的不满,就 放弃在本公司的消费。达到要求的较高消费客户进行适当提醒甚至采取一些促销活动,刺激 他们通过消费达到相应标准。这样既可以获得收益,同时也提高了客户的满意度,增加了公 司的精英会员。
(2)首次兑换
航空公司常旅客计划中最能够吸引客户的内容就是客户可以通过消费积累的里程来换 免票或免费升舱等。各个航空公司都有一个首次兑换标准,也就是当客户的里程或期段积累 到一定程度时才可以实现第一次兑换,这个标准会高于正常的里程兑换标准。但是多公司的里程积累随着时间会进行一定的削减,例如有的公司会在年末对该年积累的里进行折半处理。 这样会导致许多不了解情况的会员白白损失自己好不容易积累的里程,甚至总是难以实现首 次兑换。同样,这也会引起客户的不满或流失。可以采取的措施是据库中提取出接近但尚未 达到首次兑换标准的会员,对他们进行提醒或促销,使他们通过消费达到标准。一旦实现了 首次兑换,客户在本公司进行再次消费兑换就比在其他公司行兑换要容易许多,等于在一定 程度上提高了转移的成本。另外,在一些特殊的时间点(如里程折半的时间点)之前可以给客 户一些提醒,这样可以增加客户的满意度
交叉销售
通过发行联名卡等与非航空类企业的合作,使客户在其他企业的消费过程中获得本司的 积分,增强与公司的联系,提高他们的忠诚度。如可以查看重要客户在非航空类合作伙伴处 的里程积累情况,找出他们习惯的里程积累方式(是否经常在合作伙伴处消费,更喜欢消费 哪些类型合作伙伴的产品),对他们进行相应促销。客户识别期和发展期为客户关系打下基石,但是这两个时期带来的客户关系是短暂的不稳定的。企业要获取长期的利润,必须具有 稳定的、高质量的客户。保持客户对于企业是至关重要的,不仅因为争取一个新客户的成本 远远高于维持老客户的成本,更重要的是客户流失会造成公司收益的直接损失。因此,在这 一时期,航空公司应该努力维系客户关系水平,使之处于较高的水准,最大化生命周期内公 司与客户的互动价值,并使这样的高水平尽可能延长。对于这一阶段的客户,主要应该通过 提供优质的服务产品和提高服务水平来提高客户的满意度。通过根据对常旅客数据库的数据 分析,进行客户细分,可以获得重要保持客户的名单。这类客户一般所乘航班的平均折扣系 数©较高,最近乘机距今的时间长度低,飞行次数(F)或总飞行里程(M)也较高。他们是 航空公司的价值客户,是最为理想的客户类型,对航空公司的贡献最大,所占比例却比较小。 航空公司应该优先将资源投放到他们身上,对他们进行差异化管理和一对一营销,提高这类 客户的忠诚度与满意度,尽可能延长这类客户的高水平消费。
更多推荐
航空公司客户价值分析(实训教程)
发布评论