航空公司客户价值分析

来源:互联网 发布:ipa手游模拟器mac 编辑:程序博客网 时间:2024/04/30 17:34

1.目标分析
根据客户数据和用户类别特征,对客户进行分类,从而针对不同用户制定相应的营销策略。
2.简单分析
(1)识别客户价值的指标:最近消费时间间隔(Recency)、消费频率(Frequency)、消费金额(Monetary)
金额的衡量指标模糊(如在长途低等舱位用户和短途高等舱位的用户选择问题中),将其分为飞行里程数(M)和折扣系数的平均值(C)
,再加上客户关系长度(客户入会时间)组成最终的衡量指标组。
(2)数据模型需要对根据指标进行分类,故考虑采用K-Means算法分类。
(3)实现步骤
1)数据获取:选取宽度为两年的时间段 数据,后续新增数据也加入形成历史数据。
2)数据探索分析和预处理
3)数据建模
4)模型测试
3.数据探索分析
目的:进行缺失值和异常值分析
查询数据中出现特殊情况有:票价为空值,票价最小值小于0,折扣率最小值为0、总飞行距离大于0;

#对数据进行分析,获取空值、最大值、最小值import pandas as pddatafile = "E:/MachineLearning-data/Aviation_Value_02/air_data.csv"#原始数据位置resultfile = "E:/MachineLearning-data/Aviation_Value_02/explore.xls"#结果数据位置data = pd.read_csv(datafile,encoding='utf-8')#读取数据,编码设置#percentiles为计算分位数表,默认为25%,50%,75%#include:包含所有数据#T:将数据进行转置,原始每一列的名称作为行元素,对每一列的属性进行三种值的统计explore = data.describe(percentiles=[],include='all').T#统计空值的数据个数,数据描述中count为非空值数据个数explore['null'] = len(data)-explore['count']#数据描述会给出相应值explore = explore[['null','max','min']]#对每一列进行命名explore.columns = [u'空值数',u'最大值',u'最小值']explore.to_excel(resultfile)
统计结果如:https://pan.baidu.com/s/1jHSGDJg所示

4 .数据预处理
(1)数据清洗
通过分析发现,数据中存在(缺失值),(票价最小值为0),(折扣率最小值不为0,但总飞行公里数大于0)的三类异常记录,由于数据量巨大,而此类数据所占比例较小,所以考虑将其丢弃。

import pandas as pd datafile = "E:/MachineLearning-data/Aviation_Value_02/air_data.csv"cleanfile = "E:/MachineLearning-data/Aviation_Value_02/data_clean.xls"data = pd.read_csv(datafile,encoding='utf-8')#对两年数据进行非空检测,一旦有一年为空,则认为为空data = data[data["SUM_YR_1"].notnull()*data["SUM_YR_2"].notnull()]index1 = data["SUM_YR_1"]!=0index2 = data["SUM_YR_2"]!=0index3 = (data['SEG_KM_SUM']==0)&(data['avg_discount']==0)#第一年票价为0或第二年票价为0,或者票价进行打折的数据data = data[index1|index2|index3]data.to_excel(cleanfile)
结果如:https://pan.baidu.com/s/1dFIrITj所示

(2)属性制约
所有属性中删除与其不相关、弱相关或冗余地属性
(3)数据变换
5个数据指标的取值范围差异较大,为了消除数量级数据带来的影响,考虑将其进行标准化处理。

import pandas as pddatafile = "E:/MachineLearning-data/Aviation_Value_02/zscoredata.xls"zscoredfile = "E:/MachineLearning-data/Aviation_Value_02/zscoredata1.xls"#数据标准化data = pd.read_excel(datafile)#输出矩阵为一行,求每一列标准化值data = (data-data.mean(axis=0))/(data.std(axis=0))#表头重命名data.columns=['Z'+i for i in data.columns]data.to_excel(zscoredfile,index=False)
标准化的数据如:https://pan.baidu.com/s/1c1EFIyG

5.模型建立
客户聚类:

import pandas as pdfrom sklearn.cluster import KMeansinputfile = "E:/MachineLearning-data/Aviation_Value_02/zscoredata1.xls"k = 5data = pd.read_excel(inputfile)#聚类为5类,并行数为4,最好和CPU数量一致kmodel = KMeans(n_clusters=k,n_jobs=4)kmodel.fit(data)#查看聚类中心kmodel.cluster_centers_#查看个样本类别kmodel.labels_

6.思考与总结
1)Scikit-Learn中KMeans函数中的初始化中心可以使用什么算法得到?默认是什么算法?
答:采用层次聚类输出k个簇,以簇的中心点作为k-means的初始化中心。
2)使用不同的预处理对数据进行变换,在使用K-Means算法进行分类,对比聚类结果,分析不同的数据预处理对K-Means算法的影响

备注:实验中用到的数据来源

链接:https://pan.baidu.com/s/1bo3S0hh 密码:pzke

原创粉丝点击