Quant Memo
Core

Converting Model Scores into Positions

A raw model output — a predicted return, a probability, a rank — is not a trade size. How that score gets mapped into an actual position, through scaling, capping, and risk adjustment, shapes the strategy's returns just as much as the model itself.

Prerequisites: Rank Targets and Cross-Sectional Normalisation

A model outputs 0.72 for one stock and 0.35 for another. Those numbers alone don't tell a trader anything about how much of either stock to buy. Is 0.72 twice as good a bet as 0.35, or barely better? Should the position be proportional to the score, or should only the very top-scoring names get any position at all? The step from "the model says X" to "the portfolio holds this many shares" is a deliberate design choice, not an automatic consequence of the model, and different reasonable choices at this step can produce meaningfully different portfolios from the exact same set of scores.

Three common mapping approaches

Think of the model's scores like exam grades from a teacher who grades on different scales in different years — an 85 doesn't mean the same thing every year unless you know the distribution it came from. Converting a score to a position requires putting it on a comparable, stable scale first, and then deciding how aggressively differences in that scale should translate into differences in position size:

  • Rank-based: convert scores to cross-sectional ranks each period and size positions off the rank (e.g., linear in rank from most negative to most positive), which is robust to the raw score's scale or distribution shifting over time but throws away information about how much better one stock's score is than another's.
  • Z-score scaling: standardize scores cross-sectionally, zi=(y^iy^ˉ)/σy^z_i = (\hat{y}_i - \bar{\hat{y}})/\sigma_{\hat{y}}, and size positions proportional to ziz_i, preserving relative magnitude information but sensitive to outlier scores unless capped.
  • Capped or winsorized scaling: apply z-scoring but clip extreme values (e.g., cap ziz_i at ±3) before sizing, which keeps most of the magnitude information while preventing one wildly confident, possibly erroneous score from dominating the whole portfolio's risk.

In every case, position size is typically also scaled by the instrument's own volatility, so that a given score contributes similar risk regardless of whether it's attached to a jumpy small-cap or a calm large-cap.

Worked example: same three scores, three different portfolios

Suppose three stocks have raw model scores of 2.1, 0.3, and −0.2 (in units where the cross-sectional mean is roughly 0 and standard deviation roughly 1). A rank-based mapping puts them at ranks 3, 2, 1 out of 3 and sizes positions evenly spaced by rank — the huge gap between 2.1 and 0.3 is treated the same as the modest gap between 0.3 and −0.2. A raw z-score mapping instead sizes the first position roughly seven times larger than the second (2.1 vs. 0.3), correctly reflecting that the model is far more confident about the first stock — but if that 2.1 score turns out to be a data error rather than real conviction, the portfolio now has an outsized, unintended concentration. A capped z-score mapping (say, capping at 1.5) would size the first position at 1.5 rather than 2.1 — still meaningfully larger than the other two, preserving most of the intended information, but bounded against a single anomalous score dominating the book.

rank raw z-score capped z-score
The same three model scores produce three visibly different portfolios depending on the mapping: rank ignores magnitude, raw z-score can let one score dominate, capped z-score balances the two.

What this means in practice

There's no universally "correct" mapping — the right choice depends on how much you trust the raw magnitude of the model's scores (a well-calibrated model justifies more weight on magnitude; a noisy or poorly-calibrated one favors rank-based or capped approaches) and how much tail risk from a single outlier score the portfolio can tolerate. Whatever mapping is chosen should be fixed as part of the strategy's design and validated in the same walk-forward backtest as the model itself, since changing the mapping after seeing results is its own form of overfitting.

A model's raw score is not a position size. Converting scores into positions — by rank, by z-score, or by a capped/winsorized z-score, typically further scaled by instrument volatility — is a separate design decision from the model itself, and it materially changes the resulting portfolio's concentration and sensitivity to any single anomalous score.

Related concepts

Practice in interviews

Further reading

  • Grinold, Kahn, Active Portfolio Management, ch. 14
ShareTwitterLinkedIn