本文主要包括以下几部分:

1:对航空公司的数据分析去掉无关特征,去掉有误的数据(例如:一年票价为0,第二年票价也是0)

2:根据LCRFM模型选取有关特征,对特征数据进行标准化

3:使用k-means算法模型对特征聚类分析,比较不同类客户的客户价值

4:对不同类客户提供不同的个性化服务,提供不同的营销策略

一 数据探索:

拿到航空公司的数据之后熟悉数据的特征属性,打印一下数据的最大值,最小值与空值

import csv
import pandas as pd
import numpy as np
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_samples,silhouette_score
import matplotlib.pyplot  as plt
from sklearn.preprocessing import StandardScaler
from datetime import datetime
df = pd.read_csv("air_data.csv",encoding="utf-8")
exp1 = df["SUM_YR_1"].notnull()
exp2 = df["SUM_YR_2"].notnull()
exp = exp1&exp2
new_df = df.loc[exp,:]
explore = df.describe(include="all").T
explore["null"] = len(df)-explore["count"]
print(explore[["null","max","min"]])

票价不能为空,所以筛选出票价不为空的df,之后票价不能为0,把票价为0或者平均折扣率与飞行总公里数同时为0的的记录去掉。如下代码:

df = df[df["SUM_YR_1"].notnull()*df["SUM_YR_2"].notnull()]# 删除掉SUM_YR_1,SUM_YR_2其中有一个或者都为0的情况
exp1 = df["SUM_YR_1"]!=0
exp2 = df["SUM_YR_2"]!=0
exp3 = (df["SEG_KM_SUM"] ==0) & (df["avg_discount"] ==0)
exp = df[exp1|exp2|exp3]

二 选取有关特征并进行建模分析:

之后我们就得到了相对干净的数据,根据航空公司的业务来看,从所有的属性中删选出几个最有价值的属性,根据航空公司的LRFMC模型,分别代表:会员入会时间距观测窗口结束的月数,客户最近一次乘坐公司飞机距观测窗口结束的月数,客户在观测窗口内乘坐公司飞机的次数,客户在观测时间内在公司累计的飞行里程,客户在观测时间内乘坐舱位所对应的折扣系数的平均值。

L = LOAD_TIME-FFP_DATE

R=LAST_TO_END

F=FLIGHT_COUNT

M=SEG_KMSUM

C=AVG_DISCOUNT

计算出这五个属性并且对属性值进行标准化处理

new_df = df[["LOAD_TIME","FFP_DATE","LAST_TO_END","FLIGHT_COUNT","SEG_KM_SUM","avg_discount"]]
new_df["L"] = (pd.to_datetime(new_df["LOAD_TIME"])-pd.to_datetime(new_df["FFP_DATE"]))/np.timedelta64(1,'D')
new_df = new_df.iloc[:,2:]
new_df =  new_df.rename(columns = {"LAST_TO_END":"R","FLIGHT_COUNT":"F","SEG_KM_SUM":"M","avg_discount":"C"})
new_df.insert(0,"L",new_df.pop("L"))

处理完了之后就要开始对数据训练聚类把数据聚类聚成五类,把聚类中心和据类的类别次数放到同一个dataframe里可以直观的看到不同簇的大小以及不同簇的聚类中心点。在这里采用的是轮廓系数对聚类的效果进行评估,轮廓系数大于0的聚类是好的聚类,越接近1,聚类效果就越好。本次的聚类轮廓系数0.277

    trf_data = data_change()K_model = KMeans(n_clusters=5,n_jobs=4,random_state=132)K_model.fit(trf_data)print(silhouette_score(trf_data,K_model.labels_))# 查看轮廓系数# print(K_model.cluster_centers_)# 查看聚类中心ser = pd.Series(K_model.labels_).value_counts()after_df = pd.DataFrame(K_model.cluster_centers_,columns = ["ZL","ZR","ZF","ZM","ZC"])after_df["类别"] = ser.indexafter_df["次数"]  = ser.valuesafter_df.to_csv("final_data.csv")

然后对已有的分类画出雷达图:

三 对不同类客户进行不同的个性化服务:

重要保持客户:

平均折扣率(C)比较高,因为其购买你舱位的等级比较高,最近乘坐过本公司航班(R)低,乘坐的次数(F)或里程(M)较高,他们是航空公司的高价值客户。是最理想的客户类型,对航空公司贡献最大,所占的比例却比较小,航空公司应该优先将资源投放到他们身上,对他们进行差异化管理一对一营销,提高这类客户的忠诚度和满意度尽可能延长这类客户的高水平消费。

重要发展客户:

这类客户的平均折扣率(C)比较高,最近乘坐过本公司航班(R)低,但是乘坐次数(F)或乘坐里程(M)低,这类客户入会时常(L)短,他们是航空公司的潜在价值客户,虽然这类客户的潜在价值并不是很高,但是却有很大的发展潜力,航空公司要努力促使这类客户增加在本公司的乘机消费和合作伙伴处的消费,也就是增加客户的钱包份额,通过客户价值的提升,加强这类客户的满意度。提高他们转向竞争对手的转移成本,使他们逐渐成为公司的忠实客户。

