透過機器學習預測「電信業」顧客流失率
 模型訓練與參數調整(附Python程式碼)

此為系列文第三篇文

點此回顧系列文第一篇-透過機器學習預測「電信業」顧客流失率 — 基礎概況分析(附Python程式碼)

點此回顧系列文第二篇-透過機器學習預測「電信業」顧客流失率 — 揭秘機器學習建模與不平衡資料集處理實戰(附Python程式碼)

情境

透過機器學習預測「電信業」顧客流失率 — 揭秘機器學習建模與不平衡資料集處理實戰(附Python程式碼) 」一文中,我們帶各位讀者做了資料前處理,以方便我們後續的模型訓練。此外,也帶大家做了資料切分,了解資料不平衡的問題並跟大家分享我們怎麼處理;最後也用羅吉斯迴歸建模,以驗證資料不平衡處理前後在準確度上有沒有差異。

本文章資料與程式碼可見本處。

接下來,我們將運用進階的資料處理技巧並進行不同模型的訓練,並在最後進行比較,流程如圖1所示。

我們將運用進階的資料處理技巧並進行不同模型的訓練,並在最後進行比較。機器學習流程圖。
圖一、流程圖

標準化

首先,先與大家分享為什麼要做標準化?因為在原始資料中,各個特徵的含意和單位都不一樣,所以每個特徵的值的範圍會差異很大。如果取值範圍相差過大,模型可能會更偏向取值範圍較大的那個特徵;解決辦法就是換成同樣的scale,我們稱之為標準化或正規化。以我們這次的例子來說,我們只選擇標準化「 總費用(total charge)」(如圖二),因為其值跟其他變數差異最大。如果讀者忘記其他變數的樣貌,可以到此系列文的第一篇閱讀原始資料的部分。

選擇標準化「 總費用(total charge)」
圖二、將總費用標準化

我們使用了五個模型(圖三),在本案例中,會發現有沒有標準化的結果在精準度、精確度相差不遠,大部分都是標準化過的資料會比較高,只有SVM標準化後的精確度和精準度都有下降,不過下降的幅度也不高。

我們使用了五個模型(圖三),在本案例中,會發現有沒有標準化的結果在精準度、精確度相差不遠,大部分都是標準化過的資料會比較高,只有SVM標準化後的精確度和精準度都有下降,不過下降的幅度也不高。
圖三、標準化資料之結果比較

模型訓練

接著要介紹我們本次所訓練的五個機器學習模型,包含:Logistic Regression、K-NN、SVM、Decision Tree、Random Forest,以利讀者能夠對模型概念有更深度的理解。

1. 羅吉斯迴歸(Logistic Regression)

當讀者看到這個名稱時大家不要被誤導了喔!羅吉斯迴歸因為有「迴歸」兩字,容易讓大家誤以為是一種線性迴歸,但其實它是一種二元分類方法,舉例來說可以區分為1與0。而在判斷二元分類時,最簡單的方式就是會將所得出之結果與0.5做比較,當數值大於0.5時就歸類為1,小於0.5時就歸類為0。

想要了解羅吉斯迴歸的數學運算過程可以參考李宏毅老師的 Youtube 影片:ML Lecture 5: Logistic Regression

以本文案例來說,假設我們有手上有2個客戶資料,像是性別、合約期限等等,我們想要知道他們會不會流失,因此將這些資料放入Logistic Regression模型當中去預測,如圖四所示,我們可以看到最後產出的結果,客戶A輸出的數值為0.8,表示客戶A有0.8的機率會流失,當機率大於0.5,會歸類為1,也因此客戶A會流失;而客戶B輸出的數值為0.3,表示客戶B有0.3的機率會流失,當機率小於0.5,會歸類為0,也就是客戶B不會流失。

假設我們有手上有2個客戶資料,像是性別、合約期限等等,我們想要知道他們會不會流失,因此將這些資料放入Logistic Regression模型當中去預測,如圖四所示
圖四、羅吉斯迴歸在本案例之應用

2. K-近鄰演算法(K-Nearest Neighbors, K-NN)

K-NN意思是K個最近的鄰居,簡單來說,就是物以類聚的概念。我們利用圖五帶給讀者一個情境來認識K-NN演算法。

