AI之遺傳算法在量化投資的應用

遺傳算法在量化投資的應用

本篇內容涉及遺傳算法的概念,原理描述,實現方法以及在量化投資的應用。

作者:陳煥生,凡普金科旗下會牛科技研發總監兼數據架構師,目前從事基于遺傳算法因子自動化挖掘,量化投資研究。并于2017年上線了基于遺傳算法因子挖掘的自有資金運營的量化模型。目前處于行業中游水平,團隊的大多背景都是非金融投資領域,實現互聯網技術向量化投資領域的轉型,本人十年的互聯網研發背景,多次連續創業的經歷。

什么是遺傳算法

  1. 介紹遺傳算法的概念
    遺傳算法是一種進化策略的算法,模擬生物基因遺傳。遵循物競天擇適者生存劣者淘汰的自然規律進化。
    達爾文有一句話這么說的:

能夠生存下來的往往不是最強大的物種,也不是最聰明的物種,而是最能適應環境的物種
簡單的說,隨著時間的流逝,一代代的繁殖,不管外部的環境如何惡劣,都會通過遺傳和變異生存下來,以致適應環境。不適應環境的生物將會被淘汰。

人類的進化概要圖如下:


1.png
2.png
  1. 遺傳算法的原理
    遺傳算法的基本原理就是模擬上述的繁殖遺傳的過程。


    3.png

提煉出遺傳算法的基礎組件如下:

  • 種群(Population)

生物進化是以群體的形式進行的,人類就是一個種群,種群還可以分為子種群,每個子種群分別進化

  • 個體(Individual)

組成種群的獨立單個物種

  • 染色體(Chromosome)

包含一組基因,個體由多個染色體組成

  • 基因(Gene)

可用于遺傳的因子,并且攜帶特有的適應能力的信息

  • 交叉(Crossover)

個體之間交換染色體,交叉繁殖遺傳基因,形成新的個體

  • 復制(reproduction)

復制優秀的個體,遺傳基因

  • 變異(Mutation)

根據一定概率基金突變,增強基因的多樣性

  • 進化(Evaluation)

根據優勝劣汰原則,進化優秀個體,淘汰劣類個體

遺傳算法實現的方法

遺傳算法實現的步驟大體分為基因編碼解碼,種群初始化,選擇算子,交叉算子,變異算子,適應度函數(評價函數或者目標函數)。每個步驟的優化都會影響到遺傳算法整體的優化結果。

基因編碼
  • 二進制編碼

二進制編碼顧名思義由二進制來編碼,由0和1組成的基因編碼成染色體

如右圖:
4.png

適用場景:解決背包問題
詳解:背包問題一般給定某些東西固定的大小和價值,背包的容量是有限的,優化最大背包價值類似的問題

  • 實數編碼

實數編碼是在給定的連續或者離散的區間內,將實數組合成有序的序列的一種編碼

如右圖:
5.png

適用場景:解決排序的優化問題,例如TSP問題,任務排序,任務調度等問題
詳解:這類問題對于順序敏感,TSP問題就是路徑規劃的優化

  • 字符編碼

實數編碼其實可以認為是字符編碼的一種,實數編碼的基因都是實數組成的,而字符編碼可以由字母,單詞,數字等組成,字符編碼也可以將字符通過定義固定字典表的方式,轉換成實數編碼。

如右圖:
6.png

適用場景:優化神經網絡的參數,權重等
詳解:在設計好的神經網絡的模型中,使用遺傳算法優化權重,得到最佳的輸出

  • 符號編碼

一般符號編碼都使用樹來存儲,所以符號編碼也可以稱為樹編碼,是一種復雜的編碼方式。量化投資的因子挖掘編碼就是采取這種方式。

7.png

適用場景:給定特征,找出一個函數,以達到目標優化的方式
詳解:這種方式,每一個特征可以作為一個變量成為基因,每一個表達式就是一個染色體,對于這個染色體的交叉和變異其實就是樹節點的交換和變異。

選擇算子
  • 輪盤賭選擇算法(Roulette Wheel Selection)

每個個體進入下一代的概率和它的適應度值成正比,它的進化概率是個體的適應度占總的適應值的比例。
具體算法如下:

  1. 計算每個個體的適應度值$f(x_i), i = (1,2,...,n),n為種群的大小$
  2. 計算種群所有個體的進化到下一代的概率。


    image.png
  3. 計算個體的積累概率。


    image.png
  4. 在[0, 1]區間生成一個隨機數r


    image.png
  5. 重復(4)共N次。這樣就選出來了一個新的種群。

舉例如下:


image.png
8.png

如同輪盤旋轉一樣,面積越大,落上去的概率越大

優點:選擇的概率與它的適應值成正比
缺點:適應度如果差別太大,如果最好的染色體適應值占比90%,那其他的染色體的進化機會將很小,這樣不利于種群進化的多樣性了。

  • 排名選擇算法

這種選擇算法就會避免上述適應度差別很大的問題。


