Python数据挖掘-航空公司客户价值分析
航空公司客户价值分析
目标:企业针对不同价值的客户制定个性化的服务,将有限的资源集中于高价值客户。
1、借助航空公司的数据进行客户分类
2、比较不同类客户的价值并制定销策略
识别客户价值的最广泛的模型是通过RFM模型来识别出高价值的客户:
Recency: 最近消费时间间隔
Frequency: 消费频率
Monetary: 消费金额
问题:同样的消费金额的不同旅客对航空公司的价值不同,例如买长航线、低等仓的旅客和买短航线、高等仓的旅客消费金额相同
但是价值确实不同的。显然后者更有价值。因此这个指标可能不合适,故选择客户在一定时间内的飞行里程M和乘坐舱位所对应的折扣洗漱C。
航空公司客户价值分析模型:
L:会员入会时间距观测窗口结束的时间
R:客户最近一次乘坐公司分级距观测窗口结束的时间(月数)
F:客户在观测窗口内乘坐公司飞机的次数
M:客户在观测窗口内累计的飞行里程
C:客户在观测窗口内乘坐舱位所对应的折扣系数的平均值
模型概述:
通过使用k-means聚类算法没使用LRFMC模型进行测试
对模型进行分析,分析客户的价值
import pandas as pd
datafile = 'data/air_data.csv'
resultfile = 'data/tmp.xls'
data = pd.read_csv(datafile, encoding='utf-8')
explore = data.describe().T
explore['null'] = len(data) - explore['count'] #计算空值
explore = explore[['null', 'max', 'min']] #得到每一列的空值,最大值,最小值
explore.to_excel(resultfile) # 是结果写入文件
根据上面的数据统计,丢弃所有不符合的数据,
1、票价为空的
2、票价为0,但是折扣不是0,而且飞行里程大于0,
这样的数据是错误数据,直接删除。
data = pd.read_csv(datafile, encoding='utf-8')
cleanedfile = 'data/cleanfile.csv' #存清理后的数据
# 去掉票价是空的元素
data = data[data['SUM_YR_1'].notnull()]
data = data[data['SUM_YR_2'].notnull()]
# 去掉票价为0,但是折扣不是0,而且飞行里程大于0
data = data.drop(data['SUM_YR_1'] ==0 & (data['SEG_KM_SUM'] != 0) | (data['avg_discount'] > 0))
print(len(data))
# print(data.columns)
# 属性规约:去掉不相管的属性,只留下与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']]
data.to_csv(cleanedfile) #写入文件
数据变化的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('data/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('data/data_normal')
数据处理完毕,下面进行模型的构建,
1、使用聚类算法,将数据生成5类用户
2、针对聚类结果进行特征分析
from sklearn.cluster import KMeans
k = 5
kmodel = KMeans(k) #得到模型
kmodel.fit(data_normal) #训练模型
# 查看聚类中心和对应的类别
print(kmodel.cluster_centers_)
print(kmodel.labels_)
[[ 1.16443082 -0.3775831 -0.08518766 -0.09323092 -0.15906231]
[-0.70014625 -0.41584827 -0.15935193 -0.15955595 -0.26734394]
[ 0.01594116 0.00784598 -0.24843215 -0.25750534 2.08918975]
[ 0.48503896 -0.80134848 2.48281809 2.43536635 0.31393202]
[-0.31252471 1.68746582 -0.57426021 -0.53886494 -0.18594193]]
[3 3 3 ..., 1 0 4]
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='clustre '+str(i),linewidth=6-i,color=colors[i],marker='o')
plt.xlabel('L R F M C')
plt.ylabel('values')
plt.show()
客户价值分析:
注意kmeans每次运行的时候得到的类会有差别,簇号也会相应的改变,但是中间点基本不会改变:
L R F M C
客户群1:[ 1.16443082 -0.3775831 -0.08518766 -0.09323092 -0.15906231] red
客户群2:[-0.70014625 -0.41584827 -0.15935193 -0.15955595 -0.26734394] green
客户群3:[ 0.01594116 0.00784598 -0.24843215 -0.25750534 2.08918975] yellow
客户群4:[ 0.48503896 -0.80134848 2.48281809 2.43536635 0.31393202] blue
客户群5:[-0.31252471 1.68746582 -0.57426021 -0.53886494 -0.18594193] black
我们重点关注的是L,F,M,从图中可以看到:
1、客户群4[blue] 的F,M很高,L也不低,可以看做是重要保持的客户;
2、客户群3[yellow] 重要发展客户
3、客户群1[red] 重要挽留客户,原因:入会时间长,但是F,M较低
4、客户群2[green] 一般客户
5、客户群5[black] 低价值客户
Python数据挖掘-航空公司客户价值分析的更多相关文章
- 航空公司客户价值分析(KMeans聚类)
PS.图片可能不清楚,代码 数据集都在 https://github.com/xubin97/Data-Mining_exp1 项目介绍: 本案例的目标是客户价值识别,通过航空公司客户数据识别不同价值 ...
- 基于R语言的航空公司客户价值分析
分析航空公司现状 1.行业内竞争 民航的竞争除了三大航空公司之间的竞争之外,还将加入新崛起的各类小型航空公司.民营航空公司,甚至国外航空巨头.航空产品生产过剩,产品同质化特征愈加明显,于是航空公司从价 ...
- [Python数据挖掘]第7章、航空公司客户价值分析
一.背景和挖掘目标 二.分析方法与过程 客户价值识别最常用的是RFM模型(最近消费时间间隔Recency,消费频率Frequency,消费金额Monetary) 1.EDA(探索性数据分析) #对数据 ...
- 利用KMeans聚类进行航空公司客户价值分析
准确的客户分类的结果是企业优化营销资源的重要依据,本文利用了航空公司的部分数据,利用Kmeans聚类方法,对航空公司的客户进行了分类,来识别出不同的客户群体,从来发现有用的客户,从而对不同价值的客户类 ...
- Ubuntu系统下创建python数据挖掘虚拟环境
虚拟环境: 虚拟环境是用于创建独立的python环境,允许我们使用不同的python模块和版本,而不混淆. 让我们了解一下产品研发过程中虚拟环境的必要性,在python项目中,显然经常要使用不 ...
- Python数据挖掘和机器学习
-----------------------------2017.8.9--------------------------------- 先占个坑 在接下来的一个半月里(即从现在到十一) 我将结合 ...
- 2019年Python数据挖掘就业前景前瞻
Python语言的崛起让大家对web.爬虫.数据分析.数据挖掘等十分感兴趣.数据挖掘就业前景怎么样?关于这个问题的回答,大家首先要知道什么是数据挖掘.所谓数据挖掘就是指从数据库的大量数据中揭示出隐含的 ...
- Python数据挖掘课程
[Python数据挖掘课程]一.安装Python及爬虫入门介绍[Python数据挖掘课程]二.Kmeans聚类数据分析及Anaconda介绍[Python数据挖掘课程]三.Kmeans聚类代码实现.作 ...
- Python数据挖掘——数据预处理
Python数据挖掘——数据预处理 数据预处理 数据质量 准确性.完整性.一致性.时效性.可信性.可解释性 数据预处理的主要任务 数据清理 数据集成 数据归约 维归约 数值归约 数据变换 规范化 数据 ...
随机推荐
- 什么是TOPO学
拓扑,一个跟门萨同样古怪的“科技Word”.其定义,对绝大多数读者而言,不一定需要理解,但无妨知道———拓扑学,数学的一门分科,研究几何图形在一对一的双方连续变换下不变的性质.不少门萨题,来自拓扑学, ...
- Linux 学习 三, linux 文件结构
linux 的文件结构 linux 下的bin 目录,包含了常用的命令应用程序 /bin: bin为binary的简写主要放置一些系统的必备执行档例如:cat.cp.dmesg.gzip.kill.l ...
- Azure 1 月新公布
Azure 1 月新发布:Microsoft Power BI Embedded 公共预览和计算机视觉 API 标准版的更新以及 Azure IoT 网关 SDK 和中心设备管理新功能正式发布以及关于 ...
- 数组k平移三种方法(java)
上代码,本文用了三种方法实现,时间复杂度不一样,空间复杂度都是o(1): public class ArrayKMove { /** * 问题:数组的向左k平移,k小于数组长度 * @param ar ...
- hive自定义UDTF函数叉分函数
hive自定义UDTF函数叉分函数 1.介绍 从聚合体日志中需要拆解出来各子日志数据,然后单独插入到各日志子表中.通过表生成函数完成这一过程. 2.定义ForkLogUDTF 2.1 HiveUtil ...
- 基于FPGA的VGA显示设计(二)
上一篇:基于FPGA的VGA显示设计(一) 参照 CrazyBingo 的 基于FPGA的VGA可移植模块终极设计代码 的工程代码风格,模块化处理了上一篇的代码,并增加了一点其它图形. 顶层 ...
- 笨办法学Python(十三)
习题 13: 参数.解包.变量 在这节练习中,我们将讲到另外一种将变量传递给脚本的方法(所谓脚本,就是你写的 .py 程序).你已经知道,如果要运行 ex13.py,只要在命令行运行 python e ...
- CToolTipCtrl使用详细解说
很多的界面设计都需要有Tip提示,下面描述一下Tip的简单使用方法: 1. 首先要New一个CToolTipCtrl的对象m_pContentTip 2. 调用CToolTipCtrl的create函 ...
- java集合框架——工具类
一.概述 JAVA集合框架中有两个很重要的工具类,一个是Collections,另一个是Arrays.分别封装了对集合的操作方法和对数组的操作方法,这些操作方法使得程序员的开发更加高效. public ...
- Ubuntu 如何将桌面上的Home中的文件夹除去
安装Ubuntu后, 由于无法用Terminal(终端)进入带中文的文件夹,会引起很多操作不便.很多朋友想到了将它们都改成中文,但是当再次开机重启使却会发现,原本光洁的桌面现在竟然出现了一堆文件夹?? ...