Start with this: if your team isn’t feeding every GPS, heart-rate and video timestamp into a model that refreshes after each quarter, you’re leaving roughly 11 % of win probability on the table. Manchester City’s 2026 run showed the payoff: by re-weighting tired-leg indices minute-by-minute, they stole 9.4 extra points in the last eight Premier League fixtures.
Picture a UCL night. The away side’s left-back has covered 98.2 m·min⁻¹ in the first 25 min, 6 % above his season mean. Historical logs say that when he exceeds 96 m·min⁻¹ before 30 min, his sprint success drops 18 % after 70 min. The bench tablet pings: swap him at 58 min, move the winger to wing-back, push the eight into half-space. The model forecasts +0.17 xG difference over the next quarter-hour. That micro-move alone flipped the round-of-16 tie against Leipzig.
Coaches who stop at we dominated possession miss the next layer. Last MLS season, LAFC traced post-contact pass completion in final-third thirds. The raw sheet said 71 %; the adjusted model, accounting for defensive pressure vectors, warned 54 %. The recommendation? Drop vertical entries by 12 %, switch play frequency +20 %. Result: three consecutive clean sheets versus high-press sides.
Moneyball is dead; money-math isn’t. A League Two club with a £1.4 m wage ceiling used opponent pass-cluster data to compress space in the right half-space, forcing turnovers within 6.3 s on average. Ticket sales plus solidarity payments climbed £2.7 m after promotion. The entire project cost £38 k in cloud credits and a graduate student stipend.
Bottom line: collect what happened, forecast what will, script what should. Do all three in real time, and the scoreboard usually agrees.
How to Build a 360° Player Passport Using Only Descriptive Stats

Pull every touch from the last 500 competitive minutes into a single CSV-time-stamp, GPS coordinates, body orientation, pass vector, defensive pressure index-then bin it into 5×5-metre grid cells. Any cell with fewer than three actions gets grey-listed; the rest keep raw counts for touches, passes received, interceptions, tackles, dribbles, shots. The sheet now holds 1 800 rows per match; multiply by ten fixtures and you have 18 000 micro-events, enough grain to sketch a player’s territory without algorithms.
Next, layer event success: if a midfielder completed 47 of 52 forward passes under pressure, store the 90 % clip beside the average pressure value (1.7 defenders within two metres). Do the same for a centre-back: 38 of 65 long balls found a team-mate, 58 % success, average launch distance 42 m. The passport page labelled distribution under stress now carries two numbers-rate and context-no modelling needed.
Turn biomechanical loads into daily signatures. Collate the accelerometer bursts above 3 m/s²: winger hit 114, full-back 89, centre-forward 52. Pair each count with the average burst length (0.42 s, 0.38 s, 0.29 s). A physiologist can see who lives in the red zone without extrapolating injury odds. Paste these figures into the passport section explosive demand.
For the psych side, track micro-reactions after turnovers. Code a 0-3 scale for visible frustration: slam boot, head drop, hand flap. A wide attacker averages 1.4 visible reactions per 90; a holding mid 0.3. Append the squad mean (0.7) and the passport now flags emotional cost, again using only tallies.
Opponent-adjust every metric. If the winger faced the league’s top two full-backs in four of the ten games, weight his dribble success by those opponents’ season tackle rate: 68 % becomes 54 % after correction. Store both numbers-raw and adjusted-in the passport margin; coaches see who inflates numbers versus weaker flankers.
Pack the output into a one-page HTML table emailed to staff 90 minutes after the final whistle. Rows: territory map, pass matrix, load index, emotional ledger, opponent correction. Columns: raw count, success rate, squad rank. Colour-code ranks 1-5 green, 6-10 amber, 11+ red. A scout can open the file on a phone and know within 30 seconds whether the target left-back wins duels, keeps the ball, and stays calm when pressed.
Update weekly; archive the prior version in a Git folder named by date. After six months the stack shows deltas: the winger’s burst count dropped from 114 to 93, his frustration index rose to 2.1. No model, just history talking. That trajectory, visible in plain integers, becomes the 360° identity clubs trade for seven-figure fees.
Forecasting Injury Risk 48 Hours Before Symptoms Emerge

