Python教程

python数据分析之航空公司客户价值分析

本文主要是介绍python数据分析之航空公司客户价值分析,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

一.引言

本篇文章是根据航空公司提供的乘客个人信息,通过建立合理的客户价值评估模型,对客户进行分群,比较分析不同客户群的特点和价值,来指定相应的营销策略,从而减少客户流失,挖掘出潜在客户,实现盈利。在这里是用K-
means聚类方法来对乘客进行分群的。

源数据部分如下图所示:

各属性解释如下:

![](https://img-
blog.csdn.net/2018051615505298?)

二.数据探索

通过调用describe()函数对数据进行一个大致的了解,主要是查看缺失值和异常值。通过观察发现,存在票价为零,折扣率为0,总飞行数为0的情况。通过简单处理,我输出了一个包含个属性空值个数,最大值,最小值数据的表格。部分如下:

对应代码:

    import pandas as pd
    datafile='D:/航空公司客户价值分析/data/air_data2.csv'
    resultfile='D:/航空公司客户价值分析/explore.xls'
    data=pd.read_csv(datafile)
    explore=data.describe().T#对数据的统计性描述,T是我进行了转置
    explore['null']=len(data)-explore['count']
    df=explore[['max','min','null']]
    df.to_excel(resultfile)
[/code]

三.数据预处理

1.数据清洗

通过上一步的数据探索分析发现数据中存在缺失值,而这一部分的比例相对较小,故直接删掉。具体处理如下:

  * 丢弃票价为空的记录 
  * 丢弃票价为0,平均折扣率不为0且总飞行公里数大于零的记录。 

2.属性规约与数据变换

原始数据中的属性太多。而评估航空公司客户价值通常根据LRFMC模型,与其相关的只有6个属性即,FFP_DATE、LOAD_TIME、FLIGHT_COUNT、AVG_DISCOUNT、SEG_KM_SUM、LAST_TO_END。  

简单介绍下LRFMC模型,即客户关系长度L、消费时间间隔R、消费频率F、飞行里程M和折扣系数的平均值C。这五个指标为评价客户价值的重要因素,而上面6个属性与这5个指标的关系如下:  

  * L=LOAD_TIME-FFP_DATE 

会员入会时间距观测窗口结束的月数=观测窗口结束的时间-入会时间

  * R=LAST_TO_END 

客户最近一次乘坐公司飞机距观测窗口结束的月数=最后一次乘机时间至观察窗口末端时长[单位:月]  

  * F=FLIGHT_COUNT 

客户在观测窗口内乘坐公司飞机的次数=观测窗口的飞行次数[单位:次]  

  * M=SEG_KM_SUM 

客户在观测时间内在公司累计的飞行里程=观测窗口的总飞行公里数[单位:公里]  

  * C=AVG_DISCOUNT 

客户在观测时间内乘坐舱位所对应的折扣系数的平均值=平均折扣率

提取了相关的数据后,发现这5个指标的取值范围相差较大所以需对数据进行标准化处理。

代码如下:

```code
    import pandas as pd
    import datetime
    #数据清洗
    #删除空值,异常值
    datafile='D:/航空公司客户价值分析/data/air_data2.csv'
    resultfile='D:/航空公司客户价值分析/data_cleaned.csv'
    data=pd.read_csv(datafile)
    data=data[data['SUM_YR_1'].notnull()&data['SUM_YR_2'].notnull()]#剔除掉票价为空的
    #保留票价非零的或者折扣率和飞行公里数同时为0的
    index1=data['SUM_YR_1']!=0
    index2=data['SUM_YR_2']!=0
    index3=(data['SEG_KM_SUM'])==0&(data['avg_discount']==0)
    data=data[index1|index2|index3]
    data.to_csv(resultfile,encoding = 'utf_8_sig')#输出为utf8格式,不然excel打开中文会乱码
    
    
    #属性规约与数据变换
    #根据航空公司的LRFMC价值指标,删除掉无关属性
    d1,d2=[],[]
    for x in data['LOAD_TIME']:
        d1.append(datetime.datetime.strptime(x,'%Y/%m/%d'))
    for y in data['FFP_DATE']:
        d2.append(datetime.datetime.strptime(y,'%Y/%m/%d'))
        
    d3=[d1[i]-d2[i] for i in range(len(d1))]
    data['L']=[round((x.days/30),2) for x in d3]
    data2=data[['L','LAST_TO_END','FLIGHT_COUNT','SEG_KM_SUM','avg_discount']]
    data2.columns=['L','R','F','M','C']
    data2.to_csv('D:/航空公司客户价值分析/zscoredata.csv',encoding = 'utf_8_sig',index=False)
[/code]

输出为:

![](https://www.www.zyiz.net/i/?i=20180516164553437)  

将以上数据进行零—均值标准化:

```code
    import pandas as pd
    datafile='D:/航空公司客户价值分析/zscoredata.csv'
    resultfile='D:/航空公司客户价值分析/standard_data.csv'
    data=pd.read_csv(datafile)
    data=(data-data.mean(axis=0))/(data.std(axis=0))
    data.columns=['Z'+i for i in data.columns]
    data.to_csv(resultfile,encoding = 'utf_8_sig',index=False)
[/code]

此时输出为:

