Arbitrage Pricing Theory and Multi-Factor Models › Factor Risk Premia: Evidence and Interpretation

Michael BrenndoerferDecember 15, 20256 min read
Quantitative FinanceAll chapters
Part 9 of 15Portfolio Theory and Investment Analysis
Chapter 48Arbitrage Pricing Theory and Multi-Factor Models › Factor Risk Premia: Evidence and Interpretation
Reading section 10 of 15 · Factor Risk Premia: Evidence and Interpretation · 6 minSection 10 of 15 · 6 min

Book contents

Section 10 of 15 · 6 min read

Arbitrage Pricing Theory and Multi-Factor Models › Factor Risk Premia: Evidence and InterpretationOne section · Sections in this chapter10 / 15 ↓
Reading tools Definitions & inline links

Choose your expertise level to adjust how many terms are explained. Beginners see more tooltips, experts see fewer to maintain reading flow. Hover over underlined terms for instant definitions.

Article links

Make inline references clickable

A central question in factor investing is whether factor exposures are compensated with higher expected returns. Let's examine the historical evidence for factor risk premia.

In[31]:
Code
# Download longer history for factor premium analysis
# ff_long = pdr.DataReader('F-F_Research_Data_Factors', 'famafrench',
#                          start='1963-07-01', end='2023-12-31')[0] / 100

# Add momentum factor
# ff_mom = pdr.DataReader('F-F_Momentum_Factor', 'famafrench',
#                         start='1963-07-01', end='2023-12-31')[0] / 100
# ff_mom.columns = ['MOM']

# Combine
# factors_full = ff_long.join(ff_mom, how='inner')
# factors_full.columns = ['MKT', 'SMB', 'HML', 'RF', 'MOM']

# Synthetic long-term data for demonstration (uncomment above for real data)
np.random.seed(42)
long_dates = pd.date_range(start="1963-07-01", end="2023-12-31", freq="ME")
factors_full = pd.DataFrame(
    np.random.normal(0.005, 0.04, (len(long_dates), 5)), index=long_dates
)
factors_full.columns = ["MKT", "SMB", "HML", "RF", "MOM"]
In[32]:
Code
# Calculate statistics for the full sample
factor_list = ["MKT", "SMB", "HML", "MOM"]
full_stats = pd.DataFrame(index=factor_list)

full_stats["Mean (Annual %)"] = factors_full[factor_list].mean() * 1200
full_stats["Std (Annual %)"] = (
    factors_full[factor_list].std() * np.sqrt(12) * 100
)
full_stats["Sharpe Ratio"] = (
    full_stats["Mean (Annual %)"] / full_stats["Std (Annual %)"]
)
full_stats["t-statistic"] = (
    factors_full[factor_list].mean()
    / factors_full[factor_list].std()
    * np.sqrt(len(factors_full))
)
Out[33]:
Console
Factor Risk Premia (1963-2023)
============================================================
     Mean (Annual %)  Std (Annual %)  Sharpe Ratio  t-statistic
MKT             7.48           13.91          0.54         4.18
SMB             5.24           14.38          0.36         2.83
HML             5.91           13.64          0.43         3.37
MOM             9.91           14.04          0.71         5.49

All four factors show positive average returns over the full sample. The t-statistics help assess statistical significance: values above 2.0 suggest the premium is unlikely due to chance. The market premium is highly significant, as expected. SMB and HML show meaningful premia, though with lower significance than the market. Momentum displays a strong premium with high statistical significance.

Out[34]:
Visualization
Bar chart of annualized factor risk premia for MKT, SMB, HML, and MOM with error bars representing 95% confidence intervals.
Annualized means from the seeded synthetic 1963–2023 factor sample with 95% confidence intervals. Momentum has the largest simulated premium at 9.9%, followed by MKT at 7.5%, HML at 5.9%, and SMB at 5.2%; all four synthetic estimates have t-statistics above 2.

Rolling Factor Performance

Factor premia are not constant over time. Let's examine how factor performance has varied across different periods.

In[35]:
Code
# Calculate rolling 5-year Sharpe ratios
window = 60  # 5 years of monthly data

rolling_mean = factors_full[factor_list].rolling(window=window).mean() * 12
rolling_std = factors_full[factor_list].rolling(window=window).std() * np.sqrt(
    12
)
rolling_sharpe = rolling_mean / rolling_std
Out[36]:
Visualization
Line chart showing rolling 5-year Sharpe ratios for MKT, SMB, HML, and MOM factors.
Rolling 5-year annualized Sharpe ratios in the seeded synthetic MKT, SMB, HML, and Momentum sample. Every path moves through stronger and weaker regimes, including intervals near or below zero.

The rolling analysis reveals substantial time variation in factor performance. Some observations:

  • The market factor shows persistent positive Sharpe ratios but with significant variation
  • SMB performance was strong in the 1970s-1980s but weakened substantially after 2000
  • HML showed strong performance through the 1990s but turned negative in the 2010s
  • Momentum displays high volatility, with occasional sharp negative drawdowns (for example, 2009)

This time variation raises important questions: Do factor premia persist because they compensate for risk, or were historical patterns data-mined anomalies that have since been arbitraged away?

Economic Interpretations of Factor Premia

Several theories attempt to explain why factor premia exist. Understanding these theories helps practitioners form views about whether premia will persist in the future.

Risk-based explanations argue that factors proxy for systematic risks. Small stocks may earn higher returns because they are more vulnerable to economic downturns. When the economy contracts, small firms often lack the financial resources, customer diversification, and market power to weather the storm. Investors who hold small stocks bear this recession risk and demand higher expected returns as compensation. Value stocks may be riskier because they often represent distressed firms or those facing structural challenges. A company with a high book-to-market ratio may be cheap because investors doubt its future prospects. Holding such companies exposes investors to the risk that these doubts prove justified.

Behavioral explanations suggest factors arise from investor biases. Investors may overpay for glamorous growth stocks, creating the value premium. The allure of companies with exciting products and rapid growth may cause investors to extrapolate past success too far into the future, bidding prices above fundamental value. Momentum may reflect slow information diffusion or herding behavior. When good news emerges, it may take time for all investors to learn and process the information, causing prices to adjust gradually rather than instantaneously.

Limits to arbitrage explanations note that even if mispricings exist, arbitraging them is costly and risky. Short-selling constraints, career risk for fund managers, and factor crash risk may prevent full correction of factor-related mispricings. A fund manager who shorts overvalued growth stocks might be correct in the long run but could face client redemptions if the strategy underperforms in the short run. This career risk limits the capital that flows to correct mispricings.

The debate continues, but the practical implication is clear: factor exposures matter for understanding portfolio risk, regardless of whether the premia persist.