愛伊米

Python資料科學:決策樹

文章:法納斯特

決策樹呈樹形結構,是一種基本的迴歸和分類方法。

決策樹模型的優點在於可讀性強、分類速度快。

下面透過從「譯學館」搬運的兩個影片,來簡單瞭解下決策樹。

最後來實戰一波,建立一個簡單的決策樹模型。

1

決策樹演算法

本次主要涉及兩類決策樹,Quinlan系列決策樹和CART決策樹。

前者涉及的演算法包括ID3演算法、C4。5演算法及C5。0演算法,後者則是CART演算法。

前者一系列演算法的步驟總體可以概括為建樹和剪樹。

在建樹步驟中,首先選擇最有解釋力度的變數,接著對每個變數選擇最優的分割點進行剪樹。

剪樹,去掉決策樹中噪音或異常資料,在損失一定預測精度的情況下,能夠控制決策樹的複雜度,提高其泛化能力。

在剪樹步驟中,分為前剪枝和後剪枝。

前剪枝用於控制樹的生成規模,常用方法有控制決策樹最大深度、控制樹中父結點和子結點的最少樣本量或比例。

後剪枝用於刪除沒有意義的分組,常用方法有計算結點中目標變數預測精度或誤差、綜合考慮誤差與複雜度進行剪樹。

此外在ID3演算法中,使用資訊增益挑選最有解釋力度的變數。

其中資訊增益為資訊熵減去條件熵得到,增益越大,則變數的影響越大。

C4。5演算法則是使用資訊增益率作為變數篩選的指標。

CART演算法可用於分類或數值預測,使用基尼係數(gini)作為選擇最優分割變數的指標。

2

Python實現

慣例,繼續使用書中提供的資料。

一份汽車違約貸款資料集。

讀取資料,並對資料進行清洗處理。

接下來使用scikit-learn將資料集劃分為訓練集和測試集。

初始化一個決策樹模型,使用訓練集進行訓練。

採用基尼係數作為樹的生長依據,樹的最大深度為3,每一類標籤的權重一樣。

輸出的模型資訊如下。

對生成的決策樹模型進行評估。

輸出如下。

Python資料科學:決策樹

可以看出對因變數標籤進行權重設定後,模型對違約使用者的f1-score(精確率和召回率的調和平均數)提高了,為0。46。

違約使用者被識別的靈敏度也從0。24提高到了0。46。

此外決策樹模型的變數重要性排序為「FICO打分」、「信用卡授權額度」、「貸款金額/建議售價*100」。

透過安裝graphviz和相應的外掛,便能實現決策樹的視覺化輸出,具體安裝過程不細說。

視覺化結果如下。

Python資料科學:決策樹

可以看見決策樹根節點以fico_score

全體樣本的基尼係數為0。483,在3284個樣本中,被預測變數為0的有2671個,為1的有1839個。

使用scikit-learn提供的引數搜尋進行調優(GridSearchCV)。

輸出網格搜尋的決策樹模型資訊。

使用得到的“最優”模型對測試集進行評估。

輸出結果。

Python資料科學:決策樹

計算模型在不同閾值下的靈敏度和特異度指標,繪製ROC曲線。

ROC曲線圖如下,其中訓練集的ROC曲線(實線)與測試集的ROC曲線(虛線)很接近,說明模型沒有過擬合。

Python資料科學:決策樹

模型的ROC曲線下面積為0。7358,模型效果一般。