博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
航空公司客户价值特征构建与分析k-means
阅读量:4101 次
发布时间:2019-05-25

本文共 3429 字,大约阅读时间需要 11 分钟。

完整代码及数据来源:

(一)航空数据分析

将客户关系长度L、消费时间间隔R、消费频率F、飞行里程M和折扣系数的平

均值C这5个特征作为航空公司识别客户价值的特征,记为 LRFMC模型,如图:

由于原始数据中并没有直接给出 LRFMC模型的5个特征,需要通过原始数据提取这5个特征

(1)会员入会时间距观测窗口结束的月数L=观测窗口的结束时间一入会时间(单位月),如式(7-1)所示

L=LOAD TIME-FFP DATE                          (7-1)

(2)客户最近一次乘坐公司飞机距观测窗口结束的月数R=最后一次乘机时间至观察窗口末端时长(单位:月),如式(7-2)所示。

R = LAST TO END                          (7-2)

(3)客户在观测窗口内飞行次数F=FLIGHT-COUNT                    (7-3)

(4)客户在观测窗口内飞行里程M= 观测窗口总飞行千米数(单位:千米)

M=SEG_KM_SUM                           (7-4)

(5)客户在观测窗口乘坐舱位对应的折扣系数的平均值c=平均折扣率(单位:无)

C=avg_discount                           (7-5)

标准化5个特征:

完成五个特征的构建以后,对每个特征数据分布情况进行分析,其数据的取值范围如表所示。从表中数据可以发现,五个特征的取值范围数据差异较大,为了消除数量级数据带来的影响,需要对数据做标准化处理。(可以尝试:标准差标准化)

 

任务实现:

  1. 缺失值与异常值处理:
  2. 选取5个特征
  3. 标准化LRMC模型的特征
  4. 使用K-MEANS算法对客户进行分群(5个等级)

 (二)缺失值与异常值处理、选取特征和标准化LRMC

air_line.py文件的内容(标准化LRFMC):

import numpy as npimport pandas as pd#下面的csv文件可在上面的推荐链接下载airline_data = pd.read_csv(r"C:\Users\Administrator\Desktop\航空公司客户价值分析\air_data.csv",encoding="gb18030") #导入航空数据print('原始数据的形状为:',airline_data.shape)## 去除票价为空的记录exp1 = airline_data["SUM_YR_1"].notnull()exp2 = airline_data["SUM_YR_2"].notnull()exp = exp1 & exp2airline_notnull = airline_data.loc[exp,:]print('删除缺失记录后数据的形状为:',airline_notnull.shape)#只保留票价非零的,或者平均折扣率不为0且总飞行公里数大于0的记录。index1 = airline_notnull['SUM_YR_1'] != 0index2 = airline_notnull['SUM_YR_2'] != 0index3 = (airline_notnull['SEG_KM_SUM']> 0) & (airline_notnull['avg_discount'] != 0)airline = airline_notnull[(index1 | index2) & index3]print('删除异常记录后数据的形状为:', airline.shape)## 选取需求特征airline_selection = airline[["FFP_DATE", "LOAD_TIME", "FLIGHT_COUNT","LAST_TO_END", "avg_discount","SEG_KM_SUM"]]## 构建L特征L = pd.to_datetime(airline_selection["LOAD_TIME"]) - pd.to_datetime(airline_selection["FFP_DATE"])##提取数字,由于模型中L单位为:月,所以需要除以30#L = L.astype("str").str.split(' ').str[0]#L = L.astype("int")/30#对L这一列应用lambda函数,对L中的每一个x都执行函数操作L = L.apply(lambda x: round(int(str(x).split(' ')[0])/30, 2))### 合并特征airline_features = pd.concat([L, airline_selection.iloc[:, 2:]], axis = 1)print('构建的LRFMC特征前5行为:\n', airline_features.head())##标准差标准化: 使用sklearn 中preprocessing 模块的StandardScaler 函数;# 也可以使用自定义的方法(数据分析中标准化方法,因为此处不需要对训练集与测试集用同一套规则)from sklearn.preprocessing import StandardScaler  ##标准差标准化data = StandardScaler().fit_transform(airline_features)np.savez('airline_scale.npz',data)print('标准化后LRFMC五个特征为:\n',data[:5,:])

结果:

 

 (三)使用K-MEANS算法对客户进行分群

airline_k_means.py文件的内容(读取上面代码生成的airline_scale.npz进行分群)
import numpy as npimport pandas as pdimport matplotlib.pyplot as pltfrom sklearn.cluster import KMeans #导入kmeans算法airline_scale = np.load('airline_scale.npz')['arr_0']k = 5 ## 确定聚类中心数#构建模型kmeans_model = KMeans(n_clusters = k)fit_kmeans = kmeans_model.fit(airline_scale)   #模型训练#kmeans_model.cluster_centers_ #查看聚类中心#kmeans_model.labels_ #查看样本的类别标签print('样本的类别标签:',kmeans_model.labels_)print('样本的类别标签类型:',type(kmeans_model.labels_))#统计不同类别样本的数目#易错:只用pandas中Series类型才有value_counts()属性r1 = pd.Series(kmeans_model.labels_).value_counts()print('最终每个类别的数目为:\n',r1)

 执行结果:

 

(四)航空分析结果可视化

airline_k_means.py文件的内容继续写下面代码

这里我们选取了每一类的聚类中心kmeans_model.cluster_centers_ 作为样本点,来代表各自的类反映到雷达图。

##做可视化:plt.figure(figsize=(6,6))L=5angles = np.linspace(0, 2*np.pi, L, endpoint=False)labels = ['L', 'F', 'R', 'C', 'M']data = kmeans_model.cluster_centers_##闭合曲线:# print(data)angles = np.concatenate((angles, [angles[0]]))#为了形成闭合,把二维数组每一行下标为0的数拼接到列,# 二维数组与二维数组拼接,#所以reshape成二维的,且变成五列一行data = np.concatenate((data, data[:,0].reshape(5,1)),axis=1).T# print('angles',angles)print('data',data)##绘图:plt.polar(angles, data)plt.xticks(angles, labels)plt.show()

 

 结果:

 

转载地址:http://ycwsi.baihongyu.com/

你可能感兴趣的文章
cannot find class for bean with name ''
查看>>
【多线程浅谈】——-1、进程与线程
查看>>
设计模式简介
查看>>
设计模式的六大原则
查看>>
设计模式六大原则(1):单一职责原则
查看>>
设计模式六大原则(2):里氏替换原则
查看>>
2014——迈出从5K到1W+的重要一步——掌握设计模式
查看>>
【设计模式】—-(1)单例模式(创建型)
查看>>
设计模式六大原则(3):依赖倒置原则
查看>>
设计模式六大原则(4):接口隔离原则
查看>>
设计模式六大原则(5):迪米特法则
查看>>
设计模式六大原则(6):开闭原则
查看>>
阿里面试总结--JAVA
查看>>
Servlet的生命周期
查看>>
JAVA八大经典书籍,你看过几本?
查看>>
《读书笔记》—–书单推荐
查看>>
【设计模式】—-(2)工厂方法模式(创建型)
查看>>
有return的情况下try catch finally的执行顺序(最有说服力的总结)
查看>>
String s1 = new String("abc"); String s2 = ("abc");
查看>>
JAVA数据类型
查看>>