pythn으로 Valueat Rick(VaR) 계산

이 글은 파이낸셜 모델링이라는 책의 VAR 장을 pytohon으로 실제 계산한 것이다.

VaR이란???


VaR은'밸류잇 릭(밸류 리스크)'의 약자로 일본어로'예상 최대 손실액'으로 번역됐다.금융기관이 보유한 자산의 위험을 평가하기 위해 설계된 것이다.현재 보유한 자산을 앞으로도 일정 기간(보유 기간), 주식 가격과 이자 등의 변동(리스크 요인)으로 얼마나 손실 가능성(신뢰 수준)이 있는지를 과거 데이터를 토대로 통계적으로 측정하는 수법이다.또'과거 데이터'는 과거 일정 기간(관측 기간)으로 거슬러 올라가 이 기간 발생한 가격 추이를 뜻한다
예를 들어 설명하다.예를 들어 지금 당신은 100만 엔의 자산을 가지고 있다.이때 "향후 5년간 이 100만엔짜리 자산을 지속해서 보유한다면 주식 가격과 이자 변동에 따라 잃을 수 있는 최대 금액은 얼마인가.이런 질문에 대한 해답은 바로 VaR이다.지난 20년이라면 20년, 50년의 통계를 계산한다.예컨대'보유기간 1년간 VAR은 15만엔'이라는 결과가 나오면'향후 1년간 손실이 최대 15만엔 이내로 억제될 가능성도 있다'는 의미다.예를 들어'신뢰 수준 99%'라는 말은'향후 1년간 피해를 보더라도 99%의 확률이 15만엔 이내로 통제될 것'이라는 뜻이다.반대로 1% 확률로 15만 이상의 피해를 볼 수도 있다는 의미다.
총괄적으로 VaR은 사전에 정해진 일정 기간 동안 x%의 확률로 얼마나 많은 손실이 발생할 수 있는지에 대한 의문에 답한다.

python으로 자산을 계산하는 간단한 예


자산으로 구성된 투자조합의 매니저를 고려해 주십시오.
큰 전제는 자산수익이 평균 20% 이고 표준 편차가 30% 의 정적 분포에 따른 것이다.
현재 투자조합의 가치는 100백만 달러다.
연말 투자조합 가치의 분포에 대해 다음과 같은 간단한 질문에 답하고 싶습니다.
Q1. 연말까지 20백만 달러가 넘는 손실이 발생할 확률은 몇 퍼센트입니까?
Q2. 1%의 확률로 발생하는 연말 최대 손실은 얼마일까?

0.준비(혹은 문제만 해결할 뿐 필요없다)


이런 상황에서 우선
평균: 100 달러×1.2 (평균 수익률이 20%이기 때문) = 120 (백만 달러)
표준 편차: 100 백만 달러×0.3 = 30 (백만 달러)
의 정적 분포
※ 이른바 정적 분포

을 입력합니다.
%matplotlib inline 
import numpy as np
from scipy.stats import norm
import math
import matplotlib.pyplot as plt
plt.figure(figsize=(10,5))


X = np.arange(0,250,0.1)
#確率密度関数にX,平均50、標準偏差20を代入
Y = norm.pdf(X,120,30)

plt.plot(X,Y,color='r')
plt.show()
<실행 결과>
다음 그림은 자산수익이 정적 분포시의 연말 투자조합 가치에 따른 확률 밀도 함수를 나타낸다.

다음은 이전에 얻은 확률 밀도 함수의 누적 분포 함수를 그려 보자
#累積分布関数

x = np.arange(0,250,0.1)
y = []
for i in x:
    y.append(norm.cdf(i, 120, 30))

plt.plot(x, y)
plt.show()
<실행 결과>

1. Q1


그럼 문제 해결해.Q1이 연말까지 20(백만달러) 이상의 피해가 발생할 확률은?
연말 투자조합의 가치가 80 (백만 달러) 보다 낮을 확률을 찾을 수 있다는 얘기다.
이전에 그린 누적 분포 함수를 f로 설정하면 f (80) 를 얻을 수 있습니다
def f(x):
    z = norm.cdf(x, 120, 30) 
    return z