有一天,傑森騎著他的小摩托不巧遇上一群飆車族械鬥,傑森無法逃開只能迎戰面對,但飆車族共有三群分別為紅衣黃衣藍衣騎士,傑森會透個以下四個步驟將K-NN應用在這場械鬥,選擇陣營。

  1. 首先,我們必須選擇K個最近的鄰居 ,傑森設定了7個( K=7 )。
  2. 接著,計算我們要分類的資料點與其他資料的歐幾里德距離,也就是在歐幾里德空間中兩個點的普通距離,所以傑森選了七個鄰居離他距離最近的騎士。
  3. 在這七個騎士(鄰居)中,我們計算每個類別的出現次數,傑森數到黃色衣服有四個,藍色衣服有兩個,紅色有一個。
  4. 最後,我們就把新的資料歸類在類別出現最多次的那個類別,所以傑森就換上了黃色外套。

其直覺思想與「近朱者赤,近墨者黑」有異曲同工之妙!如果你的鄰居10戶有8戶是有錢人,那你「十之八九也是有錢人」!

K-NN意思是K個最近的鄰居,簡單來說,就是物以類聚的概念。我們利用圖五帶給讀者一個情境來認識K-NN演算法。
圖五、K-NNU演算法直覺邏輯

3. 支持向量機 (Support Vector Machines , SVM )

SVM也稱為支持向量機,他的概念是當有一堆星星與球,我們要如何運用一根棍子就如何正確分類以下的物品,因此我們只要找到一個決策邊界(decision boundary)讓兩類之間的邊界(margins)最大化,也就是圖六中的間隔寬度越大,就可以使兩邊的物品完美的區隔開來。

SVM也稱為支持向量機,他的概念是當有一堆星星與球,我們要如何運用一根棍子就如何正確分類以下的物品,因此我們只要找到一個決策邊界(decision boundary)讓兩類之間的邊界(margins)最大化,也就是圖六中的間隔寬度越大,就可以使兩邊的物品完美的區隔開來。
圖六、 線性可分之支持向量機

支持向量機的作用,就是在大量且不明的情況,儘量將相同的資料,切分在一起,其中支持向量機又區分為「線性可分支持向量機」與「非線性可分支持向量機」,圖六以線性可分支持向量機做說明,我們可以想像成,藍色的星點和圓點是佈置在蛋糕上的草莓和水蜜桃丁, 從蛋糕上方俯瞰,蛋糕師傅碰巧將草莓和水蜜桃大致都排在一起,最直觀和簡單的切法,就是一切下去,即可變成兩種不同口味的蛋糕,這就是支持向量機的原理。讀者若想要更了解支持向量機的數學運算過程可以參考此篇文章:支持向量機(Support Vector Machine, SVM)

4.決策樹(Decision Tree , DT)

決策樹模型就像是一棵樹,由樹根、樹幹到樹葉組成。而每個節點的部分,都是一個特徵(Feature)。根據特徵一步又一步的細分。而這整棵樹所包含的決策流程,就是所謂的決策樹模型。而決策數如何運作呢?其實原理是很淺顯易懂的,我們可以將複雜的問題分為「是」與「否」,經過逐步拆解,就能將一個原本很複雜的事情,分解成很多的小問題,最終獲得解答。

圖七、決策樹圖示

更詳細的決策樹演算法可以參考這篇文章:「二十個問題」遊戲 — 透過決策樹分解複雜問題

5.隨機森林(Random Forest)

隨機森林其實就是一個包含多棵決策樹的模型,簡而言之,他的概念就是從一棵樹開始,然後建立了一顆又一顆其他的樹,變成一片森林;並在森林裡面建構一棵一棵各自獨立的決策樹,最後以投票的方式來決定最終的結果,讀者若想要更了解隨機森林運作模式可以參考此篇文章:眾志成城的演算法─隨機森林(Random Forest)

參數調整

1.為什麼要調整參數?

普遍來說,建置一個預測模型都是希望未來遇到一筆全新的資料時,可以得到準確的預測結果。參數調整即是一個可以提升模型預測成果的方法,透過調整模型的超參數(Hyperparameter),使模型的效能提升。簡單來說,就是希望能夠提升我們建置的模型在一筆陌生、全新的資料集上能夠與訓練資料上有相同的準確率,使我們的模型更加泛化(Generalization)。

2.參數調整方法

A. 照看法(Babysitting)

這是最簡單的調參策略,首先設計一組超參數,開始訓練模型,以調參者的主觀意見為準,決定當前的評估指標是否滿意,如果不滿意就依照自身的經驗查看數據或損失函數,繼續修改參數進行下一次的模型訓練,直到滿意為止。這個方法簡單易懂,看似技術門檻低,容易實現,不過缺點是高度依賴調參者的經驗

B.網格搜尋(Grid Search)

這是一種參數調整方法,將需要調整的參數進行排列組合,對每一種組合進行訓練並計算出模型評估的指標,找到最佳的參數組合。如圖八,以羅吉斯迴歸為例,若我們有三個參數想要進行調整,C、Solver 和 Class_weight,假設C的候選參數為1到10(含)的正整數,則我們有10*5*3=150 種參數組合。因此,在資料量龐大的情況下可能會花費較多時間,但優點是我們可以找出評估指標最好的參數組合。