![](https://www.www.zyiz.net/i/?i=20180516164816890)  

四.模型构建

客户价值分析模型由两个部分构成。第一个部分是根据航空公司客户5个指标,对客户进行聚类分群,第二部分是对分群后的客户群进行特征分析,并对客户群的客户价值进行排名。  

1.K-Means聚类算法对客户数据进行分群,k=5,即把客户分成5类。k-means位于scikit-Learn库中,需要先安装这个库。

```code
    import pandas as pd
    import numpy as np
    import matplotlib.pyplot as plt
    from sklearn.externals import joblib
    from sklearn.cluster import KMeans
    if __name__=='__main__':#防止模块范围内的代码在子进程中被重新执行,因为Windows中没有fork()函数
        datafile='D:/航空公司客户价值分析/standard_data.csv'
        resultfile='D:/航空公司客户价值分析/kmeans.csv'
        k=5
        data=pd.read_csv(datafile)
        #调用K-Means方法进行聚类分析
        kmodel=KMeans(n_clusters=k,n_jobs=4)#n_jobs是并行数,一般赋值为电脑的CPU数。
        # #save model
        # joblib.dump(kmodel,'kmeans.model',compress=3)
        # #load model to model
        # model=joblib.load('kmeans.model')
        kmodel.fit(data)
        r1=pd.Series(kmodel.labels_).value_counts()
        r2=pd.DataFrame(kmodel.cluster_centers_)
        r3=pd.Series(['客户群1','客户群2','客户群3','客户群4','客户群5',])
        r=pd.concat([r3,r1,r2],axis=1)
        
        r.columns=['聚类类别','聚类个数']+list(data.columns)
        r.to_csv(resultfile,encoding = 'utf_8_sig',index=False)
[/code]

输出聚类分析结果:

![](https://www.www.zyiz.net/i/?i=20180516173351260)  

上图可以看到各个类群的客户个数,及聚类中心。

2.客户价值分析

针对上面的聚类结果,对客户进行特征分析,绘制雷达图。

```code
    #绘制雷达图
        labels = np.array(list(data.columns))#标签
        dataLenth = 5#数据个数
        r4=r2.T
        r4.columns=list(data.columns)
        fig = plt.figure()
        y=[]
        for x in list(data.columns):
            dt= r4[x]
            dt=np.concatenate((dt,[dt[0]]))
            y.append(dt)
        ax = fig.add_subplot(111, polar=True)
        angles = np.linspace(0, 2*np.pi, dataLenth, endpoint=False)
        angles = np.concatenate((angles, [angles[0]]))
        ax.plot(angles, y[0], 'b-', linewidth=2)
        ax.plot(angles, y[1], 'r-', linewidth=2)
        ax.plot(angles, y[2], 'g-', linewidth=2)
        ax.plot(angles, y[3], 'y-', linewidth=2)
        ax.plot(angles, y[4], 'm-', linewidth=2)
        plt.rcParams['font.sans-serif']=['SimHei'] 
        ax.legend(r3,loc=1)
        ax.set_thetagrids(angles * 180/np.pi, labels, fontproperties="SimHei")
        ax.set_title("matplotlib雷达图", va='bottom', fontproperties="SimHei")
        ax.grid(True)
        plt.show()
[/code]

![](https://www.www.zyiz.net/i/?i=20180516174923537)

由上图可以很清晰的看到每个客户群的指标情况,将每个客户群的优势特征,劣势特征总结如下:

优势特征:

客户群1:R

客户群2:F、M、L

客户群3:L

客户群4:C

客户群5:无

劣势特征:

客户群1:F、M

客户群2:R

客户群3:R、F、M、C

客户群4:F、M

客户群5:R、L、C

基于LRFMC模型的具体含义,我们可以对这5个客户群进行价值排名。同时,将这5个客户群重新定义为五个等级的客户类别:重要保持客户,重要挽留客户,重要发展客户,一般客户,低价值客户。

  * 重要保持客户:这类客户平均折扣率(C)和入会员时间(L)都很高(入会员时间越长,会员级别越高,折扣越大),最近乘坐过本航班时间间隔(R)低,乘坐的次数(F)或(M)高。说明他们经常乘坐飞机,且有一定经济实力,是航空公司的高价值 客户。对应客户群2。 
  * 重要发展客户:这类客户平均折扣率高(C),最近乘坐过本航班时间间隔(R)短,但是乘坐的次数(F)和(M)都很低。说明这些乘客刚入会员不久,所以乘坐飞机次数少,是重要发展客户,对应客户群4。 
  * 重要挽留客户:这类客户入会时间长(L),最近乘坐过本航班时间间隔(R)较长,里程数和乘坐次数都变低,为重要挽留客户。对应客户群3 
  * 一般与低价值客户:这类客户乘坐时间间隔长(R)或乘坐次数(F)和总里程(M)低,平均折扣也很低。对应客户群5和客户群1. 

针对以上不同的价值客户群,航空公司应当及时出台相应的营销策略,针对不同的客户群提供相应的产品和服务,提升客户价值,维持和稳定重要客户,挽留高价值客户的流失。价值排名如下:

![](https://www.www.zyiz.net/i/?i=20180516185322417)  

因为乘客情况是实时变动的,所以该模型并不稳定,应根据实际情况,定期更新数据,对新增的客户信息进行聚类分析,重新训练模型进行调整。  


![在这里插入图片描述](https://www.www.zyiz.net/i/ll/?i=20210608151750993.gif)
这篇关于python数据分析之航空公司客户价值分析的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!