RFM模型的變形LRFMC模型與K-means算法的有機結合


應用場景: 可以應用在不同行業的客戶分類管理上,比如航空公司,傳統的RFM模型不再適用,通過RFM模型的變形LRFMC模型實現客戶價值分析;基於消費者數據的精細化營銷

應用價值: LRFMC模型構建之后使用了經典的聚類算法-K-Means算法來對客戶進行細分,而不是傳統的來與參考值對比進行手工分類,使得准確率和效率得到了大大提升,從而實現客戶價值分析,進行精准的價格和服務設置;

經常買機票的朋友不知道有沒有發現,機票的價格通常“陰晴不定”。3個月前是一個價格,2個月1個月1周前又是另一個價格;有時候白天和凌晨價格還大有來去,價格也時漲時跌。就我同事,過年前定好了高鐵票,臨走時看了一眼機票發現跌完比高鐵票還便宜,果斷退了買機票。更有甚者,不同賬號登陸的價格還不一樣…不懂的人認為水深,其實這些都是基於消費者數據的精細化營銷。

RFM就是一種典型的對客戶分類然后針對性營銷的模型。**RFM模型在上一篇也已講到,相信大家也已經很熟悉,它是由R(最近消費時間間隔)、F(消費頻次)和M(消費總額)三個指標構成,通過該模型識別出高價值客戶,在最后我也提及**RFM模型也不是萬能的,但是適當的對RFM進行升級或者變形也可能會有很好的用處。比如在航空行業,直接使用M指標並不能反映客戶的真實價值,因為“長途低等艙”可能沒有“短途高等艙”價值高,所以得根據實際行業靈活調整RFM模型的指標。

國內外航空公司最常用的是根據客戶價值分析特色LRFMC模型,將客戶聚類為重要保持客戶,重要發展客戶,重要挽留客戶,一般客戶,低價值客戶,從而針對每種類別的客戶制定對應的價格和服務。本文的特別之處是在於LRFMC模型構建之后使用了經典的聚類算法-K-Means算法來對客戶進行細分,而不是傳統的來與參考值對比進行手工分類。使得准確率和效率得到了大大提升。

以某航空公司為例,利用LRFMC模型,教大家介紹如何在實際工作中結合K-means聚類算法將客戶價值進行分類,從而實現客戶價值分析,進行精准的價格和服務設置。

LRFMC模型

傳統的RFM模型它是依據各個屬性的平均值進行划分,但是,細分的客戶群太多,精准營銷的成本太高。,因此LRFMC模型將客戶聚類為重要保持客戶,重要發展客戶,重要挽留客戶,一般客戶,低價值客戶,從而針對每種類別的客戶制定對應的價格和服務。

分析過程

首先,明確目標是客戶價值識別,應用最廣泛的模型是三個指標(消費時間間隔(Recency),消費頻率(Frequency),消費金額(Monetary)) 
以上指標簡稱RFM模型,作用是識別高價值的客戶。消費金額,一般表示一段時間內,消費的總額。但是,因為航空票價收到距離和艙位等級的影響,同樣金額對航空公司價值不同因此,需要修改指標。選定變量,艙位因素=艙位所對應的折扣系數的平均值=C,距離因素=一定時間內積累的飛行里程=M,再考慮到,航空公司的會員系統,用戶的入會時間長短能在一定程度上影響客戶價值,所以增加指標L=入會時間長度=客戶關系長度。因此,總共確定了五個指標,消費時間間隔R,客戶關系長度L,消費頻率F,飛行里程M和折扣系數的平均值C。以上指標,作為航空公司識別客戶價值指標,記為LRFMC模型

LRFMC模型指標含義

  • L:會員入會時間距觀測窗口結束的月數。
  • R:客戶最近一次乘坐公司飛機距離觀測窗口結束的月數。
  • F:客戶在觀測窗口內乘坐公司飛機的次數。
  • M:客戶在觀測窗口內累計的飛行里程碑。
  • C:客戶在觀測窗口內乘坐倉位所對應的折扣系數的平均值。

