Post List

2018년 5월 8일 화요일

HenryQuant: Rank.IC 함수를 이용한 팩터 강건성 검사




흔히 팩터 포트폴리오의 강건성을 검증하는 방법으로
사용되는 수치가 Rank IC 입니다.

이를 간단히 설명하면
특정 팩터의 랭킹과 향후 수익률의 랭킹 간의 상관관계 입니다.

간단히 예를 들어
PBR과 차월 수익률이 다음과 같이 설정되어 있습니다.

PBR은 낮을수록 랭킹 숫자가 낮으며
수익률은 높을수록 랭킹 숫자가 낮습니다.


PBR
RANK(PBR)
Return
RANK(RETURN)
1.76
6
0.040547
3
1.61
5
0.061453
2
0.63
1
0.037676
4
11.18
10
-0.09455
10
6.17
9
0.005918
6
0.64
2
0.072254
1
0.99
4
-0.07345
9
1.92
7
-0.00544
8
0.86
3
0.035019
5
4.83
8
0.005258
7
Rank IC
0.59




이 두 랭킹 간의 상관관계가 바로 Rank IC 입니다.
(산포도의 기울기)

만일 팩터의 랭킹 대로 수익률의 랭킹이 나온다면,
즉 팩터의 강도와 향후 수익률이 Perfectly Linear 관계라면
Rank IC는 1이 나올 것이며,

정확히 반대로 움직인다면 Rank IC는 -1 이 나올 것입니다.

일반적으로 3%~5% 이상이면
전략이 유의한 것으로 통용되고 있습니다.

HenryQuant 내에서 Rank IC를 확인하는 함수는 다음과 같습니다.

x = Rank.IC(Rank, R)

입력 변수는 매 리밸런싱 시기별
팩터의 Rank 데이터와
Return(R) 데이터가 필요합니다.

이는 Return.Portfolio 함수의 사용법과 거의 같으며
weight가 들어갈 부분에 Rank가 들어가는 차이 밖에 없습니다.

Rank 부분에는 팩터의 Rank가 아닌
팩터 자체(예: PBR 값 자체)를 입력해도
동일하게 작동합니다.


다음은 예시입니다.


devtools::install_github("hyunyulhenry/HenryQuant")
library(HenryQuant)

pack = c("PerformanceAnalytics")
ipak(pack)

rets = asset_data

lookback = 12
Rank = list()
ep = endpoints(rets, on = "months") # Rebalancing Frequency


먼저 패키지를 설치한 후,
rets 변수에 수익률 데이터를 받습니다.

lookback은 12개월로 설정하며,
월간 리밸런싱을 위해 rets에서 월말 데이터를 뽑습니다.



for(i in (lookback+1) : (length(ep)) ) {
 
  x = rank(-Return.cumulative( rets[c(ep[i-12] : ep[i]) , ] ))
  Rank[[i]] = xts(t(x), order.by = index(rets[ep[i]]))

}


먼저 x에는 과거 12개월 누적수익률의 랭킹을 구해줍니다.

R은 기본적으로 오름차순 이므로,
수익률이 높음에 따라 랭킹의 숫자가 낮게 표현해주기 위해
앞에 (-) 부호를 붙여줍니다.

xts 함수를 사용하여 Rank 리스트에 저장해 줍니다.
(Return.portfolio를 사용하기 위한
weight 저장과 동일한 기법입니다.)




for(i in (lookback+1) : (length(ep)) ) {

  x = drop(-Return.cumulative( rets[c(ep[i-12] : ep[i]) , ] ))
  Rank[[i]] = xts(t(x), order.by = index(rets[ep[i]]))

}


누적수익률의 랭킹이 아니라
단순히 누적수익률 자체를 입력해도 결과는 같습니다.

역시나 (-) 부호를 붙여주며
drop 함수를 통해 형식을 numeric 형태로 바꾸어 줍니다.



Rank = do.call(rbind, Rank)
r.ic = Rank.IC(Rank, rets)
mean(r.ic)
chart.Bar(r.ic)
chart.RollingMean(r.ic)


do.call 함수를 통해 Rank 변수를 xts형태로 합쳐줍니다.
그 후, Rank.IC 함수에 Rank와 rets를 입력하면
각 리밸런싱 시점과 차월 수익률 간의 Rank IC 가 계산됩니다.

만일 리밸런싱이 분기 혹은 반기 단위이면,
리밸런싱 시점의 팩터 Rank를 기준으로 차기 리밸런싱 까지
월간 수익률을 기준으로 월별 IC가 계산됩니다.




Rank IC의 평균은 8.49% 로써 매우 높게 나타납니다.

즉 12개월 누적수익률 모멘텀의 랭킹과
향후 수익률의 랭킹은
굉장히 높은 상관관계를 가지고 있습니다.


 



매 월별 Rank IC와
12개월 롤링 Rank IC도 손쉽게 계산할 수 있습니다.


#---#


아래는 국내 PBR 팩터를 이용한
Rank IC 입니다.

역시나 평균 7% 가량 나옴으로써
매우 높은 Rank IC가 나타남이 확인됩니다.






※ Rank 컬럼 수와 Return 컬럼 수는 동일해야 합니다.
※ 팩터 익스포저가 없거나 유니버스가 아닌 종목의 Rank는
NA로 두는 것이 가장 좋습니다.

댓글 없음:

댓글 쓰기