f(80)
0.09121121972586788
이에 따라 Q1에 대한 응답은 9.12%였다.
즉, 특정 기간(이 경우 연말까지) 9.12% 수준의 그룹 VAR이 20(백만 달러)

2. Q2


1%의 확률로 발생하는 가장 큰 손실은 얼마를 요구하느냐의 문제로, 이는 연말까지 VAR의 1%를 요구하는 것이다.앞의 문제는 연말 투자조합을 80(백만 달러) 이하로 구할 확률이 높지만 이번에는 X(백만 달러)보다 낮게 요구할 확률이 딱 1%라는 것이다.
이전에 얻은 누적 분포 함수의 역함수를 g로 설정합니다.
def g(x):
    w = norm.ppf(q=x, loc=120, scale=30)
    return w
g(0.01)
50.20956377877478
그래서 Q2에 대한 대답은요.
120 - 50.21 = 49.79
되다
이 결과는 다시 말해 1% 수준의 포트폴리오를 의미하는 VAR은 49.79이다.
Excel보다 간편함

3가지 자산이 있는 경우.


아까의 예에서 자산이 하나밖에 없는 상황을 고려했고 다음에 자산의 종류가 여러 개(3종)인 상황을 고려했다.
위험자산(X, Y, Z)이 3개라고 가정하자.자산 수익 분포의 매개 변수에 대해 이미 알고 있다
반환되는 평균은 순서대로 Ux, Uy, Uz입니다.
되돌아오는 색산 합방차 행렬 S

먼 곳.S는 대칭 행렬이다.Sxx, Syy, Szz는 각각 X, Y, Z의 분산을 나타냅니다.
다른 성분, 예를 들어 Sxy는 X와 Y의 합방차를 나타낸다.
현재 그룹 XYZ는 모두 100만 달러입니다.
X:30 백만 달러
Y:45백만 달러
25백만 달러
.
이 그룹의 모든 자산 수익 분포의 평균과 분산
전체 자산 반환 평균 Ua = xUx+y Uy+z Uz
모든 자산을 분산한 수익 Sa={x, y, z}S.({x, y, z}.T)
사람들의 입에 오르내리다.그러나 {x, y,z}는 세 자산의 각자의 투자 비율을 나타내는 벡터이다.
(이곳은 =0.3, 0.25, 0.45})
이번에도 각 자산의 수익이 정규 분포에 따른다고 가정한다.
각 자산 수익의 평균치는
Ux = 0.10
Uy = 0.12
Uz = 0.13
방차 협방차 매트릭스 S
$$
\begin{bmatrix}
0.10 & 0.04 & 0.03\\
0.04 & 0.20& -0.04\\
0.03 & -0.04 & 0.60
\end{bmatrix}
$$
.
전체 자산 수익 평균
#全資産のリターンの平均Ua
Ua = 0.3*0.10 + 0.25*0.12 + 0.45 * 0.13
Ua
0.1185
전체 자산 수익에 대한 표준 편차 Sa
#3種類の分散共分散行列行列S
S = np.array([[0.10, 0.04, 0.03], 
              [0.04, 0.20, -0.04], 
              [0.03, -0.04, 0.60]])
#ベクトル{x, y ,z}
v = np.array([[0.30], 
              [0.25],
              [0.45]])
#全資産のリターンの標準偏差Sa

Sa = math.sqrt(np.dot(np.dot(v.T,S),v))
0.38483762809787714
투자조합 가치의 평균치와 조합 가치의 표준 편차는 각각
100 × (1+ 0.1185)= 111.8500
100 × 0.3848 = 38.4838
.
각 자산의 수익은 정적 분포와 정적 분포의 가법성을 따르기 때문에 전체 자산의 수익도 정적 분포를 따른다.
누적 분포 함수
def g(x):
    w = norm.ppf(q=x, loc=111.85, scale=38.4838)
    return w

g(0.01)
22.323293684987078
VaR은 1% 이상 높은 수준에서 전체 포트폴리오에서
100 - 22.3234 = 77.6766
이런 요구.

대수 정적 분포


대수 정적 분포

많은 자산 가격에서 정적 분포보다 합리적인 분포.과거의 예에서 자산의 수익은 정규 분포에 따라 이루어졌지만 대수의 정적 분포에 따라 실제 결과를 얻을 수 있다.

좋은 웹페이지 즐겨찾기