KMeans算法项目实战:航空公司客户价值分析

一、背景与目标

  通过对客户进行分类,区分无价值客户、高价值客户,企业针对不同价值的客户制定优化的个性化服务方案,采取不同营销策略,将有限营销资源集中于高价值用户,实现企业利润最大化目标。
  数据为某航空公司的用户档案信息与航班记录。

字段名称字段说明
FFP_DATE入会时间
LOAD_TIME观测窗口的结束时间
FLIGHT_COUNT观测窗口内的飞行次数
avg_discount平均折扣率
SEG_KM_SUM观测窗口内的总飞行公里数
LAST_TO_END最后一次成绩时间至观测窗口结束时长
SUM_YR观测窗口的票价收入

二、分析方法与过程

  本案例的目标是客户价值识别,即通过航空公司客户数据识别不同价值的客户。识别客户价值应用最广泛的模型是通过3个指标(最近消费时间间隔(Recency)、消费频率(Frequency)和消费金额(Monetary))来进行客户细分,识别出高价值的客户,简称RFM模型
  在RFM模型中,消费金额表示在一段时间内,客户购买该企业产品金额的总和。由于航空票价收到运输距离、舱位等级等多种因素影响,同样消费金额的不同旅客对航空公司的价值是不同的。因此,我们使用客户在一定时间内累计的飞行里程M和客户在一定时间内乘坐舱位所对应的的折扣系数的平均值C两个指标代替消费金额。此外,考虑航空公司会员入会时间的长短在一定程度上能够影响客户价值,所以在模型中增加客户关系长度L,作为区分客户的另一个指标。
  本案例将客户长度L、消费时间间隔R、消费频率F、飞行里程M和折扣系数的平均值C五个指标作为航空公司识别客户价值指标,记为LRFMC指标。
  通过对航空公司客户价值的LRFMC模型的五个指标进行K-Means聚类,识别出最有价值客户。

三、代码实现过程

1.数据探索

import numpy as np
import pandas as pd

# 数据读取
data = pd.read_csv("air_data.csv")

# 数据探索
explore = data.describe(percentiles=[],include='all').T
explore['null'] = len(data)-explore["count"]
explore = explore[['null','max','min']]

在这里插入图片描述

2.数据预处理

  通过数据探索分析,发现数据中存在缺失值与异常值。比如:票价最小值为0,折扣率最小值为0,总飞行公里数大于0的记录。由于原始数据量大,选择进行丢弃处理。

①.数据清洗
# 数据清洗
data = data[data['SUM_YR_1'].notnull()*data['SUM_YR_1'].notnull()]

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]
②.属性规约

  挑选出LRFMC模型需要的字段,删除不相关的属性。

data = data[['FFP_DATE','LOAD_TIME','FLIGHT_COUNT','avg_discount','SEG_KM_SUM','LAST_TO_END']] 
③.数据变换

  原始数据中并没有直接给出LRFMC五个指标,需要通过原始数据进行计算这五个指标:

L = LOAD_TIME - FFP_DATE   会员入会时间距观测窗口结束的月数【单位:月】
R = LAST_TO_END  客户最近一次乘坐公司飞机距观测窗口结束的月数【单位:月】
F = FLIGHT_COUNT  客户在观测窗口内乘坐公司飞机的次数【单位:次】
M = SEG_KM_SUM  观测时间内累计飞行里程【单位:公里】
C = AVG_DISCOUNT  观测时间内乘坐舱位对应的折扣系数的平均值【单位:无】

data["L"]= round(pd.to_timedelta(pd.to_datetime(data["LOAD_TIME"]) - pd.to_datetime(data["FFP_DATE"])).dt.days/30,2)
data["R"] = round((data['LAST_TO_END']/30).max(),2)
data["F"] = data["FLIGHT_COUNT"]
data["M"] = data["SEG_KM_SUM"]
data["C"] = round(data["avg_discount"],2)
clean_data = data[["L","R","F","M","C"]]         
④.数据标准化

  指标数据提取后,发现5个指标的取值范围数据差异较大,为了消除数量级数据带来的影响,需要对数据进行标准化处理。

zscore_data = (clean_data-clean_data.mean())/clean_data.std()
zscore_data.columns = ["Z" + i for i in zscore_data.columns]
zscore_data.head()

在这里插入图片描述

3.模型构建

使用K-Means聚类算法对客户数据进行客户分群,娶成5类。

from sklearn.cluster import KMeans    # 导入K均值聚类算法
k = 5   # 需要进行的聚类类别数
kmodel = KMeans(n_clusters=k,n_jobs=4)
kmodel.fit(zscore_data) # 训练模型

kmodel.cluster_centers_ # 查看聚类中心
r1 = pd.Series(kmodel.labels_).value_counts()  # 统计分类情况
r2 = pd.DataFrame(kmodel.cluster_centers_) # 聚类中心

在这里插入图片描述

4.可视化

import matplotlib.pyplot as plt
import matplotlib as mpl
myfont = mpl.font_manager.FontProperties(fname='SimHei.ttf')

r1 = pd.Series(kmodel.labels_).value_counts()  # 统计各个类别的数目
r2 = pd.DataFrame(kmodel.cluster_centers_)
r = pd.concat([r2, r1], axis=1)  # 横向连接(0是纵向),得到聚类中心对应的类别下的数目

fig = plt.figure(figsize=(10,8))
ax = fig.add_subplot(1,1,1,polar = True)
for i,data in enumerate(r.iloc[:,:-1].values):
    angle = np.linspace(0, 2*np.pi, len(data), endpoint=False)
    angles = np.concatenate((angle, [angle[0]]))
    data = np.concatenate((data, [data[0]]))

    ax.set_thetagrids(angles*180/np.pi, labels=zscore_data.columns, fontproperties = myfont) #设置网格标签
    ax.plot(angles,data,"o-")
    ax.set_theta_zero_location('NW') #设置极坐标0°位置
    ax.set_rlim(-1,2.5) #设置显示的极径范围
    ax.fill(angles,data,facecolor='g', alpha=0.2) #填充颜色
    # ax1.set_rlabel_position('255') #设置极径标签位置
    ax.set_title("客户群特征分析图",fontproperties = myfont,fontsize=16,) #设置标题

plt.show()

在这里插入图片描述

三.客户价值分析

  由上述的特征分析的图说明每个客户群都有显著不同的表现特征,基于该特征描述,定义五个等级的客户类型:

  • 重要保持客户:这类客户的平均折扣率C较高,最近乘坐过本公司航班R低,乘坐的次数F或里程M较高。他们是航空公司的高价值客户,是最为理想的客户类型,对航空公司的贡献最大,所占比例却较小。航空公司应优先将资源投放到他们身上。
  • 重要发展客户:这类客户的平均折扣率C较高,最近乘坐过本公司航班R低,但乘坐次数F或乘坐里程M较低。这类客户入会时间L短,他们是航空公司的潜在客户。虽然这类客户的当前价值不是很高,但却有很大的发展潜力。
  • 重要挽留客户:这类客户过去所乘航班的平均折扣率C、乘坐次数F或者里程M较高,但是较长时间已经没有乘坐本公司的航班R或者乘坐频率变小。他们客户价值变化的不确定性很高。航空公司应该采取一定的营销手段,延长客户的生命周期。
  • 一般与低价值客户:这类客户所乘航班的平均折扣率较低,较长时间没有乘坐过本公司航班,乘坐的次数或里程较低,入会时间短。他们是航空公司的一般用户或者低价值用户。

项目参考:《Python数据分析与挖掘实战》

  • 5
    点赞
  • 70
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值