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數據分析與挖掘實戰》

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章