커널 밀도 추정

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

Jamsheed Shorish

Computational Economist

히스토그램 다시 보기

  • 리스크 요인 분포
    • _가정_ (예: 정규, t 등)
    • _추정_ (모수 추정, 몬테카를로 시뮬레이션)
    • _무시_ (과거 데이터 시뮬레이션)
  • 실제 데이터: 히스토그램
  • 히스토그램을 확률분포로 표현하려면?
    • 필터링으로 데이터를 부드럽게 처리
    • 비모수 추정

손실의 히스토그램

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

데이터 평활화

  • 필터: 히스토그램의 '요철'을 부드럽게 함

히스토그램 축

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

데이터 평활화

  • 필터: 히스토그램의 '요철'을 부드럽게 함
  • 관측치는 시간이 지나며 누적됨

관측치가 누적되는 이미지

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

데이터 평활화

  • 필터: 히스토그램의 '요철'을 부드럽게 함
  • 관측치는 시간이 지나며 누적됨

관측치가 누적되는 이미지

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

데이터 평활화

  • 필터: 히스토그램의 '요철'을 부드럽게 함
  • 관측치는 시간이 지나며 누적됨

관측치가 누적되는 이미지

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

데이터 평활화

  • 필터: 히스토그램의 '요철'을 부드럽게 함
  • 관측치는 시간이 지나며 누적됨
  • 특정 포트폴리오 손실 선택

손실과 화살표로 표시된 특정 손실

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

데이터 평활화

  • 필터: 히스토그램의 '요철'을 부드럽게 함
  • 관측치는 시간이 지나며 누적됨
  • 특정 포트폴리오 손실 선택
    • 인접 손실을 살펴봄

관측치 위에 겹쳐진 커널 창

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

데이터 평활화

  • 필터: 히스토그램의 '요철'을 부드럽게 함
  • 관측치는 시간이 지나며 누적됨
  • 특정 포트폴리오 손실 선택
    • 인접 손실을 살펴봄
    • 손실의 "가중평균" 형성
  • 커널: 필터 선택; "창"을 결정

커널로 계산된 가중평균 표시

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

데이터 평활화

  • 필터: 히스토그램의 '요철'을 부드럽게 함
  • 관측치는 시간이 지나며 누적됨
  • 특정 포트폴리오 손실 선택
    • 인접 손실을 살펴봄
    • 손실의 "가중평균" 형성
  • 커널: 필터 선택; "창"을 결정
    • 창을 다른 손실로 이동

두 번째 커널 위치 이미지

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

데이터 평활화

  • 필터: 히스토그램의 '요철'을 부드럽게 함
  • 관측치는 시간이 지나며 누적됨
  • 특정 포트폴리오 손실 선택
    • 인접 손실을 살펴봄
    • 손실의 "가중평균" 형성
  • 커널: 필터 선택; "창"을 결정
    • 창을 다른 손실로 이동
  • 커널 밀도 추정치: 확률밀도

커널 밀도 추정 이미지

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

가우시안 커널

  • 연속 커널
  • 중심으로부터의 거리로 모든 관측치에 가중 부여
  • 일반적으로: 다양한 커널 사용 가능
    • 시계열 분석에 사용
    • 신호 처리에 사용

가우시안 커널 이미지

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

Python에서의 KDE

from scipy.stats import gaussian_kde

kde = guassian_kde(losses)
loss_range = np.linspace(np.min(losses), np.max(losses), 1000)
plt.plot(loss_range, kde.pdf(loss_range))
  • 시각화: KDE 적합으로부터의 확률밀도함수

가우시안 KDE 추정 플롯

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

KDE로 VaR 구하기

  • VaR: gaussian_kde.resample() 메서드 사용
  • 결과 샘플의 분위수 계산
  • CVaR: 이전과 동일한 기대값이지만
    • gaussian_kde에는 .expect() 없음 => 적분을 수동 계산
    • 연습용 특수 .expect() 메서드 제공
sample = kde.resample(size = 1000)

VaR_99 = np.quantile(sample, 0.99)
print("VaR_99 from KDE: ", VaR_99)
VaR_99 from KDE: 0.08796423698448601
Python을 활용한 정량적 리스크 관리

Laten we oefenen!

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

Preparing Video For Download...