实验目的:

借助航空公司客户数据,对客户进行聚类。

对不同的客户类别进行特征分析,比较不同类别客户的客户价值。

对不同价值的客户类别提供个性化服务,制定相应的营销策略。

读取数据,指定编码为gb18030

import pandas as pd
import numpy as np
import warnings
warnings.filterwarnings('ignore')
airline_data=pd.read_csv('../data/air_data.csv',
                        encoding='gb18030')
airline_data.head()

航空公司客户价值分析_python

航空公司客户价值分析_聚类_02
航空公司客户价值分析_聚类_03

数据描述性分析

airline_data.info()

航空公司客户价值分析_数据_04

数据预处理

1. 去除票价为空的数据

exp1=airline_data['SUM_YR_1'].notnull()
exp2=airline_data['SUM_YR_2'].notnull()
exp=exp1&exp2
airline_notnull=airline_data.loc[exp,:]
airline_notnull.shape

航空公司客户价值分析_数据_05

2.只保留票价不为0,平均折扣率不为0,总飞行公里数大于0的记录。

index1=airline_notnull['SUM_YR_1']!=0
index2=airline_notnull['SUM_YR_2']!=0
index3=(airline_notnull['avg_discount']!=0)&(airline_notnull['SEG_KM_SUM']>0)
airline=airline_notnull[(index1|index2)&index3]
airline.shape

航空公司客户价值分析_聚类_06

构建特征

航空公司客户价值分析_python_07
L: LOAD_TIME 观测窗口的结束时间----FFP_DATE 入会时间

R: LAST_TO_END 最后一次乘机时间至观测窗口结束时长

F: FLIGHT_COUNT 观测窗口内的飞行次数

M: SEG_KM_SUM 观测窗口的总飞行公里数

C: avg_discount 平均折扣率

# 构建特征 按照顺序将需要的列选择出来 
# airline_selection
airline_selection=airline[['LOAD_TIME',
                          'FFP_DATE',
                          'LAST_TO_END',
                          'FLIGHT_COUNT',
                          'SEG_KM_SUM',
                          'avg_discount']]
airline_selection.head()

航空公司客户价值分析_深度学习_08

airline_selection.info()

航空公司客户价值分析_数据_09

# 修改数据类型 日期 pd.to_datetime
airline_selection['LOAD_TIME']=pd.to_datetime(airline_selection['LOAD_TIME'])
airline_selection['FFP_DATE']=pd.to_datetime(airline_selection['FFP_DATE'])
airline_selection.info()

航空公司客户价值分析_聚类_10

# 创建L特征 观测窗口的结束时间-入会时间
L=airline_selection['LOAD_TIME']-airline_selection['FFP_DATE']
L
# series数据进行切割
L=L.astype('str').str.split().str[0]
L=L.astype('int')/30
L=np.round(L,2)
L

航空公司客户价值分析_机器学习_11

# l特征和原有特征合并
airline_features=pd.concat(objs=[L,airline_selection.iloc[:,2:]]
                           ,axis=1)
airline_features.head()

航空公司客户价值分析_深度学习_12

airline_features=airline_features.rename(columns={0:'L'})
airline_features

航空公司客户价值分析_python_13

airline_features.describe()

航空公司客户价值分析_数据_14

数据标准化处理

airline_features_scaled=(airline_features-airline_features.mean())/airline_features.std()
airline_features_scaled.head()

使用k均值构建模型

from sklearn.cluster import KMeans
# 确定聚类中心数
k=5
kmeans_model=KMeans(n_clusters=k,random_state=123).fit(airline_features_scaled)
kmeans_model

航空公司客户价值分析_深度学习_15

# 得到聚类标签 label
# 每一个样本都有一个标签、
# 相同标签的是属于同一个类别
kmeans_model.labels_

航空公司客户价值分析_机器学习_16

# 得到聚类中心
# 5行 五个类别 分别是01234的聚类中心
# 5列 5个特征 分别是LRFMC
# 聚类中心的意义:代表当前类别平均情况
kmeans_model.cluster_centers_

航空公司客户价值分析_聚类_17

# 分析不同类别的特点 定义客户价值标签
df=pd.DataFrame(data=kmeans_model.cluster_centers_)
df

航空公司客户价值分析_机器学习_18

df.to_excel('df.xlsx')
# 统计不同类别的数量
s1=pd.Series(kmeans_model.labels_)
s1.value_counts()

航空公司客户价值分析_聚类_19

airline

航空公司客户价值分析_数据_20

airline_features['label']=kmeans_model.labels_
airline_features['id']=airline['MEMBER_NO']
airline_features

航空公司客户价值分析_python_21

# airline_features[airline_features['label']==0]
# 把不同标签的数据放在不同的sheet里面
# 找到不同标签的数据 airline_01234
airline_0=airline_features[airline_features['label']==0]
airline_1=airline_features[airline_features['label']==1]
airline_2=airline_features[airline_features['label']==2]
airline_3=airline_features[airline_features['label']==3]
airline_4=airline_features[airline_features['label']==4]
# 打开一个excel文件, airline.xlsx
# 把不同客户群体放在不同的sheet里面,命名
writer=pd.ExcelWriter('airline.xlsx')
airline_0.to_excel(writer,'重点发展客户')
airline_1.to_excel(writer,'VIP客户')
airline_2.to_excel(writer,'一般客户&流失倾向')
airline_3.to_excel(writer,'重要挽留客户')
airline_4.to_excel(writer,'一般保持客户')
writer.save()
# 对于聚类模型的评价
# k的选择 CH指数
# 类间距/类内距 数字越大越好
from sklearn.metrics import calinski_harabasz_score
for i in range(5,10):
    kmeans=KMeans(n_clusters=i,
          random_state=123).fit(airline_features_scaled)
    score=calinski_harabasz_score(airline_features_scaled,kmeans.labels_)
    print(score)

航空公司客户价值分析_数据_22