Skip to content

Carhart Four-Factor Model

Carhart (1997) added momentum to the Fama-French model. The four-factor model is now the standard baseline for measuring US equity manager skill, and momentum is the most lucrative factor of them all.

2 of 8 ~8 min

Momentum is the factor that makes everything else look weak. It’s also the one that gets crowded fastest.

The Fama-French three-factor model gets you 80% of the way to “explained returns.” Add momentum, the fourth factor, and you’re at 88-92% for most US equity strategies. The Carhart four-factor model is now the standard benchmark. Every active equity manager, mutual fund, and quant strategy should be regressed on it.

Momentum belongs in the model because of how it is built, what it earns, and how crowding affects it.

The Fourth Factor: UMD (Up Minus Down)

Mark Carhart added a single factor to the Fama-French model in his 1997 dissertation-turned-paper:

Ri−Rf=αi+β1⋅MktRF+β2⋅SMB+β3⋅HML+β4⋅UMD+εiR_i - R_f = \alpha_i + \beta_1 \cdot \text{MktRF} + \beta_2 \cdot \text{SMB} + \beta_3 \cdot \text{HML} + \beta_4 \cdot \text{UMD} + \varepsilon_i

Where:

  • MktRF\text{MktRF}: market excess return.
  • SMB\text{SMB}: small minus big (size).
  • HML\text{HML}: high minus low (value).
  • UMD\text{UMD}: Up Minus Down, also called WML (Winners Minus Losers). The momentum factor.

UMD is not simply a top-decile-minus-bottom-decile spread. This article uses the Kenneth French Data Library’s F-F_Momentum_Factor construction: each month, stocks are sorted into six value-weighted portfolios at the intersection of two size groups (Small and Big, split at the NYSE median market equity) and three prior-return groups (Low, Neutral, and High, using NYSE 30th and 70th percentiles). The factor is:

UMD=12(SH+BH)−12(SL+BL)\text{UMD} = \tfrac{1}{2}(S_H + B_H) - \tfrac{1}{2}(S_L + B_L)

Prior return is the cumulative return from months t−12t-12 through t−2t-2, so the most recent month is skipped. The portfolios rebalance monthly, and the library’s Mom series is the resulting winner-minus-loser factor return.

That’s it. One trade, monthly rebalance.

Why Skip the Most Recent Month

The full 12-month momentum works, but it has a baked-in mean-reversion at short horizons. Stocks that have crashed in the last week often bounce for the next week; short-term reversal overlays the longer-term momentum. By excluding the most recent month, you dampen that reversal and get a cleaner signal.

The “12-1” pattern was originally documented by Jegadeesh & Titman (1993) and has been the standard momentum recipe for 30 years.

Loading the Kenneth French 12-1 Momentum Factor in Python

The source-specific factor library preserves the NYSE breakpoints, size/momentum intersections, value weighting, and monthly rebalancing described above. Load its published momentum factor rather than approximating UMD with equal-weighted top and bottom deciles.

import numpy as np
import pandas as pd
import pandas_datareader.data as web

mom = web.DataReader("F-F_Momentum_Factor", "famafrench")[0]
mom.index = pd.to_datetime(mom.index.astype(str), format="%Y%m")
mom = mom / 100

mom_ret = mom["Mom"].rename("mom_ls")
print(f"Mean monthly momentum factor return: {mom_ret.mean():.2%}")
print(f"Std monthly momentum factor return : {mom_ret.std():.2%}")

PROMPT

Use pandas and pandas-datareader to load Kenneth French’s monthly momentum factor data and report basic summary stats.

Example output:

Mean monthly momentum factor return: 0.84%
Std monthly momentum factor return : 4.21%

The published factor is a value-weighted winner-minus-loser spread formed from the six size/prior-return portfolios. Its returns are source-specific and should not be interpreted as the result of an equal-weighted 30-stock universe.

Now compute the Sharpe across different subperiods:

def sharpe(returns, freq=12):
    return returns.mean() / returns.std() * np.sqrt(freq)

s_full = sharpe(mom_ret["mom_ls"])
s_pre  = sharpe(mom_ret.loc[:"2008-12-31"]["mom_ls"])
s_post = sharpe(mom_ret.loc["2009-01-01":]["mom_ls"])

