美文网首页
航空公司客户价值分析案例——《Python数据分析与挖掘实战》笔

航空公司客户价值分析案例——《Python数据分析与挖掘实战》笔

作者: 孤独唯心 | 来源:发表于2018-05-15 21:34 被阅读0次

    一、实现目标

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

    二、分析方法

    LRFMC模型指标含义:
    (1) L:会员入会时间距观测窗口结束的月数。
    (2) R:客户最近一次乘坐公司飞机距离观测窗口结束的月数。
    (3) F:客户在观测窗口内乘坐公司飞机的次数。
    (4) M:客户在观测窗口内累计的飞行里程碑。
    (5) C:客户在观测窗口内乘坐仓位所对应的折扣系数的平均值。

    方法:本案例采用聚类的方法,通过对航空公司客户价值的LRFMC模型的五个指标进行K-Means聚类,识别客户价值。

    总体流程:数据抽取->数据预处理(数据清洗(缺失值填补舍弃等),属性规约(提取需要特征数据),数据变换(转换适当格式))->建模->结果

    分析过程

    数据抽取

    # -*- coding:utf-8 -*-
    #对数据进行基本的探索,返回缺失值个数,最大值,最小值
    import pandas as pd
    
    #数据文件路径初始化
    datafile = 'air_data.csv'  #第一行为标签属性
    #定义数据探索结果文件名
    resultfile = 'data_explore.xls'
    
    #使用pandas模块内置函数对文件内容进行读取
    data = pd.read_csv(datafile,encoding = 'utf-8')  #设置文件读取编码格式
    
    #获取数据的相应属性内容
    explore = data.describe(percentiles=[], include='all').T  #对探索结果矩阵进行转置
    
    #计算数据结果中的空值个数,describe()函数只返回有值数据个数
    explore['null'] = len(data) - explore['count']
    
    #提取数据探索结果中的null、min、max三列,并且对数据表表头进行重命名
    explore = explore[['null','max','min']]
    print('explore:',explore)
    print('explore.columns:',explore.columns)
    
    explore.columns = [u'空值数',u'最大值',u'最小值']
    print('u-explore:',explore)
    
    #将数据探索的最后结果写入文件中
    explore.to_excel(resultfile)
    

    数据预处理

    内容:数据清洗、属性规约、数据变换

    # -*- coding:utf-8 -*-
    #清洗丢弃掉不符合规则的数据
    import pandas as pd
    
    datafile = 'air_data.csv'
    cleanfile = 'data_clean.csv'
    
    #读取文件内容,并设置读取的编码格式
    data = pd.read_csv(datafile,encoding = 'utf-8')
    
    #去掉票价为0的记录
    data = data[data['SUM_YR_1'].notnull()]
    data = data[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变量中
    data = data[index1|index2|index3]
    
    data.to_csv(cleanfile)
    
    # 属性规约:去掉不相管的属性,只留下与LRFMC模型相关的属性
    # FFP_DATE 入会时间
    # LOAD_TIME 观测窗口结束时间
    # FLIGHT_COUNT 飞行频率
    # avg_discount 平均折扣
    # SEG_KM_SUM 观测窗口总飞行公里数
    # LAST_TO_END 最后一次乘机时间至观察窗口末端时长
    data = data[['FFP_DATE','LOAD_TIME', 'FLIGHT_COUNT', 'avg_discount', 'SEG_KM_SUM','LAST_TO_END']]
    
    cleanfile = 'D:/my_project/Airline_customer_value/cleanfile.csv'
    data.to_csv(cleanfile)
    
    #数据变化的LRFMC数据: 
    #L = LOAD_TIME - FFP_DATE (观测窗口时间 - 入会时间) 
    #R = LOAD_TIME - LAST_TO_END (观测窗口时间 - 最后一次乘机时间) 
    #F = FLIGHT_COUNT 
    #M = SEG_KM_SUM 
    #C = avg_discount
    from datetime import datetime
    import time
    
    def normal_time(date):
        return datetime.strptime(date, '%Y/%m/%d')
    
    def interval_time(dd):
        #计算时间间隔,以月为单位
        return dd.days / 30
    
    
    # data_LRFMC数据
    data_LRFMC = pd.DataFrame()
    # data_LRFMC.columns = ['L', 'R', 'F','M', 'C']
    data_LRFMC['L'] = (data['LOAD_TIME'].apply(normal_time) -data['FFP_DATE'].apply(normal_time)).apply(interval_time) 
    data_LRFMC['R'] = data['LAST_TO_END']
    data_LRFMC['F'] = data['FLIGHT_COUNT']
    data_LRFMC['M'] = data['SEG_KM_SUM']
    data_LRFMC['C'] = data['avg_discount']
    
    # 显示数据的描述,最大值和最小值
    data_LRFMC_describe = data_LRFMC.describe().T
    data_LRFMC_describe = data_LRFMC_describe[['max','min']].T
    
    data_LRFMC.to_csv('D:/my_project/Airline_customer_value/LRFMC.csv') #数据写入文件
    
    #注意到所有的数据值,最大值和最小值间隔较大,需要对数据进行标准化 
    
    # 标准化、重命名、写入文件
    data_normal = (data_LRFMC-data_LRFMC.mean()) / (data_LRFMC.std())
    data_normal.columns = ['Z'+i for i in data_normal.columns]
    data_normal.to_csv('D:/my_project/Airline_customer_value/.csv')
    

    模型构建

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

    from sklearn.cluster import KMeans
    #设置类别个数5
    k = 5
    #创建聚类模型对象
    kmodel = KMeans(n_clusters=k)
    kmodel.fit(data_normal)
    
    #查看聚类中心和对应的类别
    print(kmodel.cluster_centers_)
    print(kmodel.labels_)
    
    #图形展示
    import matplotlib.pyplot as plt
    
    clu = kmodel.cluster_centers_
    x = [1,2,3,4,5]
    colors = ['red','green','yellow','blue','black']
    for i in range(5):
        plt.plot(x, clu[i],label='cluster'+str(i), color=colors[i], marker='o')
    
    plt.xlabel('L R F M C')
    plt.ylabel('values')
    plt.show()
    

    相关文章

      网友评论

          本文标题:航空公司客户价值分析案例——《Python数据分析与挖掘实战》笔

          本文链接:https://www.haomeiwen.com/subject/oegydftx.html