关于聚类不错的一个代码和分析:
KMeans算法项目实战:航空公司客户价值分析
原创置顶 初一· 最后发布于2019-10-30 16:25:24 阅读数 149 收藏
展开
一、背景与目标
通过对客户进行分类,区分无价值客户、高价值客户,企业针对不同价值的客户制定优化的个性化服务方案,采取不同营销策略,将有限营销资源集中于高价值用户,实现企业利润最大化目标。
数据为某航空公司的用户档案信息与航班记录。
字段名称 字段说明
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']]
1
2
3
4
5
6
7
8
9
10
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]
1
2
3
4
5
6
7
②.属性规约
挑选出LRFMC模型需要的字段,删除不相关的属性。
data = data[['FFP_DATE','LOAD_TIME','FLIGHT_COUNT','avg_discount','SEG_KM_SUM','LAST_TO_END']]
1
③.数据变换
原始数据中并没有直接给出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"]]
1
2
3
4
5
6
④.数据标准化
指标数据提取后,发现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()
1
2
3
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_) # 聚类中心
1
2
3
4
5
6
7
8
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, label, 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()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
三.客户价值分析
由上述的特征分析的图说明每个客户群都有显著不同的表现特征,基于该特征描述,定义五个等级的客户类型:
重要保持客户:这类客户的平均折扣率C较高,最近乘坐过本公司航班R低,乘坐的次数F或里程M较高。他们是航空公司的高价值客户,是最为理想的客户类型,对航空公司的贡献最大,所占比例却较小。航空公司应优先将资源投放到他们身上。
重要发展客户:这类客户的平均折扣率C较高,最近乘坐过本公司航班R低,但乘坐次数F或乘坐里程M较低。这类客户入会时间L短,他们是航空公司的潜在客户。虽然这类客户的当前价值不是很高,但却有很大的发展潜力。
重要挽留客户:这类客户过去所乘航班的平均折扣率C、乘坐次数F或者里程M较高,但是较长时间已经没有乘坐本公司的航班R或者乘坐频率变小。他们客户价值变化的不确定性很高。航空公司应该采取一定的营销手段,延长客户的生命周期。
一般与低价值客户:这类客户所乘航班的平均折扣率较低,较长时间没有乘坐过本公司航班,乘坐的次数或里程较低,入会时间短。他们是航空公司的一般用户或者低价值用户。
项目参考:《Python数据分析与挖掘实战》
网友评论