案例: Google Analytics 中的產品聚類分析
聚類分析是商業數據分析中最常用的一類分析技術了,無論是將你平台的活躍用戶分層區別經營,還是已上架商品進行歸類進行策略調整都非常適用。它的原理根據已有的數據樣本的訊息尋找相似的數據結構(距離相近),並將其歸為相似組的的過程。因為該數據樣本往往不具有特別明顯的目標特徵,所以聚類算法在機器學習領域中被稱為無監督學習。
0.確定目標
本次案例是根據Google Merchandise Store 8月產品銷售業績數據來為產品提供分析支持,對產品進行較為細緻的分類,並嘗試給出優化策略。

1.數據選取
網上下載數據集一般都有較好的分類特性,為了獲取到真實商品銷售數據的來源,我們使用Google Merchandise Store 8月的商品數據。那麼問題來了,怎麼獲取到這些數據呢?別著急Google 名下有一款網站行為監測工具,為了讓用戶更好體驗這款工具,Google 還非常貼心的給你一個網上商城的演示賬號,裡面的數據都是商城真實訪問的數據。其中“轉化”電子商務報告中提供了超過60類維度和指標,除了默認報告之外,你還可以根據實際業務自行提取對產品分類有用的指標和維度做成自定義報告。最後說一句,這款工具免費、支持中文。
演示賬號入口: 訪問演示帳號,需翻牆
在BI 界面中它長這樣

本次在GA 中選取的字段如下:

有人問,為什麼不用GA 中默認報告的數據,我會告訴你我用過,但因為指標具有多重共線性導致分類結果不佳麼?比如默認報告中“產品收入”、“銷售產品數量”、“唯一購買人數”這些維度具有相當大的正相關性,如果不經過處理直接餵給模型,很容易造成過擬合。
2.選取聚類方法
2.1K-means聚類
K-means 聚類算法是最經典的無監督聚類算法了,原理算是簡單,知乎上已經有很好的回答了,大家可以去找找,不過多贅述了。

算法優點:簡單——只需要設置一個簇點參數K;有效——對大型數據集有比較好的處理速度
要注意的坑:算法簡單帶來的就是聚類的不嚴謹性——K-means得到的聚類分組往往是局部最優解,最終聚類結果很大程度取決於初始隨機點的選取;不僅如此,K-means 是計算每個特徵之間的舉例,所以如果特徵為無序分類數據,那麼這個聚類結果就不會很準確了。如為流量來源數位化,baidu=1,google=2,sogou=3,問題在於你無法證明以上三個渠道來源誰優誰劣,數字的度量對他們沒有實際的意義。其他諸如對凸型數據處理較好,容易忽視小類別的點,對噪聲數據敏感等缺點
解決方案:局部最優解——多嘗試K 參數的選擇,多次測試看分類效果是否穩定;特徵中存在無序分類變量——去除該字段或者嘗試用其他有序變量去描述它(如從跳出率、訪問時長、轉化率來描述渠道的質量高低)
2.2層次聚類
層次也是我們最常用的一個聚類算法,分凝聚式層次聚類和分裂式層次聚類2種,這裡我們使用凝聚式層次聚類,用來處理和驗證K-means 聚類後關係的緊密性

優點:非常容易解釋,把圖放出來跟老總講講就明白了。
要注意的坑:因為算法的計算複雜度,所以不適宜用來處理大型數據。比如用來對大量用戶進行分類,會耗費很多時間,而且結果會異常繁複難以總結,故在此我們使用層次聚類驗證K-means 聚類後效果。
3.數據預處理

