위험 측정

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

Jamsheed Shorish

CEO, Shorish Research

손실분포

  • 외환 예시:
    • 달러 기준 포트폴리오 가치는 USD 100
    • 위험요인 = EUR / USD 환율
    • 1 EUR = 1 USD이면 유로 기준 가치: USD 100 x EUR 1 / USD 1 = EUR 100
    • r EUR = 1 USD이면: USD 100 x EUR r / 1 USD = EUR 100 x r
    • 손실 = EUR 100 - EUR 100 x r = EUR 100 x (1 - r)
  • 손실분포: r의 무작위 실현값 => _미래_ 포트폴리오 손실의 분포

외환 손실의 히스토그램

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

최대 손실

  • 포트폴리오의 최대 손실은 무엇인가요?
  • 손실은 100% 확실하게 경계지을 수 없습니다
  • 신뢰수준: 100% 확실성 대신 상한의 발생 가능성으로 대체
  • 예: "95%의 경우 발생하는 최대 손실은?"와 같은 질문 표현 가능
    • 여기서 신뢰수준은 95%입니다.
Python을 활용한 정량적 리스크 관리

Value at Risk(VaR)

  • VaR: 특정 신뢰수준에서의 최대 포트폴리오 손실을 측정하는 통계치
  • 일반적 신뢰수준: 95%, 99%, 99.5%(보통 소수로 표시)
  • 외환 예시: 95%의 시간에 EUR/USD 환율이 _최소_ 0.40이면,
    • 포트폴리오 가치는 _최소_ USD 100 x 0.40 EUR / USD = EUR 40
    • 포트폴리오 손실은 _최대_ EUR 40 - EUR 100 = EUR 60
    • 따라서 95% VaR는 EUR 60

EUR/USD 시계열과 0.40 기준선

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

Conditional Value at Risk(CVaR)

  • CVaR: 최소 손실이 VaR일 때의 기대손실을 측정
  • 손실분포 꼬리의 기댓값과 동일:
    • $$\textnormal{CVaR}(\alpha) := \frac{1}{1-\alpha}\mathbb{E} \int_{\textnormal{VaR}(\alpha)}^{\bar{x}} x f(x) dx,$$
    • $f(\cdot)$ = 손실분포의 pdf
    • $\bar{x}$ = 손실의 상한(무한대일 수 있음)
    • $\textnormal{VaR}(\alpha)$ = 신뢰수준 $\alpha$에서의 VaR
  • 외환 예시:
    • 95% CVaR = 포트폴리오 가치가 EUR 40보다 _작은_ 경우(5%)의 기대손실

손실분포에서 VaR와 CVaR 꼬리 관계

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

VaR 도출

  1. 신뢰수준 지정: 예) 95% (0.95)
  2. loss 관측치 Series 생성
  3. 지정한 신뢰수준에서 loss.quantile() 계산
  4. VaR = 해당 신뢰수준의 .quantile()

  5. scipy.stats 손실분포의 백분위점 함수 .ppf()도 사용 가능

loss = pd.Series(observations)

VaR_95 = loss.quantile(0.95) print("VaR_95 = ", VaR_95)
Var_95 = 1.6192834157254088
Python을 활용한 정량적 리스크 관리

CVaR 도출

  1. 신뢰수준 지정: 예) 95% (0.95)
  2. 손실분포에서 표본 생성 또는 사용
  3. 지정한 신뢰수준에서 VaR 계산(예: 0.95)
  4. CVaR 계산: 기대손실(정규분포: scipy.stats.norm.expect() 사용)
losses = pd.Series(scipy.stats.norm.rvs(size=1000))

VaR_95 = scipy.stats.norm.ppf(0.95)
CVaR_95 = (1/(1 - 0.95))*scipy.stats.norm.expect(lambda x: x, lb = VaR_95)
print("CVaR_95 = ", CVaR_95)
CVaR_95 = 2.153595332530393
Python을 활용한 정량적 리스크 관리

VaR 시각화

  • N(1,3)에서 1000회 추출한 손실분포 히스토그램

정규분포 손실의 히스토그램

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

VaR 시각화

  • N(1,3)에서 1000회 추출한 손실분포 히스토그램
    • VaR$_{95}$ = 5.72, 즉 95% 신뢰수준의 VaR

95% VaR이 표시된 손실 히스토그램

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

VaR 시각화

  • N(1,3)에서 1000회 추출한 손실분포 히스토그램
    • VaR$_{95}$ = 5.72, 즉 95% 신뢰수준의 VaR
    • VaR$_{99}$ = 7.81, 즉 99% 신뢰수준의 VaR

95%와 99% VaR이 표시된 손실 히스토그램

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

VaR 시각화

  • N(1,3)에서 1000회 추출한 손실분포 히스토그램
    • VaR$_{95}$ = 5.72, 즉 95% 신뢰수준의 VaR
    • VaR$_{99}$ = 7.81, 즉 99% 신뢰수준의 VaR
    • VaR$_{99.5}$ = 8.78, 즉 99.5% 신뢰수준의 VaR
  • 신뢰수준이 높아질수록 VaR는 _증가_합니다

95%, 99%, 99.5% VaR이 표시된 손실 히스토그램

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

연습해 봅시다!

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

Preparing Video For Download...