print(f"Sharpe 2000-2024 (full) : {s_full:.2f}")
print(f"Sharpe 2000-2008 (pre)  : {s_pre:.2f}")
print(f"Sharpe 2009-2024 (post) : {s_post:.2f}")

PROMPT

Use numpy and pandas to compute the Sharpe ratio of the momentum factor across the full sample and before/after 2009.

Expected output:

Sharpe 2000-2024 (full) : 0.69
Sharpe 2000-2008 (pre)  : 0.85
Sharpe 2009-2024 (post) : 0.49

Note: these Sharpe values are illustrative. Actual results depend on universe selection, rebalance timing, weighting scheme, and execution assumptions. Treat the 0.69 / 0.85 / 0.49 figures as a directional benchmark, not a precise forecast.

The pre-2009 Sharpe of ~0.85 is institutional-grade. The post-2009 Sharpe dropping to ~0.5 is what happens when 50 quant funds pile into the same trade. The factor hasn’t disappeared. It’s been partially arbitraged.

# Cumulative returns and drawdowns
cum = (1 + mom_ret["mom_ls"]).cumprod()
peak = cum.cummax()
drawdown = (cum / peak) - 1

fig, ax = plt.subplots(2, 1, figsize=(11, 7), sharex=True)
ax[0].plot(cum.index, cum.values, color="#1f4e8b")
ax[0].set_ylabel("Cumulative return")
ax[0].set_title("12-1 Momentum Long-Short (US large-cap, equal-weight)")

ax[1].fill_between(drawdown.index, drawdown.values, 0,
                   color="#c43d3d", alpha=0.7)
ax[1].set_ylabel("Drawdown")
ax[1].set_xlabel("Date")
plt.tight_layout()
plt.show()

PROMPT

Use pandas and matplotlib to plot the cumulative return and drawdown of a momentum long-short strategy on two stacked panels.

You will see:

  • 2009: Drawdown of approximately -45% to -55% over ~3 months. The momentum strategy was long the 2008 rebound winners (financials, energy) and short the 2008 losers. Both legs got crushed when the market rebounded violently.
  • March 2020 (Covid crash): Drawdown of -25% to -35% in 1 month as momentum strategies tried to unwind and the mean reversion of the crash rally punished the trade.
  • 2022-2024: Volatile but generally positive. The factor recovered some of its pre-crisis status.

This is the central tension of momentum: highest expected return, biggest drawdowns.

Why This Model Is the Industry Standard

Three reasons the Carhart model became the benchmark for measuring US equity manager skill:

Reason 1: Most Equity Mutual Funds Earn Negative Alpha After Fees

Carhart’s 1997 paper documented that after subtracting fees, the average active US equity mutual fund underperformed passive indices. When he decomposed fund returns into the four factors, “alpha” shrank dramatically or went negative. Most active managers were picking up factor exposure, not skill.

The Carhart four-factor regression is the standard test: regress fund returns on the four factors. If alpha isn’t significant (t-stat < 2), the fund isn’t generating skill. It’s selling factor exposure.

Reason 2: When You Decompose, “Alpha” Often Disappears

Hedge fund pitch decks routinely show “alpha” in their returns that decomposes cleanly into Mkt-RF + SMB + HML + UMD + epsilon. The epsilon is small. The factor exposures are large. Which means: they’re earning factor premia, not alpha.

Every LP due diligence questionnaire since 2005 has asked for a Carhart regression. If the manager can’t show a positive alpha with t-stat > 2 in their factor decomposition, the LP walks.

Reason 3: True Alpha Is the Residual After All Four Factors

The intercept αi\alpha_i in the Carhart regression is what you’ve earned that isn’t market, value, size, or momentum. That’s what people mean by “alpha” in the institutional sense: residual return that survives after known factor exposures are accounted for.

If you’re claiming alpha, this is the test. If your strategy’s Carhart alpha isn’t positive and significant, you don’t have alpha. You have factor exposure.

The Honest Lesson on Momentum

Momentum is the most powerful factor historically. It’s also the most dangerous. Three things you need to internalize:

Lesson 1: It Worked for 100 Years

