Part 03 / 16
Factors and Exposures
A factor is a common driver of returns shared across many stocks. An exposure is one stock’s sensitivity to a given factor. In the model equation a column of is a factor and a row is a single stock’s exposures.
Chapter 2 treated the exposure matrix as given. This chapter is about where it comes from. It explains the factors contained in a fundamental equity model, how raw company data turns into a descriptor and then a factor exposure, and how those exposures are standardized so the numbers in mean the same thing across factors and across time.
3.1 The taxonomy of factors in a fundamental model
Any commercial fundamental model’s factor list follows a standard structure. Most commercial models have 70–90 factors, grouped like this:
Market/Country factors: In a single-country model, every stock has exposure 1 to “the market”. In a global model this generalizes to one factor per country (a stock’s country exposure is 1 for its country of membership), with or without a separate world factor. These capture the dominant common movement: broad rallies and sell-offs.
Industry/Sector factors: Dummy (0/1) exposures by industry membership under a classification scheme: GICS and ICB are the common choices. Some models rely on industry groupings from proprietary clustering algorithms. Models typically use 10–60 industries. Two design choices matter:
- Granularity: more industries explain more co-movement but make sparse industries with few stocks noisy to estimate.
- Single vs. multiple membership: conglomerates straddle industries. For example retail drives Amazon’s revenue but AWS/technology drives its operating income. Some models allow fractional exposures to several industries, summing to 1. Amazon would be split between retail and technology rather than forcing it into a single bucket.
Style factors: Exposures built from company characteristics, and the main subject of this chapter. The canonical set of style factors:
| Style | What it measures | Typical descriptors |
|---|---|---|
| Value | Cheapness vs. fundamentals | Book/price, earnings/price, sales/price, cash-flow/price |
| Size | Large vs. small | log market cap |
| Momentum | Recent relative strength | 12-month return excluding the last month |
| Volatility / Beta | Market sensitivity & total variability | historical beta, daily return std, max drawdown |
| Quality / Profitability | Earnings quality & profitability | ROE, ROA, gross margin, accruals, earnings variability |
| Growth | Expansion of the business | EPS growth, sales growth, analyst forecast growth |
| Leverage | Balance-sheet gearing | debt/equity, debt/assets |
| Liquidity | How heavily traded | turnover ratio, illiquidity measures |
| Dividend yield | Payout | trailing dividend / price |
Currency factors: Separate the equity-in-local-currency decision from the currency decision. This is only relevant in multi-country models. Chapter 15 covers the mechanics.
Newer / Specialty factors: ESG and carbon-intensity factors, crowding (hedge-fund ownership concentration, short interest), sentiment (news flow, analyst revisions), and machine-learned factors. Chapter 15 walks through how new factors can be added to an existing model.
The mini example’s factor set: The MiniModel uses the smallest interesting version of this anatomy: 1 market factor (MKT), 3 industry factors (TECH, FIN, CONS), and 3 style factors (VALUE, MOM, SIZE), , over the 10-stock universe introduced below.
3.2 From raw data to descriptors to exposures
The pipeline for a style factor runs in three stages: compute one or more descriptors, blend them into a raw factor, then standardize that factor into the exposure that enters :
flowchart LR
A1[raw data] -->|"Stage 1"| B1[descriptor]
A2[raw data] -->|"Stage 1"| B2[descriptor]
A3[raw data] -->|"Stage 1"| B3[descriptor]
B1 -->|"Stage 2: z-score"| Z1[std descriptor]
B2 -->|"Stage 2: z-score"| Z2[std descriptor]
B3 -->|"Stage 2: z-score"| Z3[std descriptor]
Z1 -->|"Stage 2: blend"| C[raw factor]
Z2 -->|"Stage 2: blend"| C[raw factor]
Z3 -->|"Stage 2: blend"| C[raw factor]
C -->|"Stage 3: z-score"| D[standardized exposure]
Stage 1: raw data -> descriptor: A descriptor is a single measurable quantity per stock, computed from prices, financial statements, or other sources. For example, book-to-price comes from the latest balance sheet and today’s market cap, or 12-month-minus-1-month total return comes from the price history. Descriptor design is where most of the craft lives, and most of the look-ahead bugs (Chapter 16): which fiscal-data vintage to use, how to lag filings so only public information enters, and how to treat negative book values.
Stage 2: descriptors -> one factor: Most styles blend several descriptors. Value, for instance, might be
where denotes the standardization of Section 3.3, applied to each descriptor before blending. Standardizing first puts the descriptors on one common scale, so the weights (0.5, 0.3, 0.2) carry the meaning they appear to; blend the raw ratios and whichever has the widest spread would quietly dominate the mix. Blending also guards against the failure modes of any single ratio: E/P breaks for loss-makers, B/P breaks for asset-light businesses. A composite still gives a sensible number when one input is distorted. Descriptor weights are set by judgment, by maximizing the in-sample explanatory power of the resulting factor, or by equal-weighting. Vendors publish their recipes in model handbooks.
The MiniModel keeps one descriptor per style: book-to-price for VALUE, 12-1 month return for MOM, log cap for SIZE. So the blending stage is trivial, but the standardization stage below is shown in full.
Stage 3: raw factor -> standardized exposure: The blended factor is standardized once more, by the same Section 3.3 recipe, so the exposure that lands in has cap-weighted mean zero and standard deviation one. That second pass is what makes “+1” mean “one standard deviation above the market” for every factor, and keeps exposures comparable across factors and over time. With a single descriptor, there is nothing to blend, so this is the only standardization.
3.3 Standardization: the maths
Raw descriptors have arbitrary scales (B/P near 0.5, log-cap near 4, momentum near 0.1). To make exposures comparable across factors, so “+1” always means “one standard deviation above the market”, every style exposure is standardized. The recipe has three operations: winsorize and z-score act on the descriptor in that order, while handling missing data brackets them, repairing the descriptor before the z-score where it can and setting a neutral exposure after where it cannot.
Winsorize (outlier control): Cross-sectional fundamental data has wild outliers (a beaten-down, asset-heavy stock can trade at a B/P of 25). Before anything else, extremes are pulled in:
- Hard clip: pull any value more than 3 standard deviations from the mean back to that boundary.
- MAD-based clip (more robust): same idea, but use the median and the median absolute deviation (MAD), scaled by 1.4826 to match a standard deviation, in place of the mean and std. Those aren’t pulled around by the outliers you’re trying to clip, so the cutoff is more reliable.
Z-score against the right reference population: The standardized exposure is
with a deliberate asymmetry in how and are computed:
- = cap-weighted mean of the descriptor over the estimation universe (see Chapter 5 for an explanation of the different universes),
- = equal-weighted standard deviation over the estimation universe (population form, dividing by , not ; this is what makes each standardized column have std exactly 1).
Using the cap-weighted mean is important: it makes the cap-weighted market portfolio have exactly zero exposure to every style factor. Consequently the market factor return cleanly means “the market,” and style factor returns mean “payoff to a tilt away from the market”. Without this, every style factor would be entangled with the market factor. The equal-weighted std is used because a cap-weighted std would let a handful of mega-caps set the scale for everyone.
Handle missing data: Real coverage is never complete. Standard treatments, in descending order of preference (the first two repair the descriptor before the z-score, the last sets the exposure after):
- Fill in from peers: assign the cap-weighted mean descriptor of the stock’s industry/country bucket.
- Fill in by regression: predict the missing descriptor from descriptors the stock does have.
- Set the standardized exposure to 0: i.e., assume the stock is market-like in that dimension. Honest, neutral, and common as the final fallback, but it silently shrinks the model’s opinion of that stock’s risk, so production systems track how many stocks get 0 fill-in per factor.
Worked standardization: the MiniModel VALUE factor: The universe (full data table in the appendix, Chapter 17):
| Stock | Industry | Cap ($bn) | Cap weight | B/P (raw) |
|---|---|---|---|---|
| AXIOM | Tech | 150 | 24.39% | 0.15 |
| BINARY | Tech | 80 | 13.01% | 0.25 |
| CIPHER | Tech | 40 | 6.50% | 0.45 |
| DIGIT | Tech | 10 | 1.63% | 0.60 |
| EVERGREEN | Fin | 120 | 19.51% | 0.85 |
| FIDELIS | Fin | 60 | 9.76% | 0.95 |
| GUARDIAN | Fin | 20 | 3.25% | 1.10 |
| HARVEST | Cons | 90 | 14.63% | 0.40 |
| INDIGO | Cons | 30 | 4.88% | 0.55 |
| JUNIPER | Cons | 15 | 2.44% | 0.70 |
(No winsorization needed, the toy data is clean.) The cap-weighted mean of B/P is
and the equal-weighted standard deviation is . So, for example,
Applying the same recipe to all three styles produces the style block of the MiniModel exposure matrix:
| Stock | VALUE | MOM | SIZE |
|---|---|---|---|
| AXIOM | −1.228 | 1.198 | 0.710 |
| BINARY | −0.882 | 0.341 | −0.010 |
| CIPHER | −0.190 | −1.066 | −0.805 |
| DIGIT | 0.329 | 1.688 | −2.394 |
| EVERGREEN | 1.194 | −0.393 | 0.455 |
| FIDELIS | 1.540 | −0.883 | −0.340 |
| GUARDIAN | 2.060 | −1.495 | −1.600 |
| HARVEST | −0.363 | −0.148 | 0.125 |
| INDIGO | 0.156 | −0.638 | −1.135 |
| JUNIPER | 0.675 | −1.250 | −1.930 |
The construction’s promises hold: the cap-weighted average of every column is 0 (the market is style-neutral by construction), and the equal-weighted standard deviation of every column is 1. The rows read as character sketches. GUARDIAN is a deep-value (+2.06), negative-momentum (−1.50), small (−1.60) financial. That readability is the point of standardizing.
3.4 Binary vs. continuous exposures
The full MiniModel exposure matrix has three kinds of columns, and the distinction recurs throughout the series:
- The market column is all ones: every stock participates fully.
- Industry columns are membership dummies: each stock has a 1 in exactly one industry column (under single membership), 0 elsewhere. Note the built-in collinearity: the three industry columns sum to the market column. A constraint on the factor returns resolves it, and Chapter 6 shows how.
- Style columns are continuous z-scores: signed, roughly in , cap-weighted-zero.
A unit of exposure means something different per block, “is a financial” vs. “one std cheaper than the market”, but the model equation treats them identically, and factor returns inherit the corresponding interpretation (the FIN factor return is the financials-vs-market return; the VALUE factor return is the payoff per std of cheapness).
3.5 Exposure dynamics
The factor exposure matrix is not static. It is rebuilt at every model date (daily or monthly):
- Why exposures move: prices move daily (changing B/P, size, momentum continuously). Financial statements update quarterly. Industry membership changes rarely (reclassifications, spin-offs).
- Speed by design: momentum exposure turns over fast by construction (a 12-month window rolls). Size is glacial. The risk-model implication: fast-moving exposures make a stock’s factor identity itself dynamic, which is precisely what lets a fundamental model react faster than one based on estimated betas (Chapter 4).
- Point-in-time discipline: The exposure used for date must be computable from information public before : filings lagged by their reporting date (not their fiscal date), prices through . Fundamental databases restate history. A model built on restated data inherits a look-ahead bias that inflates backtested performance. Chapter 16 treats this at length. It is the most expensive class of bug in quantitative equity.
3.6 What makes a good factor: a preview
Standardization makes any descriptor usable, but it does not necessarily make it worthwhile. The admission criteria, applied rigorously in Chapter 15 when modifying a model, and testable with the machinery of Chapters 6 and 14:
- Economic rationale: A story for why the characteristic should drive common returns (risk premium, behavioral effect, or structural flow), protection against data mining.
- Statistically significant factor returns: The estimated factor return series should be distinguishable from noise: a meaningful fraction of periods with (Chapter 6 defines the t-statistic).
- Persistence and breadth: Works across decades and across markets, not in one regime in one country.
- Non-redundancy: Low correlation with existing factors’ exposures and returns. A candidate that is 0.9-correlated with value adds estimation burden without adding information (Chapter 15 quantifies this with variance inflation factors).
- Coverage and quality of the underlying data: A brilliant descriptor available for 40% of the universe creates more data filling problems than insight.
3.7 Summary
- A fundamental model’s has three blocks: market (ones), industries (dummies), styles (standardized composites of descriptors).
- The pipeline is raw data -> descriptor -> winsorize and z-score each descriptor -> blend into a raw factor -> winsorize and z-score again -> exposure, filling gaps at the descriptor stage where possible and zeroing the exposure only as a last resort. The cap-weighted mean in the z-score is what makes the market portfolio style-neutral, and that choice propagates into the interpretation of every factor return downstream.