原理篇
定義
聚類分析也稱群分析或點群分析,它是研究多要素事物分類問題的數量方法,是一種新興的多元統計方法,是當代分類學與多元分析的結合。
聚類分析的基本原理是,根據樣本的屬性,使用某種算法計算相似性或者差異性指標,以確定每個個案之間的親疏關系,最終將所有個案分為多個相似組(即聚類),同一聚類的個案彼此相同,不同聚類中的個案彼此不同。常見的聚類方法有K均值聚類法、系統聚類法(也叫層次聚類法)等。
簡而言之,聚類分析根據樣本的多個屬性,將相似的對象聚為一類,使同類之間盡量同質、不同類之間盡量異質。
聚類分析常用于對市場進行分群,在用戶體驗研究中,常用來根據用戶的多種屬性進行用戶分群。
特征
- 聚類分析簡單、直觀。
- 聚類分析主要應用于探索性的研究,其分析的結果可以提供多個可能的解,選擇最終的解需要研究者的主觀判斷和后續的分析。
- 不管實際數據中是否真正存在不同的類別,利用聚類分析都能得到分成若干類別的解。
- 聚類分析的解完全依賴于研究者所選擇的聚類變量,增加或刪除一些變量對最終的解都可能產生實質性的影響。
- 異常值和特殊的變量對聚類有較大影響,當分類變量的測量尺度不一致時,需要事先做標準化處理。
K-means算法
K均值算法比較簡單,在SPSS中也被成為快速聚類,K均值算法中的每個類都是使用對象的平均值來表示。
步驟:
- 將所有對象隨機分配到k個非空的類中。
- 計算每個類中所有對象的平均值,表示類的中心點。
- 根據每個對象與各個類中心的距離,分配給最近的類。
- 若滿足【終止條件】,則結束聚類;否則,轉到步驟2。
終止條件可以是:
- 沒有(或者小于某個數值的)對象被重新分配給不同的類;
- 沒有(或者小于某個數值的)類中心發生變化;
- 誤差平方和(SSE)達到局部最小;
- 達到指定的迭代次數。
K均值算法必須在平均值有意義的情況下才能使用,因此不適用于分類變量。需要給定聚類數目,并且對異常數據和數據噪聲比較敏感。
系統聚類算法
系統聚類有兩種類型:聚合的(自下而上的)或者分解的(自上而下的)。
聚合的系統聚類法將每個對象都看做獨立的一類,每一次通過合并最相似的聚類來形成上一層次中的聚類,整個當全部數據點都合并到一個聚類的時候停止或者達到某個終止條件而結束——這是大部分系統聚類所采取的方式。
分解的系統聚類法首先將所有對象看成一類,然后把根節點分裂為一些子聚類,每個子聚類再遞歸地繼續往下分裂,直到出現只包含一個數據點的單節點聚類出現,即每個聚類中僅包含一個數據點。
系統聚類算法的好處是分析者可以對比不同聚類數量的結果,從中選擇更感興趣(更有解釋力)的結果,這種對比可以通過生成的聚類樹進行。
實踐篇——使用模擬數據進行K均值聚類
用R生成模擬數據
為什么不使用現成的數據,而要用R來生成數據呢?
主要是因為在自己生成的數據中,我們可以預先定義存在哪些類型的用戶群、每個用戶群的屬性是怎樣的。
通過這種方式我們得以知道“客觀現實”是怎樣的,后面用SPSS做聚類分析時,可以將分析得出的結果與我們預設的“現實”做對比,看一下效果如何——聚類分析得出的類對我們預設的類的還原度有多高。
假設我們要做的是一款企業管理軟件A的用戶畫像,所得數據中一共有1200個有效樣本,其中存在三類用戶:
- 第一類用戶是“典型管理者”,年齡大約在30-40歲之間,對使用A軟件態度相對較積極,認為公司的管理是很自由的。其樣本共有200人。
- 第二類用戶是“個性型員工”,年齡大約在20-25歲,對使用A軟件態度波動較大,認為公司的管理很不自由。其樣本共有400人。
- 第三類用戶是“安穩型員工”,年齡大約在25-30歲,對使用A軟件態度比較消極,覺得公司的管理是相對自由的。其樣本共有600人。
接下來使用R來生成以上描述的三類用戶的數據,代碼如下(對代碼沒興趣的同學可以直接跳過):
#定義每類的數據量
n1=200
n2=400
n3=600
#畫像1的數據
set.seed(1000)
age1=rnorm(n1,mean=35,sd=3)
set.seed(1100)
attitude1=rnorm(n1,mean=8,sd=1.5)
set.seed(1200)
dof1=rnorm(n1,mean=8,sd=1)
#畫像2的數據
set.seed(2000)
age2=rnorm(n2,mean=23,sd=2)
set.seed(2100)
attitude2=rnorm(n2,mean=5,sd=2)
set.seed(2200)
dof2=rnorm(n2,mean=4,sd=1.5)
#畫像3的數據
set.seed(3000)
age3=rnorm(n3,mean=28,sd=2)
set.seed(3100)
attitude3=rnorm(n3,mean=3,sd=1.5)
set.seed(3200)
dof3=rnorm(n3,mean=7,sd=1.5)
#合并所有數據
age=c(age1,age2,age3)
attitude=c(attitude1,attitude2,attitude3)
dof=c(dof1,dof2,dof3)
orig_type=c(rep(1,n1),rep(2,n2),rep(3,n3))
data=data.frame(age,attitude,dof,orig_type)
#輸出到表格
write.csv(data,"F:/R/R-cluster.csv")
簡而言之,三類用戶的特征是這樣的:
類別 | 年齡 | 對A的態度 | 公司管理自由度 | 樣本數 |
---|---|---|---|---|
第一類 | N(35,3) | N(8,1.5) | N(8,1) | 200 |
第二類 | N(23,2) | N(5,2) | N(4,1.5) | 400 |
第三類 | N(28,2) | N(3,1.5) | N(7,1.5) | 600 |
用SPSS做K均值聚類
接下來使用R生成的數據進行K均值聚類,看看分析得出的結果與我們預設的類別的關系。
1、先看看三個變量的相關性矩陣:
我們發現幾個變量之間相關性都不高,因此可以全部作為聚類的變量進入后續分析過程。
2、接下來對三個變量進行標準化:
SPSS操作:分析-描述統計-描述-勾選“將標準化得分另存為變量”
3、K均值聚類:
SPSS操作:分析-分類-K均值聚類
填寫聚類數:3
“保存”:勾選聚類成員、與聚類中心的距離
“選項”:勾選ANOVA表
4、查看方差分析結果:
聚類分析得出的類別在三個變量上都呈現出了顯著差異,可見三個變量在聚類分析中都起到了作用,當前聚類分析結果可以保留。
預設類別與聚類結果對比
先看看聚類得出的結果:
跟我們最初定義的用戶特征對比(詳見上面的表格),發現聚類分析對用戶類別的還原度非常高!聚類得出的幾個類別和最初定義的類別在三個變量的均值和類別樣本數上差異都很小(注意類別的順序不同)。
我們再用一個交叉表,看看樣本的分布情況:
SPSS操作:分析-描述統計-交叉表,將原始數據定義的類別和K均值聚類得出的類別分別放在行和列變量中。
勾選“顯示復式條形圖”。
橫軸表示我們預設的類別,縱軸表示聚類分析得出的類別。可以看出非常明顯的對應關系,我們定義的第一類用戶大部分被聚類為類別3,第二類用戶大部分被聚類為類別1,第三類用戶大部分被聚類為類別2——聚類分析定義出來的用戶群體,不僅僅在屬性上與預設的一致,連用戶構成都很一致。