R, 위험과 포트폴리오 계산 등
오랫만에 Facebook에 블로그 글을 올립니다.
학부 1학년들에게 통계학을 가르치면서 R을 사용하고 있답니다. 평균과 분산에 재미를 주기 위해 예들을 많이 구상했지만 못써먹었던 것들이 많습니다. 그 중 하나를 소개합니다.
투자론을 공부하면 통계와 주식 포트폴리오 사이에 상당히 관련이 있다는 점을 알게 됩니다. 어떤 부분에서는 거의 말만 다르고 내용이 똑같습니다.
예를 들어,
여러분이 어떤 투자를 하려 할 때 다음과 같은 상황이 주어졌다고 합시다.
(1) 나쁠 때의 확률이 0.1, 이 때의 수익률이 -10%
(2) 보통 때의 확률이 0.7, 이 때의 수익률이 20%
(3) 좋을 때의 확률이 0.2, 이 때의 수익률이 50%
기대수익률을 R로 계산하면 다음과 같습니다(커서를 R>로 표시).
R> CasesProbabilities <- c( 0.1, 0.7, 0.2 )
R> CasesReturns <- c( -0.1, 0.2, 0.5 )
R> ExpectedReturn <- sum( CasesProbabilities * CasesReturns )
R> ExpectedReturn
[1] 0.23
23%의 수익이 예상됩니다.
네, 맞아요. 이것은 그냥 평균을 구하는 식입니다.
또한,
위험은 자료의 표준편차로 생각할 수 있습니다.
R> ExpectedRisk <- sqrt ( sum ( CasesProbabilities * CasesReturns^2) - ExpectedReturn^2 )
R> ExpectedRisk
[1] 0.1615549
원래 공식이,
표준편차 = sqrt(분산)
분산 = 평균(X^2) - 평균^2
이렇습니다.
문제를 좀 더 현실감 있게 바꾸어 보겠습니다.
어떤 주식 A1, A2, A3, A4를 지난 100일 간 관찰했다고 합시다.
100일 중 국내의 경제여건이 좋았을 때와 좋지 않았을 때, 평범했을 때를 분류하고, 각각의 경우에 있어 투자 수익률을 조사했습니다. 그 결과를 정리하니,
------------------------------
주식 기대수익률 표준편차
------------------------------
A1 12 15
A2 12 12
A3 15 12
A4 18 18
------------------------------
이때 분산계수는 위험수준의 상대적인 척도로 기대수익률 1%에 대한 분산의 비율을 뜻합니다. 즉,
CV = sigma / E(R)
계산을 해보면
R> StockNames <- c("A1","A2","A3","A4")
R> E_r <- c(12,12,15,18)
R> Sigma <- c(15,12,12,18)
학부 1학년들에게 통계학을 가르치면서 R을 사용하고 있답니다. 평균과 분산에 재미를 주기 위해 예들을 많이 구상했지만 못써먹었던 것들이 많습니다. 그 중 하나를 소개합니다.
투자론을 공부하면 통계와 주식 포트폴리오 사이에 상당히 관련이 있다는 점을 알게 됩니다. 어떤 부분에서는 거의 말만 다르고 내용이 똑같습니다.
예를 들어,
여러분이 어떤 투자를 하려 할 때 다음과 같은 상황이 주어졌다고 합시다.
(1) 나쁠 때의 확률이 0.1, 이 때의 수익률이 -10%
(2) 보통 때의 확률이 0.7, 이 때의 수익률이 20%
(3) 좋을 때의 확률이 0.2, 이 때의 수익률이 50%
기대수익률을 R로 계산하면 다음과 같습니다(커서를 R>로 표시).
R> CasesProbabilities <- c( 0.1, 0.7, 0.2 )
R> CasesReturns <- c( -0.1, 0.2, 0.5 )
R> ExpectedReturn <- sum( CasesProbabilities * CasesReturns )
R> ExpectedReturn
[1] 0.23
23%의 수익이 예상됩니다.
네, 맞아요. 이것은 그냥 평균을 구하는 식입니다.
또한,
위험은 자료의 표준편차로 생각할 수 있습니다.
R> ExpectedRisk <- sqrt ( sum ( CasesProbabilities * CasesReturns^2) - ExpectedReturn^2 )
R> ExpectedRisk
[1] 0.1615549
원래 공식이,
표준편차 = sqrt(분산)
분산 = 평균(X^2) - 평균^2
이렇습니다.
문제를 좀 더 현실감 있게 바꾸어 보겠습니다.
어떤 주식 A1, A2, A3, A4를 지난 100일 간 관찰했다고 합시다.
100일 중 국내의 경제여건이 좋았을 때와 좋지 않았을 때, 평범했을 때를 분류하고, 각각의 경우에 있어 투자 수익률을 조사했습니다. 그 결과를 정리하니,
------------------------------
주식 기대수익률 표준편차
------------------------------
A1 12 15
A2 12 12
A3 15 12
A4 18 18
------------------------------
이때 분산계수는 위험수준의 상대적인 척도로 기대수익률 1%에 대한 분산의 비율을 뜻합니다. 즉,
CV = sigma / E(R)
계산을 해보면
R> StockNames <- c("A1","A2","A3","A4")
R> E_r <- c(12,12,15,18)
R> Sigma <- c(15,12,12,18)
R> DataSet <- data.frame(StockNames,E_r,Sigma)
R> DataSet
StockNames E_r Sigma
1 A1 12 15
2 A2 12 12
3 A3 15 12
4 A4 18 18
R> CVs <- Sigma / E_r
R> DataSet <- cbind(DataSet, CVs)
R> DataSet
StockNames E_r Sigma CVs
1 A1 12 15 1.25
2 A2 12 12 1.00
3 A3 15 12 0.80
4 A4 18 18 1.00
위험의 1순의 주식은 A1, 2순위는 A2, A4, 그리고 3순위는 A3 주식입니다. 관리가 필요한 순서가 되겠습니다.
이제 포트폴리오 관리를 생각해 보겠습니다.
자산들의 상대적인 자료가 다음과 같다고 합시다.
A의 기대수익률 = 0.3, 표준편차 0.2
B의 기대수익률 = 0.1, 표준편차 0.08
A의 투자비율이 40%, B가 60%라고 합시다.
이렇게 두 개 이상을 묶어서 투자 관리하는 것을 포트폴리오 관리라고 합니다. 이제 이 포트폴리오의 기대수익률과 표준편차를 계산해 보겠습니다.
먼저 A와 B 수익률의 공분산을 계산해야 합니다. 자료 A와 자료 B가 각각 Data_A, Data_B로 주어졌다고 할 때, 공분산을 계산해보니,
R> cov(Data_A, Data_B)
[1] -0.01
이라고 합시다.
통계에서 결합확률 분포의 분산은
V(a*X+b*Y) = a^2*V(X) + b^2*V(Y)+2a*b*Cov(X,Y)
이므로,
R> 0.4^2*0.2^2+0.6^2*0.08^2+2*0.4*0.6*(-0.01)
[1] 0.003904
저런, 이 포트폴리오를 운영하면 수익이 거의 나지 않겠어요.
---------------------------------------------------------------
함수 c() : 자료를 결합해서 벡터를 생성함
함수 data.frame() : 여러 열벡터를 결합하여 data.frame 자료를 생성함
함수 cbind() : matrix나 data.frame에서 열벡터 결합을 위한 함수
함수 sqrt() : 제곱근을 계산
함수 sum() : 벡터의 원소 합
함수 cov() : 두 벡터의 공분산을 계산함
댓글
댓글 쓰기