Factor attribution, worked through

From industry tilts to factor exposures

A portfolio that holds less oil and utilities than its benchmark ends up long size and short value and investment. This page shows why, industry by industry, with the betas of Kenneth French's 49 industries to the five Fama-French factors and momentum.

Size exposure
+0.018
Value exposure
−0.035
Investment exposure
−0.034
Cost at average factor returns
−18.7 bp a year

The oil and utilities tilt as it stood in July 1979, the first month of the study (case (a) below), at the betas averaged over July 1979 to August 2026.

The portfolio

The benchmark is the cap-weighted combination of the 49 industries. The portfolio tracks it under three rules; the optimiser gives the freed weight to the industries whose returns move closest to the ones removed.

RuleIndustriesConstraint
TiltCoal, Oil, UtilAt most half the benchmark weight. In July 1979 this removed 7.6 points (pts) of Oil, 4.0 pts of Util and 0.1 pts of Coal.
ExclusionsSmoke, GunsZero weight. On average they are 1.0% and 0.3% of the benchmark.
Weight boundAll othersWithin 2 pts of the benchmark weight. Food, Telcm, Other, Soda and Agric are among the industries the optimiser bought at August 2026.

The arithmetic in three lines

1Active weight

ai = wiP − wiB

P is the portfolio, B the benchmark; the 49 values sum to zero. In July 1979 Oil at 7.6% against a benchmark weight of 15.1% has aOil = −7.6 pts.

2Active exposure

xf = Σi ai × βi,f

Round numbers for the arithmetic: 3 pts less of an industry with value beta 0.7 and 3 pts more of one with 0.1: −0.03 × 0.7 + 0.03 × 0.1 = −0.018, short value.

3Contribution

cf = xf × rf

The same round numbers, with value at +3% in a month: −0.018 × 3% = −0.054%, or −5.4 basis points (bp).

Because the active weights sum to zero, xf = Σi ai × (βi,f − βB,f): an industry moves the exposure only through its beta gap to the benchmark.

The map: 49 industries by six factors

FactorCodeLong legShort legA positive beta moves like
MarketMkt-RFAll US stocksOne-month T-billAbove 1: more than the market
SizeSMBSmall firmsLarge firmsSmall firms
ValueHMLHigh book-to-marketLow book-to-marketCheap firms
ProfitabilityRMWHigh operating profitabilityLow operating profitabilityProfitable firms
InvestmentCMALow asset growthHigh asset growthFirms that invest little
MomentumMomPast-year winners, skipping the last monthPast-year losersRecent winners

A negative beta moves like the short leg (below 1 for the market). Betas come from a six-factor least-squares regression of each industry's daily excess returns over the three years before each month. The map shows the average of the 566 monthly estimates from July 1979 to August 2026, or the August 2026 estimate; benchmark weights follow the same choice.

Calculator

Choose up to six industries and set their active weights. Tick the box to fund the remainder pro rata from all other industries.

Active weights, pts

Exposure, written out

Exposures and contributions

Three cases

Average betas and benchmark weights; factor returns at their July 1979 to August 2026 averages: market 8.90%, size 0.80%, value 2.58%, profitability 4.03%, investment 2.66%, momentum 6.46% a year.

(a) The tilt in July 1979

The study's sales in its first month, Oil −7.6 pts, Util −4.0 pts and Coal −0.1 pts; the purchases are a stylised choice, 2 pts (the bound) to each of Food, Telcm and Other, three of the industries the optimiser bought; the remaining 5.7 pts spread pro rata over the other 43 industries.

Oil and Util behave like large, cheap, low-investment firms, so selling them makes the portfolio long size and short value and investment. Oil alone accounts for −0.076 × (0.274 − 0.005) = −0.0205 of the value exposure.

Last column: the study's portfolio under the tilt alone, averaged over 566 months. Same signs on size, value, profitability and investment, smaller on size, value and investment: Oil fell to 3.0% of the benchmark by 2026, and the substitutes the optimiser buys (Food, Soda, Telcm, investment betas 0.20 to 0.36) offset part of the investment exposure.

