계량투자 실험실 Quantlab

추적오차의 통제

BM에 대한 추적오차를 통제해야 할 때가 종종 있다. 특히 기관투자자들에게는 추적오차 관리가 굉장히 중요한 업무인 경우가 많다. 이 포스트에서는 추적오차 통제에 대한 대수적 해법 (Algebraic solution)을 제시하였다. 그리고 이전 포스트에서 제시한 Global Fixed-income Allocation Model (글로벌 채권배분 모형, GFAM)에 적용하여 그 유효성을 검증해보았다.

BM이 US Aggregate 인 경우의 추적오차 통제성능
compare_te_agg


Formulation

사후적 추적오차(ex-post tracking error)는 말 그대로 이미 발생한 일이고, 사후적인 통제가 불가능하다. 따라서 일반적으로 추적오차를 통제하기 위해서는, 포트폴리오 비중조절 등을 통해 현재 시점에서의 사전적 추적오차(ex-ante tracking error)를 일정 범위 내에서 관리하는 경우가 많다. 하지만 이 경우, 실질적인 평가대상인 사후적 추적오차와의 괴리가 불가피하게 발생하게 된다. 이 포스트의 아이디어는, 사후적 추적오차를 기반으로 사전적 추적오차를 Rolling 업데이트하는 것이다.

아이디어

Rolling 추적오차 = 사후적(11M) + 사전적(1M) < 목표 추적오차


사전적 추적오차의 통제

우선 사전적 추적오차부터 통제해보자. 미리 정해진 투자전략에 의해 개의 종목의 포트폴리오가 주어졌고, BM의 종목별 비중을 알고 있다고 가정한다.

우리는 포트폴리오와 BM 간의 비중조절이 사전적 추적오차 에 어떤 영향을 미치는 지 살펴볼 예정이다.

포트폴리오에 만큼 투자(이 값을 포트폴리오 전체비중이라고 부르자)하고, 나머지 비중 를 BM에 투자한다면, 최종 포트폴리오 벡터 와 초과비중 벡터 는 다음과 같이 결정될 것이다.

따라서 연률화 계수 와 공분산 행렬 에 대해서, 사전적 추적오차 는 다음과 같이 의 함수로 나타낼 수 있다. (사전적 추적오차에 대한 자세한 설명은 여기를 참고)

여기서 은 포트폴리오에 100% 투자했을 때(BM에 투자하지 않는 경우, 즉 )의 사전적 추적오차를 뜻하며, 최종 포트폴리오가 가질 수 있는 추적오차의 최대값이 된다. 결국 최종 포트폴리오의 사전적 추적오차는 포트폴리오 전체비중 의 크기에 선형적으로 비례하게 된다.


Algebraic solution

논의를 진행하기 위해서는 다음의 변수들이 필요하다.

여기서 Safety buffer 의 의미는, 추적오차를 좀더 여유있게 관리하기 위해 약간의 Margin을 준 것이라고 이해하면 된다. 예를들어 목표 추적오차가 5%로 주어졌다고 하고, Safety buffer를 80%로 설정한다면, 우리는 Rolling 추적오차를 약 4% (= 5% x 80%) 수준에서 관리하게 되는 것이다.

이제 사전적 추적오차가 일 만큼 반영된 Rolling 추적오차 를 다음과 같이 구성해보자.

우리의 목적은, 다음의 두 가지 제약조건(Constraints)을 만족하는 포트폴리오 전체비중 의 최대값을 찾는 것이 된다.

이 문제는 본질적으로 최적화 문제(Optimization problem)에 속한다. 하지만 제약조건이 실수 에 대한 단순 2차함수로 되어 있기 때문에, 다음과 같이 Algebraic solution 를 쉽게 구할 수 있다.

여기서 로 치환하면,


eta_shape


Filtering

위에서 구한 포트폴리오 전체비중 는 두 가지 측면에서 약점이 있다.

  1. 가 포함되어 있이기 때문에, 주위에서 가 급격하게 0으로 수렴(위의 차트 참조)한다. 운용 측면에서 보면, 사후적 추적오차 가 다소 큰 상황에서, 포트폴리오 편입/편출의 변동이 과도할 수도 있음을 의미한다.

  2. Rolling 추적오차 에 사전적 추적오차가 반영되는 비중이 사후적 추적오차에 비해 상대적으로 작기 때문에, 단기적인 변동성 국면에는 다소 취약할 수 있다.

따라서 이들 약점을 일정부분 보완하기 위해, 다음의 Filter를 추가하였다.

  1. Smoothing Filter: 부근에서 포트폴리오 전체비중 의 변화를 부드럽게 조정

  2. Short-term Alert Filter: 사전적 추적오차가 단기적으로 목표 추적오차를 넘지 않도록, 를 보수적으로 결정