在數據開始處理之前,我們必須事先熟悉樣本數據集的特性,從上圖我們發現至少2個問題:
- 各個維度數據范圍不一致,必須事先對數據標準化:
由於K-means 是依靠樣本點之間的距離來進行分類的,所以必須進行數據標準化。如果不做標準化處理,那麼算法會傾向判斷數值較大的特徵(比如列表頁瀏覽次數),而對范圍變化較小的特徵視而不見(比如平均價格),這對數據聚類結果有較大影響。
- 篩選離群點:
熱銷字詞云的圖中,我們可以看到Foam Can and Bottle Cooler這款產品銷量很多,聚類分析對離群點比較敏感,因為如果不做任何處理按照普通樣本去聚合的話,會影響類別中心點的位置,所以在處理數據之前必須將離群點的數據剔除。

4.模型處理
比如上面這貨:當K=3時,該產品就被單獨區分為一種,下圖紅色的點

我們將這個商品剔除後,對剩餘產品做聚類分析,我們另K=7,得出維度-分類分類結果如下圖(縱坐標為類別組,橫坐標為維度):

4.1分析結論——K-means
上圖可以看出每類樣本點在不同維度分佈狀態,舉例來說,黑色類與青色類,在除product remove from cart之外所有維度均是相同分佈,其中黑色類剷平從購物車移除的次數明顯小於青色類。為了更詳細的區分各類的區別,我們可以查看7個分類的中心點(以下數據經過了逆標準化進行還原):

從上表中7個分類的中心點我們可以看出一些端倪:
- 分類cluster0-2、cluster5都是小樣本聚類,之所以能夠形成一類,是因為某類指標特別大:比如cluster_1和cluster_2的Quanaity(銷售數量)就比較大,cluster_5的Product list view(產品在列表頁被瀏覽的次數)就非常大。
- 因為是最初級的聚類算法,我們仍然可以看到不同類別存在一定的相似:比如cluster_1和cluster_2的區別在於cluster_2比Product remove from cart(產品被移出購物車的次數)幾乎是cluster_1的2.5倍。
- 分類後的樣本數量懸殊巨大,這固然反映了真實的銷售場景,同樣也可能受制於樣本的數量,本次只選取了時間窗口為8月的銷售數據,如果某些商品因為數據量太小,也可能導致該分類被併入了相鄰的大類當中。比如本季度暢銷T恤和即將來臨的秋季外套,算法會更偏向於T恤的分類。
5.一些改進
最後我們嘗試著將這些分類好的結果餵給層次分類算法,因為我們看看這分出的7個品類中,哪些特徵接近,又有什麼特點:

從上圖中我們又可以發現:
- 誒,你看cluster_4是最後合併的一類,那麼說明它離其他的點都非常遠。為什麼啊?其實我們回頭看看cluster_4的中心點,這類商品平均價格昂貴,看過詳情的人加入了購物車比其他類別高2~3倍,但是從購物車中刪除的比例也不低,這樣問題一分析是不是很清晰明了了?
- 也許有人會疑惑,cluster_3和cluster_6從中心點上來看,並非完全一致,為何會最先被聚合,這與距離算法有關係,因為相比其他分類來看,他倆的確是最接近的【捂臉】。
- 從層次聚類的縱坐標高度來看(兩分類結合的高度越高,差異度越高),其實cluster_3和cluster_6相似度也並非很高,也能佐證上一條觀點。從差異度來看cluster_0和cluster_1兩個分類與新結合的分類差異度較小,說明該分類可能位於先前N分類的中心位置
6.優化策略
最後是優化策略,給兩條最明顯的吧:
- 優化cluster_4和cluster_2的商品的購物流程,因為用戶不會無緣無故的添加購物車之後刪除它,除非購物流程出現問題或者網站引誘用戶誤點,亦或是關鍵訊息沒有一開始展示(比如,下單時才提示我所在的地區無貨)
- 對於cluster_5類的商品,它在列表頁獲得了遠多於其他類別商品的瀏覽(高7~8倍),但是帶來的銷售數量卻並非很高,考慮到該類商品平均價格也不是非常出眾,是否可以適當調整該商品的展示位置,把機會留給更會盈利的產品呢?
話說我為什麼要選真實數據來坑自己【捂臉】