圖八、本案例在羅吉斯迴歸中調整的參數

C.隨機搜尋(Random Search)

這個方法本質上與網格搜尋(Grid Search)類似,但執行起來比網格搜尋更有效率。隨機搜尋與網格搜尋的不同之處在於,隨機搜尋不會在所有的參數組合中搜尋,而是隨機在搜尋範圍中尋找樣本點,也就是說不需將參數的值離散化(如圖九),隨機搜尋會在更大的搜尋空間中,搜尋到最佳值,這也是他比網格搜尋更優秀的地方。但缺點在於,畢竟不是在所有的參數組合中搜索,所以可能損失一點的準確度;而優點是,訓練時間上可以大幅減少。

圖九、網格搜尋和隨機搜尋樣本取值之差異

如果想更近一步了解隨機搜尋,可以參考以下這篇論文中的說明:

Random Search for Hyper-Parameter Optimization

以上我們為讀者介紹了三種調整參數的方法,讀者在進行模型的調參時,可以依據資料多寡、時間成本或自身經驗來選擇合適的調參方法,以下(圖十)也為讀者整理這三種方法之間的優缺點比較,方便讀者自行選擇。

圖十、三種調參方法之比較

3.參數調整和交叉驗證

在機器學習中,我們建立模型的最終目的是要對一筆完全陌生的資料進行預測,而不是完全擬合訓練資料。所以一組參數的準確度只能說明這組參數在當前的訓練資料上與模型的匹配程度,並不能說明模型在遇到一筆新的資料時也可以有相同的預測能力。

因此,一般在進行參數調整時會適當的使用交叉驗證來證實模型的效能。在本篇案例中,我們使用Grid Search中的參數CV來設定驗證資料集的份數。(如圖十一)假設CV為3,我們將訓練資料分成三份,保留測試資料不使用,將其中兩份(CV-1)作為訓練資料,一份作為驗證資料,計算出Validation Error,直到三份(CV)都當過驗證資料,將這三次所得之Validation Error平均,作為判斷模型在該參數組合之下的好壞指標。

圖十一、交叉驗證圖示說明

4.參數調整步驟

參數調整可簡單分成四步(如圖十二)

  1. 選擇可能適合研究課題的模型,例如:Logistic Regression、Random Forest…等
  2. 尋找研究課題需要調整之參數,可能使模型準確度提升
  3. 使用 GridSearchCV 搭配交叉驗證進行訓練與評估,找出最適參數組合
  4. 利⽤該組參數建模,最後用測試資料集評估成果
圖十二、參數調整步驟

5.本案例的參數調整

在這次電信業的流失率案例中,我們選擇了三個模型來進行參數調整,分別為羅吉斯迴歸(圖十三)、K-NN(圖十四)與隨機森林(圖十五)。下面三張圖為各個模型中,我們調整的參數、該參數代表之意涵、參數可調整的數值範圍,與最後在該模型之下參數的最佳值。

圖十三、本案例在羅吉斯迴歸上的參數調整
圖十四、本案例在K-NN上的參數調整
圖十五、本案例在隨機森林上的參數調整

補充說明:由於執行文中的grid search花費時間甚鉅,所以本模型之參數設置之範圍間距較小,因而會與文章之結果有所迥異。

6.參數調整之結果呈現

由下圖可知(圖十六),經過參數調整後,三個模型的準確度都有提升,表示調整參數後的模型能夠更有效的預測未知的資料集。

圖十六、參數調整前後比較

我們將在下一篇,為各位讀者帶來運用機器學習模型之下和未運用模型之下的財務指標比較,敬請期待!

作者:林蔚恩(臺灣行銷研究特邀作者)、張家穎(臺灣行銷研究特邀作者)、徐佳靖(臺灣行銷研究特邀作者)、鍾皓軒(臺灣行銷研究創辦人)

參考資料:

[資料分析&機器學習] 第3.4講:支援向量機(Support Vector Machine)介紹

sklearn.model_selection.GridSearchCV — Scikit-learn

Grid SearchCV(網格搜尋)與RandomizedSearchCV (隨機搜尋)

Random Search for Hyper-Parameter Optimization

眾志成城的演算法─隨機森林(Random Forest)

「二十個問題」遊戲 — 透過決策樹分解複雜問題

支持向量機(Support Vector Machine, SVM)

ML Lecture 5: Logistic Regression

更多實戰案例及情境好文推薦

回到頂端