一、決策樹原理說明

日常生活中,我們對於事物的認知都是基於特徵的判斷與分類,例如,我們要判斷一個西瓜是不是好西瓜,通常會進行一系列的判斷,如先看它是什麼顏色,它敲起來是什麼聲音。決策樹就是採用這樣的思想進行甄別。

當有一堆西瓜混在一起,我們要進行好瓜壞瓜區分,就要基於多個特徵進行分類決策,過程如下圖所示:

這個過程確實就像一棵倒置的樹。

  • 節點:能夠進行分叉的結點(圖中方塊)
  • 葉子節點:沒有進行分叉的結點(圖中橢圓)

在決策樹的每個結點處,根據特徵的表現通過某種規則分裂出下一層的葉子節點,終端的葉子節點即為最終的分類結果。也就是說,我們通過一個又一個條件判斷,不斷的對這堆西瓜進行劃分,最終給出好瓜壞瓜的結論。決策樹學習的關鍵就是選擇最優劃分屬性。隨著逐層劃分,決策樹分支結點所包含的樣本類別會逐漸趨於一致,決策樹演算法追求的目標,就是尋找最有效的特徵進行劃分,即節點分裂時要使得節點分裂後的信息增益(Information Gain)最大,這裡列出決策樹中判斷信息量增減的方法,信息熵(Entropy)基尼係數(Gini)的計算公式。

t 代表給定的節點

i 代表標籤的任意分類,p(i|t)p(i|t) 代表標籤分類 i 在節點 t 上所佔的比例。

這兩個公式就是衡量信息不純度的指標,可以用來衡量每次決策前後,信息混程度變化的情況。

好了,經過這兩個公式和熵、基尼係數、信息增益的概念引入,已經讓本篇內容不夠親切了,而且,我們在使用這些機器學習演算法的時候,可以進行參數設置,並不能改寫演算法干預演算法內部的邏輯,所以,關於更多原理內容,大家可以參考其他學習資料進行學習,比如周志華《機器學習》等。

接下來我們從應用的層面進行探索。

二、決策樹建立方法

機器學習有一套固定的建模流程方法, sklearn 的基本建模流程如下:

在這個流程下,我們分類樹對應的代碼是

from sklearn import tree #導入需要的模塊
clf = tree.DecisionTreeClassifier() #實例化
clf = clf.fit(x_train,y_train) #用訓練集數據訓練模型
result = clf.score(x_test,y_test) #測試集測試打分

這裡我們發現,其實我們在使用機器學習方法的時候,需要使用的代碼是非常少的,複雜的演算法已經是封裝好了的內容。

三、因子數據獲取

有了上面的通用建模流程,這裡首先進行因子數據獲取,我們參考華泰證券《人工智慧選股之隨機森林模型》研報思路流程。

進行特徵和標籤提取,特徵數據即為因子數據,標籤即為收益情況。

本篇研究內容中,我們先獲取了過去 5 年每個月月初截面期的 47 個因子數據(這裡因子數據計算參考 西安交大元老師量化小組 的機器學習的因子計算內容),按獲取因子數據的日曆列表,進行空值和行業市值中性化處理,並將下期的股票收益也計算得出並加其中。

四、標籤設置

第 T 期因子值和 T+1 期的收益均已計算加入數據表中,接下來我們給數據打標籤,希望從給定訓練數據集學得一個模型用以對新示例進行預測。

這裡我們想嘗試採用兩種方式,以分類和回歸方法分別進行學習並檢查效果,兩種方式都有具體操作代碼示例。

五、模型擬合,得分檢查

這裡注意一下,我們直觀理解,進行分類的情景多為離散的數值,如判斷西瓜好壞的例子中,西瓜紋理是模糊的還是清晰的,就是對樣本的離散特徵描述。然而一般情況下,我們的樣本特徵是離散特徵,與連續特徵並存的。

決策樹裡面在進行連續值處理時採用二分法,即通過某個值將連續值集合劃分為兩個子集。即可延續離散值的劃分方法。

我們這裡的 y,是股票漲跌幅,是個連續值,所以首先想到的是用決策樹回歸的方法進行模型擬合。

