利用KMeans聚类进行航空公司客户价值分析
准确的客户分类的结果是企业优化营销资源的重要依据,本文利用了航空公司的部分数据,利用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聚类进行航空公司客户价值分析的更多相关文章
- Python数据挖掘-航空公司客户价值分析
出处:http://www.ithao123.cn/content-11127869.html 航空公司客户价值分析 目标:企业针对不同价值的客户制定个性化的服务,将有限的资源集中于高价值客户. 1. ...
- 航空公司客户价值分析(KMeans聚类)
PS.图片可能不清楚,代码 数据集都在 https://github.com/xubin97/Data-Mining_exp1 项目介绍: 本案例的目标是客户价值识别,通过航空公司客户数据识别不同价值 ...
- 基于R语言的航空公司客户价值分析
分析航空公司现状 1.行业内竞争 民航的竞争除了三大航空公司之间的竞争之外,还将加入新崛起的各类小型航空公司.民营航空公司,甚至国外航空巨头.航空产品生产过剩,产品同质化特征愈加明显,于是航空公司从价 ...
- [Python数据挖掘]第7章、航空公司客户价值分析
一.背景和挖掘目标 二.分析方法与过程 客户价值识别最常用的是RFM模型(最近消费时间间隔Recency,消费频率Frequency,消费金额Monetary) 1.EDA(探索性数据分析) #对数据 ...
- 利用K-means聚类分类,进行特征学习
这只是老师安排的一个实验,准备过程中遇到各种问题,现在贴出来供大家参考,是Andrew Ng参与的研究, 论文依据如下,第二篇是一篇相关的论文, Learning Feature Representa ...
- 航空客户价值分析特色LRFMC模型——RFM升级
本文转载自微信公众号TIpDM. 每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- 我们说RFM ...
- K-Means聚类算法原理
K-Means算法是无监督的聚类算法,它实现起来比较简单,聚类效果也不错,因此应用很广泛.K-Means算法有大量的变体,本文就从最传统的K-Means算法讲起,在其基础上讲述K-Means的优化变体 ...
- K-means聚类算法
聚类分析(英语:Cluster analysis,亦称为群集分析) K-means也是聚类算法中最简单的一种了,但是里面包含的思想却是不一般.最早我使用并实现这个算法是在学习韩爷爷那本数据挖掘的书中, ...
- Kmeans聚类算法原理与实现
Kmeans聚类算法 1 Kmeans聚类算法的基本原理 K-means算法是最为经典的基于划分的聚类方法,是十大经典数据挖掘算法之一.K-means算法的基本思想是:以空间中k个点为中心进行聚类,对 ...
随机推荐
- Security Checklist (路由器安全checklist)
Security Checklist Website by Michael Horowitz Home | Introduction | Router Bugs | Security Che ...
- application:didFinishLaunchingWithOptions:详解
iOS 程序启动时总会调用application:didFinishLaunchingWithOptions:,其中第二个参数launchOptions为NSDictionary类型的对象,里面存储有 ...
- JS - To my gril
/* 这个程序的流程是 , 首先执行 构造函数 (), 然后 就去执行那个 render 渲染 , 在 render 哪里 的if else 转向应该执行的渲染方法 , 例如 commitsrende ...
- BZOJ 4131 并行博弈
发现必胜态只和(1,1)的状态有关. 无法得知必胜的方法,只知道谁会必胜. #include<iostream> #include<cstdio> #include<cs ...
- Apache 的启动/重启/停止
Task: Start Apache 2 Server /启动apache服务 # /etc/init.d/apache2 startor$ sudo /etc/init.d/apache2 star ...
- 【LeetCode OJ】Evaluate Reverse Polish Notation
Problem link: http://oj.leetcode.com/problems/evaluate-reverse-polish-notation/ According to the wik ...
- Android系统在新进程中启动自定义服务过程(startService)的原理分析
在编写Android应用程序时,我们一般将一些计算型的逻辑放在一个独立的进程来处理,这样主进程仍然可以流畅地响应界面事件,提高用户体验.Android系统为我们提供了一个Service类,我们可以实现 ...
- C# asp.net IIS 在web.config和IIS中设置Session过期时间
有时候在web.config设置sessionState 或者类文件里设置Session.Timeout,在IIS里访问时每次都是达不到时间就超时,原因是因为在IIS中设置了Session的超时时间, ...
- 插入并列div使其居中
<!doctype html><html> <head> <meta charset="UTF-8"> <meta name= ...
- 【转】CSS3 transition规范的实际使用经验
原文转自:http://blog.jobbole.com/56243/ 本篇文章主要讲述CSS3 transition规范和在不同浏览器之间的使用差异,关于具体解决方法或如何规避问题的意见可以参考另一 ...