image.png
  • 精英選擇算法

將種群中最好的適應度的個體直接進化到下一代,避免優秀的個體在交叉和變異的時候,丟失良好的基因。

  • 其他選擇算法

還有其他的擴展的選擇算法,例如隨機競爭選擇、期望值選擇,排擠策略等

交叉算子
  • 單點交叉

指在個體編碼基因串中只隨機設置一個交叉點,然后再該點相互交換兩個配對個體的部分基因

如右圖:
9.png
  • 兩點交叉

指在個體編碼基因串中隨機設置兩個交叉點,然后再該點相互交換兩個配對個體的部分基因

如右圖:
10.png
  • 一致交叉

兩個配對的個體在每個基因點上以相同概率交叉

如右圖:
11.png
  • 算術交叉

通過算術表達式計算得到新的基因,例如and,or,xor等

如右圖:
12.png

符號編碼的交叉

13.png
變異算子
  • 基本位變異:對個體基因編碼中以變異概率、隨機指定的某一位或某幾位做變異。
  • 均勻變異:分別用符合某一范圍內均勻分布的隨機數,較小的概率來替換所有基金的基因值。(特別適用于在算法的初級運行階段)
  • 邊界變異:隨機的取基因兩個對應邊界基因值之一去替代原有基因值。特別適用于最優點位于或接近于可行解的邊界時的一類問題。
  • 非均勻變異:對原有的基因值做一隨機擾動,以擾動后的結果作為變異后的新基因值。對每個基因座都以相同的概率進行變異運算之后,相當于整個解向量在解空間中作了一次輕微的變動。
  • 高斯近似變異:進行變異操作時用符號均值為P的平均值,方差為P2的正態分布的一個隨機數來替換原有的基因值。
    以上最常用的是基本位變異,其他的變異算法需要讀者自己深入研究。
  • 二進制變異

將基因進行變異即可

如右圖:
14.png
  • 實數變異

將實數進行變異即可

如右圖:
15.png
  • 符號變異

將樹上的節點變異,不過操作符只能變異成操作符,變量只能變異成變量

如右圖:
16.png

注意:不管是交叉還是變異,都存在一定概率進行, 交叉和變異概率均是超參,不能太小,也不能他大,太大會不容易收斂到最優解,太小將容易導致種群多樣性差,容易收斂。

適應度函數

適應度函數也稱為評價函數,適應度函數和目標函數是兩個概念,適應度函數是根據目標函數區分群體中個體的好壞的標準,適應度函數總是非負,而目標函數可能為正也可能為負。所以一般需要在兩者之間進行轉換。適應度函數可以理解為綜合目標的一個最終評分。

適應度函數設計的要求:

  • 簡單分值
  • 非負
  • 越大越好
  • 計算簡單

目標函數轉換適應度函數方法:

  • 直接轉換


    image.png
  • 線性轉換


    image.png

    多個優化目標按照權重分配轉換成適應度值

  • 指數轉換


    image.png

遺傳算法在量化投資的應用

遺傳算法復制指數

在投資中,指數基金就是通過復制標的是指數的基金,一般分為完全復制,部分復制,抽象復制。例如滬深300指數,我們用滬深300的少數的成分股來復制滬深300指數。

模型分析:

  • 選多少只股票(成本問題)
  • 選擇哪些成分股(跟蹤誤差問題)
  • 股票權重分配(跟蹤誤差問題)

模型限制條件問題如下:

  • 成分股的數量固定,等于M
  • 成分股的持股比例有大小限制,min < x < max

目標函數定義:

  1. 跟蹤誤差 - 與指數偏離的程度


    image.png
  2. 超額收益 - 組合的收益率超過指數的收益率


    image.png

最后適應度函數就是:
image.png

還可以定義為
image.png

其中w是超參,兩個目標的權重。

具體實現步驟參數如下:

17.png

跟蹤誤差結果:

18.png

注意:在投資領域不是收益越高越好,而是要求收益高的同時,波動要小。一般用夏普值來衡量,在實際過程中,考慮的因素更多,比如交易手續費,停牌,st類的股票等等。

遺傳算法做因子挖掘

在量化投資領域,多因子模型是量化投資的重要并且傳統一個模型,因子是模型的原料,量化模型就是把不同類的因子按照一定方式組合在一起,去選股,并且預測收益。因子也可以稱之為特征。在模型中你可以放入多種多樣的因子,比如:動量因子,市值類因子,基本面因子,反轉類因子,趨勢類因子,波動因子等等。這些因子的數據來源于行情數據,高頻數據,基本面數據,新聞數據,研報數據,宏觀量化類,行業分析類等等。
簡單因子:((close - open) / ((high - low) + .001))
復雜因子:((rank(ts_correlation(ts_sum(((high + low) / 2), 19), ts_sum(adv60, 19), 8)) < rank(ts_correlation(low, volume, 6))) * -1)

