我們知道 RFM 模型是客戶分群的重要模型之一,它主要基于客戶行為進(jìn)行劃分,識別客戶價值情況,把客戶劃分為 8 種類型。
那么問題來了,一定要劃分為 8 種客戶類型嗎?
在實際的客戶體驗管理過程中,并不是非得要這么做。比如,一些信用卡機(jī)構(gòu),只會把客戶分為 4 種類型:逾期風(fēng)險高,辦理過分期交易;逾期風(fēng)險中,頻繁高額交易;逾期風(fēng)險中低,頻繁小額交易;逾期風(fēng)險低,分期交易意向低。而某大型銀行客戶體量龐大,則會將客戶分群超過 20 種類型,進(jìn)一步精細(xì)化客戶體驗管理。
RFM 提供的是一種進(jìn)行客戶分群的思路,至于具體分群數(shù),可以根據(jù)客戶規(guī)模和業(yè)務(wù)目標(biāo)而定。
本文將會基于之前新零售公司的數(shù)據(jù)集,結(jié)合 RFM 模型和 K-Means 聚類兩種方式,依據(jù)客戶數(shù)據(jù)表征的特性,找到合適的分群。
練習(xí)數(shù)據(jù)集和實現(xiàn)代碼可以通過公眾號后臺回復(fù)【RFM】獲取。
通過本文,你可以了解到:
- 1、聚類(clustering)
- 2、聚類基本思想
- 3、K-Means
- 4、K-Means 優(yōu)缺點(diǎn)
- 5、RFM + K-Means 案例應(yīng)用
- 6、小結(jié)
1、聚類(clustering)
聚類,就是按照某個特定標(biāo)準(zhǔn)(比如”距離準(zhǔn)則”),將一個數(shù)據(jù)集劃分為有意義不同的類型或組(簇),使得相似性盡可能大的客戶被劃分到同一群,同時在不同群間能表現(xiàn)出明顯的差異性。
簡言之,就是聚類后,同一類數(shù)據(jù)盡可能聚在一起,不同類的數(shù)據(jù)盡量分離。
對于不同客戶特性的相似性,會依據(jù)觀測客戶間的距離進(jìn)行度量,比如數(shù)學(xué)意義上的歐氏距離(euclidean distance)和基于相關(guān)性的距離(correlation-based distance)。
對于聚類和分類,兩者之間是有一定的差別的,探討這個問題需要先引入兩個概念,監(jiān)督學(xué)習(xí)(supervised learning)和無監(jiān)督學(xué)習(xí)(unsupervised learning)。
分類會具備明確的規(guī)則和條件,像圖書館的藏書分類,按主題,按年代、地域、語言等等。以計算機(jī)的思維進(jìn)行理解,即計算機(jī)可以從已知的訓(xùn)練數(shù)據(jù)集中進(jìn)行”學(xué)習(xí)”,從而獲取對于分類邏輯的判別方法。當(dāng)匯入未知類別的新數(shù)據(jù)進(jìn)行分類時,可以依照訓(xùn)練所得的經(jīng)驗進(jìn)行自動判斷,而這種提供訓(xùn)練數(shù)據(jù)的過程通常叫做監(jiān)督學(xué)習(xí)(supervised learning)。
而聚類沒有確切的定義,并不會知道任何樣本的類別標(biāo)號。希望通過某種算法來把一組未知類別的樣本劃分成若干類別,期間不需要使用訓(xùn)練數(shù)據(jù)集進(jìn)行學(xué)習(xí)。所以,聚類又被稱為無監(jiān)督學(xué)習(xí)(unsupervised learning)。
兩者相比,聚類旨在驗證數(shù)據(jù)之間的相似性或不相似性,更側(cè)重于邊界條件。
2、聚類基本思想
先看一個案例。在某年的美國總統(tǒng)大選中,候選人的得票數(shù)非常接近。相互競爭的候選人的普選票數(shù) 48.7% : 47.9%。這時候,如果有辦法讓 1% 的選民倒戈,將手中的選票投向另外的候選人,那么選舉結(jié)果就會截然不同。
實際上,如果有針對性地妥善加以引導(dǎo),少部分選民就會轉(zhuǎn)換立場。盡管這類選舉者占的比例較低,但當(dāng)候選人的選票接近時,這些人的立場無疑會對選舉結(jié)果產(chǎn)生非常大的影響。
首先收集選民的基本信息,聽取選民聲音中反饋滿意或不滿意的信息,因為選民關(guān)注的重要議題,很大可能左右選民的投票結(jié)果。
然后,將這些信息輸入到某個聚類算法中。對聚類結(jié)果中的每一個群(最好選擇最大群 ), 精心構(gòu)造能夠吸引該群選民的消息。
最后,開展競選活動并觀察上述做法是否有效,不斷迭代調(diào)整,這就是聚類的大致原理。
對于一堆散落的點(diǎn),先確定這些散落的點(diǎn)最后需要聚成幾類,然后挑選隨機(jī)挑選幾個點(diǎn)作為初始中心點(diǎn),再然后依據(jù)預(yù)先定好的啟發(fā)式算法(heuristic algorithms)給數(shù)據(jù)點(diǎn)做迭代重置(iterative relocation),直到最后到達(dá)“類內(nèi)的點(diǎn)都足夠近,類間的點(diǎn)都足夠遠(yuǎn)”的目標(biāo)效果。
啟發(fā)式算法主要包括了K-Means,及其變體K-Medoids、K-Modes、K-Medians、Kernel K-means等算法。
本次將會選擇最為經(jīng)典的 K-Means 聚類+ RFM 模型,其他算法會在后續(xù)文章中更新。
3、K-Means
K-Means 是一種迭代求解的聚類分析算法,由于它可以發(fā)現(xiàn) K 個不同的群, 且每個群的中心采用群中所含值的均值計算而成,也稱之為 K-均值。其中,群數(shù) K 須由用戶指定。
K-Means 聚類過程圖解
算法流程如下:
- 1)隨機(jī)選擇 K 個初始點(diǎn)作為質(zhì)心(不必是數(shù)據(jù)中的點(diǎn)),每個對象初始地代表了一個簇的中心;
- 2)對剩余的每個對象,根據(jù)其與各群中心的距離,將它賦給最近的群;
- 3)重新計算每個群的平均值,更新為新的群中心;
- 4)不斷重復(fù) 2、3,直到數(shù)據(jù)集中的所有點(diǎn)都距離它所對應(yīng)的質(zhì)心最近時結(jié)束。
4、K-Means 優(yōu)缺點(diǎn)
K-Means 優(yōu)點(diǎn)在于原理簡單,容易實現(xiàn),聚類效果好,對于大型數(shù)據(jù)集也是簡單高效、時間復(fù)雜度、空間復(fù)雜度低。
當(dāng)然,也有一些缺點(diǎn)。需要預(yù)先設(shè)定 K 值,對最先的 K 個點(diǎn)選取很敏感;對噪聲和離群值非常敏感;只用于 numerical 類型數(shù)據(jù);不能解決非凸(non-convex)數(shù)據(jù)。受離群值影響大,最重要是數(shù)據(jù)集大時結(jié)果容易局部最優(yōu)。
每種類型的算法都會有它的特點(diǎn),都有側(cè)重解決問題的面向。在應(yīng)用之前,先理解不同算法的內(nèi)在邏輯、作用、應(yīng)用場景,結(jié)合實踐經(jīng)驗,選出最合適的算法模型來達(dá)到業(yè)務(wù)目標(biāo)。
5、RFM + K-Means 案例應(yīng)用
練習(xí)數(shù)據(jù)集和實現(xiàn)代碼可以通過公眾號后臺回復(fù)【RFM】獲取。
筆者使用的是 R Studio 進(jìn)行案例演示。如果你有其他的源數(shù)據(jù),要想在 R Studio 中進(jìn)行聚類分析,應(yīng)該按照如下要求準(zhǔn)備數(shù)據(jù):
- 1) 行必須是觀測值(個體或樣本),列必須是變量。
- 2) 任何缺失數(shù)據(jù)都必須刪除。
- 3) 必須對數(shù)據(jù)進(jìn)行標(biāo)準(zhǔn)化。
步驟 1:
install.packages("factoextra")
install.packages("cluster")
數(shù)據(jù)預(yù)處理完后,如果沒有安裝 factoextra(用于對聚類結(jié)果進(jìn)行可視化) 、cluster(用以對數(shù)據(jù)進(jìn)行聚類計算),需要先進(jìn)行安裝。
步驟 2:
#載入包
library(factoextra)
library(cluster)
#導(dǎo)入已經(jīng)處理好的數(shù)據(jù)集 → RFM_Dataset.csv
rfm_data <- read.csv("/Users/guofu.long/Desktop/RFM_Dataset.csv", header = TRUE)
data_1 <- rfm_data[,1:4]
head(data_1)
#查看數(shù)據(jù)行列數(shù)、字符類型、描述性統(tǒng)計量
dim(data_1)
str(data_1)
summary(data_1)
這里使用的 RFM_Dataset.csv 數(shù)據(jù)是在《應(yīng)用 RFM 模型客戶分群操作篇,提效客戶體驗管理》中處理好 RFM 對應(yīng)值。導(dǎo)入數(shù)據(jù)后,對數(shù)據(jù)進(jìn)行適當(dāng)?shù)挠^察,比如數(shù)據(jù)行列數(shù)、字符類型、描述性統(tǒng)計量等。
步驟 3:
data_2 <- data_1[,2:4]
#數(shù)據(jù)標(biāo)準(zhǔn)化
data_3 <- scale(data_2)
head(data_3)
由于同一個數(shù)據(jù)集合中經(jīng)常包含不同類別的變量。這樣會導(dǎo)致這些變量的值域可能大不相同,如果使用原值域?qū)沟弥涤虼蟮淖兞勘毁x予更多的權(quán)重。
針對這個問題,標(biāo)準(zhǔn)化可以使得不同的特征具有相同的尺度,消除特征之間的差異性。當(dāng)原始數(shù)據(jù)不同維度上的特征的尺度(單位)不一致時,需要標(biāo)準(zhǔn)化步驟對數(shù)據(jù)進(jìn)行預(yù)處理。
RFM_Dataset.csv 數(shù)據(jù)集筆者其實已經(jīng)將尺度轉(zhuǎn)化統(tǒng)一計分方式,為了凸顯這個步驟的重要性,特別再加以說明。
R 語言中 scale 函數(shù)提供數(shù)據(jù)標(biāo)準(zhǔn)化功能,指中心化之后的數(shù)據(jù)在除以數(shù)據(jù)集的標(biāo)準(zhǔn)差,即數(shù)據(jù)集中的各項數(shù)據(jù)減去數(shù)據(jù)集的均值再除以數(shù)據(jù)集的標(biāo)準(zhǔn)差。
特別需要注意 scale 函數(shù)不接受含有字符串的數(shù)據(jù)框,使用前要進(jìn)行轉(zhuǎn)換。
步驟 4:
#設(shè)置隨機(jī)數(shù)種子,保證可重復(fù)
set.seed(1234)
#手肘法,確定最佳聚類數(shù)目
fviz_nbclust(data_3, kmeans, method = "wss") + geom_vline(xintercept = 3, linetype = 2)
為保證實驗可重復(fù)進(jìn)行,需設(shè)定隨機(jī)數(shù)種子。
factoextra 包中包含許多用于聚類分析和可視化的函數(shù),包括:
函數(shù) | 功能 |
dist(fviz_dist, get_dist) | 距離矩陣的計算與可視化 |
get_clust_tendency | 評估聚類趨勢 |
fviz_nbclust(fviz_gap_stat) | 確定最佳的聚類數(shù) |
fviz_dend | 樹狀圖的增強(qiáng)版可視化 |
fviz_cluster | 聚類結(jié)果的可視化 |
fviz_mclust | 基于模型的聚類結(jié)果的可視化 |
fviz_silhouette | 聚類中的輪廓信息的可視化 |
hcut | 分層聚類的計算并剪切樹 |
hkmeans | 分層的k均值聚類 |
eclust | 聚類分析的可視化增強(qiáng)版 |
利用“手肘法”,找到最佳聚類數(shù)目。隨著聚類數(shù) K 的增大,樣本劃分會更加精細(xì),每個群的聚合程度會逐漸提高,那么誤差平方和 SSE 自然會逐漸變小。
即隨著聚類數(shù)目增多,每一個類別中數(shù)量越來越少,距離越來越近,因此 WSS 值肯定是隨著聚類數(shù)目增多而減少的,所以關(guān)注的是斜率的變化。
聚類數(shù)趨勢圖
在 WWS 隨著 K 值的繼續(xù)增大而減少得很緩慢時,認(rèn)為進(jìn)一步增大聚類數(shù)效果也并不能增強(qiáng),也就是說 SSE 和 K 的關(guān)系圖是一個手肘的形狀,存在的這個“肘點(diǎn)”就是最佳聚類數(shù)目。從 1 類到 3 類下降得很快,之后下降得很慢,所以最佳聚類個數(shù)選為 3。
步驟 5:
#進(jìn)行聚類
result <- kmeans(data_3,3)
kmeans 函數(shù)還提供了像 iter.max(最大迭代次數(shù))、 nstart(起始隨機(jī)分區(qū)的數(shù)量)等等,有需要可以根據(jù)函數(shù)用法自行調(diào)整,這里使用的是默認(rèn)的參數(shù)設(shè)定。
步驟 6:
#可視化聚類
fviz_cluster(result, data = data_3)
使用 factoextra 包生成的聚類后的分布圖。
聚類劃分圖
步驟 7:
#聚類結(jié)果導(dǎo)出
result_output <- data.frame(data_1[,1:4],result$cluster)
write.csv(result_output,file="/Users/guofu.long/Desktop/result_output.csv",row.names=T,quote=F)
聚類結(jié)果列表。
客戶分群匹配列表
6、小結(jié)
最后,利用 K-Means 聚類算法和 RFM 模型得到客戶分群只是開始,由于聚類(即數(shù)學(xué)上的相似性)所產(chǎn)生的客戶分群,分群本身不能直接產(chǎn)生價值,無論分群用的是啥模型,最后的結(jié)果也只是一個數(shù)據(jù)標(biāo)簽而已。還需要結(jié)合數(shù)據(jù)本身的特點(diǎn)和業(yè)務(wù)特性進(jìn)行意義賦予,才能夠產(chǎn)生與之匹配的運(yùn)營行動方案。
觀察聚類后被分為 3 種類型的公司客戶,群體表現(xiàn)上可以看出,3 種類別可以劃分為【類別1 : 類別2 : 類別3 = 高價值 : 中價值 : 低價值】。
客戶體驗管理依據(jù)對應(yīng)的類型采取行動方案。
本文提供的僅僅是區(qū)別于單一使用 RFM 模型進(jìn)行客戶分群的思路,希望對你有所啟發(fā)。
本文完.
公眾號:龍國富,人因工程碩士。致力于終身學(xué)習(xí)和自我提升,分享用戶研究、客戶體驗、服務(wù)科學(xué)等領(lǐng)域資訊,觀點(diǎn)和個人見解。
本文經(jīng)授權(quán)發(fā)布,不代表增長黑客立場,如若轉(zhuǎn)載,請注明出處:http://m.gptmaths.com/quan/69226.html