投資組合管理

用於計算最小變異數投資組合權重的正則化器

  • June 12, 2019

我需要使用不同的正則化器計算最小變異數投資組合,以比較結果並使用驗證方法來找到最佳參數。目前我的工作是使用 python 完成的。以下問題顯示了我目前的工作

有效邊界看起來不太好

我需要做的是,我需要擴展這項工作以與不同的正則化器一起使用。數據集是 48_Industry_Portfolios_daily 數據集。當我有一個帶有類變數的數據集時,有足夠的教程來使用套索和 Ridge。但不適用於這種情況。

有人可以與我分享我需要遵循的確切步驟來擴展我的程式碼,這樣我就可以使用正則化器來比較投資組合的差異。甚至對此進行概述也受到高度讚賞。

我理解以下計算,

https://towardsdatascience.com/ridge-and-lasso-regression-a-complete-guide-with-python-scikit-learn-e20e34bcbf0b

但是,我不確定這些計算如何用於投資組合變異數比較

最小變異數投資組合(沒有約束,除了權重總和為 1)通常被發現為 $$ w=\frac{\Sigma^{-1} \iota}{\iota^T\Sigma^{-1} \iota} $$ 在哪裡 $ \Sigma $ 是共變異數矩陣和 $ \iota $ 是所有的向量。

但是,還有另一種(等效)方法可以找到它。Memmel 和 Kempf (2006) SSRN 940367表明您可以使用 OLS 回歸從回報時間序列中找到它:

您選擇一個(例如第 n 個)回報時間序列,然後根據與其他 n-1 個時間序列的差異對其進行回歸(參見他們論文中的等式(5)):

$$ \tilde{r}_n= \alpha +\beta_1 (\tilde{r}_n-\tilde{r}_1) + \beta_2 (\tilde{r}_n-\tilde{r}2) +\cdots + \beta{n-1}(\tilde{r}n-\tilde{r}{n-1})+\tilde{\epsilon} $$

係數 $ \beta_1,\cdots,\beta_{n-1} $ 因此發現實際上等於所需的最小變異數投資組合權重 $ w_1,\cdots,w_{n-1} $ . (奇怪但真實)。最後的重量 $ w_n $ 可以通過 $ w_n=1-\sum_{i=1}^{n-1} w_i $ .

知道了這一點,我們如何使用正則化器找到最小變異數投資組合?以同樣的方式,除了不使用 OLS 回歸常式之外,我們使用執行正則化回歸的常式,例如 Ridge Regression。

因此,通過使用執行嶺回歸或 Lasso 的任何可用程式碼,我們可以找到正則化的最小變異數投資組合。無需編寫任何新程式碼,我們只需使用正確的參數調案常式即可。

(正如另一個問題使用不同的正則化器比較投資組合變異數中所提到的,因此發現的變異數將大於真正的最小值,但解決方案會表現得更好,而且權重大/小荒謬的可能性較小(例如 +1000 的兩個權重,- 1000),這往往會發生在非正則化的解決方案中。正如那裡所提到的,施加權重必須為正(無賣空)的約束也是一種溫和的正則化形式。所以你有 3 種簡單的正則化方法,嶺,套索和具有正權重約束的二次最小化)。

在您另一篇文章的 Python 程式碼中,您已經將樣本共變異數矩陣設為:

cov_matrix = 返回.cov ()

要獲得嶺回歸使用的共變異數,請放在下一行:

cov_ridge = cov_matrix + lamda * np.eye (N)

第二項增加沿 cov_matrix 對角線的值,使用 $ \lambda $ ( lamda ) 您必須設置的嶺回歸正則化因子,以及單位矩陣np.eye(N ) $ N $ 資產。如果您的退貨數據集是 $ T\times N $ 成形,然後N=np.shape(returns)$$ 1 $$, 或者如果 $ N\times T $ ,然後N=len(returns) )。Ridge 通常需要更高的值 $ \lambda $ 與套索相比,效果明顯不同。

現在,將任何其他主要函式中的cov_matrix替換為嶺共變異數矩陣****cov_ridge,以便其餘程式碼導出嶺組合權重:

def投資組合年度績效(權重,平均回報,cov_ridge):

def random_portfolios(num_portfolios,mean_returns,cov_ridge,risk_free_rate):

鑑於 $ (\Sigma+\lambda I) $ 是cov_ridge,使用 GMV(全域最小變異數)投資組合的解析解的嶺投資組合權重現在將是:

$$ \omega^{ridge} = \frac{(\Sigma+\lambda I)^{-1}\iota}{\iota^{\top}(\Sigma+\lambda I)^{-1}\iota} $$

至於 lasso,沒有像 ridge 這樣的封閉式解決方案,因此您需要使用 lasso 自己的在下面的 Kempf 和 Memmel (2006) 回歸公式上執行像 Sci-kit learn 這樣的包 $ \lambda $ 因子(輸入到包的預建套索函式中),然後將係數重新排列為套索 GMV 投資組合權重。

$$ \tilde{r}_n= \alpha +\beta_1 (\tilde{r}_n-\tilde{r}_1) + \beta_2 (\tilde{r}_n-\tilde{r}2) +\cdots + \beta{n-1}(\tilde{r}n-\tilde{r}{n-1})+\tilde{\epsilon} $$

$$ \boldsymbol{\omega}^{lasso} = \begin{bmatrix} \hat{\beta}1 \ \vdots \ \hat{\beta}{N-1} \ 1-\sum_{n=1}^{N-1}\hat{\beta}_{n} \end{bmatrix} $$ 可以在此處找到 lasso 的 Sci-kit 學習文件。您還可以使用他們的嶺回歸模組使用相同的嶺 $ \lambda $ 您使用了我之前描述的分析快捷方式來獲得與 ridge 相同的答案。但是,您的程式碼使用共變異數方法進行投資組合選擇,這對於獲得有效的邊界很好,但是如果您想對 GMV 使用正則化回歸,請專門為此目的創建一個新函式。

引用自:https://quant.stackexchange.com/questions/44344