환영합니다!

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

Dr. Jamsheed Shorish

Computational Economist

강사 소개

  • 계산경제학자
  • 전문 분야:
    • 자산가격결정
    • 금융기술(“핀테크”)
    • 경제·금융의 컴퓨팅 응용
  • ANU에서 "디지털 경제의 경제분석" 공동 강의
  • Shorish Research(벨기에): 컴퓨팅 기반 비즈니스 응용
Python을 활용한 정량적 리스크 관리

정량적 위험관리란?

  • 정량적 위험관리: 정량화 가능한 불확실성의 연구
  • 불확실성:
    • 미래 결과를 알 수 없음
    • 결과가 계획 의사결정에 영향
  • 위험관리: 부정적 결과의 영향 완화
  • 정량화 가능한 불확실성: 위험 측정을 위한 요인 식별
    • 예시: 화재보험. 화재를 더 가능하게 하는 요인은?
  • 본 과정: 금융 포트폴리오의 위험에 초점
Python을 활용한 정량적 리스크 관리

위험관리와 글로벌 금융위기

  • 대침체(2007–2010)
    • 전 세계 성장 손실 2조 달러 이상
    • 미국 가계자산 약 10조 달러 감소
    • 미국 증시 시가총액 약 8조 달러 감소
  • 글로벌 금융위기(2007–2009)
    • 기초 자산가치의 대규모 변화
    • 미래 수익률에 대한 큰 불확실성
    • 높은 자산 수익률 변동성
    • 성패를 가르는 핵심: 위험관리
Python을 활용한 정량적 리스크 관리

요약: 금융 포트폴리오

  • 금융 포트폴리오
    • 미래 수익이 불확실한 자산들의 집합
    • 주식
    • 채권
    • 외환 보유(‘포렉스’)
    • 주식옵션
  • 과제: 불확실성 관리를 위한 위험 정량화
    • 최적 투자 의사결정
    • 위험 선호를 고려해 포트폴리오 수익 극대화
Python을 활용한 정량적 리스크 관리

수익 정량화

  • 포트폴리오 수익: 개별 자산 수익의 가중합
    • Pandas 데이터 분석 라이브러리
    • DataFrame prices
    • .pct_change() 메서드
    • returns.dot() 메서드
prices = pandas.read_csv("portfolio.csv")

returns = prices.pct_change()
weights = (weight_1, weight_2, ...)
portfolio_returns = returns.dot(weights)
Python을 활용한 정량적 리스크 관리

위험 정량화

  • 포트폴리오 수익률 변동성 = 위험
  • 공분산 행렬로 변동성 계산
  • returns의 DataFrame 메서드 .cov() 사용 후 연율화

 

 

covariance = returns.cov()*252

print(covariance)

4개 자산 간 공분산 행렬 예시

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

위험 정량화

  • 포트폴리오 수익률 변동성 = 위험
  • 공분산 행렬로 변동성 계산
  • returns의 DataFrame 메서드 .cov() 사용 후 연율화
  • covariance대각선은 개별 자산 분산  

   

covariance = returns.cov()*252

print(covariance)

대각선의 분산이 강조된 공분산 행렬 예시

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

위험 정량화

  • 포트폴리오 수익률 변동성 = 위험
  • 공분산 행렬로 변동성 계산
  • returns의 DataFrame 메서드 .cov() 사용 후 연율화
  • covariance대각선은 개별 자산 분산
  • 비대각선은 자산 간 공분산
covariance = returns.cov()*252

print(covariance)

비대각선의 공분산이 강조된 공분산 행렬 예시

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

포트폴리오 위험

  • 포트폴리오의 자산 weights에 따라 달라짐
  • 포트폴리오 분산 $\sigma_p^2$ $$ \sigma_p^2 := w^T \cdot \textnormal{Cov}_p \cdot w $$
  • 파이썬에서 행렬 곱은 @ 연산자로 계산
  • 분산 대신 표준편차를 보통 사용
weights = [0.25, 0.25, 0.25, 0.25] # 포트폴리오에 4개 자산 가정

portfolio_variance = np.transpose(weights) @ covariance @ weights
portfolio_volatility = np.sqrt(portfolio_variance)
Python을 활용한 정량적 리스크 관리

변동성 시계열

  • 시간에 따른 포트폴리오 변동성도 계산 가능
  • '윈도우'로 일정 기간(예: 주, 30일 ‘월’)의 변동성 계산
  • Series.rolling()이 윈도우 생성
  • 변동성의 추세와 극단적 사건 관찰
windowed = portfolio_returns.rolling(30)

volatility = windowed.std()*np.sqrt(252) volatility.plot() .set_ylabel("Standard Deviation...")

연율화 수익률 변동성의 30일 롤링 창 그래프

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

연습해 봅시다!

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

Preparing Video For Download...