The Population Stability Index
A single number that measures how much a feature's or a model's output distribution has shifted between two periods, widely used as a quick, label-free early warning for data drift.
Prerequisites: Data Drift vs Concept Drift
You want one number that says "has this feature's distribution shifted since the model was trained?" without needing any labels, computable daily on a dashboard. The Population Stability Index (PSI) is the industry-standard answer: bucket a variable into bins, compare what fraction of observations fell in each bin during a reference period versus a current period, and combine the differences into a single score.
The formula, one piece at a time
Split the variable's range into bins (deciles are common). For each bin , let be the fraction of the reference-period data in that bin, and be the fraction of the current-period data in that bin. The PSI is:
In plain English: for each bin, take the difference in the two periods' proportions, multiply by the log of their ratio, and sum across all bins. Both factors are zero when the two periods agree exactly in that bin, and both grow (in the same direction) as a bin's share changes, so the product is always non-negative and larger swings contribute disproportionately more — a bin whose share doubled contributes far more than one that nudged up 10%. Conventional thresholds: PSI below 0.10 means no meaningful shift; 0.10 to 0.25 means a moderate shift worth watching; above 0.25 means a major shift that typically warrants investigation or retraining.
Worked example
A model's key feature is a stock's 20-day momentum, binned into deciles at training time. Six months later, comparing the current month's momentum distribution to the training-period reference:
| Bin | Reference share | Current share | |
|---|---|---|---|
| Bottom decile | 0.10 | 0.22 | |
| Middle deciles (8 bins) | ~0.80 total | ~0.62 total | ≈ 0.055 combined |
| Top decile | 0.10 | 0.16 |
Summing all ten bins gives — a moderate shift. Reading the bins directly: far more observations have piled into the bottom decile (strongly negative momentum) than during training, at the expense of the middle deciles, telling the desk the current market has many more stocks in sharp downtrends than the training period did, well before any model-accuracy metric would confirm a problem.
What this means in practice
PSI is cheap, requires no labels, and is standard enough that "PSI > 0.25" is a common automated alert or even a kill-criterion trigger. It should be computed for every important feature and for the model's own output distribution, not just once at deployment but on a rolling basis, since drift accumulates gradually and a single check at launch won't catch it months later.
The Population Stability Index compares a variable's binned distribution between a reference period and a current period into one number; PSI below 0.10 is stable, 0.10–0.25 is worth watching, above 0.25 signals a major shift. It needs no labels, making it a cheap, fast, first-line drift check.
PSI depends heavily on how the bins are chosen — too few bins hide real shifts, too many make the index noisy and unstable on small samples. Fix the bin edges once, at training time, using the reference distribution, and reuse those exact edges for every future comparison rather than re-binning each time.
Related concepts
Practice in interviews
Further reading
- Siddiqi, Credit Risk Scorecards, ch. 8