Smoothing Filter

는 부근에서 포트폴리오 전체비중 의 변화가 크기 때문에, 실제 운용하는 과정에서 포트폴리오 관리가 매우 불안정해질 가능성이 높다. 이를 보완하기 위해, 어떤 값 () 에서 에 접하는 새로운 지수(Exponential) 함수 를 설계한다.

eta_and_smoothershape


간단한 수식전개를 통해 는 아래와 같이 도출된다.

따라서 기존의 는 다음과 같이 새로운 비중 으로 변환된다.


eta_smoothedhape

이와 같은 변환 를 Smoothing Filter라고 부르도록 하자.


값의 의미

값은 가 기존(filtering 이전)의 비중 와 얼마나 유사한 지를 나타내는, 일종의 Tuning factor 이다. 가 0에 가까울 수록 가 된다. 다음은 의 변화에 따른 의 형태를 보여주고 있다.

eta_by_k


Short-term Alert Filter

최근 며칠간 금융시장의 변동성이 급등했다고 가정해보자. Rolling 추적오차 는 연간 총영업일수 를 Rolling 하며 사전적 추적오차의 일부(일)만을 반영하기 때문에, 최근에 발생한 변동성의 반영은 미미할 것이다. 따라서 변동성이 크게 상승하는 구간에는, 매우 보수적인 관점에서 단기적인 변동성을 감안할 필요성이 생긴다.

우선 를 단기적인 사전적 추적오차라고 정의하고, 다음과 같이 포트폴리오 전체비중 의 함수로 나타내보자.

전개과정은 과 완전히 동일하다. 가 Short-term 공분산 행렬 로 바뀌었을 뿐이다. 는 EWM (Exponentially Weighted Moving Method)를 써도 되고, 가장 최근의 수익률 데이터를 활용한 샘플 공분산 행렬 를 써도 큰 상관은 없다. 참고로 이 포스트에서는, 는 12개월 샘플 공분산 행렬, 는 1개월 샘플 공분산 행렬을 쓰고 있다. 그리고 마찬가지로 는 단기적인 사전적 추적오차의 최대값이 된다.

단기적인 사전적 추적오차 가 다음의 제약조건을 만족한다고 해보자.

마찬가지로 우리는 위의 제약조건을 만족하는 중 최대값을 찾을 것이고, 이는 다음과 같이 쉽게 도출된다.

변동성이 급등하는 구간에서 단기적인 사전적 추적오차의 최대값 는 꽤나 큰 값일 것이므로, 는 다소 보수적인 비중으로 해석된다. 우리는 보다 더 작은 값으로 포트폴리오 전체비중을 결정할 것이다.

이제 기존의 포트폴리오 전체비중 (즉, 이전 단계에서 에 Smoothing Filter 가 적용된 값)은 다음과 같이 새로운 비중 으로 변환된다. 이러한 변환을 Short-term Alert Filter 라고 하자.


Final Solution

이제까지 전개한 것을 종합해보자. 최종비중은 가 된다.

여기서,


Application

이제까지 셋업한 추적오차 통제 방법론을 실제 포트폴리오 전략에 적용해보자. 이 포스트에서는 모멘텀 기반의 글로벌 채권배분 전략인 GFAM (Global Fixed-income Allocation Model)에 적용해보았다. 아래 백테스트에서 공통적으로 사용하고 있는 설정들은 다음과 같다.


Filtering 효과

우선 이 포스트에서 설계한 두 가지 Filter들의 효과를 확인해보자. GFAM에 목표 추적오차 =3% 로 백테스트 하였고, Smoothing Filter와 Short-term Alert Filter를 차례로 추가 적용하였다. BM은 AGG (US Aggregate bond ETF) 로 하였다. 아래 오른쪽 차트는 사후적(1년) 추적오차를 측정한 것이다.

compare_filters


Validation

여러가지 목표 추적오차에 대해서, 추적오차 통제가 제대로 되는 지를 확인한다. Smoothing Filter와 Short-term Alert Filter를 모두 적용하였다. 아래의 각 투자지표에 대해서는 투자성과의 측정을 참고한다.

공통적으로 다음을 알 수 있다.

[CASE 1] BM = AGG (US Aggregate bond)

compare_te_agg
stats_agg

[CASE 2] BM = HYG (US High yield bond)

compare_te_hy

[CASE 3] BM = ACWI (MSCI All country)

compare_te_acwi
comments powered by Disqus