准确的客户分类的结果是企业优化营销资源的重要依据,本文利用了航空公司的部分数据,利用Kmeans聚类方法,对航空公司的客户进行了分类,来识别出不同的客户群体,从来发现有用的客户,从而对不同价值的客户类别提供个性化服务,指定相应的营销策略。

一、分析方法和过程

1.数据抽取——>2.数据探索与预处理——>3。建模与应用

传统的识别客户价值应用最广泛的模型主要通过3个指标(最近消费时间间隔(Recency)、消费频率(Frequency)和消费金额(Monetary))来进行客户细分,识别出价值高的客户,简称RFC模型。点击查看RFC

在RFC模型中,消费金额表示在一段时间内,客户购买产品的总金额。但是不适用于航空公司的数据处理。因此我们用客户在一段时间内的累计飞行里程M和客户在一定时间内乘坐舱位的折扣系数C代表消费金额。再在模型中增加客户关系长度L,所以我们用LRFMC模型。

因此本次数据挖掘的主要步骤:

1).从航空公司的数据源中进行选择性抽取与新增数据抽取分别形成历史数据和增量数据

2).对步骤1)中形成的两个数据集进行数据探索分析和预处理,包括数据缺失值和异常值分析。即数据属性的规约、清洗和变换

3).利用步骤2)中的处理的数据进行建模,利用Python下Sklearn库中提供的KMeans方法,进行聚类

4)。针对模型的结果进行分析。

二。数据处理

1.下面是本次试验数据集的一部分截图,数据集抽取2012-4-1到2014-3-31内乘客的数据,一个62988条数据。包括了会员卡号、入会时间、性别、年龄等44个属性。

2.数据探索分析:主要是对数据进行缺失值分析与异常值的分析。通过发现原始数据中存在票价为空值,票价最小值为0,折扣率最小值为0、总飞行公里数大于0的记录。

其Python代码如下:

def explore(datafile,exploreoutfile):
"""
进行数据的探索
@Dylan
:param data: 原始数据目录
:return: 探索后的结果
"""
data=pd.read_csv(datafile,encoding='utf-8')
explore=data.describe(percentiles=[],include='all').T####包含了对数据的基本描述,percentiles参数是指定计算多少分位数
explore['null']=len(data)-explore['count'] ##手动计算空值数
explore=explore[['null','max','min']]####选取其中的重要列
explore.columns=['空值数','最大值','最小值']
"""describe()函数自动计算的字段包括:count、unique、top、max、min、std、mean。。。。。
"""
# explore=explore.fillna(0)
explore.to_excel(exploreoutfile)

上面代码得到的探索结果:

3.数据预处理:

3.1数据清洗:

(1)丢弃票价为空的记录

(2)丢弃票价为0、平均折扣率不足0、总飞行公里数大于0的距离

数据清洗的Python代码如下:

def clean_data(datafile,cleanoutfile):
"""
进行数据清洗,丢弃票价为空记录,丢弃票价为0,折扣不为0且飞行距离大于0的距离
@Dylan
:param data:原始数据
:return:
"""
data=pd.read_csv(datafile,encoding='utf-8') data=data[data['SUM_YR_1'].notnull()*data['SUM_YR_2'].notnull()]####票价值非空才会保留
####只保留票价非0的,或者平均折扣率与总飞行记录同时为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_excel(cleanoutfile)

3.2属性规约

选择与LRFMC模型指标相关的6个属性:FFP_DATE、LOAD_TIME、FLIGHT_COUNT、avg_discount、SEG_KM_SUM、LAST_TO_END。删除不相关的属性。

3.3 数据变换

由于原始数据没有直接给出LRFMC五个指标,需要自己计算,具体的计算方式为:

(1)L=LOAD_TIME-FFP_DATE

(2)R=LAST_TO_END

(3)F=FLIGHT_COUNT

(4) M=SEG_KM_SUM

(5)C=avg_discount

数据变换的Python代码如下:

def reduction_data(datafile,reoutfile):
data=pd.read_excel(cleanoutfile,encoding='utf-8')
data=data[['LOAD_TIME','FFP_DATE','LAST_TO_END','FLIGHT_COUNT','SEG_KM_SUM','avg_discount']]
# data['L']=pd.datetime(data['LOAD_TIME'])-pd.datetime(data['FFP_DATE'])
# data['L']=int(((parse(data['LOAD_TIME'])-parse(data['FFP_ADTE'])).days)/30)
####这四行代码费了我3个小时
d_ffp=pd.to_datetime(data['FFP_DATE'])
d_load=pd.to_datetime(data['LOAD_TIME'])
res=d_load-d_ffp
data['L']=res.map(lambda x:x/np.timedelta64(30*24*60,'m')) data['R']=data['LAST_TO_END']
data['F']=data['FLIGHT_COUNT']
data['M']=data['SEG_KM_SUM']
data['C']=data['avg_discount']
data=data[['L','R','F','M','C']]
data.to_excel(reoutfile)

变换结果如下:

3.4 数据标准化

Python代码如下:

def zscore_data(datafile,zscorefile):
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(zscorefile,index=False)

最后数据结果如下:

4.建立模型

4.1客户聚类

采用kMeans聚类算法对客户数据进行客户分组,聚成5组,Python代码如下:

import pandas as pd
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
from itertools import cycle datafile='./tmp/zscore.xls'
k=5
classoutfile='./tmp/class.xls'
resoutfile='./tmp/result.xls'
data=pd.read_excel(datafile) kmodel=KMeans(n_clusters=k,max_iter=1000)
kmodel.fit(data) # print(kmodel.cluster_centers_)
r1=pd.Series(kmodel.labels_).value_counts()
r2=pd.DataFrame(kmodel.cluster_centers_)
r=pd.concat([r2,r1],axis=1)
r.columns=list(data.columns)+['类别数目']
# print(r)
# r.to_excel(classoutfile,index=False) r=pd.concat([data,pd.Series(kmodel.labels_,index=data.index)],axis=1)
r.columns=list(data.columns)+['聚类类别']
# r.to_excel(resoutfile,index=False)

对数据进行聚类分群的结果如下表所示:

自定义绘图函数进行绘制出每个聚类数据的密度图像:

def density_plot(data):
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
p=data.plot(kind='kde',linewidth=,subplots=True,sharex=False)
[p[i].set_ylabel('密度') for i in range(k)]
[p[i].set_title('客户群%d' %i) for i in range(k)]
plt.legend()
return plt

下图为其中的一个

有了模型和图像后我们就可以进行分析。

利用KMeans聚类进行航空公司客户价值分析的更多相关文章

  1. Python数据挖掘-航空公司客户价值分析

    出处:http://www.ithao123.cn/content-11127869.html 航空公司客户价值分析 目标:企业针对不同价值的客户制定个性化的服务,将有限的资源集中于高价值客户. 1. ...

  2. 航空公司客户价值分析(KMeans聚类)

    PS.图片可能不清楚,代码 数据集都在 https://github.com/xubin97/Data-Mining_exp1 项目介绍: 本案例的目标是客户价值识别,通过航空公司客户数据识别不同价值 ...

  3. 基于R语言的航空公司客户价值分析

    分析航空公司现状 1.行业内竞争 民航的竞争除了三大航空公司之间的竞争之外,还将加入新崛起的各类小型航空公司.民营航空公司,甚至国外航空巨头.航空产品生产过剩,产品同质化特征愈加明显,于是航空公司从价 ...

  4. [Python数据挖掘]第7章、航空公司客户价值分析

    一.背景和挖掘目标 二.分析方法与过程 客户价值识别最常用的是RFM模型(最近消费时间间隔Recency,消费频率Frequency,消费金额Monetary) 1.EDA(探索性数据分析) #对数据 ...

  5. 利用K-means聚类分类,进行特征学习

    这只是老师安排的一个实验,准备过程中遇到各种问题,现在贴出来供大家参考,是Andrew Ng参与的研究, 论文依据如下,第二篇是一篇相关的论文, Learning Feature Representa ...

  6. 航空客户价值分析特色LRFMC模型——RFM升级

    本文转载自微信公众号TIpDM. 每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- 我们说RFM ...

  7. K-Means聚类算法原理

    K-Means算法是无监督的聚类算法,它实现起来比较简单,聚类效果也不错,因此应用很广泛.K-Means算法有大量的变体,本文就从最传统的K-Means算法讲起,在其基础上讲述K-Means的优化变体 ...

  8. K-means聚类算法

    聚类分析(英语:Cluster analysis,亦称为群集分析) K-means也是聚类算法中最简单的一种了,但是里面包含的思想却是不一般.最早我使用并实现这个算法是在学习韩爷爷那本数据挖掘的书中, ...

  9. Kmeans聚类算法原理与实现

    Kmeans聚类算法 1 Kmeans聚类算法的基本原理 K-means算法是最为经典的基于划分的聚类方法,是十大经典数据挖掘算法之一.K-means算法的基本思想是:以空间中k个点为中心进行聚类,对 ...

随机推荐

  1. 2016 - 1- 22 NSURLConnetction --- POST请求

    一:与上一篇博客中的GET方法类似  只不过需要多注意,如果要改变请求的类型,需要生成NSMutableURLRequest对象才可以设置请求的类型. NSURL *url = [NSURL URLW ...

  2. (spring-第13回【IoC基础篇】)PropertyEditor(属性编辑器)--实例化Bean的第五大利器

    上一篇讲到JavaBeans的属性编辑器,编写自己的属性编辑器,需要继承PropertyEditorSupport,编写自己的BeanInfo,需要继承SimpleBeanInfo,然后在BeanIn ...

  3. php大力力 [031节] php设计系统后台菜单和样式设计

    php大力力 [031节] php设计系统后台菜单和样式设计 耗掉我一整夜的时间,把后台html设计了一个,对于我这样的html白痴,实属不容易啊. 留下一点点网上查找的网页知识: 索马里论坛群发简介 ...

  4. Unity3D入门(一):环境搭建

    1.Unity3D 目前最新正式版本是4.2.1f  官网下载,以前的版本安装时候需要序列号激活,新版本4.2.1f 不需要,完全免费,但发布的时候需要许可证 2.要学习的同学,下载频道可以找到破解补 ...

  5. 一个经典例子让你彻彻底底理解java回调机制

    转帖请注明本文出自xiaanming的博客(http://blog.csdn.net/xiaanming/article/details/17483273),请尊重他人的辛勤劳动成果,谢谢 所谓回调: ...

  6. UI基础:UICollectionView

    UITableView 和 UICollectionView的设计思路: 1.UITableView 的布局由TableView和UItableViewDelegate完成. 2.UICollecti ...

  7. C#里partial关键字的作用(转摘)

    C#里partial关键字的作用(转摘) 1. 什么是局部类型? C# 2.0 引入了局部类型的概念.局部类型允许我们将一个类.结构或接口分成几个部分,分别实现在几个不同的.cs文件中. 局部类型适用 ...

  8. Magento删除产品同时删除图片

    在Magento后台删除产品时,默认不会删除产品的图片,如果长期不清理这些废弃的图片,会导致Media目录下的文件越来越多,浪费服务器空间,为了实现删除产品的同时删除图片,网络上常见的方法是修改Mag ...

  9. js优化提升访问速度

    一.给JS文件减肥. 有的人为了给网站增加炫目效果,往往会使用一些JS效果代码,这在上个世纪似乎还很流行,对于现在来说,最好在用户体验确实需要的情况下,使用这些东西.至于希望给自己的JS文件减肥的童鞋 ...

  10. 转:Enterprise Library 4.0缓存应用程序块

    英文原文:http://msdn.microsoft.com/zh-cn/library/cc511588(en-us).aspx Enterprise Library 缓存应用程序块允许开发人员在应 ...