K-mean算法

作為數據挖掘的一個重要研究課題,聚類分析技術越來越受到人們的關注。聚類就是將物理或抽象對象的集合分成多個相似的數據子集,同一個子集內的對象之間具有較高的相似度,而不同子集內的對象差別較大。經過專家學者們的研究,目前聚類算法可以歸納為如下幾類:基於划分的方法、基於密度的方法、基於層次的方法、基於模型的方法和高維數據的方法。K-means算法作為一種基於划分的動態聚類算法,它以誤差平方和SSE作為聚類准則函數,具有簡單有效、收斂速度較快、便於處理大型數據集等優點,從而獲得了廣泛的應用。

K-means算法的步驟如下: 

簡單總結起來就是:初始化聚類中心、樣本點划分、更新聚類中心、樣本點划分、更新聚類中心....直至收斂即可

使用Python進行K-means算法的實現代碼:

 1 import numpy as np
 2 # import matplotlib.pyplot as plt
 3 # 加載數據
 4 def loadDataSet(fileName):
 5     data = np.loadtxt(fileName,delimiter='\t')
 6     return data
 7  
 8  
 9 # 距離度量使用歐氏距離
10 def distEclud(x,y):
11     return np.sqrt(np.sum((x-y)**2)) 
12  
13  
14 # 隨機k個初始聚類中心
15 def randCent(dataSet,k):
16     m,n = dataSet.shape
17     centroids = np.zeros((k,n))
18     for i in range(k):
19         index = int(np.random.uniform(0,m)) #
20         centroids[i,:] = dataSet[index,:]
21     return centroids
22  
23  
24 # K-means算法過程
25 def KMeans(dataSet,k):
26     m = np.shape(dataSet)[0]  #行的數目
27     # 第一列存樣本屬於哪一簇
28     # 第二列存樣本的到簇的中心點的誤差
29     clusterAssment = np.mat(np.zeros((m,2)))
30     clusterChange = True
31  
32     # 第1步 初始化centroids
33     centroids = randCent(dataSet,k)
34     while clusterChange:
35         clusterChange = False
36  
37         # 遍歷所有的樣本(行數)
38         for i in range(m):
39             minDist = 100000.0
40             minIndex = -1
41  
42             # 遍歷所有的質心
43             #第2步 找出最近的質心
44             for j in range(k):
45                 # 計算該樣本到質心的歐式距離
46                 distance = distEclud(centroids[j,:],dataSet[i,:])
47                 if distance < minDist:
48                     minDist = distance
49                     minIndex = j
50             # 第 3 步:更新每一行樣本所屬的簇
51             if clusterAssment[i,0] != minIndex:
52                 clusterChange = True
53                 clusterAssment[i,:] = minIndex,minDist**2
54         #第 4 步:更新質心
55         for j in range(k):
56             pointsInCluster = dataSet[np.nonzero(clusterAssment[:,0].A == j)[0]]  # 獲取簇類所有的點
57             centroids[j,:] = np.mean(pointsInCluster,axis=0)   # 對矩陣的行求均值
58     print("Congratulations,cluster complete!")
59     return centroids,clusterAssment

看起來可能會比較復雜,但其實可能沒有必要這樣做,因為這些經典的機器學習算法只需要在python中調用一個包就好了

 1 from sklearn.cluster import KMeans
 2  
 3 # 這里參數的選擇要注意下:n_clusters為類簇個數,init表示初始聚類中心選擇方法,n_init表示算法運行的次數選擇最優輸出,max_iter表示最大迭代次數,tol表示誤差平方和的閾值,小於時即停止迭代。
 4 kmeans = KMeans(n_clusters=K, init='random', n_init=1, max_iter=300, tol=0.0001).fit(X)
 5 # 聚類中心
 6 centers = kmeans.cluster_centers_
 7 # print("聚類中心:\n", centers)
 8 # 聚類結果
 9 result = kmeans.labels_
