Quant Memo
Advanced

Cross-Sectional Factor Return Regressions

Instead of regressing one stock's returns on factors over time, regress every stock's return in a single month on its factor exposures across stocks. Do that every month, and the slopes become a time series of factor returns.

Prerequisites: Fundamental vs Statistical Factor Models, The Classical Linear Regression Assumptions

A time-series regression asks: for one stock, over many months, does its return move with the market factor? A cross-sectional factor regression flips both axes: it asks, in one month, across many stocks, does a stock's known characteristic (its size, its value score, its momentum) explain why some stocks did better than others that month? Run that same cross-sectional regression again next month, and the next, and you get a time series of "factor returns," the payoff each factor delivered, month by month, which is exactly the machinery underneath most commercial risk models and most academic asset-pricing tests.

The analogy

Imagine a teacher grading one exam, sat by an entire class on the same day. The teacher does not ask "did this one student improve over the semester," that is a different, longitudinal question. The teacher asks, across all students that day, did the students who studied more score higher: one snapshot, many students, one slope relating a known trait (hours studied) to an outcome (score). A cross-sectional factor regression is that same snapshot exercise, but repeated every month for every stock, with characteristics like "value score" or "size" standing in for "hours studied."

Building the regression

For a given month tt, run an ordinary least-squares regression across all NN stocks:

ri,t=αt+β1,if1,t+β2,if2,t++ϵi,t,i=1,,N,r_{i,t} = \alpha_t + \beta_{1,i}\, f_{1,t} + \beta_{2,i}\, f_{2,t} + \dots + \epsilon_{i,t}, \qquad i = 1, \dots, N,

where ri,tr_{i,t} is stock ii's return in month tt, and βk,i\beta_{k,i} are stock ii's known, already-measured exposures to each characteristic (its size score, its value score, and so on), fixed inputs to this regression, not the thing being estimated. What is being estimated here are the fk,tf_{k,t} terms, the regression's fitted coefficients for month tt, which are read off as that month's factor returns. In words: hold every stock's known "how big is its value tilt" fixed, and let the regression find the single number, this month's slope, that best explains why value-tilted stocks outperformed or underperformed everyone else this specific month. Do this fresh every month, using a brand new cross-section of returns each time, and stack the resulting fk,tf_{k,t} estimates into a time series, one factor-return observation per month.

The classic two-stage version of this idea, Fama–MacBeth, runs exactly this cross-sectional regression every period and then averages the resulting series of coefficients over time to get one final factor-return estimate with a standard error computed from the time-series variation of those monthly slopes, not from the cross-sectional regression's own reported standard errors (see Fama-MacBeth Regression for why that distinction matters enormously for statistical validity).

Correlation explorer
X →Y ↑
ρ = 0.40r² = 0.16relationship: moderate positive

Picture each point on this scatter as one stock in one month: horizontal position is the stock's known factor exposure, vertical position is its realized return that month. The fitted line's slope is that month's estimated factor return. Run the same picture next month with a fresh cloud of points and a new slope.

0 one slope per month
Each point is one month's regression slope, this month's factor return. Stringing them together across many months gives the factor return time series that gets averaged and tested for significance.

A cross-sectional regression estimates a return, not a risk exposure. The exposures (β\beta) are the known inputs; the factor return is the output, re-estimated fresh every single period from that period's cross-section of stock returns.

Worked example 1: one month, three stocks

Three stocks have known value-score exposures β=2,0,1\beta = 2, 0, -1 (high, neutral, low value tilt) and this month's realized returns are 6%,2%,1%6\%, 2\%, -1\%. Fit a simple regression ri=α+βif+ϵir_i = \alpha + \beta_i f + \epsilon_i through these three points.

Using the standard least-squares slope formula on this tiny sample: mean β=1/3\beta = 1/3, mean r=7/32.33%r = 7/3 \approx 2.33\%. Deviations: β\beta: 1.67,0.33,1.331.67, -0.33, -1.33; rr: 3.67,0.33,3.333.67, -0.33, -3.33. Slope =(ΔβΔr)/(Δβ)2=(1.67×3.67+(0.33)(0.33)+(1.33)(3.33))/(1.672+0.332+1.332)=(6.13+0.11+4.43)/(2.79+0.11+1.77)=10.67/4.672.29= \sum(\Delta\beta \cdot \Delta r)/\sum(\Delta\beta)^2 = (1.67\times3.67 + (-0.33)(-0.33) + (-1.33)(-3.33)) / (1.67^2+0.33^2+1.33^2) = (6.13+0.11+4.43)/(2.79+0.11+1.77) = 10.67/4.67 \approx 2.29.

So the estimated value factor return that month is roughly ftf_t \approx a slope of 2.292.29 percentage points of return per unit of value exposure, meaning a stock with one full unit more value tilt earned about 2.29% more that month, holding the (small, three-stock) cross-section fixed.

Worked example 2: building the time series

Repeating this exercise for three consecutive months gives estimated value-factor returns of f1=2.29%f_1 = 2.29\%, f2=0.8%f_2 = -0.8\%, f3=1.5%f_3 = 1.5\%. Averaging: (2.290.8+1.5)/31.0%(2.29 - 0.8 + 1.5)/3 \approx 1.0\% per month, an estimate of the average monthly premium to holding value exposure. The standard error of that average is computed from how much f1,f2,f3f_1, f_2, f_3 themselves vary across the three months (their sample standard deviation divided by 3\sqrt{3}), not from any single month's regression, which is exactly the Fama–MacBeth insight: statistical significance of a factor premium comes from consistency across many independent monthly snapshots, not from how tightly one month's cross-section fits.

What this means in practice

This machinery underlies commercial multi-factor risk models (Barra, Axioma and similar), which run a cross-sectional regression like this every day or week to produce a live factor-return series, and it underlies most published tests of "does factor X earn a premium," where the resulting time series is tested for a positive, statistically significant mean.

Cross-sectional regressions run separately each period ignore that the resulting ftf_t estimates are typically correlated with each other over time (factor returns cluster, just like ordinary asset returns do), and they ignore that the same stocks appear in every period's cross-section, so the ϵi,t\epsilon_{i,t} residuals are not independent across months for a given stock either. Naively treating each month's regression as an independent draw, without the Fama–MacBeth-style correction to standard errors, routinely overstates statistical significance and is one of the most common errors in applied factor research (see Fama-MacBeth Regression and The Replication Crisis in Factor Research).

Related concepts

Practice in interviews

Further reading

  • Grinold & Kahn, Active Portfolio Management (Ch. 3)
  • Fama & MacBeth (1973), Risk, Return, and Equilibrium: Empirical Tests
ShareTwitterLinkedIn