聚類分析原理和實操

2021-03-06 風控汪的數據分析之路

前言:

聚類分析是一種非監督的機器學習算法,可以建立在無給定劃分類別的情況下,根據數據相似程度進行樣本分組的方法。它的入參是一組未被標記的樣本,根據樣本數據的距離或相似度劃分為若干組,劃分的原則是組內距離最小化,組外間距最大化。

聚類分析的算法有多種,本文只為大家介紹K-Means 算法的應用和簡單的原理。

下文將分4個模塊為大家介紹聚類分析:

聚類分析的應用場景

聚類分析的K-Means 算法原理

聚類分析代碼-輸出聚類中心

聚類分析代碼-可視化

如何得到一個好的聚類分析結果

一、聚類分析的應用場景:


聚類分析的優勢在於可以在無標籤的情況下,將客戶根據數據之間的相關性劃分成幾類,常見的應用場景如下:

客戶畫像:可以基於眾多數據,給客戶進行分層分類,以便對目前運營的產品有完善的了解,如客戶的性別、年齡、地區、職業、收入等;

精準營銷:利用貸前、貸中數據,挖掘真正有價值的客戶,並找到其需求所在,精準推送,一網打盡;

反欺詐:清洗欺詐特徵(如首逾)進行數據挖掘,找到明細有欺詐傾向客戶和正常客戶的差異。

二、K-Means 算法原理:


K-Means 算法又稱為快速聚類法,是基於最小誤差法的原則將數據劃分為預定的類別K。這種算法原理簡單且計算高效。

算法過程如下:

Scikit-learn 中的 K-Means算法使用歐式距離去度量樣本到聚類中心的距離,並把誤差平方和SSE作為度量聚類效果的目標函數,選取誤差平方和最小的分類結果作為最終的聚類結果。

歐式距離函數:

三、聚類分析代碼-輸出聚類中心


3.1.  定義聚類分析所需要的包

import pandas as pdimport numpy as npimport matplotlib.pyplot as pltimport mglearnfrom sklearn.preprocessing import LabelEncoderimport warningswarnings.filterwarnings('ignore')import seaborn as snsfrom sklearn.datasets import make_blobsfrom matplotlib import pyplotplt.rcParams['font.sans-serif']=['SimHei'] plt.rcParams['axes.unicode_minus']=False 

3.2.  生成測試聚類分析代碼需要的隨機數據

data,target=make_blobs(n_samples=100000,n_features=10,centers=10)
a = []for i in range(10): a.append('X'+str(i))data = pd.DataFrame(data)data.columns = a
pyplot.scatter(data[:,1],data[:,0],c=target);pyplot.show()

3.3.  輸出聚類中心

from sklearn.cluster import KMeansk = 4 iteration = 500 model = KMeans(n_clusters = k,n_jobs = 4,max_iter = iteration)model.fit(data)r1 = pd.Series(model.labels_).value_counts()r2 = pd.DataFrame(model.cluster_centers_)r = pd.concat([r2,r1],axis=1)r.columns = list(data.columns)+[u'所屬類別數目']r

聚類分析的結果輸出如下:

3.4.  給每行數據標記所屬類別

r = pd.concat([data,pd.Series(model.labels_,index=data.index)],axis=1)r.columns = list(data.columns)+[u'所屬類別數目']


四、聚類分析代碼-可視化


上述已經輸出了聚類中心並給每個客戶都打好聚類標籤了,接下來就需要使用2種可視化工具進行聚類結果的觀測:

4.1.  聚類分析可視化工具-TSNE

TSNE可以對高維數據進行降維,讓其可以在2維或3維空間中進行聚類結果的展示,通過TSNE圖像可以大致看出是不是通過聚類分析把樣本數據明細的分類出來了,即觀測聚類效果。

