현대 자산운용 업계의 과학적 팩터 투자론의 바이블이라 할 수 있는 Eugene Fama와 Kenneth French 교수가 개발한 factor model은 1993년 3factor 모델로 시작해 2014년 5factor 모델로 발전했다. 이는 자산의 리스크 프리미엄을 측정하는 전통적인 모델인 CAPM의 실효성에 대해 반론을 제기하며 지금까지 우리가 흔히 말하는 우량주, 가치주 등에 대한 운용 전략 개념을 수립한 모델이다.
세부적으로 살펴보면, CAPM에서 개별자산의 수익률은 시장리스크 프리미엄의 민감도 즉 베타계수에 따라 결정된다고 하였는데, 이는 시장의 다른 리스크 팩터들을 고려하지 못한 것이다. 하지만, 파마 프렌치 모델에서는 CAPM에 시장 리스크 프리미엄 뿐만 아니라 기업의 상대적 사이즈, BE/ME(장부가 대비 시장가), 기업이익 그리고 기업의 투자 수준 등이 추가되어 자산의 기대수익률 결정된다고 주장하였다.
Fama-French 5 Factor
규모(SMB, Small Minus Big): 기업의 시가총액
가치(HML, High Minus Low): 시장가치 대비 장부가치
영업이익(RMW, Robust Minus Weak): 영업활동을 통해 얻는 순수익
투자(CMA, Conservative Minus Aggressive): 자산대비 투자비용
시장(Rm-Rf, Excess Return on The Market): 시장 리스크 프리미엄
결과적으로, 위 다섯가지 팩터들을 통해 개별자산의 리스크 프리미엄은 시장 리스크 프리미엄 뿐만 아니라 기업 규모, 가치, 영업이익 그리고 투자에 영향을 받는 다는 것을 알 수 있고 아래와 같이 수식을 정리할 수 있다.
파마 프렌치 모델은 시계열에 따라 리스크 팩터들의 회귀계수를 구하는거였다면, Fama-Macbeth 모델은 자산 수익률에 대해 리스크팩터들의 횡단면적 분석을 시행하는 것이다. 즉, 회귀식의 기준이 시간이 아니라 포트폴리오 내 자산들이다.
이는 리스크팩터가 포트폴리오 수익을 얼마나 발생시키는지에 관한 포트폴리오의 노출을 추정하는 것이다. 하지만 이와같은 추정문제에서 이분산성에 따른 잔차의 공분산, 계열간 상관, 리스크 팩터간 다중공선성이 발생할 수 있어 파마와 맥베스는 횡단면 회귀분석을 2스텝으로 진행하였다.
첫번째 단계로는 포트폴리오내 개별자산 i의 수익률에 대해 팩터들의 회귀계수를 추정하는 것이다.
이때, i = (1, ... , N), t = (1, ... T)이고, F는 팩터로 이루어진 매트릭스로, 위의 식을 좀 더 풀어쓰면 아래와 같다.
두번째 단계는 팩터들의 리스크 프리미엄을 추정하기 위해 첫번째 단계에서 구한 팩터별 회귀계수를 독립변수로, t시점의 포트폴리오의 수익률을 맵핑시켜 각 기간동안 리스크프리미엄의 벡터를 구할 수 있다.
이렇게 구해진 각 팩터의 리스크프리미엄 벡터를 시간 평균으로 계산해 t검정을 실시해 어떤 팩터가 유의미한지 검정한다.
파이썬 실험은 famma french 연구소에서 제공하는 월별 팩터를 사용한다. 우선, web.DataReader로 파마 프렌치 연구소에서 제공하는 다섯개의 팩터에 대한 월별 수익률을 불러온다.
import pandas as pd
import numpy as np
from statsmodels.api import OLS, add_constant
import pandas_datareader.data as web
!pip install linearmodels
from linearmodels.asset_pricing import LinearFactorModel
!pip install yfinance
import yfinance as yf
#팩터 불러오기(월별)
ff_factor_data = web.DataReader('F-F_Research_Data_5_Factors_2x3', 'famafrench', start='2012-05', end='2022-07')[0]
ff_factor_data.info()
다음으로, 섹터 하나를 하나의 자산으로 생각하고 구성된 포트폴리오인 17 industry portfolios의 수익률을 앞에와 마찬가지로 fama french 연구소 사이트에서 불러오고, 개별자산 수익률에서 무위험 수익률을 뺀다.
#섹터별 월별 수익률
ff_portfolio_data = web.DataReader('17_Industry_Portfolios', 'famafrench', start='2012-05', end='2022-07')[0]
ff_portfolio_data = ff_portfolio_data.sub(ff_factor_data.RF, axis=0) #리스크 프리미엄 계산: 섹터별 수익률 - 무위험 수익률
ff_portfolio_data
factor를 불러오는데 있어서 risk-free rate가 있었는데 이는 개별 수익률에서 무위험 수익률을 차분한 개별자산의 리스크 프리미엄을 구하기 위한 것이었으므로, factor data에서 무위험 수익률을 삭제해주어야 한다.
ff_factor_data = ff_factor_data.drop('RF',axis=1)
ff_factor_data.info()
그리고 fama-macbath model의 첫번째 단계를 수행하기 위해, 각 자산들의 팩터 회귀계수를 OLS로 추정한다.
: 섹터 i의 수익률 vector
: 5가지 factor matrix
betas = []
for industry in ff_portfolio_data:
step1 = OLS(endog=ff_portfolio_data.loc[ff_factor_data.index,industry], #종속변수
exog=add_constant(ff_factor_data)).fit() #독립변수
betas.append(step1.params.drop('const'))
betas = pd.DataFrame(betas, columns=ff_factor_data.columns, index=ff_portfolio_data.columns)
betas
두번째 단계인 리스크프리미엄 추정을 위해 앞서 추정된 회귀계수를 독립변수로 횡단면 선형회귀 분석을 시행해 각 시점별 팩터들의 회귀계수를 추정한다.
: t시점 섹터들의 수익률
: t시점의 factor에 따른 risk premium
lambdas = []
for period in ff_portfolio_data.index:
step2 = OLS(endog=ff_portfolio_data.loc[period, betas.index],
exog=betas).fit()
lambdas.append(step2.params)
lambdas = pd.DataFrame(lambdas, index=ff_portfolio_data.index, columns = betas.columns.tolist())
lambdas
하지만... LinearFactorModel 패키지를 사용하면 아래와 같이 친절하게 t통계량까지 구해준다... 검정결과를 보면, 최초 파마-맥배스 연구에서는 SMB, HML팩터만 유의미하다고 했다. 그리고 최근 10년의 데이터를 분석한 결과 Mkt-RF를 제외하고는 모두 유의미하지 않다고 나왔다...
model = LinearFactorModel(portfolios=ff_portfolio_data,
factors=ff_factor_data)
res = model.fit()
print(res)
그리고 해당 팩터들의 24개월(2년) 이동평균선을 시각화 해보았다. 2020년까지 계수 추정치가 크게 변하지 않았는데 2020년 이후로는 계수 추정치가 매우 크게 변동성을 가지는 것으로 보인다. 개별 팩터들을 세부적으로 분석해보면, 시장수익률-무위험수익률인 Mkt-RF의 경우 거의 항상 양수를 가진다.
이는 시장(주식)수익률이 무위험(채권)수익률보다 항상 높았다는 것인데 주식이 채권보다 위험자산이기 때문에 리스크-수익률 트레이딩 측면에서 당연한 결과라고 보인다. 시총이 작은 기업에서 큰 기업을 뺀 SMB의 경우 2020년을 기점으로 + 전환하였다. 시총 큰 기업의 수익률이 더 좋았단 것이다.
다음으로 HML인데 가치주대비 성장주를 나타낸다. HML은 2020년까지는 -1~1사이를 왔다갔다 했는데 2020년 이후 큰폭으로 하락하더니 다시 상승했다. 즉, 2020년 기점으로 성장주가 우세였다가 2022년 들어 가치주가 우세로 전환한 것이다.
영업이익을 보는 RMW도 2020년 이후 영업이익이 약한 기업이 우세하다가 올해들어 펀더멘털이 좋은 기업이 우세한것으로 보인다. 마지막으로 투자 팩터인 CMA는 2022년 전까지는 그래도 공격적 투자를 하는 기업이 우세했지만 2022년 이후는 보수적 투자를 하는 기업이 우세하다.
위의 결과를 어떻게 해석할 수 있을까? 우선, Mkt-RF만 유의미 했으므로, 개별자산의 리스크프리미엄에 영향을 주는 요인은 최근 10년에는 시장의 거시적 요인임을 알 수 있다. 나머지 네개의 팩터는 다소 비체계적인 위험요소인데, 그래도 이 팩터들의 추세를 보면 2020년 즉, 코로나 이전까지는 비교적 자산간의 팩터 영향력이 비슷했지만 코로나가 발생하고 거리두기, 재택근무 등 비대면 요소로 인해 IT기업들의 주가가 우세했지만, 2022년 코로나가 잠잠해지고 인플레이션이 이슈로 떠오르면서 투자는 보수적으로 펀더멘털은 탄탄한 가치주가 우세한것으로 확인되었다.
Code : https://github.com/hyeokkukim/python-for-finance/blob/main/Fama_French_Factor_Model.ipynb