重要挽留客户:

这类客户过去所乘航班的平均折扣率(C)很低,乘坐次数(F)或者里程(M)比较高 较长时间没有乘坐过本公司的航班(R)或者是乘坐的频率变小,他们客户变化的不确定性很高,,由于这些客户衰退原因各不相同,所以掌握客户的最新信息,维持与客户的互动就显得尤其重要,,航空公司应该根据客户的最近消费时间,消费次数的变化,,推测客户的消费异东情况,并列出消费名单对其重点联系,采取一定的应销售手段,延长客户的生命周期。

一般与低价值客户:

这类客户所乘航班的平均折扣率(c)低,较长时间没有乘坐过本公司的航班(R)高,乘坐的次数或者里程(M)低,入会时长短,他们是航空公司的一般价值客户,可能在公司打折促销时才会乘坐公司航班。

完整代码:

import csv
import pandas as pd
import numpy as np
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_samples,silhouette_score
import matplotlib.pyplot  as plt
from sklearn.preprocessing import StandardScaler
from datetime import datetimedef data_view():df = pd.read_csv("air_data.csv", encoding="utf-8")explore = df.describe(include="all").Texplore["null"] = len(df)-explore["count"]print(explore[["null","max","min"]])def data_expore():df = pd.read_csv("air_data.csv",encoding="utf-8")df = df[df["SUM_YR_1"].notnull()*df["SUM_YR_2"].notnull()]# 删除掉SUM_YR_1,SUM_YR_2其中有一个或者都为0的情况exp1 = df["SUM_YR_1"]!=0exp2 = df["SUM_YR_2"]!=0exp3 = (df["SEG_KM_SUM"] ==0) & (df["avg_discount"] ==0)exp = df[exp1|exp2|exp3]exp.to_csv("air_data_cleared.csv.csv")def data_change():df = pd.read_csv("air_data_cleared.csv", encoding="utf-8")new_df = df[["LOAD_TIME","FFP_DATE","LAST_TO_END","FLIGHT_COUNT","SEG_KM_SUM","avg_discount"]]new_df["L"] = (pd.to_datetime(new_df["LOAD_TIME"])-pd.to_datetime(new_df["FFP_DATE"]))/np.timedelta64(1,'D')new_df = new_df.iloc[:,2:]new_df =  new_df.rename(columns = {"LAST_TO_END":"R","FLIGHT_COUNT":"F","SEG_KM_SUM":"M","avg_discount":"C"})new_df.insert(0,"L",new_df.pop("L"))sdd = StandardScaler()new_df = sdd.fit_transform(new_df.values)return new_dfdef data_model():trf_data = data_change()K_model = KMeans(n_clusters=5,n_jobs=4,random_state=132)K_model.fit(trf_data)print(silhouette_score(trf_data,K_model.labels_))# 查看轮廓系数# print(K_model.cluster_centers_)# 查看聚类中心ser = pd.Series(K_model.labels_).value_counts()after_df = pd.DataFrame(K_model.cluster_centers_,columns = ["ZL","ZR","ZF","ZM","ZC"])after_df["类别"] = ser.indexafter_df["次数"]  = ser.valuesafter_df.to_csv("final_data.csv")import numpy as np
import matplotlib.pyplot as plt
def plot_radar():'''the first column of the data is the cluster name;the second column is the number of each cluster;the last are those to describe the center of each cluster.'''data = pd.read_csv("final_data.csv", encoding="utf-8")data.insert(0,"类别",data.pop("类别"))data.insert(1,"数量",data.pop("次数"))data = data.drop("Unnamed: 0",axis=1)# print(data)# exit()kinds = data.iloc[:, 0]labels = data.iloc[:, 2:].columnscenters = pd.concat([data.iloc[:, 2:], data.iloc[:, 2]], axis=1)centers = np.array(centers)n = len(labels)angles = np.linspace(0, 2 * np.pi, n, endpoint=False)angles = np.concatenate((angles, [angles[0]]))fig = plt.figure()ax = fig.add_subplot(111, polar=True)  # 设置坐标为极坐标# 画若干个五边形floor = np.floor(centers.min())  # 大于最小值的最大整数ceil = np.ceil(centers.max())  # 小于最大值的最小整数for i in np.arange(floor, ceil + 0.5, 0.5):ax.plot(angles, [i] * (n + 1), '--', lw=0.5, color='black')# 画不同客户群的分割线for i in range(n):ax.plot([angles[i], angles[i]], [floor, ceil], '--', lw=0.5, color='black')# 画不同的客户群所占的大小for i in range(len(kinds)):ax.plot(angles, centers[i], lw=2, label=kinds[i])# ax.fill(angles, centers[i])ax.set_thetagrids(angles * 180 / np.pi, labels)  # 设置显示的角度,将弧度转换为角度plt.legend(loc='lower right', bbox_to_anchor=(1.5, 1))  # 设置图例的位置,在画布外ax.set_theta_zero_location('N')  # 设置极坐标的起点(即0°)在正北方向,即相当于坐标轴逆时针旋转90°ax.spines['polar'].set_visible(False)  # 不显示极坐标最外圈的圆ax.grid(False)  # 不显示默认的分割线ax.set_yticks([])  # 不显示坐标间隔plt.show()
if __name__ == '__main__':# data_change()plot_radar()

