【量化】採用多元線性回歸法進行多因子分析
本文將被聚寬量化課堂收錄,如有轉載,請註明出處,侵權必究
與官方號同步推出,歡迎關注官號:進階版——運用多元線性回歸法選股 - JoinQuant的文章 - 知乎專欄
本篇的難度屬於進階難度,閱讀前請準備:
基本的金融概念。
需要了解線性回歸模型
需要了解APT模型
備註:以上達到了解程度即可,即知道內容的思想,應用場景,輸入輸出。不需要證明。對於知識點本身,暫時安裝一個外部鏈接,量化課堂將會自己產生內容覆蓋,敬請期待。
多因子選股策略在之前的初階教程中有所提及。對於因子的選取,我們當時做了一些簡單的處理,例如人工選股以及等權重等。請參見https://www.joinquant.com/post/1399
今天小編帶著大家研究一下如何運用多元線性回歸選股的方法。
首先,我們來看一下多元線性回歸模型:
多元線性回歸簡介
nn在線性回歸分析中,如果有兩個或兩個以上的自變數,就稱為多元線性回歸。事實上,一種現象常常是與多個因素相聯繫的,由多個自變數的最優組合共同來預測或估計因變數,比只用一個自變數進行預測或估計更有效,更符合實際。因此多元線性回歸比一元線性回歸的實用意義更大,尤其在選股模型中,股價的漲跌的影響因素一般來說不止一個。
從數學的角度來說,我們假設因變數是自變數的線性函數,用方程來表示就是:
其中表示因變數(被解釋變數)的第個觀測值,而則是第k個自變數(解釋變數)的第i個觀測值,是自變數的係數,是第i組觀測值的殘差項。在金融領域,有時候會寫成,用方程來表示就是:
然而,字母的改變並不會影響模型的本質。
nn多元線性回歸通常採用普通最小二乘法(OLS)進行估計,普通最小二乘(未來附上鏈接)估計法的思路是改變,使得殘差的平方和最小。其參數估計結果為:
其中
好,這個方法就介紹到這裡,我們這裡只要知道這個多元線性回歸的一種用法就行了:現在你猜測,一件事情可能被好幾個因素所影響,那麼可以嘗試一下線性模型。關於這個方法的詳細介紹,大家可以參閱聚寬量化課堂的數學部分(敬請期待)。
套利定價理論(APT)
nn套利定價理論認為,套利行為是現代有效率市場(即市場均衡價格)形成的一個決定因素。如果市場未達到均衡狀態的話,市場上就會存在無風險套利機會。並且用多個因素來解釋風險資產收益,並根據無套利原則,得到風險資產均衡收益與多個因素之間存在(近似的)線性關係,其定價方程是:
是股票i的收益率,是第i個股票第k個因子的值,這個方程和多元線性回歸模型的方程是一致的,因此可以用線性回歸的方法來估計參數並根據當前的因子值預測未來的收益。
其實小編總覺的那些口口聲聲說套利的,其實根基都是建立在統計之上,給我感覺就像城市建立在流沙之上。在我的理解里(或者本篇文章的體系下),Arbitrage pricing theory定價理論是CAPM的一個推廣,由APT給出的定價模型與CAPM一樣,都是均衡狀態下的模型,不同的是CAPM嘛,其實你把市場變化看成一個因子也行,只不過CAPM把收益單純的歸為市場變化這一個因子引起的。APT把收益歸因在不同的因子上面。
那麼我們應該如何選擇因子呢?
如何選擇因子?
根據入門級內容(https://www.joinquant.com/post/1399),我們可以先主觀的選定如下因子:
那麼,是不是直接使用這些因子進行回測就高枕無憂了呢?事實上並不是的,細心的讀著可能會發現,這些因子中的一部分本來就存在一定的相關關係,比如roe和inc_return。這兩者具有高度相關性。這個現象被稱作「多重共線性」,指的是線性回歸模型中的解釋變數之間彼此之間度相關,從而使模型失真。那麼多重共線性應該如何處理呢?
多重共線性怎麼辦?
主流的解決方法有如下幾種:nn
1)排除引起共線性的變數:找出引起多重共線性的解釋變數,將它排除出去,以逐步回歸法得到最廣泛的應用。
2)差分法:時間序列數據、線性模型:將原模型變換為差分模型。
3)減小參數估計量的方差:嶺回歸法;等等等等。
這幾種方法大家都可以嘗試一下,以後我們深入討論。小編這裡做一個簡(偷)化(懶),以第一種方法為例,講述如何排除引起共線性的變數。就實排除的方法也有很多種,比如相關係數法、修正的R方法、主成分分析法、人工判斷法等。我們繼續簡化,用相關係數法進行處理。思路是採用因子的數據,直接計算普通的相關係數,然後從相關係數較大的幾個因子中選擇一個。參見下表:
有沒有發現roe和inc_return的相關係數0.99十分顯眼?把這個inc_return拉出去砍了!去掉後結果如下圖所示:
還可以發現net_profit_to_total_revenue和net_profit_margin相關性也很大,而且eps和roa相關性也較大,我們繼續手起刀落手起刀落。結果如下圖所示:
等等!上圖有個誤殺的,想了想,還有用eps吧。roa君,手動再見!
在刪掉了相關性較大的因子之後,終於選出了9個因子:
eps(每股收益EPS(元))nn
adjusted_profit(扣除非經常損益後的凈利潤(元))
inc_return(凈資產收益率(扣除非經常損益)(%))
operation_profit_to_total_revenue(營業利潤/營業總收入(%))
net_profit_margin(銷售凈利率(%))
gross_profit_margin(銷售毛利率(%))
ga_expense_to_total_revenue(管理費用/營業總收入(%))
goods_sale_and_service_to_revenue(銷售商品提供勞務收到的現金/營業收入(%))
nninc_total_revenue_year_on_year(營業總收入同比增長率(%))
策略實現
我們選擇了滬深300 作為股票池,我們暫且認為,這些股票池裡面的股票性質相似,因此我們假設同一個因子對這些股票起到的貢獻是相同的(未來會針對這一假設推翻)。
選定一個調倉頻率。比如每個季度,我們設定一個調倉日期,然後每到調倉日進行回歸分析和調倉。nn
回歸主要分析因子對股票(所有股票)的重要程度是多少。那麼到底是誰和誰回歸呢?nn
下圖表示單個股票單只因子的取法。對於單只股票的單個因子,t1日的因子值和t1~today期間的平均對數收益率return 1組成了一組觀測值,t2日的因子值和t2-t1時期的平均對數收益率return 2組成了一組觀測值,一直到t4日的因子值和t4-t3時期的平均對數收益率return 4組成了一組觀測值。
如果我們取N支股票,滾動向前的4期財報數據(講道理的話,年報和下一年的一季報幾乎一起公布,所以有效的數據只有三期?這裡我們暫且認為有4期吧),對於單個因子,可以得到4N個觀測值,用這4N的觀測值可以回歸出因子1在這段時期(t4-today)對這 N支股票的影響。然後將所有的待選因子採取這樣的方法,放到同一個回歸方程里,估出方程的回歸係數,即。以上的話有點繞口,但是小編寫了半天,其實也沒啥好方法,就把它們畫出來了:
先從(3)看起,有沒有覺得跟上述時間軸圖很像呢?沒錯,他代表一隻股票關於一個因子的時間序列數據。當我們將N只這樣的股票數據排個隊,便得到了圖(2)。這些數據都是關於一個因子的,此時已經可以做單因子回歸了。nn
我們把這樣的很多因子疊在一起,即圖(1)就是我們所需要的全部數據啦。
最後是預測。用最近發布的因子,比如圖中的t1時刻公布的數據,預測各個股票未來的日均對數收益率,選擇預期日均收益率較大的一些股票進行持倉。
這個是小編的回測結果,每次選取預測最好的前20隻股票進行回歸:
自2006年至今的絕對收益率為579.21%,同期的基準收益率為231.64%。我把收益率的數據導出,放到excel表格裡面看看超額收益率可以看出,這個策略收益總體能超越大盤,有正的alpha,可以嘗試往對沖策略這個方向發展,但是超額收益其實跟擇時也有很大的關係。在2008年那波熊市之前,超額收益率做了一個過山車被吐回來了。真正產生超額收益率的是09至15年的牛市頂峰。雖然看似15年以後超額收益率回撤挺大。但是由於比例尺放大了造成的。我們貼一個從15年開始的回測: 可以看到基本上策略與基準打平。但是別忘了15年這麼牛熊一折騰,基差由正基差變成負基差了誒,所以真正的跑起對衝來,還是有基差可以吃的。老師,收益率不高回撤大啊,能不能再給力點啊?
你們一個二個的想幹嘛。真想找好策略,得自己去挖啊。
作為一個演示策略,啥參數都沒調,其實已經像模像樣了:)
未來你可以改進方向:
1. n擴充股票池,擴充因子,不要只選滬深300,滬深300可能起作用的因子都是偏價值的,但是成長系的白馬黑馬股統統沒考慮啊,妖股小市值也沒有入池啊。這些小夥伴可以都帶上一起玩耍。
2. n因子的篩選再考究些,比如分兩步篩選,第一步入選百隻左右的因子,然後按照某種統計方法將因子篩出。
3. n目前函數回測進行調倉的日期是固定的63天,但是隨著時間的推移,原來在1月份的調倉的日期慢慢就偏移到2月3月去了,我們可以固定一個日期進行回測。等等?!難上文所說的07年和15年效果不好是偏移造成的?待我修改修改再回測。
4. n我們可以把商榷一下假設。不太可能一個因子對所有股票的影響都是一樣的,所以可以對單獨的股票單獨尋找因子回歸嘛。
5. n對很多細節可以提高,比如對傳入的因子進行數學處理,等等。
6. n本策略此如果能夠結合擇時策略,收益會更加好。這個擇時策略就留給各路英雄嘗試了~
好了,進階篇之運用多元線性回歸法選股策略就介紹到這裡了,如果有興趣,請戳這裡,克隆代碼塊,自己修補一下。
推薦閱讀: