如何用machine learning學習 總體經濟?

今天這篇paper是介紹總體經濟,現在全球的經濟是連動的,例如中美貿易大戰影響到全球股價,金價油價對於美國股市也有很大的影響,今天這篇paper就是要來研究不同的指數,對於NASDAQ指數的影響。

這篇文章利用美股開盤前的所有重要指數,例如油價、貴金屬價格、以及全球股市的對於美股的影響,既然全球市場是連動的,那這其中必定有一些關聯,下圖就是這篇paper所使用的重要指數:

data 1

建構features

這篇文章想要找出股價的趨勢,而不是絕對數值,所以其features除了股價外,也有一段時間股價的變化,這邊先叫做window size w,並且對於價格的變化進行normalize。

分析features

我覺得本文值得讚許的地方在於有提供一些簡單的方法做features的分析,可以由這些方法知道哪些features對於預測是非常有幫助的!

論文中使用了cross correlation來分析各種不同商品的價格對於NASDAQ影響。要說明cross correlation,就要先從correlation說起,correlation是兩種不同的數據,其相關性的係數。correlation介於-1到1之間,分別代表這兩種時間序列之間的關聯性:

  • correlation = -1:代表數據完全負相關,也就是A漲B就跌的概念
  • correlation = 0:代表數據之間沒什麼關聯,也就是A漲跌跟B漲跌完全沒關係
  • correlation = +1:代表數據之間是正相關,也就是AB同漲同跌的關係

那「cross」又是什麼意思呢?就是將兩組時間序列的時間錯開,差N天,並且觀察其correlation。

下圖就是所有的商品對於NASDAQ的cross correlation 分析,X軸就是差N天的N,而Y軸就是correlation,可以看到,在X = 0 時,NASDAQ跟NASDAQ的相關性是1,代表NASDAQ與自己的指數完全正相關,而很多商品都會在N = 0時有正相關性!

crosscorrelation

所以我們使用N = 0來預測NASDAQ的股價會是最好的,但是N = 0的資料是沒有辦法使用的,因為你不能在當天的開盤就知道NASDAQ的收盤價,這樣就代表用到未來數據了。

所以我們只能退而求其次,用 N < 0 的資料,也就是前N天的資料,我們可以發現N = -1的地方有一點小突起,代表某些資料對於NASDAQ的correlation也是很高的,可以拿來利用!

唯一想吐槽的是這張圖很多顏色都重複,所以根本看不太清楚是哪些商品,拿來預測NASDAQ比較準。

三個維度的 cross-correlation

另外,這篇paper也提供了不同股價區間差w對於漲跌的correlation:

crosscorrelation3d

可以發現商品價格與NASDAQ股價之間是有一定的關係的,假如商品之間彼此沒有關聯,這張圖就不會呈現三角形的山丘狀,而是會看起來像是隨機的樣子。

上面這張圖說明了一件事情,股價變化越長時間來觀察(w 越長),NASDQL跟許多商品的前一天的correlation是越高的,可以藉由提高精準度!

藉由上述的兩個實驗,我們知道股價變化量的重要性,重點不是股價本身,而是股價的漲跌幅度才有辦法更好的預測股價~

除此之外,作者想要進一步知道哪些時間序列對於NASDQL是重要的,所以進行了一個簡單的預測實驗

預測明天的價格

作者也利用每一個單一序列當作單一feature,來預測隔天的漲跌,發現利用DAX這個時間序列來預估NASDQL會得到最好的結果:

importance

作者並沒有說這邊的model是哪一種,我猜應該是SVM,因為feature_size很小。
這樣我們就可以找到比較重要跟不重要的時間序列,之所以要這樣是因為此篇paper有用SVM當作model,而SVM比較適用於小feature_size的traning set。

預測N天後的價格

除了每天的價格外,此paper也研究K天後的價格漲跌,發現K越大,則預測的能力越好,下圖中 K 為 x 軸

multiple day

測試 w 的大小

接下來,此paper也測試了不同的 w 對於訓練的成效: f1 score 的影響,f1 score是precision跟recall的綜合分數,其中:

  • precision 是所有 model 顯示為 true,而真正為 true 的比例
  • recall 是所有真正為 true 的資料,被 model 標示為 true 的比例

f1 score 就是 precision 和 recall 的 harmonic mean。harmonic mean同時也被用在電阻的並聯計算上,你可以想像電阻並聯時,假如任何一個電阻太小,電流就會傾向從那裡通過,造成等效電阻很小。同理,你可以想像有一顆電阻叫做precision,另一顆叫做recall,任何一方太小,都會導致f1 score 變得很小。於是 f1 score 就是同時可以兼具 recall 和 accuracy 的一個優化指標。

w

上圖中的兩條線分別是 positive 和 negative 的 f1 score。當 w 在 0 或是 50 時,f1 score 相對來說比較好。

以上就是分析 w、K、等參數怎麼設定比較好的一些分析,當我們得到這些參數,並且建構出預測漲跌的model後,就可以將model產生的結果拿來回測

回測績效

這邊總共用了三種方法來回測:

  1. 假如預測會漲,就持續於整段回測週期持有股票
  2. 當預測會漲機率上升時,持有股票,不然則賣出
  3. 當預測會漲時,持有,反之則賣出

以下是回測的結果:

backtest 1

可以發現利用第三種方式,回測的績效比較好,這邊跟我自己做出來的結論是差不多的。

總結

今天學到的一些知識:

  1. 用cross-correlation來分析features
  2. 利用SVM來測驗單個features是否有辦法預測漲跌,進而分析feature的好壞
  3. 使用移動窗格來找出最佳的f1_score

這篇paper利用ML的方式,找出世界上重要的商品價格之間的關聯,並且也有使用SVM或是MART來預測NASDAQ指數的漲跌,個人覺得滿有趣的。經總就應該這樣作研究!

美中不足的是應該可以歸納出一些現象,輔助一般不會程式的投資人,這樣會更好!

FinLab - 韓承佑

嗨大家好,我是韓承佑,FinLab創辦人,畢業於巴黎薩克雷大學資工博士,目前擔任臺灣量化交易協會 學術顧問、台北商業大學 創新育成中心 創業技術顧問與上市科技公司 量化交易顧問。當初,我喜歡寫程式、無意間因為軟體比賽接觸Fintech,從此開始了財經跟程式的學習之路。我們成立 FinLab 量化投資部落格,用自己研發的軟體,對台灣股市做大量快速的實驗。希望可以在量化投資的路上,當大家的「武器製造商」!