구조적 단절

Python을 활용한 정량적 리스크 관리

Jamsheed Shorish

Computational Economist

리스크와 분포

  • 리스크 관리 도구
    • 리스크 완화: MPT
    • 리스크 측정: VaR, CVaR
  • 리스크: 분산, 변동성
    • 분산(표준편차)을 리스크 정의로 사용
  • 리스크와 위험요인 분포(확률변수) 간의 연결
Python을 활용한 정량적 리스크 관리

정상성

  • 가정: 분포가 시간에 따라 동일
  • 변하지 않는 분포 = 정상성
  • 글로벌 금융위기 기간의 효율적 프런티어
    • 비정상적
  • 추정 기법은 정상성을 _요구_
    • 히스토리컬: 과거 데이터로 미지의 _정상_ 분포 추정
    • 모수적: 가정한 _정상_ 분포족 사용
    • 몬테카를로: 난수 추출용 _정상_ 분포 가정
Python을 활용한 정량적 리스크 관리

구조적 단절

  • 비정상성 => 분포가 시간에 따라 _변화_할 수 있음
  • 변화 시점을 특정해 가정
    • 데이터를 하위 기간으로 분할
    • 각 하위 기간 내에서는 정상성 가정
  • 구조적 단절: 변화가 발생한 시점
    • 평균 및/또는 변동성의 '추세' 변화
Python을 활용한 정량적 리스크 관리

예시: 중국의 인구 증가

  • 1950–2019 기간 검토
  • 추세는 대체로 _선형_

1950–2019년 중국 인구 그래프

Python을 활용한 정량적 리스크 관리

예시: 중국의 인구 증가

  • 1950–2019 기간 검토
  • 추세는 대체로 _선형_
  • …하지만 1990년 전후로 둔화됨
  • 1990년 근처 구조적 단절 가능성
  • 순인구(출생–사망) 분포가 _변화_했다는 의미
  • 가능한 원인: 정부 정책, 생활수준 등

1950–2019년 중국 인구의 시간 추이와 추세 화살표 그래프

Python을 활용한 정량적 리스크 관리

Chow 검정

  • 이전 예시: 구조적 단절의 시각적 근거
  • 정량화: 통계적 측도
  • Chow 검정:
    • _선형_ 모형에서 구조적 단절 존재 여부 검정
    • 귀무가설: 단절 없음
    • OLS 회귀 3개 필요
      • _전체_ 기간 회귀
      • 단절 _이전_과 _이후_ 회귀 두 개
    • 제곱합 잔차(SSR) 수집
    • 검정통계량은 F 분포를 따름
Python을 활용한 정량적 리스크 관리

Python에서의 Chow 검정

  • 가설: 중국 인구에 1990년 구조적 단절 존재
  • 선형 "요인 모형" 가정: $$\log(\text{Population}_t) = \alpha + \beta * \text{Year}_t + u_t$$
  • statsmodelsOLS로 1950–2019 전체 기간 OLS 회귀
    • 제곱합 잔차 res.ssr 추출
import statsmodels.api as sm
res = sm.OLS(log_pop, year).fit()

print('SSR 1950-2019: ', res.ssr)
SSR 1950-2019: 0.29240576138055463
Python을 활용한 정량적 리스크 관리

Python에서의 Chow 검정

  • 1950–2019를 1950–1989, 1990–2019로 분할
  • 각 구간별 OLS 회귀 수행
    • res_before.ssr, res_after.ssr 추출
pop_before = log_pop.loc['1950':'1989']; year_before = year.loc['1950':'1989'];
pop_after  = log_pop.loc['1990':'2019']; year_after =  year.loc['1990':'2019'];

res_before = sm.OLS(pop_before, year_before).fit() res_after = sm.OLS(pop_after, year_after).fit()
print('SSR 1950-1989: ', res_before.ssr) print('SSR 1990-2019: ', res_after.ssr)
SSR 1950-1989: 0.011741113017411783
SSR 1990-2019: 0.0013717593339608077
Python을 활용한 정량적 리스크 관리

Python에서의 Chow 검정

  • F 분포를 따르는 Chow 검정통계량 계산
    • 분자 계산
      • k = 자유도 2 = OLS 계수 $\alpha$, $\beta$ 두 개
    • 분모 계산
      • 자유도 66 = 전체 관측치(70) - 2*k
numerator = (ssr_total - (ssr_before + ssr_after)) / 2

denominator = (ssr_before + ssr_after) / 66
chow_test = numerator / denominator print("Chow test statistic: ", chow_test, "; Critical value, 99.9%: ", 7.7)
Chow test statistic: 702.8715822890057; Critical value, 99.9%: 7.7
Python을 활용한 정량적 리스크 관리

연습해 봅시다!

Python을 활용한 정량적 리스크 관리

Preparing Video For Download...