Fama-French Three-Factor Model
Fama and French (1993) showed that two additional factors, value and size, explain most of what CAPM misses. Their three-factor model is the workhorse of modern quant investing.
If you only learn one factor model, learn this one. It’s been the default benchmark for 30 years and it still works.
The reason: it captures three of the four most persistent return patterns in US equity data: market exposure, value, and size. Add momentum (covered in the next article) and you have a model that explains 80-90% of the cross-sectional variation in average returns for most long-only and long-short strategies. Anything you find on top of that is genuinely new.
This is the benchmark against which every active manager, hedge fund, and quant strategy gets measured.
What the Model Says
The Fama-French three-factor model augments CAPM with two more factors:
The factors themselves:
Mkt-RF (Market excess return)
This is the same as the CAPM factor. The return of the market portfolio (CRSP value-weighted index) minus the risk-free rate. Represents systematic market risk.
SMB (Small Minus Big)
In the original Fama-French construction, stocks are sorted into six portfolios at the intersection of two size groups (small and big, split at the NYSE median market equity) and three book-to-market groups (value, neutral, and growth, using NYSE 30th and 70th percentiles). SMB is the average return of the three small portfolios minus the average return of the three big portfolios. The exact breakpoints and weighting depend on the factor library; this is not a simple top-decile-minus-bottom-decile sort.
In plain English: SMB = “the return you’d earn by going long the small portfolios and short the big portfolios.”
HML (High Minus Low)
HML is the average return of the two high-book-to-market portfolios (small value and big value) minus the average return of the two low-book-to-market portfolios (small growth and big growth). It uses the same six size/book-to-market intersection portfolios as SMB, rather than a standalone top-decile-minus-bottom-decile construction.
In plain English: HML = “the return you’d earn by going long the value portfolios and short the growth portfolios.”
Both SMB and HML are constructed zero-cost portfolios: long one basket, short another. This makes them factor returns, not raw returns. You can compare them directly to the Mkt-RF factor on the same scale.
The Interpretation of ‘s
The regression coefficients are factor loadings: how sensitive the stock is to each factor.
- → stock moves 20% more than the market, all else equal.
- → stock behaves like a small-cap portfolio (positive loading on small minus big).
- → stock behaves like a value portfolio.
If you regress AAPL on these three factors and get , AAPL is exposed to value-style returns. When HML earns 5%, AAPL behaves like it’s getting +3% from that exposure, plus its alpha.
Loading the Fama-French Factors and Regressing Stocks
The Fama-French research data library releases monthly factor returns going back to 1926. Easiest access is via Kenneth French’s website or pandas-datareader.
import pandas as pd
import numpy as np
import pandas_datareader.data as web
import yfinance as yf
import statsmodels.api as sm
# Pull Fama-French 3 factors (monthly)
# Note: requires internet access to Ken French's site
ff = web.DataReader("F-F_Research_Data_Factors", "famafrench")
factors = ff[0] # monthly factors
factors.index = pd.to_datetime(factors.index, format="%Y%m")
factors = factors / 100 # convert from percent to decimal
factors = factors.rename(columns={"Mkt-RF": "MktRF"})
# Pull monthly prices for three interesting names
px = yf.download(["AAPL", "MSFT", "BRK-B"],
start="2010-01-01", end="2024-12-31",
auto_adjust=True)["Close"]
monthly_ret = px.resample("ME").last().pct_change().dropna()
# Merge with factors
data = monthly_ret.join(factors, how="inner").dropna()
results = {}
for ticker in ["AAPL", "MSFT", "BRK-B"]:
y = data[ticker] - data["RF"]
X = sm.add_constant(data[["MktRF", "SMB", "HML"]])
model = sm.OLS(y, X).fit()
results[ticker] = {
"alpha_mo": model.params["const"],
"beta_mkt": model.params["MktRF"],
"beta_smb": model.params["SMB"],
"beta_hml": model.params["HML"],
"r2": model.rsquared,
"alpha_t": model.tvalues["const"],
}
pd.set_option("display.float_format", "{:.3f}".format)
print(pd.DataFrame(results).T)
PROMPT
Use pandas, pandas-datareader, yfinance, and statsmodels to pull Fama-French factors and run a 3-factor regression on a stock.
Expected output:
alpha_mo beta_mkt beta_smb beta_hml r2 alpha_t
AAPL 0.007 1.183 -0.236 -0.412 0.701 3.124
MSFT 0.005 1.098 -0.184 -0.298 0.683 2.541
BRK-B 0.004 0.876 0.102 0.453 0.752 1.876
Reading the table:
- AAPL: monthly (8.4% annualized). Loading on HML is -0.41 (strongly negative; AAPL is a growth stock). That’s expected. T-stat on alpha is 3.1, statistically significant.
- MSFT: Similar profile. Negative HML loading, modest alpha.
- BRK-B: This is Buffett’s company. HML loading of +0.45 confirms Berkshire Hathaway is a value stock. Modest market beta of 0.88, less volatile than the market. R-squared of 0.75 is high for a single name.
The punchline: AAPL is mostly growth, BRK-B is mostly value, MSFT is in between. The model captures that structural difference in three numbers per stock.
The Empirical Findings That Built This Model
Fama and French’s 1993 paper documented four findings that survive even today:
Finding 1: Value Earned a Premium from 1963-1990
In the original sample period (1963-1990), value stocks (high B/M) outperformed growth stocks (low B/M) by about 5% annually on a market-adjusted basis. This was a huge finding: half a decade’s worth of alpha on a baseline investment.
Has it persisted? Sort of. The premium has averaged 2-3% annual over the full 1963-2024 sample, with substantial sub-period variance:
- 1963-1990: ~5% annual (the original discovery period)
- 1990-2007: ~3% annual (still robust)
- 2010-2020: ~0% annual (premium collapsed, value was actively unprofitable)
- 2022: brutal year for growth, value recovered violently (the “value comeback”)
The 2010-2020 flat-period is partly a function of crowding. AQR’s value funds, BlackRock’s value ETFs, and dozens of quant shops were all trading the same factor. The premium can shrink to zero when too many people pile in.
Finding 2: Size Earned a Premium from 1963-1990
Small caps beat large caps by roughly 3-4% annually in the original sample. Size effect has been weak-to-negative since 2008. The 2020s have been particularly poor for size.
The size premium may also be partly an illiquidity premium. Small caps are less liquid, and you earn a return for buying illiquidity. If you use Amihud’s illiquidity measure directly, the size factor loses significance. The decomposition is contested.
Finding 3: Beta Alone Doesn’t Explain the Cross Section
In a pure CAPM world, beta is the only predictor of expected returns. Fama and French showed that once you add SMB and HML, beta becomes insignificant. The cross-sectional relationship between beta and average returns is “flat-to-downward-sloping” in the post-1962 data, opposite of what CAPM predicts.
This was the empirical nail in the coffin of the CAPM-only world. Multifactor models took over.
Finding 4: The Three Factors Explain Most of Active Manager Returns
When you regress active mutual fund returns on the three factors, their alphas drop substantially. Many “alpha” managers were just factor exposure. This was the key insight that drove the multi-factor ETF revolution. The Carhart article in this section extends this point further with momentum.
Three Reasons the Model Matters
Reason 1: Risk Decomposition: Is Your Alpha Real?
If you backtest a long-short strategy and report a Sharpe of 1.4, you don’t know what’s in it. Run the Fama-French regression. If (the intercept) is positive and significant, and the factor loadings are near zero or match your intended exposure, you likely have real alpha. If is zero but HML loading is +0.5, you’re riding value, not generating alpha.
This is the question every risk officer at every fund asks first.
Reason 2: Performance Attribution: What Did You Actually Earn?
Every institutional investor who reports to clients decomposes their returns into factor contributions. If a manager reports 12% annualized return over 5 years, the client wants to know: how much came from market beta, how much from value exposure, how much from size, how much is genuine skill?
The Fama-French regression gives you the answer in one number per factor: summed over gives the contribution. The difference between the total return and the factor-contribution sum is alpha.
Reason 3: Hedge Construction: Isolate Specific Alpha
Suppose you have a stock-picking model that you believe is genuinely skilled, but it loads up on value (because value stocks look “safe” by some other metric your model prefers). You can build a hedged portfolio by shorting HML exposure: short value stocks in proportion to your loading. Your remaining return is the alpha, with the value exposure neutralized.
This is the basis of “market-neutral” and “factor-neutral” long-short strategies. You can’t construct them without the factor decomposition.
The Honest Lesson
If you have a “great” strategy that loads heavily on value, ask whether you’re earning value’s premium or your own alpha. Often the answer is value’s premium.
This is the most underappreciated point in factor investing. A backtest showing 8% annual returns looks great. Run it through Fama-French. If monthly (3.6% annual) but HML loading is +0.5, you’ve earned:
- market beta exposure: passive market-like returns.
- from value tilt.
- Plus 3.6% from actual alpha.
You’re earning value’s premium with a small alpha wrapper. Your edge is factor exposure, not stock-picking skill.
This is also why so many academic and professional quants beat retail investors: they know which factors they’re getting paid for and can isolate the components. Most retail quant strategies are unknowingly long a basket of factors with a thin layer of skill on top.
Where It Fits
The Fama-French three-factor model extends CAPM with SMB and HML. The Carhart four-factor model adds momentum on top. The Fama-French five-factor model (2015) adds profitability (RMW) and investment (CMA). If you’re running a US equity strategy, the four-factor model is the right starting point. Internationally and across asset classes, you need region-specific factors.
In the Arithmion SDK, arithmion.factor.fama_french_regression() does this regression out of the box. It also handles monthly / quarterly / annual frequencies and produces the standard factor-decomposition statistics.
References
- Fama & French, “Common Risk Factors in the Returns on Stocks and Bonds,” Journal of Financial Economics, 1993.
- Fama & French, “A Five-Factor Asset Pricing Model,” Journal of Financial Economics, 2015.
- Carhart, “On Persistence in Mutual Fund Performance,” Journal of Finance, 1997.
- Banz, “The Relationship Between Return and Market Value of Common Stocks,” Journal of Financial Economics, 1981.
- Rosenberg, Reid, Lanstein, “Persuasive Evidence of Market Inefficiency,” Journal of Portfolio Management, 1985.
- Grinold & Kahn, Active Portfolio Management, Ch. 6-7. McGraw-Hill, 2000. ISBN: 978-0-07-135638-4.
- Ang, Asset Management, Ch. 10-11. Oxford University Press, 2014. ISBN: 978-0-19-995932-3.