【量化課堂】決策樹入門及Python應用

2021-02-19 聚寬量化實驗室

決策樹是一種非參的監督性機器學習方法。它可以用來做分類判斷回歸預測。決策樹的基本原理是通過學習現有數據的特徵,得到簡單的決策規律,再根據這些決策規律對目標進行判斷。

一、決策樹的概念

決策樹是在已知各種情況發生概率的基礎上,通過構成決策樹來判斷下一預測點,判斷其是否會發生的分析方法,是直觀運用概率分析的一種圖解法。由於這種決策樹分支的圖形很像樹的枝幹,故稱決策樹。下面是一個決策樹的例子:

在上面例子中我們需要對新的兔子進行判斷,根據這一問題建立一棵決策樹,上圖也展示了決策樹的組成部分:根節點,分支和葉子。首先上述決策樹的根節點是「毛色」,在這一基礎上延伸出兩個分支「黑褐色」和「白色」,倘若為黑褐色,進入葉子得到結論這是一隻「中國白兔;倘若為「白色」則進入下一個節點判斷,一直到沒有節點的葉子為止。對於一隻40釐米的白色成年兔子,首先判斷其毛色為白色,進入長度節點,然後長度大於30cm,基於此我們可判斷這隻成年兔子為紐西蘭兔。

決策樹本質上是基於過去的特徵信息對過去目標結論的判斷的總結,運用於金融預測領域直觀的解釋就是:由於這件事在過去相同特徵的環境下大概率發生,所以此時這件事也很可能會發生,及「歷史總是驚人的相似」。決策樹在機器學習領域的應用在於可以把人從浩如煙海的數據中解放出來,讓計算機去尋找數據之間的內在規律用於下一步研究,也可以直接使用決策樹的結論進行判斷,但不需要可視化的情況下目前更多的會去選擇Randomforest,Boosting等決策樹的改進。決策樹基於的假設較少,適用於大部分情況。

但其缺點也很明顯:
1、精度較低
2、他每次只會根據單一特徵劃分數據,不會根據數據組合切分。如下圖, 他只會根據年齡或經驗區分數據,但當兩者有聯繫時,決策樹只會用多次切分擬合這一情況。

3、受誤差值影響較大



二、決策樹的生成過程

了解了決策樹的原理,那如何根據問題生成決策樹呢?我們知道決策樹是由根節點,分叉,葉組成的,決策樹的生成就是尋找根節點、節點和如何生成分叉了。決策樹生成的核心思想就是找出更加純淨的子集,最好每個子集裡都是結論極其單一的數據。判斷純度的方法不同決策樹的生成也不同,常用的判斷方法有:

1、ID3算法使用信息增益作純度判斷;

2、C4.5算法使用信息增益率作純度判斷;

3、CART算法使用基尼係數作純度判斷。

決策樹生成過程:

1、尋找最適合分割的特徵

2、根據純度判斷方法,尋找最優的分割點,基於這一特徵把數據分割成純度更高的兩部分數據

3、判斷是否達到要求,若未達到,重複步驟一繼續分割,直到達到要求停止為止。

4、剪枝,防止過擬合。

純度判斷和過擬合的具體做法在下面兩部分講到


數據純淨度的判別

決策樹生成時,我們希望每個分支的數據儘量屬於同一類別,也就是尋找純淨的分類,判斷數據純淨程度的方法也決定了我們如何生成分支,目前主流的方法包括ID3,C4.5和CART三種。

在介紹這三種方法之前先簡單介紹信息熵:


信息熵:

熵是衡量系統混亂程度的一個指標,熵值越大表示對應的系統越混亂,決策樹中引入信息熵的概念來衡量數據的純淨程度。假定目標集合S中有n種樣本,第k種樣本所佔比例為pk(k=1,2,3,…,n),則S的信息熵為:


ID3算法:

ID3算法用信息增益來衡量混亂程度

信息增益:

Gain(k)=分裂前目標變量的信息熵-對特徵值k分裂後的目標變量信息熵
若總數據量為D,分裂後數據成為有M個葉節點的分叉樹,那麼Gain(k)為

分叉點的選擇:遍歷全部現有可能分叉點,選擇信息增益最大的分叉點建立新的分叉。