(b) The exclusions

Smoke −1.0 pts and Guns −0.3 pts, their average weights; the 1.3 pts spread pro rata over the other 47 industries.

Tobacco behaves like profitable firms that invest little, so excluding it leaves the portfolio short profitability (−0.0043) and investment (−0.0064), −1.7 bp a year each. The market part (+0.0022) is what the study's beta-neutrality rule removes. The five other factors sum to −3.0 bp a year; the study measured 1.3 to 2.9 bp of cost across its seven versions. Notebook 13 makes the same calculation month by month, with each month's weights and betas, and the note reports its result; this page uses the averages over the months, so its figure differs in the last digit.

(c) A value hedge

The sales of case (a), with 2 pts (the bound) going to each of the three industries with the highest value betas: Banks (+0.86), Fin (+0.49) and Insur (+0.40); 5.7 pts spread pro rata.

The value exposure falls by 70% (−0.0345 to −0.0104). Banks, trading firms and insurers behave like firms that invest much and earn little, so the investment short grows 1.7 times (−0.0337 to −0.0567), the profitability short 2.8 times (−0.0073 to −0.0202) and the market exposure turns positive (+0.0111). Each industry carries six betas: hedging one factor moves the other five, and holding all six near zero takes six exposure constraints in the optimiser, at the cost of part of the 2-pt allowance.

Reading the attribution

Terms
Active exposure
The portfolio's beta to a factor minus the benchmark's beta: the sum over industries of active weight times beta. Exposure for short.
Active return
The portfolio's return minus the benchmark's return.
Active weight
The portfolio's weight in an industry minus the benchmark's weight in it, in percentage points.
Attribution
The split of the active return into factor contributions plus a residual.
Basis point
One hundredth of a percentage point (bp): 10 bp is 0.1%.
Benchmark
The index the portfolio is measured against; here the cap-weighted combination of the 49 industries.
Beta
How much an industry's return moves with a factor's return, with the other five factors held fixed.
Cap-weighted
Weighted by market capitalisation, the number of shares times their price.
Contribution
The part of the active return one factor accounts for: active exposure times the factor's return.
Excess return
A return minus the risk-free rate, the one-month US Treasury bill.
Factor
A return series that moves many stocks at once; five of the six here are long-short portfolios.
Long, short
A positive (long) or negative (short) active exposure to a factor.
Optimiser
The routine that chooses the weights closest to the benchmark, in forecast tracking error, under the rules.
Percentage point
The unit of a difference between two weights in per cent (pts).
Residual
The active return minus the factor contributions: the industries' own returns.
Tilt
Holding Coal, Oil, Util at no more than half their benchmark weight.
Tracking error
The standard deviation of the active return, per year.
Uncompensated
Said of an exposure that adds risk without an expected return that pays for it.
Unintended
Said of an exposure that nobody chose and that arrives as a side effect of another rule.
Vintage
The version of French's files on the download date, named by the CRSP cut French built them from.
Variance
The average squared distance of a return from its mean; its square root is the standard deviation, and per year the volatility.

Data

Returns: Kenneth R. French Data Library, mba.tuck.dartmouth.edu/pages/faculty/ken.french/data_library.html, 49 industry portfolios, Fama-French five factors and momentum, daily and monthly, built from the CRSP files of August 2026 (the vintage, the version of French's files named by the CRSP cut they were built from: 202608). Betas, benchmark weights, factor returns and the study's results: notebook 13 of github.com/ochofer/optimal-vs-naive-diversification. Factors: Fama and French (2015), Journal of Financial Economics 116(1), 1-22; Carhart (1997), Journal of Finance 52(1), 57-82. Industry names follow French's 49-industry definitions.

Built by companion/build.py from the output files of notebook 13 (betas, benchmark weights, factor returns, the attribution summary and the mandate's cost) and notebook 11 (the optimiser's report), vintage 202608, on 7 October 2026; the page is rebuilt whenever those notebooks are rerun.