신경망 리스크 관리

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

Jamsheed Shorish

Computational Economist

실시간 포트폴리오 업데이트

  • 리스크 관리
    • 정의된 리스크 지표(VaR, CVaR)
    • 추정된 리스크 지표(모수, 역사적, 몬테카를로)
    • 최적화된 포트폴리오(예: 현대 포트폴리오 이론)
  • 새로운 시장 정보 => 포트폴리오 비중 업데이트
    • 문제: 포트폴리오 최적화 비용 큼
    • 해결: $\text{weights} = f(\text{prices})$
    • 실시간으로 $f$ _평가_
    • $f$는 가끔만 업데이트
Python을 활용한 정량적 리스크 관리

신경망

  • 신경망: $\text{output} = f(\text{input})$
    • 뉴런: 함수 내 상호연결된 처리 노드
  • 최초 개발: 1940~1950년대
  • 2000년대 초: "빅데이터"에 신경망 적용
    • 이미지 인식, 처리
    • 금융 데이터
    • 검색 엔진 데이터
  • 딥러닝: 머신러닝의 일부로서 신경망
    • 2015년: Google, Python용 오픈소스 TensorFlow 공개
Python을 활용한 정량적 리스크 관리

신경망 구조

  • 층: 연결된 처리 뉴런
    • 입력층

신경망의 입력층

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

신경망 구조

  • 신경망 구조
    • 입력층
    • 은닉층

신경망의 은닉층

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

신경망 구조

  • 신경망 구조
    • 입력층
    • 은닉층
    • 출력층
  • 학습: 입력과 출력 간 관계 학습

입력, 은닉, 출력층 이미지

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

신경망 구조

  • 신경망 구조
    • 입력층
    • 은닉층
    • 출력층
  • 학습: 입력과 출력 간 관계 학습
    • 자산 가격 => 입력층

자산 가격이 신경망에 입력되는 이미지

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

신경망 구조

  • 신경망 구조
    • 입력층
    • 은닉층
    • 출력층
  • 학습: 입력과 출력 간 관계 학습
    • 자산 가격 => 입력층
    • 입력 + 은닉층 처리

신경망 가중치 연결선 이미지

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

신경망 구조

  • 신경망 구조
    • 입력층
    • 은닉층
    • 출력층
  • 학습: 입력과 출력 간 관계 학습
    • 자산 가격 => 입력층
    • 입력 + 은닉층 처리
    • 은닉 + 출력층 처리

은닉층에서 출력층으로의 가중치 이미지

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

신경망 구조

  • 신경망 구조
    • 입력층
    • 은닉층
    • 출력층
  • 학습: 입력과 출력 간 관계 학습
    • 자산 가격 => 입력층
    • 입력 + 은닉층 처리
    • 은닉 + 출력층 처리
    • 출력 => 포트폴리오 비중

출력층이 포트폴리오 비중으로 표시된 이미지

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

신경망을 이용한 포트폴리오 최적화

  • 학습
    • 출력과 기존의 "최적" 포트폴리오 비중 _비교_
    • 목표: 출력과 비중 간 "오차" 최소화
    • 오차가 작으면 => 네트워크 학습 완료
  • 사용
    • 입력: 새로운 미사용 자산 가격
    • 출력: 새 자산 가격에 대한 예측 "최적" 포트폴리오 비중
    • 최적 비중 = 리스크 관리
Python을 활용한 정량적 리스크 관리

Python에서 신경망 생성

 

from tensorflow.keras.models import Sequential

from tensorflow.keras.layers import Dense
model = Sequential() model.add(Dense(10, input_dim=4, activation='sigmoid')) model.add(Dense(4))
Python을 활용한 정량적 리스크 관리

Python에서 네트워크 학습

  • 과거 자산 가격: training_input 행렬
  • 과거 포트폴리오 비중: training_output 벡터
  • 모델 컴파일:
    • 지정 오차 최소화('loss')
    • 지정 최적화 알고리즘('optimizer')
  • 학습 데이터에 모델 학습
    • epochs: 내부 파라미터 업데이트용 학습 반복 수
model.compile(loss='mean_squared_error', optimizer='rmsprop')

model.fit(training_input, training_output, epochs=100)
Python을 활용한 정량적 리스크 관리

Python에서의 리스크 관리

  • 사용: 새로운(예: 실시간) 자산 가격 데이터 제공
    • 새 벡터 new_asset_prices를 입력층에 제공
  • 새 가격에 model.predict()로 네트워크 평가
    • 결과: predicted 포트폴리오 비중
  • 시간이 지나 데이터가 충분해지면 => 네트워크 재학습
    • 과거 데이터로 테스트 => 백테스트
# new asset prices are in the vector new_asset_prices
predicted = model.predict(new_asset_prices)
Python을 활용한 정량적 리스크 관리

Ayo berlatih!

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

Preparing Video For Download...