通常而言,特徵選擇是指選擇獲得相應模型和算法最好性能的特徵集,工程上常用的方法有以下:
1. 計算每一個特徵與響應變量的相關性:工程上常用的手段有計算皮爾遜係數和互信息係數,皮爾遜係數只能衡量線性相關性而互信息係數能夠很好地度量各種相關性,但是計算相對複雜一些,好在很多toolkit裏邊都包含了這個工具(如sklearn的MINE),得到相關性之後就可以排序選擇特徵了;
2. 構建單個特徵的模型,通過模型的準確性爲特徵排序,藉此來選擇特徵,另外,記得JMLR'03上有一篇論文介紹了一種基於決策樹的特徵選擇方法,本質上是等價的。當選擇到了目標特徵之後,再用來訓練最終的模型;
3. 通過L1正則項來選擇特徵:L1正則方法具有稀疏解的特性,因此天然具備特徵選擇的特性,但是要注意,L1沒有選到的特徵不代表不重要,原因是兩個具有高相關性的特徵可能只保留了一個,如果要確定哪個特徵重要應再通過L2正則方法交叉檢驗;
4. 訓練能夠對特徵打分的預選模型:RandomForest和Logistic Regression等都能對模型的特徵打分,通過打分獲得相關性後再訓練最終模型;
5. 通過特徵組合後再來選擇特徵:如對用戶id和用戶特徵最組合來獲得較大的特徵集再來選擇特徵,這種做法在推薦系統和廣告系統中比較常見,這也是所謂億級甚至十億級特徵的主要來源,原因是用戶數據比較稀疏,組合特徵能夠同時兼顧全局模型和個性化模型,這個問題有機會可以展開講。
6. 通過深度學習來進行特徵選擇:目前這種手段正在隨着深度學習的流行而成爲一種手段,尤其是在計算機視覺領域,原因是深度學習具有自動學習特徵的能力,這也是深度學習又叫unsupervised feature learning的原因。從深度學習模型中選擇某一神經層的特徵後就可以用來進行最終目標模型的訓練了。
整體上來說,特徵選擇是一個既有學術價值又有工程價值的問題,目前在研究領域也比較熱,值得所有做機器學習的朋友重視。
最近一段時間,我們米筐科技量化策略研究團隊在自己的策略研究平臺上,做了一些量化分析方面的特徵工程和特徵選擇研究。關於它們在量化交易中的應用,我可以分享一下我們團隊的經驗。
首先,追本溯源,爲什麼特徵工程和特徵選擇值得討論?在實際的數據分析和建模中,我們通常要面對兩種情況:1 數據集中已有的特徵變量不夠多,或者已有的特徵變量不足以充分表徵數據的特點;2 我們擁有大量的特徵,需要判斷出哪些是相關特徵,哪些是不相關特徵。特徵工程解決的是第一個問題,而特徵選擇解決的是第二個問題。
對於特徵工程來說,它的的難點在於找到好的思路,來產生能夠表徵數據特點的新特徵變量;而特徵選擇的難點則在於,其本質是一個複雜的組合優化問題(combinatorial optimization)。例如,如果有 30 個特徵變量,當我們進行建模的時候,每個特徵變量有兩種可能的狀態:“保留”和“被剔除”。那麼,這組特徵維度的狀態集合中的元素個數就是。更一般地,如果我們有 N 個特徵變量,則特徵變量的狀態集合中的元素個數就是。因此,從算法角度講,通過窮舉的方式進行求解的時間複雜度是指數級的(O())。當 N 足夠大時,特徵篩選將會耗費大量的時間和計算資源(圖1)。在實際應用中,爲了減少運算量,目前特徵子集的搜索策略大都採用貪心算法(greedy algorithm),其核心思想是在每一步選擇中,都採納當前條件下最好的選擇,從而獲得組合優化問題的近似最優解。
圖1:通過窮舉法求解特徵選擇問題的二叉樹表示。狀態集合中元素的個數隨特徵變量數目增加而呈現指數增長。
目前很多流行的機器學習的材料,都未能給出特徵工程和特徵選擇的詳細論述。其主要原因是,大部分機器學習算法有標準的推導過程,因而易於講解。但是在很多實際問題中,尋找和篩選特徵變量並沒有普適的方法。 然而,特徵工程和特徵選擇對於分析結果的影響,往往比之後的機器學習模型的選擇更爲重要。斯坦福大學教授,Coursera 上著名的機器學習課程主講老師 Andrew Ng 就曾經表示:“基本上,所謂機器學習應用,就是進行特徵工程。”
在特徵工程和特徵選擇的在量化交易的應用方面,我們試圖回答以下兩個問題:
1 如何對滬深300指數進行特徵工程?
2 如何儘可能減少數據,以及算法本身的侷限性給特徵選擇帶來的負面影響?
接下來,就以上兩個問題,不揣淺陋,我分享一些我們團隊的經驗和思考。
1 滬深300指數的特徵工程
在量化分析中,常見的因子大致可以分爲四類:
(1) 量價因子,例如成交量,收盤價等;
(2) 基本面因子,例如市盈率,所屬行業等;
(3) 技術分析因子,例如MACD, DIF等;
(4) 宏觀經濟因子(或稱外部響應因子),例如利率,各個季度的經濟數據等。
1970年,尤金法馬(Eugene Fama)提出了有效市場理論,認爲證券資產價格包含一切的市場信息。這就是量價因子能夠反映市場特徵的根本依據。對於一個非有效市場而言,我們認爲,量價因子甚至可能更爲重要:任何人根據非公開信息進行交易,其交易信息仍然會反映在量價因子中。類似的觀點更接近於有效市場理論的強假設版本:市場上一切公開或非公開的信息,都會反映在資產的價格中。
基於這個思路,在四類因子中,我們首先嚐試對量價因子實現特徵工程。2015年,在一篇名爲《WorldQuant Formulaic 101 Alphas》的研究報告中,以數據挖掘能力而聞名業界的對衝基金WorldQuant LLC 給出了他們的 101 個阿爾法的數學表達式。在報告中,這些阿爾法表達式被分爲了趨勢追隨,均值迴歸和混合型三種。既然這 101 個阿爾法表達式在實踐中被證明行之有效,且對應明確的市場意義(趨勢,反轉和混合),在特徵工程研究中,我們使用報告中的變換方法和阿爾法表達式爲基礎,構造了 60 個特徵變量,用於下一步的機器學習建模。這 60 個特徵變量的構建過程,可參看我們第二份報告的附錄2。
2 集成特徵打分器 (Ensemble Feature Grader, EFG)
如上所述,特徵選擇的本質上是求解一個計算量隨特徵變量個數呈指數增長的組合優化問題。基於不同的子集搜索和評價標準,不同的方法給出的都只是一個近似最優解,而解的合理性也將受方法本身的侷限性所影響。因此,爲了系統化地進行特徵選擇,獲得更爲合理的相關特徵變量子集,在這裏我們借鑑機器學習裏面的集成學習(ensemble learning)的思想,提出一個集成特徵打分器(以下稱EFG)。在這個打分器中,我們使用了八種方法(Pearson 相關係數,距離相關係數,簡單線性迴歸,基於AIC的Lasso迴歸,基於BIC的Lasso迴歸,隨機森林,循環特徵剔除和嶺迴歸)對特徵變量分別進行打分,並進而計算其總得分,以儘量減少數據和單一特徵選擇方法引起的問題,進而改善特徵選擇的效果。
我們進一步使用了 Frideman 訓練集對 EFG 進行測試。這個訓練集中包含非線性相關項,噪音項,權重不同的線性相關項和引起多重共線性的項,基本上囊括了實際數據處理中可能出現的主要問題,而 EFG 的測試表現令人滿意。有興趣的朋友,可以參看我們第二份研究報告附錄1,瞭解詳細的測試過程和結果。
在實際建模中,我們使用 EFG 對上一步獲得的 60 個特徵變量進行打分,篩選出 14 個得分較高的特徵變量,並以此進行了聚類分析。我們發現兩個聚類所對應的不同收益率分佈,其中第一個聚類所包含的交易日,其下一個交易日的收益率的均值明顯高於第二個聚類所對應的均值。基於這個結果,我們實現了一個基準擇時策略。其思路是,如果一個交易日和聚類1的距離較近,我們就進行買入;離聚類2較近,則不進行交易。下午爲該策略的累計收益率(圖2),其表現明顯好於長期持有滬深300指數相關的資產。
圖2:使用 EFG 進行特徵選擇後累積收益率曲線計算:(a)滬深300指數;(b) 在聚類1包含的交易日進行交易;(c) 在聚類2包含的交易日進行交易
以上就是我們在利用機器學習算法進行金融量化分析中的經驗和嘗試。關於下筆爲文,古人有一句真知灼見:“結字因時而變,運筆千秋不易。” 對於數據分析和建模來說,道理也不外如是。計算機理論和機器學習算法的發展,使得數據分析和建模成爲了這個時代的顯學。目前,用 R 或者 Python 等高級編程語言實現一個複雜的模型,所需的可能就是區區幾十行代碼。但是自問自心,我們是否能夠真的對於數據和模型做得瞭如指掌?是否能保證當模型出現問題時,我們能知其所以然?在一個足夠長的時間維度內,我們認爲,在數據建模和量化交易中能夠出類拔萃的人,始終應該保持着對數據和算法全面,準確,深刻的理解和思考。
概而言之,撥開數據的重重迷霧,理解和預測複雜多變的金融市場,即使不考慮其物質回報,其過程本身也令人着迷。我們走上了這條荊棘叢生,又有壯麗風光的旅途,樂於體認這個過程中一切的艱辛和甘甜。希望我們這裏所敘述的經驗和思考,也對你有所啓發。
研究報告鏈接:
com/p/21337419
com/p/21406355
枕書達旦,以爭朝夕,與君共勉。
參考資料:
【1】機器學習中的數據清洗與特徵處理綜述
http://tech.meituan.com/machinelearning-data-feature-process.html
【2】《Applied Predictive Modeling》
http://www.chioka.in/kaggle-competition-solutions/
特別的,kaggle排名第一的owen zhang,他的github有幾個源碼。
https://github.com/owenzhang
手機發的沒有超鏈接 T0T
(I)特徵工程可以解決什麼樣的問題?
在機器學習中,經常是用一個預測模型(線性迴歸,邏輯迴歸,SVD等)和一堆原始數據來得到一些預測的結果,人們需要做的是從這堆原始數據中去提煉較優的結果,然後做到最優的預測。這個就包括兩個方面,第一就是如何選擇和使用各種模型,第二就是怎麼樣去使用這些原始的數據才能達到最優的效果。那麼怎麼樣才能夠獲得最優的結果呢?貼上一句經典的話就是:
Actually the sucess of all Machine Learning algorithms depends on how you present the data.
------ Mohammad Pezeshki
直接翻譯過來便是:事實上所有機器學習算法上面的成功都在於你怎麼樣去展示這些數據。由此可見特徵工程在實際的機器學習中的重要性,從數據裏面提取出來的特徵好壞與否就會直接影響模型的效果。從某些層面上來說,所使用的特徵越好,得到的效果就會越好。所需要的特徵就是可以藉此來描述已知數據的內在關係。總結一下就是:
Better feature means flexibility. Better feature means simpler models. Better feature means better results.
有的時候,可以使用一些不是最優的模型來訓練數據,如果特徵選擇得好的話,依然可以得到一個不錯的結果。很多機器學習的模型都能夠從數據中選擇出不錯的結構,從而進行良好的預測。一個優秀的特徵具有極強的靈活性,可以使用不那麼複雜的,運算速度快,容易理解和維護的模型來得到不錯的結果。
(II)什麼纔是特徵工程?
Feature Engineering is the process of transforming raw data into features that better represent the underlying problem to the predictive models, resulting in improved model accuracy on unseen data.
------ Jason Brownlee
Feature Engineering is manually designing what the input x's should be.
------ Tomasz Malisiewicz
從這個概念可以看出,特徵工程其實是一個如何展示和表現數據的問題,在實際工作中需要把數據以一種“良好”的方式展示出來,使得能夠使用各種各樣的機器學習模型來得到更好的效果。如何從原始數據中去除不佳的數據,展示合適的數據就成爲了特徵工程的關鍵問題。
(III)特徵有用性的預估
每次構造了一個特徵,都需要從各個方面去證明該特徵的有效性。一個特徵是否重要主要在於該特徵與要預測的東西是否是高度相關的,如果是高度相關,那麼該特徵就是十分重要的。比如常用的工具就是統計學裏面的相關係數。
(IV)特徵的構造過程
在實際工作中首先肯定要確定具體的問題,然後就是數據的選擇和準備過程,再就是模型的準備和計算工作,最後纔是展示數據的預測結果。構造特徵的一般步驟:
[1]任務的確定:根據具體的業務確定需要解決的問題;
[2]數據的選擇:整合數據,收集數據;
[3]預處理數據:設計數據展現的格式,清洗數據,選擇合適的樣本使得機器學習模型能夠使用它。比方說一些年齡特徵是空值或者負數或者大於200等,或者說某個頁面的播放數據大於曝光數據,這些就是數據的不合理,需要在使用之前把這一批數據排除掉。
[4]特徵的構造:轉化數據,使之成爲有效的特徵。常用的方法是標準化,歸一化,特徵的離散化等。
(4.1)標準化(Standardization):比方說有一些數字的單位是千克,有一些數字的單位是克,這個時候需要統一單位。如果沒有標準化,兩個變量混在一起搞,那麼肯定就會不合適。
(4.2)歸一化(Normalization):歸一化是因爲在特徵會在不同的尺度下有不同的表現形式,歸一化會使得各個特徵能夠同時以恰當的方式表現。比方說某個專輯的點擊播放率一般不會超過0.2,但是專輯的播放次數可能會達到幾千次,所以說爲了能夠在模型裏面得到更合適結果,需要先把一些特徵在尺度上進行歸一化,然後進行模型訓練。
(4.3)特徵的離散化(Discretization):離散化是指把特徵進行必要的離散處理,比方說年齡特徵是一個連續的特徵,但是把年齡層分成5-18歲(中小學生),19-23歲(大學生),24-29歲(工作前幾年),30-40歲(成家立業),40-60歲(中年人)從某些層面來說比連續的年齡數據(比如說某人年齡是20歲1月3日之類的)更容易理解不同年齡層人的特性。典型的離散化步驟:對特徵做排序-> 選擇合適的分割點-> 作出區間的分割 -> 作出區間分割-> 查看是否能夠達到停止條件。
[5]模型的使用:創造模型,選擇合適的模型,用合適的模型來進行預測,用各種統計指標來判斷該特徵是否合適;
[6]上線的效果:通過在線測試來看效果。
數據的轉換(Transforming Data)就是把數據從原始的數據狀態轉換成適合模型計算的狀態,從某些層面上來說,“數據轉換“和”特徵構造“的過程幾乎是一致的。
(V)特徵工程的迭代過程
特徵工程的迭代步驟:
[1]選擇特徵:需要進行頭腦風暴(brainstorm)。通過具體的問題分析,查看大量的數據,從數據中查看出可以提取出數據的關鍵;
[2]設計特徵:這個需要具體問題具體分析,可以自動進行特徵提取工作,也可以進行手工進行特徵的構造工作,甚至混合兩種方法;
[3]選擇特徵:使用不同的特徵構造方法,來從多個層面來判斷這個特徵的選擇是否合適;
[4]計算模型:通過模型計算得到模型在該特徵上所提升的準確率。
[5]上線測試:通過在線測試的效果來判斷特徵是否有效。