数据挖掘之航空公司客户价值分析——K-Means相关推荐

  1. Python数据挖掘:利用聚类算法进行航空公司客户价值分析

    无小意丶 个人博客地址:无小意 知乎主页:无小意丶 公众号: 数据路(shuju_lu) 刚刚开始写博客,希望能保持关注,会继续努力. 以数据相关为主,互联网为辅进行文章发布. 本文是<Pyth ...

  2. Python数据挖掘-RFM模型K-means聚类分析-航空公司客户价值分析

    使用教材:<Python数据分析与挖掘实战> 模型:RFM模型 算法:K-means聚类:其他方法还用到了层次聚类 数据:需要数据的可以评论里call. 内容: (1)案例: 航空公司客户 ...

  3. 数据分析与挖掘实战-航空公司客户价值分析

    航空公司客户价值分析 项目背景 信息时代的到来注定营销焦点从产品中心转到了用户中心,客户关系管理成为企业的核心问题. 客户关系管理的关键问题则是客户分类,通过分类区分客户价值的有无和高低,针对不同类别 ...

  4. 航空公司客户价值分析(附完整代码)

    一.什么是客户价值分析:   客户价值分析是以客户为中心,从客户需求出发,搞清楚客户需要什么,他们有怎样的一个特征,需要什么样的产品,然后设计相应的产品,通过对客户分群从而满足客户的需求.进行客户价值 ...

  5. python航空公司客户价值分析

    1.航空公司部分数据特征说明及LRFMC模型介绍及K-Means聚类算法介绍 2.开始数据分析 - 数据探索 Part Ⅰ:数据预处理 数据清洗 数据集成 数据归约 数据变换 Part Ⅱ:建模分析和 ...

  6. python客户价值分析_航空公司客户价值分析实例

    第8章 航空公司客户价值分析 传统的识别客户价值应用最广泛的模型主要通过3个指标(最近消费时间间隔(Recency).消费频率(Frequency)和消费金额(Monetary))来进行客户细分,识别 ...

  7. 毕业设计之 ---基于大数据分析的航空公司客户价值分析

    文章目录 0 前言 1 数据分析背景 2 分析策略 2.1 航空公司客户价值分析的LRFMC模型 2.2 数据 2.3 分析模型 3 开始分析 3.1 数据预处理 3.1.1 数据预览 3.1.2 数 ...

  8. 基于机器学习的航空公司客户价值分析与流失预测

    温馨提示:文末有 CSDN 平台官方提供的学长 Wechat / QQ 名片 :) 1. 项目背景 面对激烈的市场竞争,各个航空公司相继推出了更优惠的营销方式来吸引更多的客户,国内某航空公司面临着常旅 ...

  9. 航空公司客户价值分析python实战

    航空公司客户价值分析(K_Means聚类分析) 最近在看黄红梅.张良均老师主编的<Python数据分析与应用>,拿书里的案例练练手. 本案例将使用航空公司客户数据,结合RFM模型,采用K_ ...

最新文章

  1. python 条件语句漫画解析_【Python】解析Python中的条件语句和循环语句
  2. 缺陷漏测分析:测试过程改进
  3. (七)传输加载优化(前沿技术解决高访问量网站性能优化问题)
  4. 移动端 关闭浏览器事件_前端开发中什么是移动端点透事件?
  5. 促销海报模板|经典蓝的带着「节日促销」来搞事情了!
  6. idea 删除 output directory文件_郑州Java培训新手必知的IDEA高频快捷键
  7. 这些严重的 Slack桌面劫持漏洞仅值区区1750美元?
  8. Golang defer 快速上手
  9. jsp中target=_blank的用法
  10. 时域离散信号/系统频域分析(matlab)零点,极点,因果,稳定
  11. 手机和电脑传输文件又有了新选择
  12. iOS信鸽推送:解决通过账号推送不成功的问题
  13. 二维码超分效果评价指标
  14. slam十四讲-ch6-非线性优化(包含手写高斯牛顿、使用g2o库、使用ceres库三种方法的源码详细注释)
  15. R语言|4. 轻松绘制临床基线表Table 1 临床三线表绘制
  16. 微信里直接打开微博APP的方法
  17. 14. Thymeleaf
  18. html 的描点链接
  19. 【UTAU插件】辅音速度重载
  20. Windows下的Tftpd32(Tftpd64)软件下载和使用教程-集成了Tftp服务器、客户端

热门文章

  1. 北大POJ百练 4126 DNA
  2. Goland插件大全
  3. 解决openvp丢包问题
  4. Typora入门使用教程
  5. Vue+SpringBoot进销存管理系统源码【源码免费分享】
  6. dmg后缀的文件怎么在windows上运行
  7. <2021SC@SDUSC>【Overload游戏引擎】OvUI源码模块分析(三)——Internal
  8. Mac配置Tomcat详细版
  9. “遇见”英文版 歌词
  10. Win7/Win10安装AutoCAD+CASS