停止分裂的條件:
1,節點中全部樣本的目標變量同屬於一個類別
2,如果分叉後的樣本數目小於給定的閥值,也停止進行分叉。

葉節點的屬性:選擇葉節點裡數量最多的類別作為葉節點的類別


C4.5算法:

C4.5算法用信息增益率來衡量混亂程度

信息增益率: Gain_ratio(k)=信息增益率/被選分叉點本來的熵

其中,

Ent(Dk)和Ent(S)的區別是:一個計算的是總集合S的熵,一個計算的是總集合S中節點k的熵。

分叉點的選擇:遍歷全部現有可能分叉點,選擇信息增益率最大的分叉點建立新的分叉。

停止分裂的條件:
1 節點中全部樣本的目標變量同屬於一個類別
2 如果分叉後的樣本數目小於給定的閥值,也停止進行分叉。

葉節點的屬性:選擇葉節點裡數量最多的類別作為葉節點的類別

特徵:比起ID3算法來,C4.5更傾向於選擇區直更少的特徵值分叉。


CART算法:

CART算法用基尼指數來衡量數據集混亂程度

基尼值:

基尼值(S)指的是從數據S中隨機取兩個不同類別值的概率,因此Gini值越大意味著數據越混亂。
若總數據量為D,分裂後數據成為有M個葉節點的分叉樹,那麼Gini_index(k)為

基尼指數:

分叉點的選擇:遍歷全部現有可能分叉點,選擇基尼指數最小的分叉點建立新的分叉。

停止分裂的條件:
1,決策樹到達最大深度
2,分叉節點的樣本數小於閥值
3,分叉的葉內的樣本數小於閥值

葉節點的屬性:選擇葉節點裡數量最多的類別作為葉節點的類別

過擬合處理

在決策樹學習過程中,因為隨著子集樣本越小,混亂程度必然下降,這意味著決策樹分叉總是向著過擬合的方向。為了降低過擬合風險,需要主動去除一些分類效果不明顯的分叉來防止過擬合,這一過程被稱為剪枝。
剪枝主要有兩種方法:預剪枝和後剪枝

預剪枝:
預剪枝是在生成決策樹過程中,對節點劃分先進性預估,若節點分叉不能使決策樹得到泛化提升,則停止分叉生成葉。代表算法是悲觀錯誤剪枝法PEP(Pesimistic-Error Pruning)

後剪枝:
後剪枝是生成一顆完整的決策樹後,自下而上對每個葉片和節點進行評估,若減少分叉可以使決策樹得到泛化提升,則轉化分叉為一個葉。代表算法有錯誤率降低剪枝REP(Reduced-Error Pruning),代價複雜度剪枝CCP(Cost-Complexity Pruning)

三、決策樹的Python代碼實現

決策樹在實際中一般有兩個用處:

1、直接用於預測。

2、藉助決策樹的實現圖形尋找規律。
第一種很好理解,和大多數模型一樣,建立模型預測。
第二種的實現是基於決策樹的原理與人類思考接近。決策樹的實現過程本來就是純化子集的過程,生成決策樹後,他的每一個葉子都應該是比較純淨的,及它可以找到在某些特徵條件下結論較為一致的情境。研究者可以根據決策樹找到的一些純淨度比較高的情境,省去大量找規律的時間。


1、學習

首先我們使用機器學習庫sklearn中的數據來介紹決策樹的主要功能。

首先導入必要的包和數據,在這我們以預測第111個數據作為例子

查看用作例子的數據的各個特徵值,將其特徵值帶入建立好的決策樹預測,可以看到結果與真實值相同。

predict_proba可以用來觀察決策樹判斷的依據。決策樹的結論是: 這一數據屬於0,1,2的概率分別為0,0.22,0.978,選取最大概率,這一數據被認為屬於第2類。

featureimpertances可以用來查看各個因子的重要性。顯示因子4重要性佔所有因子的100%,整個決策樹完全依賴於因子4。

畫出決策樹,有兩個節點3片葉子,葉子的純度都比較高,都大於90%。


2、實驗

接下來舉個簡單的例子展示決策樹在實際股市分析預測中的運用。
已下是一個使用決策樹預測HS300漲跌測試函數,用市場平均的:

PCF,turnover_ratio,PE_rate,PB_rate,PS_rate,

以及宏觀數據:

