python客户价值分析_航空公司客户价值分析实例
第8章 航空公司客戶價值分析
傳統的識別客戶價值應用最廣泛的模型主要通過3個指標(最近消費時間間隔(Recency)、消費頻率(Frequency)和消費金額(Monetary))來進行客戶細分,識別出價值高的客戶,簡稱RFC模型。
在RFC模型中,消費金額表示在一段時間內,客戶購買產品的總金額。但是不適用于航空公司的數據處理。因此我們用客戶在一段時間內的累計飛行里程M和客戶在一定時間內乘坐艙位的折扣系數C代表消費金額。再在模型中增加客戶關系長度L,所以我們用LRFMC模型。
8.1 探索數據
探索數據的缺失情況、異常值等。
#-*- coding: utf-8 -*-
#對數據進行基本的探索
#返回缺失值個數以及最大最小值
import pandas as pd
#航空原始數據,第一行為標題
datafile= '/home/hadoop/data/air_customer/air_data.csv'
#數據探索結果表
resultfile = '/home/hadoop/data/air_customer/tmp/explore.xls'
data = pd.read_csv(datafile, encoding = 'utf-8')
explore = data.describe().T
#計算空值
explore['null'] = len(data)-explore['count']
##統計空值,最大,最小值等
explore = explore[['null', 'max', 'min']]
explore
數據部分結果
null max min
MEMBER_NO 0.0 62988.000000 1.00
FFP_TIER 0.0 6.000000 4.00
AGE 420.0 110.000000 6.00
FLIGHT_COUNT 0.0 213.000000 2.00
BP_SUM 0.0 505308.000000 0.00
EP_SUM_YR_1 0.0 0.000000 0.00
EP_SUM_YR_2 0.0 74460.000000 0.00
SUM_YR_1 551.0 239560.000000 0.00
SUM_YR_2 138.0 234188.000000 0.00
SEG_KM_SUM 0.0 580717.000000 368.00
WEIGHTED_SEG_KM 0.0 558440.140000 0.00
AVG_FLIGHT_COUNT 0.0 26.625000 0.25
#保存結果
explore.to_excel(resultfile)
8.2 預處理數據
根據上面的數據統計,丟棄所有不符合的數據,
1、票價為空的
2、票價為0,但是折扣不是0,而且飛行里程大于0,
這樣的數據是錯誤數據,直接刪除
#票價非空值才保留
data = data[data['SUM_YR_1'].notnull()]
data = data[data['SUM_YR_2'].notnull()]
# 去掉票價為0,但是折扣不是0,或飛行里程大于0
data = data.drop(data['SUM_YR_1'] ==0 & (data['SEG_KM_SUM'] != 0) | (data['avg_discount'] > 0))
##保存清理后數據
cleanedfile = '/home/hadoop/data/air_customer/tmp/data_cleaned.csv'
data.to_csv(cleanedfile, encoding = 'utf-8')
8.3 數據歸約
# 屬性規約:去掉不相管的屬性,只留下與LRFMC模型相關的屬性
# FFP_DATE 入會時間
# LOAD_TIME 觀測窗口結束時間
# FLIGHT_COUNT 飛行頻率
# avg_discount 平均折扣
# SEG_KM_SUM 觀測窗口總飛行公里數
# LAST_TO_END 最后一次乘機時間至觀察窗口末端時長
data = data[['FFP_DATE','LOAD_TIME', 'FLIGHT_COUNT', 'avg_discount', 'SEG_KM_SUM','LAST_TO_END']]
#保存數據
cleanedfile = '/home/hadoop/data/air_customer/tmp/data_cleaned.csv'
data.to_csv(cleanedfile, encoding = 'utf-8')
數據變化的LRFMC數據:
L = LOAD_TIME - FFP_DATE (觀測窗口時間 - 入會時間)
R = LOAD_TIME - LAST_TO_END (觀測窗口時間 - 最后一次乘機時間)
F = FLIGHT_COUNT
M = SEG_KM_SUM
C = avg_discount
from datetime import datetime
import time
def normal_time(date):
'''
格式化數據
'''
return datetime.strptime(date,"%Y/%m/%d")
def interval_time(dd):
'''
計算時間間隔,以月為單位
'''
return dd.days / 30
# 計算LRFMC數據
data_LRFMC= pd.read_csv(cleanedfile,encoding='utf-8')
# data_LRFMC.columns = ['L', 'R', 'F','M', 'C']
data_LRFMC['L'] = (data['LOAD_TIME'].apply(normal_time) - data['FFP_DATE'].apply(normal_time)).apply(interval_time)
data_LRFMC['R'] = data['LAST_TO_END']
data_LRFMC['F'] = data['FLIGHT_COUNT']
data_LRFMC['M'] = data['SEG_KM_SUM']
data_LRFMC['C'] = data['avg_discount']
# 顯示數據的描述,最大值和最小值
data_LRFMC_describe = data_LRFMC.describe().T
data_LRFMC_describe = data_LRFMC_describe[['max','min']].T
LRFMCfile = '/home/hadoop/data/air_customer/tmp/LRFMC.csv'
#數據寫入文件
data_LRFMC.to_csv('LRFMCfile')
data_LRFMC_describe[['L','R','F','M','C']]
L R F M C
max 114.0 731.0 213.0 375074.0 1.500000
min 12.0 1.0 2.0 751.0 0.136017
最大值和最小值間隔較大,需要對數據進行標準化。
data_LRFMC=data_LRFMC[['L','R','F','M','C']]
# 標準化、重命名、寫入文件
data_normal = (data_LRFMC - data_LRFMC.mean()) / (data_LRFMC.std())
data_normal.columns = ['Z'+i for i in data_normal.columns]
data_normafile = '/home/hadoop/data/air_customer/tmp/data_norma.csv'
data_normal.to_csv('data_normafile')
8.4 訓練模型
數據處理完畢,下面進行模型的構建,
1、使用聚類算法,將數據生成5類用戶
2、針對聚類結果進行特征分析
from sklearn.cluster import KMeans
k = 5
kmodel = KMeans(k,n_jobs=2) #得到模型
data_normal1=data_normal.dropna()
kmodel.fit(data_normal1) #訓練模型
# 查看聚類中心和對應的類別
print(kmodel.cluster_centers_)
print(kmodel.labels_)
[[ 0.17343002 -0.07166046 -0.11266706 -0.09427382 2.69339174]
[-0.69751929 -0.40379498 -0.1697544 -0.17211799 -0.21902225]
[-0.3148445 1.67877305 -0.57462591 -0.5402772 -0.11557315]
[ 0.47921629 -0.79631365 2.48086723 2.43227193 0.27007082]
[ 1.15091348 -0.36698843 -0.09473823 -0.10441368 -0.13723191]]
print(kmodel.labels_)
[3 3 3 ..., 1 1 4]
8.4 可視化數據結果
import matplotlib.pyplot as plt
clu = kmodel.cluster_centers_
x = [1,2,3,4,5]
colors = ['red','green','yellow','blue','black']
for i in range(5):
plt.plot(x,clu[i],label='clustre '+str(i),linewidth=6-i,color=colors[i],marker='o')
plt.xlabel('L R F M C')
plt.ylabel('values')
plt.show()
8.5 客戶價值分析
注意kmeans每次運行的時候得到的類會有差別,簇號也會相應的改變,但是中間點基本不會改變:
cluster L R F M C color
客戶群1 0.17343 -0.07166 -0.11267 -0.09427 0.693392 red
客戶群2 -0.69752 -0.40379 -0.16975 -0.17212 -0.21902 gree
客戶群3 -0.31484 1.678773 -0.57463 -0.54028 -0.11557 yellow
客戶群4 0.479216 -0.79631 2.480867 2.432272 0.270071 blue
客戶群5 1.150913 -0.36699 -0.09474 -0.10441 -0.13723 black
我們重點關注的是L,F,M,從圖中可以看到:
1、客戶群4[blue] 的F,M很高,L也不低,可以看做是重要保持的客戶;
2、客戶群3[yellow] 的R比較高,為重要發展客戶
3、客戶群1[red] 重要挽留客戶,原因:C較高,但是F,M較低
4、客戶群2[green] 一般客戶
5、客戶群5[black] 低價值客戶
總結
以上是生活随笔為你收集整理的python客户价值分析_航空公司客户价值分析实例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 工厂电子产品工艺文件_建智能工厂,人机如
- 下一篇: 平衡二叉树平衡因子怎么计算_数据结构PH