波動率

超時評估 GARCH 模型

  • October 27, 2022

我已經在 EquinorASA(挪威天然氣權益)的對數回報上擬合了兩個相互競爭的 GARCH 模型,一個GARCH(1,2)模型和另一個都具有 t 分佈誤差。EGARCH(1,1,1)我不會進行初步檢查,而是進行GARCH(1,2)保留的假設。

我使用過 Kevin Shepard 著名的拱形庫。要選擇模型,我想將時間序列拆分為訓練/測試(這很容易使用TimeSeriesSplitfrom完成sklearn)。

為簡單起見,我們只考慮GARCH(1,2)模型。

這是程式碼的摘錄:

logr_train, logr_test = logr[train_index], logr[test_index]
N_train = len(train_index)
N_test = len(test_index)

specs = {
           'mean':'zero',
           'vol':'GARCH',
           'p':1,
           'q':2,
           'dist':'t',
           'rescale':True
}

model = arch_model(y=logr_train, **specs)
res = model.fit(first_obs=0, last_obs=len(logr_train))
forecast = res.forecast(horizon=N_test, method='simulation', simulations=1000, reindex=False)

這是摘要列印:

擬合摘要

困境我們在訓練和測試之間實際比較了什麼?

到目前為止我考慮了什麼?

  1. 測試對數回報的經驗波動率與模擬波動率的預期 這很簡單:
forecast.variance.shape # second dimension is the same as size of test time-series
(1, 499) 
np.sqrt(forecast.variance.values[0][-1]) # this is slicing the last value of the simulations (when it converges)
1.6180795243550963
np.std(logr_test) * 100
1.1331922351104446
error = np.sqrt(forecast.variance.values[0][-1]) - np.std(logr_test) * 100
error
0.4848872892446516
  1. 有沒有辦法以某種方式恢復日誌返回?

由於GARCH(1,2)定義為: $$ X_{t} = \sigma_{t}Z_{t} \ Z_{t} \sim N(0,1) \ \sigma_{t}^{2} = \alpha_{0} + \alpha_{1}X^{2}{t-1} + \beta{1}\sigma^{2}{t-1} + \beta{2}\sigma^{2}_{t-2} $$

給定估計的參數,是否有辦法計算預測的 $ \hat{X_{t+n}}^{2} $ 然後計算它與日誌返回之間的誤差 $ X_{t+n} $ 從測試樣本?

我已經在這裡查看了“評估 garch 模型”和“ GARCH 模型,波動率預期? ”的問答,但無濟於事。

假設你觀察 $ T $ 返回,然後選擇一些 $ T_1<T $ 並執行以下操作:

  1. 估計你的模型 $ r_1,\dots,r_{T_1} $ 並使用您估計的參數來預測 $ \hat{\sigma}{T_1+1}^2=E(\epsilon{T_1+1}^2\vert \mathcal F_{T_1}) $ .
  2. 估計你的模型 $ r_1,\dots,r_{T_1+1} $ 並使用您估計的參數來預測 $ \hat{\sigma}{T_1+2}^2=E(\epsilon{T_1+2}^2\vert \mathcal F_{T_1+1}) $ .

$ \quad \vdots $

  1. 估計你的模型 $ r_1,\dots,r_{T_1+h-1} $ 並使用您估計的參數來預測 $ \hat{\sigma}{T_1+h}^2=E(\epsilon{T_1+h}^2\vert \mathcal F_{T_1+h-1}) $ .

你最終得到一個時間序列 $ h $ 領先一步的預測。現在,您想將這些預測與相應的“真實”值進行比較 $ \sigma_t^2 $ . 然而, $ \sigma_t^2 $ 鑑於您只觀察價格或您可以從中計算出的回報,因此無法直接觀察到。因此,為了回測您的模型,您必須考慮對 $ \sigma_t^2 $ . 事實證明,有幾種方法可以做到這一點,但這在很大程度上取決於可用的數據。

例如,最簡單的方法——但也是一個有問題的方法——是使用平方誤差 $ \epsilon_t^2 $ 作為估計 $ \sigma_t^2 $ , 那就是你比較 $ \epsilon_{t+h}^2 $ 和 $ \hat{\sigma}_{t+h}^2 $ . 儘管這個估計量是無偏的,但事實證明它是一個非常嘈雜的“真實”波動率估計量。使用這個估計器通常會得出 GARCH 模型在樣本外表現不佳的結論。一個直覺的解釋為什麼會這樣。假使,假設 $$ \begin{align} r_t&=\mu_t+\epsilon_t\ \epsilon_t&=\sigma_tu_t \quad, u_t \overset{iid}{\sim} \mathcal N (0,1) \end{align} $$ 然後 $$ \begin{align} P\left(\epsilon_t^2 \notin \left[\frac{1}{3}\sigma_t^2,\frac{2}{3}\sigma_t^2\right]\right)&=P\left(\sigma_t^2u_t^2 \notin \left[\frac{1}{3}\sigma_t^2,\frac{2}{3}\sigma_t^2\right]\right)\ &=1-P\left(\sigma_t^2u_t^2 \in \left[\frac{1}{3}\sigma_t^2,\frac{2}{3}\sigma_t^2\right]\right)\ &=1-P\left(u_t^2 \in \left[\frac{1}{3},\frac{2}{3}\right]\right)\ &=0.7411 \end{align} $$ 最後一行來自以下事實: $ u_t^2 \sim \chi^2(1) $ . 也就是說,您估計的機率為 74% $ \sigma_t^2 $ 將位於區間之外 $ \left[\frac{1}{3}\sigma_t^2,\frac{2}{3}\sigma_t^2\right] $ .

長話短說,您的問題實際上歸結為兩個問題:

  1. 我如何估計 $ \sigma_t^2 $ 在合理的意義上?答案是通過依賴日內數據的已實現波動率估計器。有關更多詳細資訊,下面給出的論文很有見地。
  2. 我應該使用哪種預測評估方法?對此沒有一般性的答案,但這取決於您的分析目標。例如,您可以使用 RMSE $$ RMSE=\sqrt{\frac{1}{h}\sum_{i=1}^h(\tilde{\sigma}{t+i}^2-\hat{\sigma}{t+i}^2)^2} $$ 在哪裡 $ \tilde{\sigma}_{t+i}^2 $ 是您選擇的估算器 $ \sigma_t^2 $ . 但是,如果預測不足是一個問題,那麼不對稱損失函式會更有意義。

更多文獻

  1. Poon, Granger 2003:預測金融市場的波動性:評論,經濟文獻雜誌
  2. Andersen, Bollerslev, Lange (2001):預測金融市場波動:相對於預測範圍的樣本頻率,實證金融雜誌
  3. Andersen, Bollerslev (1998):回答懷疑論者 是的,標準波動率模型確實提供了準確的預測,國際經濟評論

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