pmi,pmi_rate,leading_idx_rate,M1_rate,M2_rate,CPI_rate,GDP_rate,LOAN6MONTH,LARGEFINANCIAL,SMALLFINANCIAL,dcg,URUR

這些數據使用決策樹算法對HS300的漲跌進行預測,預測結果有四種,分別是:『下跌大於5%』,『下跌介於5%與0%之間』,『上漲介於0%和5%』,『上漲大於5%』,。數據取了2005年5月到2017年11月的全部月數據,以其中70%做訓練,以30%數據做測試,所有宏觀數據都根據發布時間取了滯後兩個月或者一個季度的數據來做預測,以確保實際中可以取到這些值。

以上是決策樹建立的代碼,我們用CART的方法用『gini值』確定葉數據純度,並要求節點最少應該有10個數據,每片葉最少有5個數據。
決策樹模型的主要參數有:
criterion: 決定判斷節點純度的方法。目前sklearn支持」gini」和」entropy」兩種,分別對應用基尼指數和信息增益的CART和ID3兩種算法,默認算法是「gini」。
max_depth: 最大樹深度,達到最大數深度即停止分叉,最常用的約束,默認值為None
spliter: 決定如何分叉每個節點。目前sklearn支持「best」和「random」兩種,指的是選取特徵的最優分叉點分叉還是隨機分叉點分叉,默認值是「best」
max_features: 使用特徵值的最大數量,默認為None
max_leaf_nodes: 葉節點的數量,默認值為None
min_impurity_split: 最小純度門檻,假如純度小於最小純度,則會繼續切分,默認值為None
min_samples_leaf: 最小葉數據,達到則不再分叉,默認值為1
min_samples_split: 最小節點數據,達到則不再分叉,默認值是2 

決策樹的參數一般依情況而定,可以根據需要不斷調整。也可以用sklearn的包GridSearchCV用cross validation的方法暴力遍歷指定範圍參數確定結果。調參在其他機器學習方法如神經網絡模型中也是核心問題,一般是使用者的經驗加計算機嘗試不同的值得到一個相對較好的結果。對於決策樹,初學者一般限定樹深度即可,其他設置可使用默認參數。

接下來即可使用決策樹進行預測

上述代碼即可使用計算機自動生成的決策樹圖解,其葉片都是比較純淨的子集,可以幫助研究者篩選規律。

以上是決策樹的整個圖解,挖掘到了一些特徵,例如最右邊的葉表示當市場平均的'PB_rate'<=-0.01, 『PS_rate』<=0.05時,歷史上6次這種情況下HS300都發生大跌。

這是取2005年5月到2017年11月全部數據後,取70%做訓練集,30%做測試驗證結果,得到的精度統計,表格如下所示:

精度很差,只是略高於一半而已。簡單的決策樹過於基礎,識別能力有限,用於預測股市顯然很一般。

不過決策樹是很多機器學習方法的基石,其改進模型往往會有較好表現。此外決策樹便於可視化,他的產生的分布圖可以用於數據研究,例如決策樹的每一片頁都是相對比較純淨的數據集,使用者可以抽出一些純度比較高的葉來研究為何在訓練集中這些葉上的數據集純度較高,從而發現新規律。

四、補充和擴展

寫在最後:
決策樹由於理論簡單,易於理解,在數據可視化,利用計算機尋找數據規律中有不小的作用。但其模型過於簡單,對於複雜的模型一般來說只是優於線性模型而已,對比其他算法並沒有太大優勢,其簡單的結構也不能充分利用目前強大的計算機計算能力,已經不怎麼活躍了。但是作為極易可視化,邏輯清晰的一種白盒算法,其不僅活躍於數據研究,而且也是其他高級算法的基石。決策樹的兩個主要改進方向是Randomforest 和 boosting,都在機器學習中有舉足輕重的地位。

- 聚寬精選 -

【量化課堂】隨機森林入門

商品期貨策略——BOLL信帶突破策略

商品期貨策略——海龜交易法

【聚寬精選】持續更新,敬請期待


長按二維碼,關注聚寬精選