模型分析:
因子挖掘考慮因子的可交易性,目標函數最優,換手率低,泛華能力強且穩定。

  • 選哪些股票參與訓練
  • 選定in-sample的訓練時間,out-sample的樣本時間
  • 選定股票權重
  • 選定股票收益計算周期
  • 選定股票交易價格類型(open,close,vwap)
  • 選定因子極值處理

基因和染色體選擇:

  • Terminal Set: open、close、high、low、returns、volume、隨機數
  • Function Set: rank(橫截面的排序)、ts_rank(時間序列排序)、correlation(橫截面相關性)、ts_correlation(時間序列相關性)、decay(時間序列衰減)、decay_linear(線性衰減)、ts_mean(簡單平均)、ema(加權平均)、?:(if else三元表達式) ,min,max,ts_min,ts_max

模型限制約束條件:

  • 因子有效數據占比(>60%)
  • 因子值數據分布
  • 因子ICIR或者Sharp最低值
  • 因子目標值的t-value值

目標函數定義:

  • `ICIR:


    image.png
  • Sharp(夏普值):

    image.png

  • 換手率:一買一賣就是換手。換手率目標是越小越好,但是不能太小,換手才會帶來收益,過高的換手會導致交易成本太高。同樣也不能收益

適應度函數:

image.png

具體參數配置:

19.png

遺傳算法參數配置含:

  • 種群個體個數
  • 子種群個數
  • 隨機種子
  • 選擇算子
  • 交叉算子和交叉概率
  • 變異算子和變異概率
  • 適應度函數配置
  • 樹深度配置
  • Terminal Set配置
  • Function Set配置
  • 其他超參配置

結果sharp進化圖:

20.png

總結:遺傳算法不僅金融領域應用廣泛,還可以優化機器學習超參、機器人路徑規劃、流水車間調度等領域都可以應用。

遺傳算法優化

  1. 容易局部收斂的問題

遺傳算法的局部搜索很強,所以一般容易收斂用以下解決方案,具體情況具體對待。

  • 擴大搜索空間
    提高種群的數量、增加數據種類和數量、增加算子
  • 提高種群多樣性
    調整交叉策略、提高交叉概率、調整變異策略、提高變異概率
  • 毀滅優秀個體
    對優秀個體進行存活周期倒計時,如果規定的周期內沒有出現新的優秀個體,就直接殺死優秀個體,讓攜帶有優秀基因且暫時遠離目標的個體存活。
  1. 不容易收斂的問題
  • 減少搜索空間
    減少種群數量,減少數據種類和數量、減少復雜的算子
  • 降低種群多樣性
    降低交叉概率和變異概率
  • 精英策略
    防止精英由于交叉變異被破壞,不能進化到下一代,對于較好的精英直接不通過交叉和變異直接進化到下一代。
  1. 過擬合問題

過擬合問題是在in-sample表現很好,out-sample表現非常差的問題。
樣本數據
增加樣本數據,讓少量樣本數據覆蓋整體樣本
模型
一開始不要使用復雜的模型,不要把所有的數據加入到模型中。
數據清洗
對于數據進行清洗,分析清洗后的數據的分布
中性化
對于相關性很高的因子可以進行中性化處理,避免朝著那個方向進化

  1. 多目標收斂平衡問題

單目標進化
一開始先單目標進化,收集一定的數據,分析數據分布情況
懲罰系數
對于目標擬合的時候,進行懲罰,懲罰可以根據周期進行線性,指數懲罰力度

遺傳算法優缺點

  1. 優點:
  • 基于群體的搜索,具備進化能力,不是窮舉搜索
  • 適應度函數簡單操作
  • 遺傳算法很容易做分布式計算處理
  • 遺傳算法大大提高了搜索效率
  • 遺傳算法基于概率變異,具有一定隨機性
  • 遺傳算法可以與其他算法結合,例如可以優化機器學習的超參
  1. 缺點:
  • 遺傳算法受初代隨機種群影響很大,可以結合啟發式算法改進
  • 遺傳算法的諸多參數,例如交叉率、變異率影響了搜索結果,目前大多依賴經驗值
  • 遺傳算法利用交叉和變異產生種群,搜索速度慢
  1. 改進:
  • 編碼改進 :格雷編碼、動態編碼
  • 選擇進化:隨機競爭選擇,特定目標挑選
  • 交叉改進:多點交叉,單點交換
  • 自適應:自適應遺傳算法,精英策略年齡,種群年齡
  • 效率:并行計算,分布式計算

參考

  1. http://www.obitko.com/tutorials/genetic-algorithms/index.php
  2. https://en.wikipedia.org/wiki/Genetic_algorithm
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,835評論 6 534
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,676評論 3 419
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,730評論 0 380
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,118評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,873評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,266評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,330評論 3 443
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,482評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,036評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,846評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,025評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,575評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,279評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,684評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,953評論 1 289
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,751評論 3 394
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,016評論 2 375

推薦閱讀更多精彩內容