:::

Weka的K Means分群演算法使用教學:SimpleKMeans / Clustering with Weka: SimpleKMeans

image

用資料探勘的分群演算法來為樣本分群是一種基本的分析方式。本篇就以「Data mining with WEKA, Part 2: Classification and clustering」這篇為例子,介紹如何使用K Means演算法來分群。


Weka下載 / Weka Download

2016-12-05_145933

Weka的全名是「Waikato Environment for Knowledge Analysis」,Waikato是紐西蘭北邊的行政區。

Weka是資料探勘領域相當知名的開放原始碼自由軟體,已經有許多文章介紹如何安裝與使用Weka,例如「資料探勘軟體Weka之安裝篇」。我這篇就不細講如何安裝Weka,只列出Weka相關連結供大家方便下載:

分群範例資料下載 / Clustering Example Data Download

2016-12-05_152156

Data mining with WEKA, Part 2: Classification and clustering」這篇只有介紹如何操作Weka,卻沒有提供關鍵的範例資料bmw-browsers.arff。

後來我在Weka Tutorials找到這篇教學使用的檔案,讓我在這裡備份如下:

bmw-browsers.arff 這個資料集來自汽車品牌BMW代理商的真實資料。代理商保存了過去的銷售資訊,包括誰買了BMW、觀賞BMW、瀏覽的BMW樓層等資訊。從資料內容來看,bmw-browsers.arff 中有9項屬性(特徵),總共100筆資料。屬性介紹如下:

  • CustomerID:顧客編號,資料類型為數字。
  • Dealership:是否有代理,0表示沒有,1表示有。
  • Showroom:顧客是否有看展示間,0表示沒有,1表示有。
  • ComputerSearch:顧客是否有用電腦搜尋,0表示沒有,1表示有。
  • M5:顧客是否有看BMW M5四門跑車,0表示沒有,1表示有。
  • 3Series:顧客是否有看BMW 3系列轎車,0表示沒有,1表示有。
  • Z4:顧客是否有看BMW Z4雙座敞篷跑車,0表示沒有,1表示有。
  • Financing:顧客是否符合貸款資格,0表示沒有,1表示有。
  • Purchase:顧客是否真的購車,0表示沒有,1表示有。

在實際進行分群的時候,我們會將辨識客戶的第一個屬性「CustomerID」排除在外。但是在最後分群儲存結果時,我們還是可以看到該客戶被分到哪一群裡面。


K Means分群教學 / Clustering Tutorial

接下來就讓我們實際操作看看吧。

1. 載入資料 / Loading Data

image

開啟Weka主程式「Weka GUI Chooser」,選擇「Explorer」。

image

在Weka Explorer中,點選左上角的「Open file…」。

image

選擇剛剛下載的「bmw-browsers.arff」。

image

資料已經成功載入Weka。

2. 進入分群功能 / Switch to Cluster Panel

image

接下來我們從「Preprocess (預處理)」切換到「Cluster (分群)」。

image

這是Weka的分群介面,但是大部分設定都只在上面的部分。

3. 選擇分群演算法 / Choose Clustering Algorithm

image

接下來我們要先選擇分群演算法,請點下左上角的「Choose」。

image

選擇K Means的演算法「SimpleKMeans」。

image

現在上面分群演算法切換成SimeleKMeans了。

4. 設定分群數量 / Change Number of Clusters

K Means演算法中,最終要分的組數是一個很關鍵的設定。Weka分群的預設數量是2群,很多研究會使用3群或5群。理想上應該是依據樣本資料的類型或是研究目的來決定群數,但對很多初探型的研究來說非常困難。有興趣可以看一下「深入淺出Mahout K-means (PART 5) 如何決定群聚的數量 Conopy」這篇的討論。

在本例中使用的分群數量是5群,以下我們就看看怎麼在Weka中調整分群數量。

image

在演算法這個位置按下滑鼠左鍵。

image

接著會跳出演算法的設定對話視窗。從裡面找到分群數量設定「numClusters」,把它從預設值2改成5。然後按下「OK」按鈕。

image

回到主畫面,分群數量變成-N 5了。

5. 排除不需要的屬性 / Ignore attributes

image

剛剛有講到,在分群的時候,我們應該先把客戶的辨識資料「CustomerID」移除掉。這個功能可以從「Ignore attributes」進去。

image

選擇「CustomerID」屬性,按下「Select」。這樣待會分群時就可以忽略掉這個屬性了。

6. 進行分群與解釋結果 / Start Clustering and Interpret Results

image

設定完成之後,就按下左邊的「Start」按鈕吧。

image

很快的,第一個分群結果就出來了。

image

我們從右邊的「Clusterer output」裡面找到「Cluster centroids」,來看一下分群最後結果的各群特性。

分群結果如下:

Cluster#
Attribute            Full Data      0          1          2          3          4
                       (100)       (26)       (27)        (5)       (14)       (28)
==================================================================================
Dealership              0.6     0.9615     0.6667          1     0.8571          0
Showroom               0.72     0.6923     0.6667          0     0.5714          1
ComputerSearch         0.43     0.6538          0          1     0.8571     0.3214
M5                     0.53     0.4615      0.963          1     0.7143          0
3Series                0.55     0.3846     0.4444        0.8     0.0714          1
Z4                     0.45     0.5385          0        0.8     0.5714     0.6786
Financing              0.61     0.4615     0.6296        0.8          1        0.5
Purchase               0.39          0     0.5185        0.4          1     0.3214

