다운로드
작성자: admin 작성일시: 2016-05-27 15:35:45 조회수: 6074 다운로드: 292
카테고리: 시계열 분석 태그목록:

ARCH/GARCH 모형

주식 시장 수익률 시계열 자료

In:
import pandas.io.data as web
st = dt.datetime(1990,1,1)
en = dt.datetime(2016,1,1)
data = web.get_data_yahoo('^GSPC', start=st, end=en)
returns = 100 * data['Adj Close'].pct_change().dropna()
returns.tail()
Out:
Date
2015-12-24   -0.159864
2015-12-28   -0.217856
2015-12-29    1.062976
2015-12-30   -0.721723
2015-12-31   -0.941191
Name: Adj Close, dtype: float64
In:
returns.plot()
plt.show()

수익률 시계열의 상관관계 특성

  • 수익률 자체는 자기상관관계가 없다.
  • 수익률의 크기는 강한 자기상관관계가 있다.
In:
sm.graphics.tsa.plot_acf(returns - returns.mean(), lags=100)
plt.show()
In:
sm.graphics.tsa.plot_acf((returns - returns.mean())**2, lags=100)
plt.show()

수익률 시계열의 변동성 특성

*. 변동성 클러스터링(clustering)

  • 일단 변동성이 높아지면 일정기간동안 변동성이 높게 유지된다.
  • Conditional Heteroskedasticity 특성: 변동성이 이전 시간까지의 변동성 정보에 의존한다.
$$ \text{E}[r_t] = µ $$$$ \text{Var}[r_t] = E[(r_t − µ)^2 \mid r_1,\ldots, r_{t−1}] $$

*. 변동성 변화는 정상(stationary) 특성을 가진다

  • 변동성의 변동성(volatility of volatility)는 일정하게 유지된다.

*. 레버리지 효과(leverage effect)

  • 변동성이 증가할 때는 빠르게 증가하고 감소할 때는 천천히 감소한다

ARCH 모형

AutoRegressive Conditional Heteroskedasticity (ARCH)

  • 1982년에 Engle 제안
$$ \begin{eqnarray} r_t & = & \mu + \epsilon_t \\ \epsilon_t & = & \sigma_t e_t \\ \sigma^2_t & = & \omega + \alpha_1 \epsilon_{t-1}^2 + \cdots + \alpha_p \epsilon_{t-p}^2 \end{eqnarray} $$

여기에서

  • $e_t$ : 가우시안 백색 잡음
  • $\epsilon_t$ : $\sigma_t$ 크기로 스케일링된 실제 innovation 과정

ARCH 모형의 가장 특이한 점은 innovation 과정의 변동성 $\sigma_2$이 이전 시간의 innovation 과정의 실현(Realized) 샘플 $\epsilon_{t-1}^2, \ldots, \epsilon_{t-p}^2$ 에 의존하는 되먹임(feedback) 형태를 가진다는 점이다.

Lagrange Multiplier Test

  • 분산이 자기 상관관계를 가지는지 확인하기 위한 검정
  • 귀무 가설
    • $(r_t-\mu)^2=\epsilon_t^2$ 를 $\epsilon_{t-1}^2, \epsilon_{t-2}^2, \ldots, \epsilon_{t-m}^2$ 으로 회귀분석한 계수들이 모두 0
In:
lm, lmpval, fval, fpval = sm.stats.het_arch(returns - returns.mean())
lmpval
Out:
0.0

ARCH(1) 모형

$$ \begin{eqnarray} r_t & = & \mu + \epsilon_t \\ \epsilon_t & = & \sigma_t e_t \\ \sigma^2_t & = & \omega + \alpha_1 \epsilon_{t-1}^2 \end{eqnarray} $$
  • 무조건부 평균(unconditional mean)은 0
$$ \text{E}[\epsilon_t] = \text{E}[\text{E}[\epsilon_t \mid r_1, \ldots, r_{t-1}]] = \text{E}[\sigma\text{E}[\epsilon_t]] = 0 $$
  • 무조건부 분산(unconditional variance)은 $\dfrac{\omega}{1-\alpha_1}$
$$ \begin{eqnarray} \text{Var}[\epsilon_t] &=& \text{E}[\epsilon_t^2 ] \\ &=& \text{E}[\text{E}[\sigma^2\epsilon_t^2 \mid r_1, \ldots, r_{t-1} ]] \\ &=& \text{E}[\omega + \alpha_1 \epsilon_{t-1}^2] \\ &=& \omega + \alpha_1\text{E}[\epsilon_{t-1}^2] \\ &=& \omega + \alpha_1\text{Var}[\epsilon_{t-1}] \end{eqnarray} $$
  • 모수 제한 조건
$$ 1 − 3\alpha_1^2 > 0 $$

arch 파이썬 패키지를 사용한 ARCH 모형 추정

arch 패키지의 arch_model 클래스를 사용하여 추정

이 클래스는 원래 GARCH를 위한 것이므로 인수 q를 0으로 설정하면 ARCH 모형

In:
from arch import arch_model
am1 = arch_model(returns, p=1, q=0) 
res1 = am1.fit()
print(res1.summary())
Iteration:      1,   Func. Count:      5,   Neg. LLF: 10051.1870483
Iteration:      2,   Func. Count:     14,   Neg. LLF: 10047.1156936
Iteration:      3,   Func. Count:     23,   Neg. LLF: 9820.33396422
Iteration:      4,   Func. Count:     29,   Neg. LLF: 9810.75543829
Iteration:      5,   Func. Count:     35,   Neg. LLF: 9804.07310787
Iteration:      6,   Func. Count:     40,   Neg. LLF: 9801.64568441
Iteration:      7,   Func. Count:     45,   Neg. LLF: 9801.61367283
Iteration:      8,   Func. Count:     50,   Neg. LLF: 9801.61352873
Iteration:      9,   Func. Count:     55,   Neg. LLF: 9801.61352562
Optimization terminated successfully.    (Exit mode 0)
            Current function value: 9801.61352562
            Iterations: 9
            Function evaluations: 55
            Gradient evaluations: 9
                      Constant Mean - ARCH Model Results                      
==============================================================================
Dep. Variable:              Adj Close   R-squared:                      -0.000
Mean Model:             Constant Mean   Adj. R-squared:                 -0.000
Vol Model:                       ARCH   Log-Likelihood:               -9801.61
Distribution:                  Normal   AIC:                           19609.2
Method:            Maximum Likelihood   BIC:                           19629.6
                                        No. Observations:                 6552
Date:                Fri, May 27 2016   Df Residuals:                     6549
Time:                        06:12:03   Df Model:                            3
                                 Mean Model                                 
============================================================================
                 coef    std err          t      P>|t|      95.0% Conf. Int.
----------------------------------------------------------------------------
mu             0.0482  1.487e-02      3.239  1.202e-03 [1.902e-02,7.732e-02]
                            Volatility Model                            
========================================================================
                 coef    std err          t      P>|t|  95.0% Conf. Int.
------------------------------------------------------------------------
omega          0.9115  4.354e-02     20.935  2.568e-97 [  0.826,  0.997]
alpha[1]       0.3147  4.866e-02      6.467  9.971e-11 [  0.219,  0.410]
========================================================================

Covariance estimator: robust
In:
res1.plot(annualize='D')
plt.show()
In:
res1.conditional_volatility["2008":"2009"].plot()
plt.show()
In:
res1.hedgehog_plot()
plt.show()