10 # 誤差平方和
11 sse = kmeans.inertia_

構建模型及模型應用

數據預處理

數據預處理這一步的重要性就不用我多說了,其中需要進行缺失值處理,異常值處理等等,這時候我們已經完成了數據的過濾,計算,篩選操作,並得到了LRFMC模型的五個指標,但通過觀察可以發現,這些數據之間的量級是不同的,差距甚至達到了千萬倍的級別,量綱不同進行訓練不能真實的反映數據的變動規律,想要建立建立正確的模型,還需要對數據進行標准化處理。常用的數據標准化處理有z-sores標准化、最大最小化等:

from sklearn import preprocessing
import pandas as pd
 
 
process = input("請輸入預處理數據方法:")
if process == "標准化":
    X = preprocessing.scale(np.array(pd1, dtype=np.float64))
elif process == "最大最小":
    X = preprocessing.MinMaxScaler().fit_transform(np.array(pd1, dtype=np.float64))
elif process == "歸一化":
    X = preprocessing.normalize(np.array(pd1, dtype=np.float64), norm='l2')

客戶聚類

接下來就可以使用預處理完的數據來進行聚類,屬性值就選LRFMC模型的五個指標,類簇數目為5類,最大迭代次數一般幾百次或者默認值就可以,距離度量使用默認的歐式距離即可。這里有一點需要注意,就是在初始聚類中心的選擇方法上,可以選擇“K-means++”,當然也可以自己輸入,因為K-means算法對初始聚類中心敏感,不同的初始聚類中心選取會得到不同的聚類結果。

1 kmeans = KMeans(n_clusters=5, init='k-means++', n_init=1, max_iter=300, tol=0.0001).fit(X)

進一步可以數據可視化,也可以對得到的聚類結果進行客戶價值分析了

客戶價值分析

  1. 類簇0 重要保持客戶:R(最近乘坐航班)低,F(乘坐次數)、C(平均折扣率高,艙位較高)、M(里程數)高。最優先的目標,進行差異化管理,提高滿意度。

  2. 類簇1 重要發展客戶:R(最近乘坐航班)低,F(乘坐次數)高,M(里程數)也不低,潛在價值客戶。雖然說,當前價值不高,但是卻有很大的發展潛力,促使這類客戶在本公司消費和合作伙伴處消費。

  3. 類簇2 重要挽留客戶:C(平均折扣率高,艙位較高)、F(乘坐次數)、M(里程數)較高,但是較長時間沒有乘坐(R)小。增加與這類客戶的互動,了解情況,采取一定手段,延長客戶生命周期。

  4. 類簇3 一般與低價值客戶:C、F、M、L都較低,但L高。他們可能是在公司打折促銷時才會乘坐本公司航班。

  5. 類簇4 低價值客戶:各方面的數據都是比較低的,屬於一般或低價值用戶。

這里客戶價值分析可以根據企業具體應用場景靈活分析,針對這5類客戶,航空公司就可能采取不同的措施,如會員的升級與保級、交叉銷售、管理模式的改變等。企業要獲得長期的豐厚利潤,必須需要大量穩定的、高質量的客戶。維持老客戶的成本遠遠低於新客戶,保持優質客戶是十分重要的。精准營銷中,也有成本因素,所以按照客戶價值排名,進行優先的,特別的營銷策略,是維持客戶的關鍵。

總結

結合航空公司客戶價值案例的分析,針對傳統RFM模型的不足,結合案例進行改造,介紹了一種RFM模型的變形LRFMC模型與聚類算法-K-means算法的有機結合應用,最后通過聚類結果的分析,選出客戶價值排行,並且制定相應策略,為企業節約成本,提升效率保駕護航。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM