【專題研究】基於隨機森林模型的智慧選股策略
隨機森林是當前使用最廣泛的機器學習整合演算法之一。由於其簡單靈活、不容易過擬合、準確率高的特性,隨機森林在很多應用中都體現了較好的效果。
本文從單棵決策樹講起,逐步解釋了隨機森林的工作原理,然後將隨機森林預測應用於二級市場,介紹了基於隨機森林模型的智慧選股策略。
什麼是隨機森林
隨機森林是一種
整合演算法
(Ensemble Learning),它屬於
Bagging
型別,透過組合多個弱學習器(決策樹),對弱學習器的結果投票或取均值得到整體模型的最終結果,使得整體模型的結果具有較高的精確度和泛化效能。其之可以取得不錯成績,主要歸功於“
隨機
”和“
森林
”,一個使它具有
抗過擬合能力
,一個使它
更加精準
。
隨機森林是多個決策樹的整合。所以理解隨機森林,首先要從理解決策樹開始。
決策樹
日常生活中,我們對於事物的認知都是基於特徵的判斷與分類,譬如透過胎生與否可判斷哺乳動物,根據肚臍尖圓來挑選螃蟹公母。決策樹就是採用這樣的思想,基於多個特徵進行分類決策。在樹的每個結點處,根據特徵的表現透過某種規則分裂出下一層的葉子節點,終端的葉子節點即為最終的分類結果。決策樹學習的關鍵是選擇最優劃分屬性。隨著逐層劃分,決策樹分支結點所包含的樣本類別會逐漸趨於一致,從而得到最終分類。
目前主流的決策樹演算法包括C4。5 和CART:C4。5 每個節點可分裂成多個子節點,不支援特徵的組合,只能用於分類問題;CART 每個節點只分裂成兩個子節點,支援特徵的組合,可用於分類和迴歸問題。而在隨機森林中,通常採用CART 演算法來選擇劃分屬性,所以以下主要介紹CART決策樹。
(1)決策樹如何分裂
答案是:基尼不純度(Gini Impurity)的最大減少。
那麼問題來了,什麼是基尼不純度?
節點的基尼不純度是指,根據節點中樣本的分佈對樣本分類時,從節點中**隨機選擇**的樣本被**分錯的機率**。因此,基尼不純度越小,樣本的純度越高。
假設有K 個類,樣本集D中的點屬於第k 類的機率為 ,其基尼不純度為:
根據特徵A 分裂為 1和 2兩不相交部分,則分裂後的
以Gini( , A)最小的特徵A 為劃分屬性,將訓練集依特徵分配到兩個子結點中去。
說白了,決策樹的分裂標準是:怎麼分能讓分類完的結果更
“純粹”
,就怎麼分。
(2)何時停止生長
從根節點開始,遞迴地在每個結點分裂時選取Gini( , A)最小的特徵A 為劃分屬性,將訓練集依特徵分配到兩個子結點中去。照此逐層劃分,直至結點中
樣本個數小於預定閾值
,或
樣本集的Gini 指數小於預定閾值
,或者
沒有更多特徵
,即停止生長,形成了一棵可進行分類預測的決策樹。
(3)決策樹的效果
很容易理解,如果決策樹一直分裂,終有一日可以將所有的訓練樣本精確分類,但是這也會造成
過擬合
。
為了解決決策樹的致命問題“過擬合”,隨機森林閃亮登場。
隨機:Bagging
Bagging 是一種並行的整合學習的方法。基於“自助取樣法”(bootstrap sampling),主要關注降低方差,因此它在容易受到樣本擾動的學習器(如不剪枝的決策樹)中效果明顯。
Bootstrap 就是從訓練集裡面有放回地採集固定個數的樣本,形成對於每一個弱學習器的樣本集。也就是說,被採集過的樣本在放回後有可能不止一次被採集到。
Bagging 演算法中,對有m 個樣本訓練集做T 次的隨機取樣,則由於隨機性,一般來說T 個取樣集各不相同。正是由於Bagging 每次利用不同取樣集來訓練模型,故其
泛化能力較強
,有助於降低模型的方差。但是不可避免地其對訓練集的擬合程度就會差一些,即增大了模型的偏倚。這時,為了避免可能的過大的偏倚,我們需要將樹組合成森林。
森林:更精確
俗話說“三個臭皮匠頂個諸葛亮”,隨機森林就是典型的“
三個臭皮匠
”。
每個樹的預測結果可能都不盡如人意,但是如果有多個樹,讓這些樹
投票
選出最有可能的
分類
結果或者對於所有樹的結果
取均值
得到
迴歸
結果,那麼森林的預測就會更準確。
隨機森林的關鍵引數
n_estimators (int)
– 樹的個數,個數越多,則模型越複雜,計算速度越慢。
max_features (str)
– 最多考慮特徵個數,新建節點時,最多考慮的特徵個數。
max_depth (int)
– 每棵樹的最大深度,數值大擬合能力強,數值小泛化能力強。
min_samples_leaf (int)
– 每個葉子節點最少樣本數,數值大泛化能力強,數值小擬合能力強。
n_jobs (int)
– 並行度,同時使用多少個程序進行計算,最多是4。
模型評價
(1)特徵重要性
隨機森林模型可以在預測的同時透過特徵劃分過程來計算評估各個因子特徵的重要性。特徵影響力的計算需要藉助於結點分裂時Gini 指數,方法如下:
其中, ( )表示結點i 根據特徵A 分裂為兩個子結點後,Gini 指數相對於母結點分裂前的下降值。故而可定義特徵A 的絕對重要性 ( )為所有按特徵A 分裂的結點處的 ( )之和。將所有特徵的絕對重要性歸一化,即可得到各個特徵的重要性評分
(2)模型評價
a. 迴歸模型
可解釋方差 EVS:
可以被解釋的方差,越接近1越好
均絕對誤差 MAE:
預測值和真實值的差值。數值越小越好
均方誤差 MSE:
預測值和實際值的平方誤差。數值越小越好
均方對數誤差 lnMSE:
取對數後預測值和實際值的平方誤差。當目標具有指數增長的目標時,最適合使用這一指標
中位數絕對誤差 median absolute error:
取目標和預測之間的所有絕對差值的中值來計算損失
確定係數(r^2) r2:
預測模型和真實資料的擬合程度,最佳值為1,同時可為負值
b. 分類模型
準確率 accuracy
:預測正確的的資料佔所有資料的比例
精確率 precision:
預測正確的正例資料佔預測為正例資料的比例
召回率 recall:
預測為正例的資料佔實際為正例資料的比例
F1分 f1 score:
綜合指標。F值 = 正確率 * 召回率 * 2 / (正確率 + 召回率)
隨機森林智慧選股
如圖5所示,隨機森林的策略構建包含下列步驟:
獲取資料:
A股所有股票。
特徵和標籤提取:
計算18個因子作為樣本特徵;計算未來5日的個股收益作為樣本的標籤。
特徵預處理:
進行缺失值處理。
模型訓練與預測:
使用隨機森林模型進行訓練和預測。
策略回測:
利用2010到2017年資料進行訓練,預測2017到2019年的股票表現。每日買入預測排名最靠前的5只股票,至少持有五日,同時淘汰排名靠後的股票。具體而言,預測排名越靠前,分配到的資金越多且最大資金佔用比例不超過20%;初始5日平均分配資金,之後,儘量使用剩餘資金(這裡設定最多用等量的1。5倍)。
模型評價:
檢視特徵重要性和模型迴歸結果。
回測結果如下:
從回測結果可以看出,由於市場本身問題,隨機森林策略在2017-2018年的表現並不很好,但是當市場風格趨於一致時,隨機森林策略表現出了不錯的選股效果。
隨機森林模型可以按照重要性輸出特徵,有助於我們分析哪些因素對於預測的幫助更大,從而最佳化模型。使用特徵重要性如下:
下面進行模型評價。訓練集和預測集上的情況分別如下:
可以看到,模型的整體誤差和擬合程度還有進一步最佳化的空間,此策略僅拋磚引玉,歡迎繼續探索。
實現平臺:BigQuant—人工智慧量化投資平臺
原始碼地址:《隨機森林模型的智慧選股策略》
參考文獻:
華泰證券《人工智慧選股之隨機森林模型》
《【金融機器學習】隨機森林演算法及使用Notes》
《一文讀懂隨機森林的解釋和實現》
更多機器學習與量化投資知識盡在BigQuant社群:AI量化投資社群 - BigQuant