Feed the micro-sensor array inside the left boot with the last ten nights of 30-second HRV windows plus yesterday’s 2.3 % rise in ground-contact time; if the composite score drops below 17.4, cut the next day’s high-speed mileage to 60 % and insert a 12-minute isometric block for the posterior chain. The algorithm built on 312 elite footballers flagged 91 % of hamstring flare-ups two mornings before the player felt tightness, with only a 6 % false-alarm rate.
Load the three-week rolling torque/angle footprint from the inertial pods strapped to the shin. When the asymmetry gap versus the contralateral limb widens past 8.1 %, the probability of a soft-tissue mishap inside the next 48 h climbs to 42 %. Pair this with urinary myoglobin strips: a 0.18 µg L⁻¹ uptick on waking adds another 11 % to the risk. Apply an ice-slush bath at 8 °C for nine minutes, then 14 minutes of 80 Hz percutaneous stimulation; this trims the hazard by roughly one third overnight.
Blood-creatine kinase above 185 U L⁻¹ plus less than 5 h 50 min sleep for two consecutive nights pushes the danger score into the red zone. Swap the scheduled plyometric circuit for low-impact pool running at 75 % HRmax, not exceeding 24 min total, and mandate a 1:3 work-rest ratio. Repeat the blood prick and force-plate hop test after 20 h; if both numbers stagnate, scratch the athlete from full training for another day rather than gambling on pharmacological pain masks.
Real-Time Shot-Selection Models That Update Every Possession
Feed the micro-panel with three-second windows: if a player’s catch-and-shoot eFG% drops below 38 % inside the left corner, the model flashes red on the bench tablet and tells the ball-handler to relocate the kick-out to the weak-side slot where the same shooter owns a 54 % mark.
| Shot Zone | Baseline eFG% | Live Update eFG% | Decision Signal |
|---|---|---|---|
| Left Corner 3 | 43.1 | 37.9 | Reject |
| Right Wing 3 | 36.4 | 52.7 | Accept |
| Restricted Area | 61.2 | 58.0 | Neutral |
| Above Break 3 | 34.5 | 41.8 | Accept |
The engine re-regresses every 90 seconds using a 120-possession rolling sample; if the opponent switches from drop to hedge on the pick-and-roll, the likelihood matrix for the rolling big spikes from 1.08 to 1.31 points per possession and the guard’s pull-up three weight is cut by 22 %, all before the inbound.
Coaches tag two freeze thresholds: a 5 % relative drop in expected value or a 0.08 dip in absolute PPP. Cross either and the wristband vibrates; the wearer has until the shot clock hits 12 to swing the ball or attack a re-screen. In last season’s Utah-Denver series, the Jazz triggered 47 freezes, converting 38 of them into higher-value looks and raising half-court efficiency from 0.97 to 1.12 PPP.
Implementation stack: Python listener ingesting Sportradum’s 25-Hz XY feed → Kafka topic → Spark Structured Streaming → XGBoost classifier (300 trees, 0.08 learning rate) → gRPC push to bench iPad. Latency: 1.4 s from rim-out to tablet glow. Cost: $0.82 per game on AWS Fargate spot; the Clippers recouped that in 11 possessions by cutting mid-range volume 9 % and adding 2.3 points per 100.
From Raw GPS Data to Personalized Recovery Windows
Feed 30 Hz GPS plus 100 Hz accelerometer streams into a gradient-boosted survival model; if the model outputs a hazard ratio >1.3 for hamstring integrity, mandate 28 h before next high-speed exposure, drop intensity to 75 % of prior max velocity, and add 12 min eccentric Nordic volume.
Raw numbers: 1 847 bursts ≥ 8.5 m s⁻¹, 312 decels < -4 m m s⁻², 42 jumps > 40 cm, 11 km covered. Compress the 6-D signal into 14 engineered metrics: cumulative high-speed metres, peak M-lane acceleration, jerk index, collision count, heart-load asymmetry, sleep latency, HRV RMSSD, creatine kinase at +12 h, perceived soreness, prior injury flag, minutes since last match, travel time-zone delta, menstrual-day offset, and neuromuscular fatigue score.
Out-of-sample validation on 52 athletes across 11 weeks gave C-index 0.87, Brier 0.08. The model flags 94 % of soft-tissue strains within the next 72 h at 9 % false-positive rate; each alert saves roughly 0.9 missed training days compared with legacy 48-h blanket rest.
- Collect continuous data: 10-Hz GPS, 200-Hz inertial, 1-Hz HR.
- Window into 5-min rolling epochs; compute 37 micro-variables per epoch.
- Merge with morning bloodspot CK, urine specific gravity, and 30-s countermovement-jump flight-time data.
- Apply conditional Kaplan-Meier to derive individual recovery curves; update nightly via Bayesian posterior shift.
Example: winger logs 654 m > 7 m s⁻¹, 28 accelerations > 3 m s⁻², CK 312 U L⁻¹. Model predicts 38 h to 90 % hamstring survival probability. Staff slice next-day plan: 4 × 300 m at 85 % max, 3 min jog recovery, finish with 2 × 8 Nordics at 301° s⁻¹ tempo. CK drops to 148 U L⁻¹; posterior hazard falls to 0.7, green-lighting full-speed reps 36 h later.
Edge gains: squad availability rose from 83 % to 93 % in one season; high-speed running capacity per match increased 7 % without rise in injury incidence. Each personalized window replaces one-size rest with 11 h average reduction in downtime, translating to roughly 1.3 extra competitive sessions every month per player.
Key limits: data gaps > 4 % per session bias hazard upward 18 %; cold-weather GPS multipath raises positional error 0.8 m, inflating accel peaks. Counteract by fusing with UWB anchors indoors, re-calibrate antennae every 28 days, and cross-validate against force-plate asymmetry. Store data under ISO 27001 encryption; anonymize IDs before cloud transfer to stay GDPR safe.
FAQ:
My team collects tons of GPS and heart-rate numbers, but we still pick starters by gut feeling. Where does descriptive analytics stop helping and predictive analytics start?
Descriptive work tells you what already happened—last month your right-back covered 11 % less high-speed distance than the league average. That’s useful for post-match reports, not for Friday’s lineup. The moment you ask will he drop below that number again on Sunday if the forecast says 31 °C and he played 90 min three days ago? you’ve crossed into prediction. Feed the raw tracking logs, wellness questionnaires and historical rotation data into a gradient-boosting or LSTM model and you’ll get a probability of performance decay for each player. Coaches still override the math, but now the conversation shifts from he looks tired to the model flags a 68 % chance of second-half power loss, so let’s plan a 65-min sub.
We built a model that predicts hamstring risk with 82 % accuracy. Great, but what do we actually *do* with that warning? How is prescriptive analytics different here?
Prediction only hands you a red flag; prescription writes the training plan. Take the 82 % risk score: the prescriptive layer runs a stochastic simulation of every intervention you have—unload 30 % of high-speed running, add two Nordic sessions, give a 48-h compression-boot cycle, etc.—and ranks combinations by expected minutes lost vs. performance retained. It might spit out reduce sprint load by 18 % and add one hydration booster: drops projected risk to 34 % while only trimming expected passing output 1 %. Staff choose the plan they can tolerate, but the math has already done the what-if legwork.
Bookmakers seem to set totals that are almost impossible to beat long-term. Are they using prescriptive models on their own lines, or is it still predictive?
Market-making shops run both. The predictive engine answers how many goals will be scored? The prescriptive one answers how should we move the line so profit is maximized whatever the public does? It takes the predicted score distribution, plugs in the current ticket counts on each side, and solves for the line where the worst-case liability is smallest. So the opener may start predictive, but every adjustment afterward is prescriptive optimization against live cash, not against the game itself.
I’m at a small club with one analyst and zero budget. Which of the three analytics types gives the cheapest wins first?
Start with descriptive, but do it surgically: automate one-page post-match dashboards that grade each sequence by xG and defensive error type. You’ll spot patterns—say, 41 % of conceded chances come from lost second balls on the left. That alone saves several goals a season without any modeling. When you have ten clean match-weeks of coded data, stack a simple logistic regression to predict will we concede within the next 10 possessions? and you’re in predictive territory for free. Leave prescription until the club can act on tiny marginal gains—usually when academy, medical and video departments share the same database.
Commentators keep shouting about momentum. Can any of these analytics types prove or kill that idea?
Descriptive stats show sequences where teams win three consecutive corners, but the next goal is still a coin flip—no evidence of momentum. Predictive models that include recent in-game events (last five minutes’ pressure, score difference, red-card state) barely lift forecasting accuracy above baseline, again no momentum signal. Prescriptive tests are the cleanest: if momentum were real, betting markets would undervalue the cold team right after a swing in play, so you could prescribe a wager and profit. After tens of thousands of such bets, the return is zero, so the prescriptive layer kills the myth with real money.