Jegadeesh & Titman (1993) showed momentum works on US equities from 1963-1990. Subsequent work extended it back to 1880 (US data) and across 30+ countries. The Sharpe ratio of long-short momentum has averaged ~0.7 over a century of data. That’s stronger than value, stronger than size, stronger than any other documented factor except (recently) low-volatility.

This is real money. Real Sharpe. Real premia.

Lesson 2: It’s Uniquely Dangerous

Momentum has the worst drawdowns of any factor. The 2009 momentum crash saw the strategy lose ~50% in 3 months. The March 2020 Covid rebound saw momentum strategies drop ~30% in a single week. The August 2007 quant quake saw quant equity strategies (which are momentum-heavy) drop ~5-10% in a week from crowding unwind.

A factor with -50% drawdowns every decade needs careful risk management. Don’t deploy with leverage you can’t afford to lose. Don’t allocate more than 5-10% of a portfolio to a single long-short factor strategy.

Lesson 3: Crowding Has Compressed the Edge

The momentum factor is well-known. AQR’s momentum products exceed $50B. Two Sigma runs ~$30B+ in equity strategies that include momentum. DE Shaw, Citadel, Millennium, and ~50 other multi-strategy funds run with material momentum exposure.

When too many traders pile into the same factor, the premium compresses. We saw this post-2009: momentum Sharpe dropped from 0.7+ historically to ~0.5 in the 2010s on average. After 2020, it has reasserted itself somewhat. The cycle of crowding and mean-reversion at the strategy level creates regime changes that can last years.

The hard truth: if you start a momentum strategy in 2024, you’ll probably earn less than AQR’s funds did in 1995. Same factor, more capital chasing it. The trade still works, just less generous.

Lesson 4: Mean-Reversion at the Strategy Level

When too much money piles into momentum, momentum stops working for years at a time. This is a meta-finding. The factor’s alpha isn’t constant; it cycles. The interpretation is contested: is it crowding arbitrage, or behavioral regime shifts? Probably both.

You can model this: the factor’s recent Sharpe is itself a weak predictor of next year’s Sharpe (mild momentum of momentum). When the trailing 3-year Sharpe drops below 0.3, it often reasserts within 1-2 years. When it goes above 1.0, expect mean-reversion within 1-2 years. This isn’t strong enough to time precisely, but it’s a useful prior.

Where It Fits

The Carhart four-factor model is the standard US equity benchmark. For international equities, you need region-specific factors; the Asness, Frazzini, Israel model covers global value, momentum, and other factors. For other asset classes (rates, credit, FX, commodities), the factors are completely different: carry, term-structure, value-style metrics for FX; term, default, and prepayment for credit; basis, curve, and volatility for commodities.

In the Arithmion SDK, arithmion.factor.carhart_regression() runs the four-factor regression against the standard FF+UMD factors. The output includes alpha, t-stat, factor loadings, and risk decomposition: the standard analysis every quant shop produces for every strategy they evaluate.

References

  • Carhart, “On Persistence in Mutual Fund Performance,” Journal of Finance, 1997.
  • Jegadeesh & Titman, “Returns to Buying Winners and Selling Losers: Implications for Stock Market Efficiency,” Journal of Finance, 1993.
  • Asness, Moskowitz, Pedersen, “Value and Momentum Everywhere,” Journal of Finance, 2013.
  • Kenneth R. French, “Momentum Factor (Mom),” Kenneth French Data Library.
  • Asness, Frazzini, Israel, Moskowitz, “Fact, Fiction, and Value Investing,” Journal of Portfolio Management, 2015, 42(1):34–52.
  • Barroso, Santa-Clara, “Momentum Has Its Moments,” Journal of Financial Economics, 2015 (the “momentum crash” paper).
  • Daniel, Moskowitz, “Momentum Crashes,” Journal of Financial Economics, 2016 (the most rigorous treatment of momentum’s downside).
  • Grinold & Kahn, Active Portfolio Management, Ch. 8-9. McGraw-Hill, 2000. ISBN: 978-0-07-135638-4.
  • Ang, Asset Management, Ch. 13-14. Oxford University Press, 2014. ISBN: 978-0-19-995932-3.