這裡我們對 score 進行說明,在回歸模型中,這個 score 返回的是 R 平方,其中

u 是殘差平方和(MSE * N)

v 是總平方和,N 是樣本數量

i 是每一個數據樣本

fi 是模型回歸出的數值

yi 是樣本點i實際的數值標籤

y 帽是真實數值標籤的平均數

R 平方可以為正為負,如果模型的殘差平方和遠遠大於模型的總平方和,模型非常糟糕,R 平方就會為負,我們進行了回歸模型的嘗試,目前來看,擬合得分結果就非常不理想。

基於這種情況,接著我們用構造分類的模型進行擬合,對於股票漲跌幅超過基準則標籤記為 1,小於基準則標籤記為 0,對標籤 y 進行構造,重新構建測試集與訓練集合,進行的模擬擬合得分為 54.7%,也就是預測的準確率為 54.7%(到這裡,內心已經蠻崩潰的,這個正確率和隨機能有多少差別,看到《人工智慧選股之隨機森林模型》中模型的預測得分是在 55~60%之間,有點釋懷了)

六、調優說明

「剪枝是決策樹學習演算法對付『過擬合』的主要手段,在決策樹學習中,為了儘可能正確分類訓練樣本,結果劃分過程將不斷重複,有時會造成決策樹分支過多,這時就可能因為訓練樣本學得太好了,以致於把訓練集自身的一些特點當做所有數據都具有的一般性質而導致過擬合,因此,可通過主動去掉一些分支來降低過擬合的風險」,這段描述來自《機器學習》決策樹部分剪枝處理。

過擬合造成的結果就是,模型會在訓練集上表現很好,在測試集上卻表現糟糕,為了讓決策樹有更好的泛化性,需要對決策樹進行剪枝處理。

可用於剪枝的參數

進行剪枝參數調整,參數優化。

我們發現,模型可以進行設置的參數並不少,這裡,就可以採取如同策略回測中用到的參數調優方法,以不同參數為橫軸坐標,模型得分為縱軸指標,展示不同參數下模型的學習效果,得到的就是超參數學習曲線。

回歸模式中,我們看到,模型測試集得分從一開始就沒有到 0 軸以上,這顯示是一個很糟糕的結果,訓練集本身的擬合效果隨著樹的最大深度增加,不斷的逼近 1。

分類模式中,我們看到,模型測試集得分一開始在 55%左右,在不斷增加最大深度後,測試集得分不斷下降,靠近 50%,訓練集部分過擬合,不斷靠近 1。

目前,暫時只進行了最大深度的參數效果檢查,其他參數效果可以在提供的研究代碼上進行設置檢查。

七、特徵重要性說明

擬合出的模型,有很多屬性和方法(我們可以在擬合的模型後面加一個點然後 tab 鍵就可以顯示)。

對決策樹來說,它的工作原理就是基於特徵對模型進行劃分的過程,下面展示在我們給的數據集中一棵深度為 3 的分類樹。

這就是白盒模型的優勢所在,能夠追溯整個決策過程,除了能夠圖形化展示決策過程,決策樹可以對各個特徵對模型的重要性進行查看,這個方法,可以直接用於檢查股票因子模型中各因子在收益中的重要性佔比了,非常實用,屬性方法是 featureimportances,可以在代碼中看到。

這裡我們取一棵決策樹,調用這個方法,並展示這棵樹在進行決策分類時的因子重要性情況。

我們獲取該因子決策樹中特徵重要性數據,與特徵標籤匹配後用條形統計圖展示。

八、後續

相比其他複雜的機器學習演算法,決策樹模型易於理解與解釋,而且支持處理分類和回歸兩種變數,屬於白盒模型,能夠獲取到特徵在參與決策過程中的重要性數據,作為複雜一些集成學習演算法中的基學習器,還是很有必要進行進一步的探索研究的。

我們會繼續進行決策樹在多因子模型應用探索,並且根據擬合模型做收益預測構建策略。

點擊【閱讀原文】,查看完整研究源碼~


推薦閱讀:
相关文章