[ML4T] 선형 팩터 모델: 파마-프렌치(Fama-French) 5팩터 모델, 파마-맥베스(Fama-MacBeth) 회귀분석

목차

    0. 관련 글 목록

    (1) [ML4T] Machine Learning for Trading: From Idea to Execution
    (2) [ML4T] 미국 주식 데이터 수집하기 - 주가, 거래량, 재무 데이터


    이 글은 퀀트 투자를 위한 머신러닝 딥러닝 알고리즘 트레이딩 2/e 7장의 내용을 바탕으로 작성되었습니다.
    https://github.com/stefan-jansen/machine-learning-for-trading

     

    GitHub - stefan-jansen/machine-learning-for-trading: Code for Machine Learning for Algorithmic Trading, 2nd edition.

    Code for Machine Learning for Algorithmic Trading, 2nd edition. - GitHub - stefan-jansen/machine-learning-for-trading: Code for Machine Learning for Algorithmic Trading, 2nd edition.

    github.com


    1. 들어가며

    7장은 선형 모델을 통한 리스크 팩터 학습, 자산 수익률 예측에 관한 내용을 다루고 있다. 7장의 내용 중에서 이번 스터디를 통해 새롭게 알게 된 파마-프렌치 5팩터 모델, 파마-맥베스 회귀분석에 관해 정리해보려고 한다.


    2. 파마-프렌치 5팩터 모델(Fama-French 5 factor model)

    팩터 모델은(factor model)은 자산의 수익률과 이 수익률을 이끌어 내는 리스크 원천 간의 관계를 계량화하기 위해 사용된다. 팩터 모델은 자본 자산 가격 결정 모델(Capital Asset Pricing Model; CAPM)에서 출발한다. CAPM은 무위험 이자율(Rf, ex.국채 금리) 대비 전체 시장의 초과 기대 수익률(Rm-Rf)을 독립변수로 개별 자산의 기대 수익률(Ri)을 종속변수로 하는 단순 선형 회귀 모형(simple linear regression model)으로 볼 수 있다.

    $$R_i= \alpha_i + Rf + \beta_i(Rm-Rf)$$

    실제 적용시에는 개별 자산의 경우도 초과수익률을 계산한 다음 회귀 모형을 적합하기 때문에 무위험 수익률을 좌변으로 넘겨서 아래와 같이 식을 다시 쓸수 있다.

    $$R_i-Rf= \alpha_i + \beta_i(Rm-Rf)$$

    CAPM을 통해 전체 시장의 움직임 대비 개별 자산이 얼마나 민감하게 움직이는지 알아볼 수 있지만 시장 초과수익률로는 설명되지 않는 현상들이 자주 관측되기 시작하면서 자산 수익률을 설명하기 위한 새로운 팩터를 찾는 작업이 이루어 졌는데, 유진 파마(Eugene Fama)[각주:1]케네스 프렌치(Kenneth French)가 제안한 파마-프렌치 3 팩터 모델(1993)[각주:2], 파마-프렌치 5 팩터 모델(2014)이 대표적이다. 파마-프렌치 3 팩터 모델은 CAPM에서 사용한 리스크 원천에 기업의 상대적 규모(relative size)가치(value)를 추가한 것이고, 5 팩터 모델은 여기에 기업 이익(firm profitability)투자 수준(level of investment)을 포함하여 확장한 것이다. 파마-프렌치 3 팩터 모델은 시장의 초과 수익을 나타내는 베타가 유의한 팩터가 아니며, 그보다는 기업 규모와 가치지표를 사용하는 것이 자산 수익률 예측에 효과적이라는 것을 밝혔다고 한다. 결과적으로는 '시가총액이 작은 저평가된(PBR이 낮은) 가치주를 사는 것이 좋다'라는게 논문이 말하고자 하는 것이었다.

    Concept Label Name Description
    기업 규모 SMB Small Minus Big (average return on the 9 small stock portfolios) - (average return on the 9 big stock portfolios)
    가치 HML High Minus Low (average return on the 2 value portfolios) - (average return on the 2 growth portfolios)
    영업 수익성 RMW Robust Minus Weak (average return on the 2 robust operating profitability portfolios) - (average return on the 2 weak operating profitability portfolios)
    투자 CMA Conservative Minus Aggressive (average return on the 2 conservative investment portfolios) - (average return on the 2 aggressive investment portfolios)
    시장 Rm-Rf Excess return on the market (value-weight return of all firms incorporated in the US and listed on the NYSE, AMEX, or NASDAQ at the beginning of month t with 'good' data for t) - (the one-month Treasury bill rate)
    • 기업 규모: 시가총액
    • 가치: 주식의 장부가치(Book value = 순자산 = 자본)을 시가총액으로 나눈 값 = 1/PBR
    • 영업 수익성(OP): 매출에서 비용을 뺀 금액
    • 투자: 투자를 얼마나 보수적/공격적으로 하는지

    위의 표는 각 팩터에 대한 책에 제시된 설명인데 SMB와 HML에 대한 설명이 논문에서의 설명과는 조금 다르다. 논문에서 SMB, HML 팩터를 계산한 방식은 글 마지막에 첨부한 파이썬으로 배우는 포트폴리오 - 6.3 파마-프렌치 3요인 모델에 잘 설명이 되어 있다.

    SMB와 HML 포트폴리오를 구성하는 방법은 다음과 같다. 기업의 시가총액 기준으로 상위 50%와 하위 50%에 속하는 기업들로 두 개의 포트폴리오(Big, Small)를 구성한다. 그리고 장부가/시장가 비율 기준으로 상위 30%, 중위 40%, 하위 30%에 속하는 기업들로 세 개의 포트폴리오(Value, Neutral, Growth)를 구성한다. 이렇게 기업 규모 기준 두 그룹과 장부가/시장가 기준 세 그룹을 서로 교차해 여섯 개의 기업 규모-장부가/시장가(BV, BN, BG, SV, SN, SG)를 구성한 후, SMB는 1/3(SV + SN + SG) - 1/3(BV + BN + BG), HML은 1/2(SV + BV) - 1/2(SG + BG)로 계산한다.
    ...
    SMB 계산에는 여섯 개의 포트폴리오가 필요하다. BE/ME(가치주, 성장주, 중립주)와 시가총액의 크기(소형, 대형)로 나눠 소형가치주, 소형중립주, 소형성장주와 대형가치주, 대형중립주, 대형성장주다. HML은 대형가치주와 소형가치주의 수익률 평균에서 대형성장주와 소형성장주의 수익률 평균을 뺀 것이다.

     

    결과적으로 파마-프렌치 5 팩터 모델은 아래와 같이 쓸 수 있다.

    $$R_i-Rf= \alpha_i + \beta_i(Rm-Rf)+s_{i}SMB+h_{i}HML+r_{i}RMW+c_{i}CMA$$

    파마-프렌치 팩터 모델에 관한 리서치 결과는 케네스 프렌치의 웹페이지에 지속적으로 업데이트 되고 있다. 


    3. 파마-맥베스 회귀분석(Fama-MacBeth regression)

    자산 수익률을 종속변수, 5개의 팩터를 독립변수로 하는 다중회귀분석을 수행하여 파마-프렌치 팩터 모델을 만들 수도 있다. 하지만 일정기간 동안 여러 자산에 대해 추정을 수행해야 하는 팩터 모델의 특성상 다중회귀모형의 가정을 위반[각주:3]할 가능성이 높다. 잔차의 상관관계로 유발되는 추론상의 문제[각주:4]를 해결하기 위해 파마(Fama)와 맥베스(MacBeth)는 팩터에 대한 수익률의 횡단면 회귀 분석을 위한 2-step 방법론을 제안하였다. 파마-맥베스 회귀분석(Fama-MacBeth regression)은 데이터의 각 관측 시점마다 횡단면 회귀분석(cross-sectional regression)을 실시하여 얻은 회귀계수 추정치들의 집합으로부터 각 회귀계수들의 시계열 평균 표준오차, 이에 기반하는 검정통계량(t-statistic)을 얻는 추정방식이다.[각주:5]


    [Step1] 각 자산에 대해 M개의 팩터를 독립변수, N개의 자산 포트폴리오의 수익률을 종속변수로 하는 회귀모형 적합

    $$R_{1,t}=\beta_0 + \beta_{1,F_1}F_{1,t}+ \beta_{1, F_2}F_{2,t}+ \cdots + \beta_{1, F_M}F_{M,t}+\epsilon_{1,t}$$$$R_{2,t}=\beta_0 + \beta_{2,F_1}F_{1,t}+ \beta_{2, F_2}F_{2,t}+ \cdots + \beta_{2, F_M}F_{M,t}+\epsilon_{2,t}$$$$\cdots$$$$R_{N,t}=\beta_0 + \beta_{N,F_1}F_{1,t}+ \beta_{N, F_2}F_{2,t}+ \cdots + \beta_{N, F_M}F_{M,t}+\epsilon_{n,t}$$

    [Step2] Step1에서 구한 회귀계수(\(\hat{\beta}\))를 독립변수, 각 시점의 포트폴리오 수익률(\(R_{i, t}(i=1,\cdots,n)\))을 종속변수로 하는 회귀모형 적합

    $$R_{i,1} = \lambda_{1,0}+\lambda_{1,1}\hat{\beta}_{i, F_1}+\lambda_{1,2}\hat{\beta}_{i, F_2}+ \cdots + \lambda_{1,M}\hat{\beta}_{i, F_M} + \epsilon_{i,1}$$$$R_{i,2} = \lambda_{2,0}+\lambda_{2,1}\hat{\beta}_{i, F_1}+\lambda_{2,2}\hat{\beta}_{i, F_2}+ \cdots + \lambda_{2,M}\hat{\beta}_{i, F_M} + \epsilon_{i,2}$$$$\cdots$$$$R_{i,T} = \lambda_{T,0}+\lambda_{T,1}\hat{\beta}_{i, F_1}+\lambda_{T,2}\hat{\beta}_{i, F_2}+ \cdots + \lambda_{T,M}\hat{\beta}_{i, F_M} + \epsilon_{i,T}$$


    [Step1]은 N개의 자산에 대해 각각 회귀모델을 적합시키는 것이고, [Step2]는 T개의 시점에 대해 각각 회귀모델을 적합시키는 것이다. [Step2]의 결과로 나오는 회귀계수 행렬 \(\hat{\lambda}_{T \times M}\)을 시간축 t에 대해 평균을 취한 각 팩터의 계수값을 각 팩터에 대한 최종적인 회귀계수 추정값으로 사용한다.


    4. 파이썬 구현

    이제 파마-맥베스 회귀분석을 이용하여 파마-프렌치 5 팩터 모델을 파이썬 코드를 통해 구현해보자. 파마와 프렌치는 자신들의 웹사이트에 리스크 팩터와 17개 산업군에 대한 포트폴리오 데이터를 제공하고 있고, pandas-datareader를 통해 이 데이터를 불러올 수 있다. 예제 코드에서는 2000년~2020년의 데이터를 불러와서 사용하였다. 수익률은 월단위로 제공되어 불러온 데이터에는 21x12=252개의 데이터포인트가 존재한다.

    17개 산업군에 대한 세부사항은 다음 첨부파일을 참고

    Siccodes17.txt
    0.03MB

    import pandas as pd
    import numpy as np
    
    from statsmodels.api import OLS, add_constant
    import pandas_datareader.data as web
    
    from linearmodels.asset_pricing import LinearFactorModel
    
    import matplotlib.pyplot as plt
    import seaborn as sns
    # 2000~2020 월별 수익률
    ff_factor = 'F-F_Research_Data_5_Factors_2x3'
    ff_factor_data = web.DataReader(ff_factor, 'famafrench', start='2000', end='2020-12')[0]
    ff_factor_data.info()
    
    <class 'pandas.core.frame.DataFrame'>
    PeriodIndex: 252 entries, 2000-01 to 2020-12
    Freq: M
    Data columns (total 6 columns):
     #   Column  Non-Null Count  Dtype  
    ---  ------  --------------  -----  
     0   Mkt-RF  252 non-null    float64
     1   SMB     252 non-null    float64
     2   HML     252 non-null    float64
     3   RMW     252 non-null    float64
     4   CMA     252 non-null    float64
     5   RF      252 non-null    float64
    dtypes: float64(6)
    memory usage: 13.8 KB
    # 17개 산업군의 월별 포트폴리오 수익률
    ff_portfolio = '17_Industry_Portfolios'
    ff_portfolio_data = web.DataReader(ff_portfolio, 'famafrench', start='2000', end='2020-12')[0]
    ff_portfolio_data.info()
    
    <class 'pandas.core.frame.DataFrame'>
    PeriodIndex: 252 entries, 2000-01 to 2020-12
    Freq: M
    Data columns (total 17 columns):
     #   Column  Non-Null Count  Dtype  
    ---  ------  --------------  -----  
     0   Food    252 non-null    float64
     1   Mines   252 non-null    float64
     2   Oil     252 non-null    float64
     3   Clths   252 non-null    float64
     4   Durbl   252 non-null    float64
     5   Chems   252 non-null    float64
     6   Cnsum   252 non-null    float64
     7   Cnstr   252 non-null    float64
     8   Steel   252 non-null    float64
     9   FabPr   252 non-null    float64
     10  Machn   252 non-null    float64
     11  Cars    252 non-null    float64
     12  Trans   252 non-null    float64
     13  Utils   252 non-null    float64
     14  Rtail   252 non-null    float64
     15  Finan   252 non-null    float64
     16  Other   252 non-null    float64
    dtypes: float64(17)
    memory usage: 35.4 KB
    # 포트폴리오 수익률 - 무위험 수익률 = 초과 수익률
    ff_portfolio_data = ff_portfolio_data.sub(ff_factor_data.RF, axis=0)
    
    # 무위험 수익률 변수를 제외한 5개 팩터 변수만 남김
    ff_factor_data = ff_factor_data.drop('RF', axis=1)
    ff_factor_data.info()
    
    <class 'pandas.core.frame.DataFrame'>
    PeriodIndex: 252 entries, 2000-01 to 2020-12
    Freq: M
    Data columns (total 5 columns):
     #   Column  Non-Null Count  Dtype  
    ---  ------  --------------  -----  
     0   Mkt-RF  252 non-null    float64
     1   SMB     252 non-null    float64
     2   HML     252 non-null    float64
     3   RMW     252 non-null    float64
     4   CMA     252 non-null    float64
    dtypes: float64(5)
    memory usage: 11.8 KB
    # Step 1: Factor Exposures
    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.info()
    
    <class 'pandas.core.frame.DataFrame'>
    Index: 17 entries, Food  to Other
    Data columns (total 5 columns):
     #   Column  Non-Null Count  Dtype  
    ---  ------  --------------  -----  
     0   Mkt-RF  17 non-null     float64
     1   SMB     17 non-null     float64
     2   HML     17 non-null     float64
     3   RMW     17 non-null     float64
     4   CMA     17 non-null     float64
    dtypes: float64(5)
    memory usage: 1.4+ KB
    betas

    # Step 2: Risk Premia
    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.info()
    
    <class 'pandas.core.frame.DataFrame'>
    PeriodIndex: 252 entries, 2000-01 to 2020-12
    Freq: M
    Data columns (total 5 columns):
     #   Column  Non-Null Count  Dtype  
    ---  ------  --------------  -----  
     0   Mkt-RF  252 non-null    float64
     1   SMB     252 non-null    float64
     2   HML     252 non-null    float64
     3   RMW     252 non-null    float64
     4   CMA     252 non-null    float64
    dtypes: float64(5)
    memory usage: 33.8 KB
    lambdas

    lambdas.mean()
    
    Mkt-RF    0.697643
    SMB      -0.616402
    HML      -0.160462
    RMW       0.629483
    CMA       0.009336
    dtype: float64
    lambdas.mean().sort_values().plot.barh(figsize=(12, 4))
    sns.despine()
    plt.tight_layout();

    t = lambdas.mean().div(lambdas.std())
    t
    
    Mkt-RF    0.149588
    SMB      -0.085795
    HML      -0.034590
    RMW       0.128289
    CMA       0.001396
    dtype: float64

    아래는 2단계 추정의 결과로 산출된 계수 값들을 2년 단위로 이동평균을 계산하여 그래프를 그린 것이다. 계수 추정치가 시간의 흐름에 따라 크게 변하지는 않는지 확인하기 위한 것으로 보면 된다.

    window = 24  # months
    lambdas.rolling(window).mean().dropna().plot(lw=2,
                                                 figsize=(14, 7),
                                                 subplots=True,
                                                 sharey=True)
    sns.despine()
    plt.tight_layout()


    LinearModels 라이브러리는 statsmodels 라이브러리를 확장하여 패널 데이터를 다루기 위한 다양한 모델을 제공하고 파마-맥베스 회귀 모형도 제공한다. 위에서 2-step으로 직접구현한 결과와 동일한 계수 추정치를 얻을 수 있다.

    mod = LinearFactorModel(portfolios=ff_portfolio_data, 
                            factors=ff_factor_data)
    res = mod.fit()
    print(res)
    
                          LinearFactorModel Estimation Summary                      
    ================================================================================
    No. Test Portfolios:                 17   R-squared:                      0.6808
    No. Factors:                          5   J-statistic:                    14.223
    No. Observations:                   252   P-value                         0.2867
    Date:                  Sat, Nov 20 2021   Distribution:                 chi2(12)
    Time:                          12:31:13                                         
    Cov. Estimator:                  robust                                         
                                                                                    
                                Risk Premia Estimates                             
    ==============================================================================
                Parameter  Std. Err.     T-stat    P-value    Lower CI    Upper CI
    ------------------------------------------------------------------------------
    Mkt-RF         0.6976     0.3033     2.3004     0.0214      0.1032      1.2921
    SMB           -0.6164     0.5427    -1.1358     0.2560     -1.6801      0.4473
    HML           -0.1605     0.3537    -0.4537     0.6500     -0.8536      0.5327
    RMW            0.6295     0.3563     1.7666     0.0773     -0.0689      1.3279
    CMA            0.0093     0.5795     0.0161     0.9871     -1.1265      1.1452
    ==============================================================================
    
    Covariance estimator:
    HeteroskedasticCovariance
    See full_summary for complete results

     

    파마-맥베스의 연구에서는 시장의 초과 수익률 베타의 효과가 없고 사이즈(SMB), 가치(HML) 팩터의 효과가 있다는 것을 보여주었는데 분석 기간의 차이로 인한 것인지 2000~2020년의 데이터로 분석한 결과에서는 Mkt-RF는 유의한 팩터이고, SMB, HML은 유의하지 않은 팩터로 나타났다. Mkt-RF와 RMW만 유의한 팩터로 나타났는데, 영업이익이 꾸준하게 나오고 모멘텀이 좋은(Mkt-RF는 모멘텀 팩터로 볼 수 있다고 함) 자산에 투자하는 것이 좋다라고 해석해볼 수 있을 것 같다. 2000년~2020년까지 어떤 주식들이 많이 올랐는지 생각해보면 어느 정도 말이 되는 것 같기도 하다. 구글, 페이스북, 애플, 마이크로소프트 등등. 이렇게 분석 기간에 따른 차이 효과를 보정하기 위해 여러 기간의 데이터를 섞어서 백테스팅을 하는 경우가 많다고 한다.

    full_summary를 프린트해보면 각각의 산업군에 대한 계수 추정치가 나오는데 산업군별로 유의한 팩터들이 다르게 나타나는 것을 볼 수 있다. 팩터들 중에서 Mkt-RF만이 모든 산업군에 걸쳐 유의한 팩터로 나타났는데, 2000년대 들어서 시장 모멘텀이 자산 수익률을 설명하는데 있어서 다른 팩터에 비해 중요한 요소가 되었다고 볼 수 있을 것 같다.

    print(res.full_summary)
    
               LinearFactorModel Estimation Summary                      
    ================================================================================
    No. Test Portfolios:                 17   R-squared:                      0.6808
    No. Factors:                          5   J-statistic:                    14.223
    No. Observations:                   252   P-value                         0.2867
    Date:                  Sat, Nov 20 2021   Distribution:                 chi2(12)
    Time:                          12:31:13                                         
    Cov. Estimator:                  robust                                         
                                                                                    
                                Risk Premia Estimates                             
    ==============================================================================
                Parameter  Std. Err.     T-stat    P-value    Lower CI    Upper CI
    ------------------------------------------------------------------------------
    Mkt-RF         0.6976     0.3033     2.3004     0.0214      0.1032      1.2921
    SMB           -0.6164     0.5427    -1.1358     0.2560     -1.6801      0.4473
    HML           -0.1605     0.3537    -0.4537     0.6500     -0.8536      0.5327
    RMW            0.6295     0.3563     1.7666     0.0773     -0.0689      1.3279
    CMA            0.0093     0.5795     0.0161     0.9871     -1.1265      1.1452
    
    
                                  Food  Coefficients                              
    ==============================================================================
                Parameter  Std. Err.     T-stat    P-value    Lower CI    Upper CI
    ------------------------------------------------------------------------------
    alpha         -0.0097     0.1286    -0.0756     1.0602     -0.2618      0.2423
    Mkt-RF         0.6447     0.0441     14.624     0.0000      0.5583      0.7311
    SMB           -0.0975     0.0694    -1.4057     1.8402     -0.2335      0.0385
    HML           -0.0529     0.0778    -0.6807     1.5040     -0.2053      0.0995
    RMW            0.4435     0.0688     6.4443     0.0000      0.3086      0.5784
    CMA            0.3983     0.1088     3.6621     0.0003      0.1851      0.6115
    
    
                                  Mines Coefficients                              
    ==============================================================================
    alpha          0.2578     0.2615     0.9860     0.3241     -0.2546      0.7703
    Mkt-RF         1.0971     0.1255     8.7402     0.0000      0.8511      1.3431
    SMB            0.5441     0.1568     3.4711     0.0005      0.2369      0.8514
    HML           -0.0489     0.1827    -0.2676     1.2110     -0.4069      0.3092
    RMW            0.4567     0.2224     2.0537     0.0400      0.0208      0.8925
    CMA            0.3523     0.2933     1.2012     0.2297     -0.2225      0.9271
    
    
                                  Oil   Coefficients                              
    ==============================================================================
    alpha         -0.3081     0.3006    -1.0250     1.6946     -0.8973      0.2811
    Mkt-RF         1.0900     0.1049     10.395     0.0000      0.8845      1.2955
    SMB            0.2674     0.1311     2.0397     0.0414      0.0105      0.5243
    HML            0.3203     0.1878     1.7054     0.0881     -0.0478      0.6885
    RMW            0.5631     0.1858     3.0307     0.0024      0.1989      0.9272
    CMA            0.1068     0.2231     0.4785     0.6323     -0.3305      0.5441
    
    
                                  Clths Coefficients                              
    ==============================================================================
    alpha          0.2427     0.1815     1.3373     0.1811     -0.1130      0.5984
    Mkt-RF         1.1220     0.0695     16.153     0.0000      0.9858      1.2581
    SMB            0.2910     0.1097     2.6533     0.0080      0.0760      0.5060
    HML            0.3071     0.1095     2.8055     0.0050      0.0926      0.5216
    RMW            0.6851     0.1162     5.8968     0.0000      0.4574      0.9128
    CMA           -0.1721     0.1638    -1.0507     1.7066     -0.4932      0.1489
    
    
                                  Durbl Coefficients                              
    ==============================================================================
    alpha         -0.0413     0.2952    -0.1399     1.1112     -0.6199      0.5374
    Mkt-RF         1.2069     0.0569     21.216     0.0000      1.0954      1.3183
    SMB            0.4881     0.0848     5.7565     0.0000      0.3219      0.6543
    HML            0.1314     0.0937     1.4025     0.1608     -0.0522      0.3151
    RMW            0.4728     0.0960     4.9251     0.0000      0.2847      0.6610
    CMA            0.2115     0.1436     1.4726     0.1409     -0.0700      0.4931
    
    
                                  Chems Coefficients                              
    ==============================================================================
    alpha         -0.1812     0.2048    -0.8847     1.6237     -0.5825      0.2202
    Mkt-RF         1.2233     0.0617     19.828     0.0000      1.1024      1.3443
    SMB            0.1207     0.0763     1.5819     0.1137     -0.0288      0.2702
    HML            0.2699     0.1100     2.4530     0.0142      0.0543      0.4856
    RMW            0.4490     0.1048     4.2865     0.0000      0.2437      0.6543
    CMA           -0.0102     0.1522    -0.0668     1.0532     -0.3085      0.2882
    
    
                                  Cnsum Coefficients                              
    ==============================================================================
    alpha         -0.0442     0.1322    -0.3344     1.2619     -0.3034      0.2150
    Mkt-RF         0.6802     0.0418     16.288     0.0000      0.5984      0.7621
    SMB           -0.2978     0.0872    -3.4148     1.9994     -0.4687     -0.1269
    HML           -0.1846     0.0835    -2.2117     1.9730     -0.3482     -0.0210
    RMW            0.2155     0.0885     2.4353     0.0149      0.0421      0.3890
    CMA            0.5916     0.1290     4.5869     0.0000      0.3388      0.8445
    
    
                                  Cnstr Coefficients                              
    ==============================================================================
    alpha          0.1441     0.2284     0.6310     0.5281     -0.3035      0.5917
    Mkt-RF         1.1348     0.0571     19.886     0.0000      1.0229      1.2466
    SMB            0.3169     0.0818     3.8728     0.0001      0.1565      0.4773
    HML            0.2392     0.0941     2.5411     0.0110      0.0547      0.4237
    RMW            0.3684     0.1040     3.5440     0.0004      0.1647      0.5722
    CMA           -0.0338     0.1472    -0.2300     1.1819     -0.3223      0.2546
    
    
                                  Steel Coefficients                              
    ==============================================================================
    alpha         -0.2861     0.1912    -1.4963     1.8654     -0.6609      0.0887
    Mkt-RF         1.5554     0.0936     16.621     0.0000      1.3720      1.7388
    SMB            0.4300     0.1254     3.4288     0.0006      0.1842      0.6758
    HML            0.1641     0.1470     1.1166     0.2642     -0.1240      0.4523
    RMW           -0.0631     0.1517    -0.4160     1.3226     -0.3604      0.2342
    CMA            0.0172     0.2168     0.0795     0.9367     -0.4077      0.4421
    
    
                                  FabPr Coefficients                              
    ==============================================================================
    alpha          0.1755     0.1633     1.0750     0.2824     -0.1445      0.4956
    Mkt-RF         1.1267     0.0608     18.536     0.0000      1.0076      1.2459
    SMB            0.3414     0.0884     3.8623     0.0001      0.1682      0.5147
    HML            0.0898     0.0852     1.0530     0.2924     -0.0773      0.2568
    RMW            0.6146     0.1099     5.5943     0.0000      0.3992      0.8299
    CMA            0.0773     0.1228     0.6300     0.5287     -0.1633      0.3180
    
    
                                  Machn Coefficients                              
    ==============================================================================
    alpha          0.1885     0.1220     1.5446     0.1224     -0.0507      0.4277
    Mkt-RF         1.2679     0.0495     25.623     0.0000      1.1710      1.3649
    SMB            0.0486     0.0999     0.4867     0.6265     -0.1471      0.2444
    HML           -0.2814     0.0851    -3.3076     1.9991     -0.4481     -0.1147
    RMW           -0.5083     0.1075    -4.7273     2.0000     -0.7190     -0.2976
    CMA           -0.1064     0.1547    -0.6878     1.5084     -0.4096      0.1968
    
    
                                  Cars  Coefficients                              
    ==============================================================================
    alpha         -0.1514     0.2778    -0.5450     1.4142     -0.6959      0.3931
    Mkt-RF         1.4681     0.1095     13.409     0.0000      1.2535      1.6827
    SMB            0.3375     0.1406     2.3996     0.0164      0.0618      0.6131
    HML            0.0065     0.1486     0.0436     0.9653     -0.2848      0.2977
    RMW            0.6392     0.2035     3.1404     0.0017      0.2403      1.0382
    CMA            0.3075     0.2126     1.4464     0.1481     -0.1092      0.7241
    
    
                                  Trans Coefficients                              
    ==============================================================================
    alpha          0.0156     0.1568     0.0996     0.9207     -0.2917      0.3229
    Mkt-RF         1.0818     0.0507     21.328     0.0000      0.9823      1.1812
    SMB            0.1702     0.0741     2.2970     0.0216      0.0250      0.3154
    HML            0.2517     0.0731     3.4426     0.0006      0.1084      0.3950
    RMW            0.5416     0.0862     6.2850     0.0000      0.3727      0.7104
    CMA            0.0648     0.1105     0.5863     0.5577     -0.1518      0.2814
    
    
                                  Utils Coefficients                              
    ==============================================================================
    alpha          0.2464     0.1988     1.2397     0.2151     -0.1432      0.6360
    Mkt-RF         0.5470     0.0666     8.2169     0.0000      0.4165      0.6774
    SMB           -0.1174     0.0877    -1.3387     1.8193     -0.2894      0.0545
    HML            0.0515     0.1140     0.4522     0.6512     -0.1719      0.2749
    RMW            0.2226     0.1136     1.9596     0.0500  -4.305e-05      0.4453
    CMA            0.4470     0.1726     2.5899     0.0096      0.1087      0.7852
    
    
                                  Rtail Coefficients                              
    ==============================================================================
    alpha         -0.0696     0.1377    -0.5051     1.3865     -0.3395      0.2003
    Mkt-RF         0.9269     0.0482     19.211     0.0000      0.8323      1.0214
    SMB           -0.0171     0.0758    -0.2252     1.1781     -0.1656      0.1315
    HML           -0.1040     0.0907    -1.1474     1.7488     -0.2817      0.0737
    RMW            0.4848     0.0890     5.4484     0.0000      0.3104      0.6591
    CMA            0.0865     0.1401     0.6176     0.5369     -0.1881      0.3612
    
    
                                  Finan Coefficients                              
    ==============================================================================
    alpha          0.1190     0.1287     0.9250     0.3550     -0.1332      0.3712
    Mkt-RF         1.0351     0.0324     31.916     0.0000      0.9715      1.0987
    SMB           -0.1543     0.0613    -2.5162     1.9881     -0.2745     -0.0341
    HML            0.8463     0.0653     12.969     0.0000      0.7184      0.9742
    RMW           -0.1587     0.0623    -2.5483     1.9892     -0.2808     -0.0366
    CMA           -0.2234     0.0852    -2.6212     1.9912     -0.3905     -0.0564
    
    
                                  Other Coefficients                              
    ==============================================================================
    alpha         -0.0532     0.1280    -0.4160     1.3226     -0.3041      0.1976
    Mkt-RF         1.0318     0.0172     59.846     0.0000      0.9980      1.0656
    SMB           -0.0411     0.0334    -1.2293     1.7810     -0.1065      0.0244
    HML           -0.1615     0.0273    -5.9097     2.0000     -0.2151     -0.1079
    RMW           -0.1326     0.0372    -3.5686     1.9996     -0.2055     -0.0598
    CMA           -0.0951     0.0583    -1.6300     1.8969     -0.2095      0.0193
    ==============================================================================
    
    Covariance estimator:
    HeteroskedasticCovariance
    See full_summary for complete results

    5. 글을 마치며

    이번 글에서는 대표적인 선형 팩터 모델인 파마-프렌치 모델에 대해 정리해보았고, 잔차의 계열상관이 존재할 가능성이 높은 패널 데이터 구조를 고려한 파마-맥베스 회귀모델이 무엇인지 살펴보았다. 글을 쓰면서 생긴 의문들이 있어서 기록해두려고 한다.

    이 모델을 어떻게 트레이딩에 활용할 수 있을까?
    • 파마-프렌치 모델에서 각 팩터들이 자산의 수익률을 얼마나 잘 설명하는지 확인하고, 리스크 팩터를 만들때 사용한 메트릭으로 순위를 매겨 일정 순위 이상의 자산은 매수하고 일정 순위 이하의 자산은 매도하는 형태의 트레이딩을 하는 것 같긴 한데 이게 맞는지는 잘 모르겠다.
    • 스터디를 하면서 피드백을 받았는데 위에서 이해한 방식이 맞다고 한다. 
    파마-맥베스 회귀 모델이 잔차의 계열상관을 어떻게 보정하는 것인지?
    • 시간축에 대해 평균을 내는 과정에서 잔차의 계열 상관성이 줄어들게 되는 건가라는 생각이 드는데, 파마-맥베스 회귀가 제안된 1979년 논문에서도 이에 대한 명확한 설명은 찾지 못했다. 패널 데이터 분석에 관해 공부를 좀 더 해봐야 어떤 의미인지 이해할 수 있을 것 같다.
    • 위키피디아 설명을 보면 잔차의 계열상관이 아니라 자산군 간의 상관성을 보정하는 것이라고 나와있는데, 어떤 설명이 맞는 것인지 모르겠다.
    Note that Fama MacBeth regressions provide standard errors corrected only for cross-sectional correlation. The standard errors from this method do not correct for time-series autocorrelation. This is usually not a problem for stock trading since stocks have weak time-series autocorrelation in daily and weekly holding periods, but autocorrelation is stronger over long horizons.
     This means Fama MacBeth regressions may be inappropriate to use in many corporate finance settings where project holding periods tend to be long. For alternative methods of correcting standard errors for time series and cross-sectional correlation in the error term look into double clustering by firm and year.
    회귀계수 추정을 2단계에 걸쳐 하는 것이 오히려 정보를 왜곡시키는 결과를 만들어낼 수 있는 것은 아닌지?
    • 스터디를 하면서 나온 의견인데, 추정을 두 번 하면서 정보가 너무 뭉게지는 것은 아닌가 하는 것이다. 파마-맥베스 회귀가 1973년에 나온 방법론이고 약간은 나이브한 측면도 있는 것 같아보이는데, 패널 데이터 분석에서 사용하는 fixed-effect model, random-effect model을 사용하는 것이 더 정확하게 계수 추정을 하는 방법이지 않을까 하는 생각이 든다. 

    6. 파마-프렌치 모델 관련 추가로 볼만한 자료들

    (1) 파이썬으로 배우는 포트폴리오 - 6.3 파마-프렌치 3요인 모델

     

    파이썬으로 배우는 포트폴리오: 6.3 파마-프렌치 3요인 모델

     

    thebook.io

    (2) 삼성증권 2018 Back to Basic, Fama-French 3 팩터 모델 - 전편

    (3) 삼성증권 2018 Back to Basic, Fama-French 3 팩터 모델 - 후편

    (4) Fama-MacBeth regression original paper(1979)

    Fama-Macbeth original paper.pdf
    2.86MB

    1. 2013년 노벨 경제학상 수상 [본문으로]
    2. The Cross-Section of Expected Stock Returns, 1992; Common risk factors in the returns on stocks and bonds, 1993 [본문으로]
    3. 잔차의 이분산성, 잔차의 계열상관, 다중공선성 등 [본문으로]
    4. 표준오차의 과소추정으로 인해 t통계량이 과대추정되어 실제로는 유의하지 않은 변수가 유의하다고 나올 수 있음 [본문으로]
    5. 삼성증권 2018 Back to Basic, Fama-French 3 팩터 모델 - 전편 [본문으로]