相關焦點

  • python分類-決策樹
    嘿嘿,這禮拜隨便研究了個入門的知識點,python決策樹。這次學會的只是一個入門級別的python決策樹案例,還是給大家分享下吧。
  • 大學生如何入門Python量化金融?
    由於本人是24K純金融學專業背景,所以就跟大家分享一下,作為一個零編程基礎的金融學子,是如何入門量化金融的。一、量化工具01.程式語言:Python工欲善其事,必先利其器。想要入門量化,學會一門程式語言是必不可少的。
  • 量化交易工程師,帶你學習量化交易入門!量化交易環境Python安裝
    從最開始的海龜交易法則,到人工智慧深度學習的量化交易能力不斷創新。可能很多人不信,說量化交易不可能穩定盈利,它只是一個口號,一個炒作。可是,正如機器人阿爾法狗已經打敗人腦,徹底改變歷史長河中機器人在圍棋上已經無法戰勝人類的事實。量化交易取代人工交易,成為一個成熟的頂尖的交易思維方法系統還有什麼不可能呢?
  • 用Python構建和可視化決策樹
    你根本不需要熟悉機器學習技術就可以理解決策樹在做什麼。決策樹圖很容易解釋。利弊決策樹方法的優點是:決策樹方法的缺點是:決策樹的訓練在計算上可能很昂貴。生成決策樹的過程在計算上非常昂貴。在每個節點上,每個候選拆分欄位都必須進行排序,才能找到其最佳拆分。在某些算法中,使用欄位組合,必須搜索最佳組合權重。剪枝算法也可能是昂貴的,因為許多候選子樹必須形成和比較。
  • 決策樹可視化-python
    決策樹相較於其他機器學習模型具有較好的解釋性,也容易將其結果進行可視化展示,python中sklearn.tree的export_graphviz函數可以將決策樹結果以doc或dot文件的形式輸出,然後將決策樹結果可視化,下面舉個簡單例子。
  • Python視頻教程網課編程零基礎入門數據分析網絡爬蟲全套Python...
    特徵變換-正規化 5-11特徵降維-LDA 5-12特徵衍生 5-13HR表的特徵預處理 5-14 HR表的特徵預處理2 5-15本章小結 6-01機器學習與數據建模 6-02訓練集,驗證集,測試集 6-03分類-KNN 6-04分類-樸素貝葉斯 6-05分類-決策樹
  • 量化投資入門之工具篇
    為了方便大家系統的學習,我們特意將量化投資入門相關內容進行了整理歸類。之前我們為大家整理了入門需要學習的知識,學了那麼多久該實踐了,今天就來理理量化投資過程中可能用到的工具/平臺,希望對大家有所幫助。我們在剛量化入門的時候都會遇到一些實際的問題,比如說就是我突然有了個想法,但是我要用什麼實現呢,要怎麼實現呢,數據哪裡來呢,回測怎麼做呢等等。
  • 決策樹
    決策樹簡介3.   構造決策樹的基本算法4.   決策樹的應用一、前言機器學習中分類和預測算法的評估:1.準確率:    算法達到的準確率是多少?2.速度    算法的速度怎麼樣?算法複雜度高不高?(3)剪枝函數決策樹生成算法得到的樹對訓練數據的分類很準確,但對未知數據的分類卻沒那麼準確,容易過擬合;因為決策樹考慮的特徵太多,構建得太複雜。 所以我們需要對決策樹進行剪枝:從已生成的樹上裁掉一些子樹或葉節點,並將其根節點或父節點作為新的葉節點,以此簡化樹。剪枝算法很多,這裡引入一種簡單的:極小化決策樹整體的損失函數。
  • 從零開始學量化(一):量化如何入門
    之前經常有童鞋在後臺/群裡問量化如何入門這個問題,這種問題一般都是沒有人回答的,因為這是一個到處都可以找得到答案的問題,所以也推薦大家
  • 在職金融小白自學python做量化投資能行嘛?
    由於本人是24K純金融學專業背景,所以就跟大家分享一下,作為一個零編程基礎的金融小白,是如何入門量化金融的。一、量化工具01程式語言:Python工欲善其事,必先利其器。想要入門量化,學會一門程式語言是必不可少的。對於量化金融來說,主流的程式語言有Python、MATLAB、Java、C++等。
  • 機器學習入門之決策樹1
    決策樹基本流程¶決策樹(Decision Tree)是一類常見的機器學習算法,其基本流程圖遵循簡單且直觀的 D&C策略。下面以西瓜問題來展示決策樹基本流程:西瓜屬性包含:[色澤, 根蒂, 敲聲]我們可能首先看「它是什麼顏色的?」,如果是「青綠色」「它的根蒂是什麼形態?」
  • Python手寫決策樹並應對過度擬合問題
    它使用樹結構,其中包含兩種類型的節點:決策節點和葉節點。決策節點通過在要素上詢問布爾值將數據分為兩個分支。葉節點代表一個類。訓練過程是關於在具有特定特徵的特定特徵中找到「最佳」分割。預測過程是通過沿著路徑的每個決策節點回答問題來從根到達葉節點。基尼不純度和熵術語「最佳」拆分是指拆分之後,兩個分支比任何其他可能的拆分更「有序」。
  • 量化交易之《Python數據分析》
    API,所以運算速度格外快3 與python標準的列表相比,Numpy數組使用的切片和索引方法更加高效。把Python的類映射為資料庫的數據表,需要使用SQLAlchemy應用程式接口來跟資料庫打交道,而非使用SQL命令。Pony ORM用純python編寫的ORM,能自動進行查詢優化,提供了一個圖形用戶界面的資料庫模式編輯器,支持自動事務處理,自動緩存,組合關鍵字。
  • python量化投資(一):量化投資的基本流程
    本文將會講解量化投資過程中的基本流程,量化投資無非這幾個流程:數據輸入-策略書寫-回測輸出其中策略書寫部分還涉及到程式語言的選擇,如果不想苦惱數據輸入和回測輸出的話,還要選擇回測平臺。筆者一開始用的是matlab,但最終選擇了pythonpython:庫很多,只有你找不到的,沒有你想不到,和量化這塊結合比較緊密的有:Numpy&Scipy:科學計算庫,矩陣計算Pandas:金融數據分析神器,原AQR資本員工寫的一個庫,處理時間序列的標配pandas_datareader:國外股票宏觀數據接口Matplotlib
  • 大學生金融小白自學Python做量化投資需要注意哪些?
    由於是24K純金融學專業背景,所以金程AQF小編就跟大家分享一下,作為一個零編程基礎的金融小白,是如何入門量化金融的。一、量化工具1、程式語言Python工欲善其事,必先利其器。想要入門量化,學會一門程式語言是必不可少的。對於量化金融來說,主流的程式語言有Python、MATLAB、Java、C++等。
  • 量化投資-為什麼選擇Python?
    而Python在量化投資領域的地位,猶如Java在IT行業的地位一般。為什麼量化投資要選擇Python?全球star數排名前十的量化投資開源項目裡,有7個使用的Python作為底層代碼。全球註冊用戶最多的商用量化平臺Uqer優礦,是基於Python實現功能提供服務的。國內主要量化平臺,如RiceQuant和JoinQuant,也是使用Python。
  • 隨機森林算法入門(Python)
    昨天收到yhat推送了一篇介紹隨機森林算法的郵件,感覺作為介紹和入門不錯,就順手把它翻譯一下。目錄1.1 集成學習1.2 隨機決策樹1.3 隨機森林1.4 投票前言: 隨機森林是一個非常靈活的機器學習方法,從市場營銷到醫療保險有著眾多的應用。它可以用於市場營銷對客戶獲取和存留建模或預測病人的疾病風險和易感性。
  • python入門
    --Yves Hilpisch 《Python for Finance》發現近期學習python的人越來越多了,最近也有人問我有沒有啥課程或者書推薦的。我自己還是側重數據計算和在金融中的應用,系統管理、web開發等沒做過。我當年也是新手入門,自己搜索嘗試,買了很多的書,也在網上下載了很多資料。
  • 吹彈牛皮之Unity AI決策樹應用實踐技巧
    ///////////////////////////////////////////////////////////////////////////////《吹彈牛皮之Unity AI決策樹應用實踐技巧
  • 十六本python入門學習書籍推薦,python入門新手必看
    隨著人工智慧時代的到來,python程式語言一步登天衝到編程排行榜第一名,因此更多朋友想轉行學習python程式語言的朋友,可以一起看一下:python入門新手必看的十六本python入門學習書籍1、python基礎教程司維所著圖書:本書包括Python程序設計的方方面面,首先從Python