① k-means與RFM模型結合進行用戶群體劃分
在CRM系統中經常要對用戶進行劃分,以標記不同的標簽,進行個性化的營銷觸達動作。通常的用戶群體劃分會使用用戶的一些屬性信息,例如年齡,職業,性別等。但是這些屬性基本上都是用戶本身的特徵屬性,並不是和品牌關聯產生的屬性信息。另外一種常用的用戶模型,就是 RFM模型 ,是以用戶的實際購買行為數據作為基礎,進行用戶群體的劃分的,在實踐中更加具有實際價值。
RFM模型由三個指標組成,分別為:
最近一次消費 (Recency)
消費頻率 (Frequency)
消費金額 (Monetary)
可以看到這三個屬性都是通過用戶的購買行為計算得出的,這些指標基本上代表了用戶是否活躍,購買能力,忠誠度等信息。
而我們的目標是通過對每個用戶的RFM屬性進行計算,將用戶群體劃分為不同的種類進行區分,以便我們進行分析和精準營銷。例如我們可以分析出高價值用戶,重點發展用戶,流失用戶等群體進行針對性營銷動作。
本文將使用Python的一些工具包,對用戶數據集進行分析處理,例如建立RFM模型,數據標准化,以及使用k-means聚類演算法將用戶群體進行劃分。需要讀者具有一些基礎的Python和數據統計知識。
首先我們通過一些訂單數據分析得到一部分用戶的樣本數據來:
這里包括了用戶的id,總購買筆數,總購買金額以及最後一筆訂單時間的信息。我們將文件載入進來,截取一部分後對欄位類型進行處理:
為了將其轉化為我們要使用的RFM屬性,我們需要對last_order_date進行處理,轉換為最後一次訂單時間到目前的天數。這樣我們就獲得了RFM的基本屬性,分別為last_order_day_from_now(R), total_order_count(F), total_order_price(M)。處理完成後對數據進行可視化觀察數據分布:
其散點圖為:
我們會發現實際上的數據大部分都聚集在了一起,並且有一些非常離散的極端值數據,這對我們後續進行數據聚類會產生不利影響,所以我們使用log函數對數據進行處理,讓其分布的更加均勻:
可以看到現在數據分布的已經比較均勻了,這為我們進行聚類打下一個比較好的基礎。但同時我們也會發現RFM這三個屬性的單位卻並不相同,分別是天數,交易筆數和交易金額。這就造成了其數值差別巨大。而聚類演算法一般都是使用不同向量間的距離進行計算劃分的,屬性單位不同造成的數值差異過大會造成計算距離時的權重分布不均衡,也並不能反映實際情況,所以我們還要對數據進行標准化處理,這里我們使用z-score對RFM屬性進行加工運算。
z-score是一種數據標准化的計算方法,其公式為:
z = (x – μ) / σ
μ代表x所屬數據組的平均值,σ代表x所屬數據組的方差。所以通過z-score計算,我們將絕對值數據轉化為一個數據在所屬數據組中的位置(得分),這樣不同單位和類型間的數據使用z-score做相互的比較也就有了一定的意義。
這時候會看到數據不但分布較為均勻,而且不同維度間的數值差異也很小了,這樣我們可以把三種不同單位的屬性一起進行處理。
當我們建立好RFM的數據模型之後,期望通過不同的RFM值,對用戶進行區分以進行精準化營銷。當然我們可以通過對RFM這三組數值的平均值或者中位數和每個用戶進行比較,以建立起一個數據立方,進行群體劃分。但另外一方面,一般來說用戶群體會大致符合28原則,80%左右的收入是由20%左右的客戶所貢獻的,所以根據平均值或者中位數進行群體劃分也並不能總是科學的反應出不同的用戶群體來,所以我們也可以基於數據本身的特性,使用聚類演算法進行處理,以便讓數據更加「自然」的區分。
這里我們選用非常常用的k-means演算法進行聚類計算,k-means聚類的原理並不復雜,首先隨機的或者通過更高效的方式(例如k-means++)選取k個點,然後不斷迭代的計算,修正這k個點的坐標,目的是讓集合中的每個點的距離(有很多種距離演算法,比較常用的是歐氏距離)都和k個點里的其中一個盡量的近,而和其他的盡量的遠。這樣數據集合就能根據自身的分布規律,自然的區分出不同的類別來。
這里我們將k值設定為3,也就是將數據劃分為三個部分,通過使用我們處理後的RFM屬性進行計算,最終我們得到:
可以看到不同的顏色代表不同的用戶類別,可以簡單的認為標記為0的是流失用戶,1是重點發展用戶,2是高價值用戶。這樣我們就可以對不同的群體使用適合的營銷策略了,同時當有新的用戶加入後,我們也可以使用得到的k-means模型對其進行預測劃分。
在使用這種方式做實際的數據處理時,可能因為數據分布的原因導致區分度並不是特別好,因為根據銷售數據進行用戶區分,並不是總能發現比較明顯的區分「界限」,也就是不同群體間的邊界其實是非常模糊和混雜的(從上面的最終分析圖也可以看出這樣的情況),所以從這個角度講,單純通過RFM模型和聚類進行用戶群體劃分也是有它的局限性的。
② 如何對用戶進行聚類分析
需要搜集用戶的哪些特徵?
聚類分析變數選擇的原則是:在哪些變數組合的前提,使得類別內部的差異盡可能的小,即同質性高,類別間的差異盡可能的大,即同質性低,並且變數之間不能存在高度相關。
常用的用戶特徵變數有:
①
人口學變數:如年齡、性別、婚姻、教育程度、職業、收入等。通過人口學變數進行分類,了解每類人口的需求有何差異。
②
用戶目標:如用戶為什麼使用這個產品?為什麼選擇線上購買?了解不同使用目的的用戶的各自特徵,從而查看各類目標用戶的需求。
③
用戶使用場景:用戶在什麼時候,什麼情況下使用這個產品?了解用戶在各類場景下的偏好/行為差異。
④
用戶行為數據:如使用頻率,使用時長,客單價等。劃分用戶活躍等級,用戶價值等級等。
⑤
態度傾向量表:如消費偏好,價值觀等,看不同價值觀、不同生活方式的群體在消費取向或行為上的差異。
需要多少樣本量?
沒有限制,通常情況下與實際應用有關,如果非要加一個理論的限制,通常認為,樣本的個數要大於聚類個數的平方。
①如果需要聚類的數據量較少(<100),那麼三種方法(層次聚類法,K-均值聚類法,兩步聚類法)都可以考慮使用。優先考慮層次聚類法,因為層次聚類法產生的樹狀圖更加直觀形象,易於解釋,並且,層次聚類法提供方法、距離計算方式、標准化方式的豐富程度也是其他兩種方法所無法比擬的。
②如果需要聚類的數據量較大(>1000),應該考慮選擇快速聚類別法或者兩步聚類法進行。
③如果數據量在100~1000之間,理論上現在的計算條件是可能滿足任何聚類方法的要求的,但是結果的展示會比較困難,例如不可能再去直接觀察樹狀圖了。
應用定量方法還是定性方法?
聚類分析是一種定量分析方法,但對聚類分析結果的解釋還需要結合定性資料討論。
1.聚類分析的定義與用途
聚類分析(Cluster Analysis)是一種探索性的數據分析方法,根據指標/變數的數據結構特徵,對數據進行分類,使得類別內部的差異盡可能的小,即同質性高,類別間的差異盡可能的大,即同質性低。
2.聚類分析的方法
①層次聚類法(Hierarchical),也叫系統聚類法。既可處理分類變數,也可處理連續變數,但不能同時處理兩種變數類型,不需要指定類別數。聚類結果間存在著嵌套,或者說層次的關系。
②K-均值聚類法(K-Means Cluster),也叫快速聚類法。針對連續變數,也可處理有序分類變數,運算很快,但需要指定類別數。K-均值聚類法不會自動對數據進行標准化處理,需要先自己手動進行標准化分析。
③兩步聚類法(Two-Step Cluster):可以同時處理分類變數和連續變數,能自動識別最佳的類別數,結果比較穩定。如果只對連續變數進行聚類,描述記錄之間的距離性時可以使用歐氏(Euclidean)距離,也可以使用對數似然值(Log-likelihood),如果使用前者,則該方法和傳統的聚類方法並無太大區別;但是若進行聚類的還有離散變數,那麼就只能使用對數似然值來表述記錄間的差異性。當聚類指標為有序類別變數時,Two-Step Cluster出來的分類結果沒有K-means cluster的明晰,這是因為K-means演算法假定聚類指標變數為連續變數。
3.聚類分析的步驟
①確定研究目的:研究問題關注點有哪些、是否有先驗分類數…
②問卷編制:態度語句李克特項目、有序類別…
③確定分析變數:問卷變數的類型,連續or分類,有序類別or無序類別、是否納入後台數據,變數間相關性低…
④聚類分析:聚類分析方法選擇、數據標准化方法、聚類類別數確定…
⑤結果檢驗:類別間差異分析、是否符合常理…
⑥聚類結果解釋:類別的命名、類別間的差異、結合定性資料解釋…
③ 分類和聚類的區別及各自的常見演算法
1、分類和聚類的區別:
Classification (分類),對於一個classifier,通常需要你告訴它「這個東西被分為某某類」這樣一些例子,理想情況下,一個 classifier 會從它得到的訓練集中進行「學習」,從而具備對未知數據進行分類的能力,這種提供訓練數據的過程通常叫做supervised learning (監督學習),
Clustering (聚類),簡單地說就是把相似的東西分到一組,聚類的時候,我們並不關心某一類是什麼,我們需要實現的目標只是把相似的東西聚到一起。因此,一個聚類演算法通常只需要知道如何計算相似度就可以開始工作了,因此 clustering 通常並不需要使用訓練數據進行學習,這在Machine Learning中被稱作unsupervised learning (無監督學習).
2、常見的分類與聚類演算法
所謂分類,簡單來說,就是根據文本的特徵或屬性,劃分到已有的類別中。如在自然語言處理NLP中,我們經常提到的文本分類便就是一個分類問題,一般的模式分類方法都可用於文本分類研究。常用的分類演算法包括:決策樹分類法,樸素貝葉斯分類演算法(native Bayesian classifier)、基於支持向量機(SVM)的分類器,神經網路法,k-最近鄰法(k-nearestneighbor,kNN),模糊分類法等等。
分類作為一種監督學習方法,要求必須事先明確知道各個類別的信息,並且斷言所有待分類項都有一個類別與之對應。但是很多時候上述條件得不到滿足,尤其是在處理海量數據的時候,如果通過預處理使得數據滿足分類演算法的要求,則代價非常大,這時候可以考慮使用聚類演算法。
而K均值(K-mensclustering)聚類則是最典型的聚類演算法(當然,除此之外,還有很多諸如屬於劃分法K中心點(K-MEDOIDS)演算法、CLARANS演算法;屬於層次法的BIRCH演算法、CURE演算法、CHAMELEON演算法等;基於密度的方法:DBSCAN演算法、OPTICS演算法、DENCLUE演算法等;基於網格的方法:STING演算法、CLIQUE演算法、WAVE-CLUSTER演算法;基於模型的方法)。
④ 數據挖掘 聚類演算法概述
文 | 宿痕
來源 | 知乎
本篇重點介紹聚類演算法的原理,應用流程、使用技巧、評估方法、應用案例等。具體的演算法細節可以多查閱相關的資料。聚類的主要用途就是客戶分群。
1.聚類 VS 分類
分類是「監督學習」,事先知道有哪些類別可以分。
聚類是「無監督學習」,事先不知道將要分成哪些類。
舉個例子,比如蘋果、香蕉、獼猴桃、手機、電話機。
根據特徵的不同,我們聚類會分為【蘋果、香蕉、獼猴桃】為水果的一類,和【手機、電話機】為數碼產品的一類。
而分類的話,就是我們在判斷「草莓」的時候,把它歸為「水果」一類。
所以通俗的解釋就是:分類是從訓練集學習對數據的判斷能力,再去做未知數據的分類判斷;而聚類就是把相似的東西分為一類,它不需要訓練數據進行學習。
學術解釋:分類是指分析資料庫中的一組對象,找出其共同屬性。然後根據分類模型,把它們劃分為不同的類別。分類數據首先根據訓練數據建立分類模型,然後根據這些分類描述分類資料庫中的測試數據或產生更恰當的描述。
聚類是指資料庫中的數據可以劃分為一系列有意義的子集,即類。在同一類別中,個體之間的距離較小,而不同類別上的個體之間的距離偏大。聚類分析通常稱為「無監督學習」。
2.聚類的常見應用
我們在實際情況的中的應用會有:
marketing:客戶分群
insurance:尋找汽車保險高索賠客戶群
urban planning:尋找相同類型的房產
比如你做買家分析、賣家分析時,一定會聽到客戶分群的概念,用標准分為高價值客戶、一般價值客戶和潛在用戶等,對於不同價值的客戶提供不同的營銷方案;
還有像在保險公司,那些高索賠的客戶是保險公司最care的問題,這個就是影響到保險公司的盈利問題;
還有在做房產的時候,根據房產的地理位置、價格、周邊設施等情況聚類熱房產區域和冷房產區域。
3.k-means
(1)假定K個clusters(2)目標:尋找緊致的聚類
a.隨機初始化clusters
b.分配數據到最近的cluster
c.重復計算clusters
d.repeat直到收斂
優點:局部最優
缺點:對於非凸的cluster有問題
其中K=?
K<=sample size
取決於數據的分布和期望的resolution
AIC,DIC
層次聚類避免了這個問題
4.評估聚類
魯棒性?
聚類如何,是否過度聚合?
很多時候是取決於聚合後要干什麼。
5.case案例
case 1:賣家分群雲圖
作者:宿痕 授權轉載
原文鏈接:http://zhuanlan.hu.com/dataman/20397891