from sklearn.manifold import TSNEtsne = TSNE()tsne.fit_transform(data)tsne = pd.DataFrame(tsne.embedding_,index=data.index)c = ['go','r.','b*','y.']   # 定義每個分類的顏色for i in range(k):          # k為分類的個數    v = tsne[r[u'類別數目'] == i]    plt.plot(v[0],v[1],c[i])

4.2.  特徵間的二維分布散點圖


TSNE有個缺點,處理大量數據(10萬+),會非常慢,考驗工程師的耐心,這時也可以使用兩兩特徵的散點圖。我們可以根據業務經驗選取散點圖的特徵,比如高學歷伴隨高收入,我們可以選取學歷和收入來看其散點圖是否有明顯的聚類效果,如果覺得1-2組不夠有代表性,可以多選幾組。

# 查看兩兩特徵的二維分布fig,axes = plt.subplots(1,2,figsize=(10,5))mglearn.discrete_scatter(data['X0'],data['X1'],model.labels_,ax=axes[0])mglearn.discrete_scatter(data['X1'],data['X2'],model.labels_,ax=axes[1])

4.3.  單個特徵的概率密度函數


在聚類完成後,我們可以通過查看每個聚類的分布情況,判斷聚類出來的結果是否具有業務意義。

通過下面的代碼,我們將對每個聚類標籤下的特徵都畫出一張概率密度函數圖像(即如果有4個聚類中心,將有4張特徵為X1的分布圖)。

def density_plot(data,col):              plt.figure(dpi=80)    p = data[col].plot(kind='kde',linewidth=2,subplots=True,sharex=False,figsize=(5,5))    plt.legend()    return plt    for i in range(k):       density_plot(data[r[u'類別數目']==i],'X1')


這時候,就需要多個特徵輔助判斷聚類結果是否有業務意義。如下例:

從上表中可以明顯觀察到月使用次數越多,客戶活躍程度越高,說明此結果在業務層面的解釋下非常好。

五、如何得到一個好的聚類分析結果


在做聚類分析的時候,我們通常會遇到以下幾個問題


到底該聚成幾類?

樣本特徵過多,怎麼降維?

怎樣才是一個好的聚類結果?

1. 到底該聚成幾類?

首先,我們應該明確自己的業務目標初步制定下初始分類個數,即需要將客戶劃分為幾類。比如我們做欺詐聚類,那麼可以把客戶分為2類:有欺詐傾向/無欺詐傾向;我們做營銷數據分析,可以把客戶分為優質/良好/一般/較差等。

其次,我們可以圍繞初始類別個數進行上下浮動,並挑選幾組極具有業務含義的特徵進行散點圖和概率密度分布圖的觀測,從中選取業務意義最好的分類個數。

2. 樣本特徵過多,怎麼降維?

目前,針對無監督學習的數據降維主要有主成分分析和相關性分析


個人不推薦在聚類分析之前使用主成分分析,原因在於:學過線性代數的朋友們應該都知道,主成分分析是通過正交變化將一組相關性的特徵轉換為非線性相關的特徵,轉換後的變量叫主成分,也是特徵值對應的特徵向量。

一方面,主成分分析會損失很多原始數據信息;另一方面,通過主成分分析保留下來的主成分也很難有解釋性,因為數據已經被正交變換了。

如果樣本特徵過多,且相似特徵非常多,可以使用相關性分析,刪去極相關的特徵(如相關係數>=0.8)。這樣做的好處:

一方面,降低了聚類分析循環計算量,實現便捷高效;另一方面,保留了樣本大部分的信息。

3. 怎樣才是一個好的聚類結果?


算法是死的,業務是活的,任何算法結果都要符合業務場景。在分析聚類結果的時候,我們只需要關注以下3點:

1.  聚類分析可視化工具-TSNE上觀測聚類效果,樣本數據有明顯的分層;

2.  在特徵間的二維分布散點圖和單個特徵的概率密度函數上,和幾組特徵的業務意義相吻合;

2.  分類出來的結果有業務價值。


----END---

知乎:金融建模

微信號:cutewendan

