In one sentence
Change-point detection flags the point in a series where its underlying behaviour changes, such as a price starting to steam or a team's scoring rate dropping after a manager leaves.
How it works
Every series wobbles. The question is whether a run of bad results or a few ticks of movement is ordinary noise or the start of something new. Change-point methods answer this with a rule that balances two errors: raising false alarms on noise, and being slow to spot a real shift.
The classic online method is CUSUM (cumulative sum). It keeps a running total of how far each new observation is from what you expected, minus a small allowance for normal noise. Noise keeps knocking the total back towards zero; a sustained shift makes it climb. When it crosses a threshold, you call a change.
Offline methods look back over a complete series and find the most likely break points, useful for asking "when did this team's form actually change?" Bayesian versions give a running probability that a change has just happened.
The maths
The CUSUM rule for detecting a downward shift (for example a price shortening):
- xₜ: the new observation, here the price change in ticks over the last minute (negative means shortening).
- Sₜ: the running CUSUM total, never allowed below zero.
- k: the allowance, roughly half the size of shift you want to catch; it soaks up normal noise.
- h: the alarm threshold; higher means fewer false alarms but slower detection.
In plain English: add up how much each minute's move exceeds normal noise in the direction you care about, reset to zero when things look normal, and act when the total gets big.
Worked betting example
A home side trades at 4.0 in Match Odds just after team news, about an hour before kick-off. You track one-minute tick changes, with k = 0.5 and h = 4, both chosen from past matches to give an acceptable false-alarm rate (illustrative figures).
- The moves, minute by minute: 0, +1, −1, 0, −1, −2, −1, −2, −1, −2 ticks.
- The CUSUM: 0, 0, 0.5, 0, 0.5, 2.0, 2.5, 4.0. The +1 drift at minute 2 keeps it at zero; the small shortening at minute 3 is absorbed by minute 4. From minute 5 the shortening is persistent and the total climbs.
- Alarm at minute 8. The price is now 3.70 (it has gone 4.0, 4.1, 4.0, 4.0, 3.95, 3.85, 3.80, 3.70; ticks are 0.05 below 4 and 0.1 above).
- Trade. Back £50 at 3.70. By minute 10 it is 3.55. Lay £52.11 (50 × 3.70 ÷ 3.55) for +£2.11 whatever the result, about £2.07 after 2% commission.
- The cost of caution. The move had already run from 4.0 to 3.70 before the alarm. A lower threshold would have caught it earlier, but on past matches would also have fired on more noise, and each false alarm would be a losing trade.
Where it's good
- Detecting the start of a steam or drift before kick-off, for example after team news.
- Spotting when a team's underlying stats (xG, shots) shift after a manager change, injury or tactical switch.
- Monitoring your own strategy: flag when results move outside what its long-run edge would produce.
- In-play, detecting a change of tempo in a match.
- Deciding how much old data to throw away when fitting ratings.
Limitations and pitfalls
- Detection always lags. Some of the move is gone before any reliable alarm, and in fast markets that may be most of it.
- Thresholds tuned on past data are easy to overfit; you can always find settings that caught the big moves in hindsight.
- The method needs a sensible idea of "normal". Pre-match volatility rises around team news and as kick-off nears, so a fixed k and h will fire more often late on.
- Offline methods are powerful for research but use future data; never use them to label backtest trades in ways you could not have done live.
- A change in a strategy's P&L may be bad luck; drawdowns of surprising length happen to good strategies.
- Spotting a change is not the same as knowing what it means; a steam can still reverse.
How to build it
- ruptures (Python) for offline change-points; a CUSUM is a few lines of numpy; changepoint package in R; bayesian_changepoint_detection for online Bayesian versions.
- Data: evenly spaced price series, or match-by-match team stats in date order.
- Practical tip: measure the average time to a false alarm on quiet periods and the average delay on known real moves, then choose h to balance the two.
Related methods
- Hidden Markov models – for markets that switch back and forth between states.
- Sequential testing (SPRT) – the testing framework CUSUM is built from.
- Momentum – what you trade once a change is confirmed.
- Drawdown analysis – telling a broken strategy from a bad run.
- Bayesian updating – the basis of Bayesian online change-point methods.