学习笔记:【案例】航空公司客户价值分析

案例来源:《Python数据分析与挖掘实战》第7章

案例背景与挖掘目标

输入数据:
航空信息数据表(客户基本信息 + 乘机信息 + 积分信息)

挖掘目标:

  1. 借助航空公司客户数据,对客户进行分类。
  2. 对不同的客户类别进行特征分析,比较不同类客户的客户价值。
  3. 对不同价值的客户类别提供个性化服务,制定相应的营销策略。

分析方法与过程(选择的原则)

调用CRM中的客户价值模型
RFM模型的3个指标:
最近消费时间间隔(Recency)
消费频率(Frequency)
消费金额(Monetary)

因应需求增加的指标:
客户关系长度(Long-Term)
飞行里程(Miles)
折扣系数的平均值(avg-disCount)

由于消费金额相同的情况下,选择短途+头等的客户,比选择长途+经济的客户价值要高,因此以 飞行里程 + 折扣系数平均值代替消费金额,作为判断客户价值的指标。

子任务规划

  1. 选择性抽取数据,新增数据抽取分别形成历史数据和增量数据
  2. 数据探索分析,数据预处理(分析缺失值与异常值,属性规约,清洗和变换)
  3. 客户价值分析(重要保持,重要发展,重要挽留,一般与低价值)
  4. 针对不同价值客户,采用不同的营销手段,提供定制化的服务

实验一
对L, R, F, M, C 五个指标进行z-score(标准差)标准化
实验二
应用K-Means算法对样本数据进行聚类分析

# 用read_excel() 读入数据 /data/zscoredata.xls
# 用mean() std(),获得LRFMC五个指标的平均值和标准差
# 使用z-score进行标准差标准化

import pandas as pd
from sklearn.cluster import KMeans

dpath = './demo/data/zscoredata.xls'
input_data = pd.read_excel(dpath)

input_data.describe()

#                  L             R             F              M             C
#count  62044.000000  62044.000000  62044.000000   62044.000000  62044.000000
#mean      49.673808      5.751064     11.971359   17321.694749      0.722319
#std       28.260073      6.050889     14.110619   21052.728111      0.184820
#min       12.230000      0.030000      2.000000     368.000000      0.140000
#25%       24.570000      0.970000      3.000000    4874.000000      0.610000
#50%       42.630000      3.500000      7.000000   10200.000000      0.710000
#75%       72.800000      8.670000     15.000000   21522.500000      0.810000
#max      114.630000     24.370000    213.000000  580717.000000      1.500000

input_data.mean()
#L       49.673808
#R        5.751064
#F       11.971359
#M    17321.694749
#C        0.722319
#dtype: float64

input_data.std()
#L       28.260073
#R        6.050889
#F       14.110619
#M    21052.728111
#C        0.184820
#dtype: float64

data = (input_data - input_data.mean(axis = 0)) / input_data.std(axis = 0)

# 截取最后五列作为KMeans的输入
# 调用KMeans,得到聚类标号和中心点
# 根据标号统计类别客户数,根据聚类中心点向量画出客户聚类中心向量图

ppdpath = './test/data/preprocesseddata.xls'
ppddata = pd.read_excel(ppdpath)

kinput = ppddata[ppddata.columns[-5:]]

k = 5

kmodel = KMeans(n_clusters= k, n_jobs= 4)
kmodel.fit(kinput)

kmodel.cluster_centers_  #聚类中心点
kmodel.labels_           #聚类标号

import numpy as np

unique, counts = np.unique(kmodel.labels_, return_counts=True) #统计类别会员数
GrpCounts = dict(zip(unique, counts))

print(GrpCounts)

import matplotlib.pyplot as plt

labels = kinput.columns
plot_data = kmodel.cluster_centers_
color = ['b','g','r','c','y']

angles = np.linspace(0,2*np.pi, k, endpoint=False)
plot_data = np.concatenate((plot_data, plot_data[:,[0]]), axis=1)
angles = np.concatenate((angles, [angles[0]]))

fig = plt.figure()
ax = fig.add_subplot(111, polar=True)
for i in range(len(plot_data)):
    ax.plot(angles, plot_data[i], 'o-', color=color[i], label = u'Customers'+str(i), linewidth = 2)

ax.set_rgrids(np.arange(0.01, 3.5, 0.5), np.arange(-1, 2.5, 0.5), fontproperties = "SimHei")
ax.set_thetagrids(angles * 180/np.pi, labels, fontproperties = "SimHei")
plt.legend(loc = 4)
plt.show()

猜你喜欢

转载自www.cnblogs.com/jc53/p/9438612.html
今日推荐