這個分群結果中的數值是平均值,越靠近0表示越多人沒有這個屬性,越靠近1表示越多人有這個屬性。根據該篇文章的解釋,我們可以為這5群結果進行以下的描述:

  • Cluster 0 (26人):本群可以稱為「夢想者(Dreamers)」,他們什麼都想要,但是卻不買。
  • Cluster 1 (27人):這群是「M5的愛好者(M5 Lovers)」,因為他們傾向於直接走向M5,並且忽略3系列或Z4。儘管如此,他們購買率並不高,只有52%。也許代理商可以安排更多M5的銷售人員來提升M5的銷量。
  • Cluster 2 (5人):該群因為人數太少而可以被稱為「可忽略 (Throw Away)」,而且他們的行為也看不太出特色。
  • Cluster 3 (14人):本組可稱為「BMW寶寶 (BMW Babies)」,因為他們最後總能夠買車並且符合貸款資格。本群可以看到一些有趣的事情:他們看起來會到處去看不同的車子,然後轉向去用電腦搜尋代理商有的車子,最後傾向於購買M5或是Z4,而不是3系列。這一群讓代理商知道他們應該考慮在各樓層安排電腦搜尋站,或是讓M5或Z4在搜尋結果中更加突出。只要客戶決定要購車時,他們就能很快地完成購車手續。
  • Cluster 4 (28人:本組可稱為「BMW入門 (Starting Out With BMW)」,因為他們只看3系列,而總是不看更貴的M5。他們總是走進展示間直接選擇,而不是到處去看車,也不仰賴電腦搜尋結果。只有50%的人符合貸款資格,而僅有32%的人最後完成交易。這個意思是說,這些購買他們第一輛BMW的顧客很明確地知道他們要的類型,也就是3系列,而且他們也希望容易貸款來購買。代理商可以考慮降低貸款標準或是降低3系列的價格。

在實務操作上,如果分組最後的結果讓你覺得難以解釋的話,可以試著回到「4. 設定分組數量」改變分組數量,也許不同的分法會讓你看到不同的觀點。

7. 匯出結果 / Save Output

最後,我們會想要知道那些顧客是被分在那些組裡面。雖然前面我們在分群時排除了可辨識顧客資料的「CustomerID」,但其實還是有辦法可以看到顧客與分群結果的對應。

image

在左下角的「Result list」中選擇剛剛分群的結果,按右鍵開啟「Visualize cluster assignments (產生分群結果圖表)」。

image

在「Weka Clusterer Visualize」對話視窗中點下「Save」按鈕。

image

這時候會將分群結果儲存成arff檔案,請選擇一個位置保存它吧。

image

arff格式是純文字檔案,我們可以用Notepad++來開啟。分群結果跟原本的bmw-browsers.arff看起來很像,但是多了兩個屬性:

  • Instance_number:實體編號,類型是數字。
  • Cluster:分群結果。因為我們設定分成5群,所以資料只會有cluster0、cluster1、cluster2、cluster3、cluster4這五種。

而我們在意的只有第二個屬性「CustomerID」跟最後的屬性「Cluster」。從@data之後的資料就能看到CustomerID對應的分群結果,每一行代表一位客戶。舉例來說,客戶編號1對應到cluster 0,客戶編號4對應到cluster 3。

8. 將arff轉換成cvs / Convert arff format to csv format

對很多人來說arff格式的檔案很不容易處理,大家還是比較習慣用試算表工具,如Excel來處理資料。要將arff格式轉換成試算表格式也不困難,看看以下怎麼操作吧。

image

首先選取包含「@data」上面的文字。

2016-12-05_172307

刪除掉。

image

再來把檔案另存新檔,記得將副檔名存為「csv」。

image

接著我們就可以用Excel來開啟這個csv檔案了。


結語 / In Closing

網路上介紹分群的文章很多,為什麼我還要多此一舉寫這樣的一篇呢?這是因為雖然單純的演算法介紹或是原理介紹的文章雖多,但是一步一步操作Weka的教學卻很少,而且更少人在講分群之後怎麼看到樣本跟分群結果的對應。所以我想還是把它們整理一下,未來要介紹怎麼用K Means分群的時候也比較方便。

image

然而K Means分群演算法最大的問題在於如何決定分群數量K,而Weka中有另一個改良式的分群方法叫做XMeans,可以讓人先決定分群的區間,像是最少5最多10,然後由演算法決定最佳的分群數量。以這個例子來說,XMeans給出的最佳分群數量就是6群。但是這樣子的分群結果不一定容易解釋,就看個人如何取捨了。

3 則留言:

  1. 將Weka的Cluster結果畫成表格的工具
    http://codepen.io/pulipuli/full/woXqOX/

    回覆刪除
  2. 將arff轉換成csv的工具
    http://codepen.io/pulipuli/full/gLJLPK/

    回覆刪除
  3. bmw-browsers_output.arff.csv
    https://docs.google.com/spreadsheets/d/1zvk1XCfKSkW5ZvMDQUX3aZq-w3zSVItBjWKxxPyjGxQ/edit?usp=sharing

    回覆刪除