應用場景: 可以應用在不同行業的客戶分類管理上,比如航空公司,傳統的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)
進一步可以數據可視化,也可以對得到的聚類結果進行客戶價值分析了
客戶價值分析
-
類簇0 重要保持客戶:R(最近乘坐航班)低,F(乘坐次數)、C(平均折扣率高,艙位較高)、M(里程數)高。最優先的目標,進行差異化管理,提高滿意度。
-
類簇1 重要發展客戶:R(最近乘坐航班)低,F(乘坐次數)高,M(里程數)也不低,潛在價值客戶。雖然說,當前價值不高,但是卻有很大的發展潛力,促使這類客戶在本公司消費和合作伙伴處消費。
-
類簇2 重要挽留客戶:C(平均折扣率高,艙位較高)、F(乘坐次數)、M(里程數)較高,但是較長時間沒有乘坐(R)小。增加與這類客戶的互動,了解情況,采取一定手段,延長客戶生命周期。
-
類簇3 一般與低價值客戶:C、F、M、L都較低,但L高。他們可能是在公司打折促銷時才會乘坐本公司航班。
-
類簇4 低價值客戶:各方面的數據都是比較低的,屬於一般或低價值用戶。
這里客戶價值分析可以根據企業具體應用場景靈活分析,針對這5類客戶,航空公司就可能采取不同的措施,如會員的升級與保級、交叉銷售、管理模式的改變等。企業要獲得長期的豐厚利潤,必須需要大量穩定的、高質量的客戶。維持老客戶的成本遠遠低於新客戶,保持優質客戶是十分重要的。精准營銷中,也有成本因素,所以按照客戶價值排名,進行優先的,特別的營銷策略,是維持客戶的關鍵。
總結
結合航空公司客戶價值案例的分析,針對傳統RFM模型的不足,結合案例進行改造,介紹了一種RFM模型的變形LRFMC模型與聚類算法-K-means算法的有機結合應用,最后通過聚類結果的分析,選出客戶價值排行,並且制定相應策略,為企業節約成本,提升效率保駕護航。