公眾號:風控汪的數據分析之路

相關焦點

  • 聚類分析與SPSS實操演練
    一、聚類分析概率聚類分析是一種探索性的分析,個案所屬的群組特點還未知,也就是說,在聚類分析之前,研究者還不知道獨立觀察組可以分成多少個類,聚類分析的方法,主要有兩種,一種是「快速聚類分析方法」 (K-MeansCluster Analysis),另一種是「層次聚類分析方法」 (Hierarchical ClusterAnalysis)。如果觀察值的個數多或文件非常龐大(通常觀察值在200個以上),則宜採用快速聚類分析方法。
  • 數據運營實操 | 如何用聚類分析進行企業公眾號的內容優化
    所以,在開始正文前,先說下本文的布局,讓大家有個心理準備:先講講聚類分析的一些基本原理,為接下來的數據分析做好理論儲備;關於微信文章/內容評估體系的建立和數據的抓取,為接下來的數據分析提供上等「原料」;案例實操,用鮮活的實際案例將方法落地,讓大家在一個案例裡徹底搞明白聚類分析這一方法;應用延伸,一通百通—除了微信內容優化可以用,聚類分析還可以用在
  • SPSS聚類分析 I K-均值聚類法案例實操
    今天想寫一下聚類分析方法之一:K—Mean聚類法 PART 01 聚類分析模型簡介 聚類分析沒有過多的統計理論支持,也沒有統計檢驗對聚類結果的正確性「
  • 安全數據的聚類分析和判別分析概述
    1 聚類分析的基本原理1)聚類分析的含義聚類分析是根據「物以類聚」的原理,對樣品或指標進行分類的一種多元統計分析方法,將安全統計對象的集合分成多個類的分析過程。通常聚類分析可分為Q型聚類和R型聚類,Q型聚類是對樣品進行分類處理,R型聚類是對變量進行分類處理。本章只討論Q型聚類分析。2)聚類與分類的區別分類是有指導的學習,聚類是一種無指導的學習通過一定的方法在逐步分類過程中將沒有類標誌的安全統計數據聚集成有意義的類。
  • 初見|-聚類分析原理及R語言的實現
    聚類分析是非常重要的,這裡給出了一些聚類分析的基本原理以及R語言的實現(如果只是想要看聚類分析的R語言實現,直接到Q6
  • 分類分析之判別分析,SPSS判別分析實操
    與聚類分析不同的是【聚類分析是直接比較各事物之間的性質,將性質相近的歸為一類,將性質差別較大的歸入不同的類。而且事先並不知曉分類標準】,而判別分析先根據已知類別的事物的性質,利用某種技術建立函數式,然後對未知類別的新事物進行判斷以將之歸入已知的類別中。附
  • spss聚類分析功能怎麼使用?spss聚類分析教程
    spss 是一個非常好用的統計分析軟體,spss有一個聚類分析的功能哦,但是很多人不知道spss聚類分析功能怎麼使用?spss聚類分析是一個將case分析的數據的功能哦,下面小編就來告訴大家spss聚類分析使用教程吧!
  • ArcGIS聚類分析
    01 概述 聚類分析,Cluster analysis,亦稱為群集分析,是對於統計數據分析的一門技術,在許多領域受到廣泛應用,包括機器學習,數據挖掘,模式識別,圖像分析以及生物信息。
  • 聚類分析及其實現
    對於用戶(以個體為中心的)分類的方法主要有潛在類別分析和聚類分析。聚類分析(Cluster analysis)是對一組對象進行分組的方法。它基於這樣一種假設,相對於其它類的對象,同一類中的對象有著更高的相似性。組內相似性越大,組間差距越大,說明聚類效果越好。
  • 聚類分析的基本概況
    聚類分析是細分市場的有效工具,同時也可用於研究消費者行為,尋找新的潛在市場、選擇實驗的市場,並作為多元分析的預處理。 2.在生物上:聚類分析被用來動植物分類和對基因進行分類,獲取對種群固有結構的認識。 3.在地理上:聚類能夠幫助在地球中被觀察的資料庫商趨於的相似性。
  • spss聚類分析步驟
    spss是一個非常好用的統計分析軟體,spss有一個聚類分析的功能哦,但是很多人不知道spss聚類分析功能怎麼使用?spss聚類分析是一個將case分析的數據的功能哦 spss聚類分析使用步驟教程: 1、依次點擊:analyse--classify--hierarchical cluster,打開分層聚類對話框。如圖1所示
  • 聚類分析中的可視化
    問題提出當數據沒有標籤或者有少量標籤的時候,我們需要使用聚類分
  • R語言學習筆記之聚類分析
    "sil_width"] < 0)sil[neg_sil_index, , drop = FALSE]##          cluster    neighbor     sil_width## Missouri    3          2        -0.07318144#eclust():增強的聚類分析
  • 聚類分析:用戶細分,幫你找到「超級用戶」
    聚類分析廣泛用於市場研究、管理研究中,用於對個體細分,或對比聚類後不同樣本差異。本文給大家簡單梳理下聚類分析的分析思路。聚類分析,通俗地講即是分類,根據樣本的一些特徵,最終將樣本分為幾類。在總體類別劃分不清楚的情況下,可以用聚類的方法來分類。
  • 聚類分析(Cluster Analysis)及操作過程,附加重磅資訊
    異常值和特殊的變量對聚類有較大影響當分類變量的測量尺度不一致時,需要事先做標準化處理。當然,聚類分析不能做的事情是:     我這裡提到的聚類分析主要是譜系聚類(hierarchical clustering)和快速聚類(K-means)、兩階段聚類(Two-Step);
  • 十分鐘教你理解醫學統計學框架結構,一天學會SPSS實操
    統計描述:顧名思義,統計描述是描述數據的特徵,比如說數據的平均數和變異程度,當然也可以用統計圖和統計表來代替冗長的文字敘述,更加形象生動表示數據的特點。2. 統計推斷:主要是參數估計和假設檢驗,用來判斷數據間是否聯繫或差異。
  • R語言從入門到精通:Day15(聚類分析)
    - 測試數據和代碼見文末客服二維碼聚類分析是一種數據歸約技術,旨在揭露一個數據集中觀測值的子集。它可以把大量的觀測值歸約為若干個類。**需提前按照的R包:cluster、NbClust、flexclust、fMultivar、ggplot2和rattle。一個全面的聚類分析一般會包括以下11個典型步驟:   1.選擇合適的變量;2.縮放數據(最常用的方法是將每個變量標準化為均值=0和標準差=1的變量。
  • 我國社保支出地區差異性的聚類分析
    分別表示第i個地帶的人均社會保障的總和與人口總數;Iinter表示地帶間的差異,Ii(intra)表示第i個地帶內的差異;(三)譜系聚類分析聚類分析是多元數據分析的三大方法之一,它是指將研究對象的集合分組成為由類似的對象組成的多個類的分析過程。
  • 因子分析與聚類分析在消費者生活形態研究中的應用
    下面本文主要介紹如何通過因子分析和聚類分析方法來對消費者進行分類。經事先的小樣本測試篩選,最終的測試語句為:我喜歡購買新潮的東西在其他人眼中我是很時髦的我用穿著來表達個人性格我對自己的成就有很大期望生命的意義是接受挑戰和冒險我會參加/自學一些英語和電腦課程來接受未來的挑戰我習慣依計劃行事我喜歡品味獨特的生活放假時我喜歡放縱自己,什麼事都不做無所事事會使我感到不安我的生活節奏很緊湊
  • 稅務實操|會計實操 第3課
    或到【CCtalk】APP和官網搜索「網師」-梓暉因此稅務知識的學習,不能只是算算稅費、編幾筆會計分錄這麼簡單,而是要從實操的角度去理解每種稅的真實發生