Scoring Model Highlights:
This model utilizes live fight statistics to predict UFC round scores. The model is used to graph the live win probability and powers a scoring bot that tweets predicted scores at the end of rounds:
Win Probability Graph:
Live Score Tweet:
Round 1 Scoring Model Prediction:
— KO Trends (@KOTrends) March 22, 2025
10-9 Jan Blachowicz
📊63% Win Probability#UFC #UFCLondon
Read below to see how live stats are transformed into real-time score predictions and win probability visuals through a straightforward modeling process.
Live Data Collection:
A Python script scrapes ESPN Fightcenter at the end of each round. The script collects:
- Total strikes landed
- Significant strikes (broken up by target)
- Control time
- Takedowns
- Submission attempts
Below is an example of what the ESPN stat feed looks like at the end of a round:
Stat differences are calculated from the red corner’s perspective and used to estimate round win probabilities. For the round above (Błachowicz was red), the differences are:
- 2 Significant Head Strikes (5 - 3)
- 0 Significant Body Strikes (1 - 1)
- 2 Significat Leg Strikes (11 - 9)
No other stats were recorded, so the model only used the differences in head & leg strikes here.
The Model:
To eliminate bias, fighters were first randomly assigned to either column in the dataset. For each round, the difference in fight statistics between the two fighters was calculated.
The response variable was structured as a four-level factor representing possible round outcomes:
- 10-8 for Fighter 1
- 10-9 for Fighter 1
- 10-9 for Fighter 2
- 10-8 for Fighter 2
This setup allows the model to capture both the direction and the margin of victory in each round.
The model itself is an ordered logistic regression (ordered GLM). It takes the stat differences as input and returns the predicted probability of each of the four outcomes.
The following graph shows the coeficcient (or value) for each statistic:
The model result is a set of four probabilities representing the likelihood of a 10-9 or 10-8 round for either fighter. The total win probability for each fighter is also calculated as the sum of both.
Scoring Output:
Utilizing the predicted probabilities, the python script can tweet the predicted winner and score of each round. Depending on the 10-8 probabilities, there are the different scoring messages:
Standard 10-9 (10-8 probability less than 25%):
Round 2 Scoring Model Prediction:
— KO Trends (@KOTrends) March 22, 2025
10-9 Carlos Ulberg
📊61% Win Probability#UFCLondon
10-8 Warning (10-8 probability between 25% and 50%):
Round 2 Scoring Model Prediction:
— KO Trends (@KOTrends) March 9, 2025
10-9 Justin Gaethje
⚠️ Possible 10-8 Round (26% Probability)#UFC #UFC313
10-8 Round (10-8 probability greater than 50%):
Round 1 Scoring Model Prediction:
— KO Trends (@KOTrends) April 6, 2025
10-8 Rhys McKee
🚨 Model predicted a 91% chance of a 10-8#UFC #UFCVegas105
Live Win Probability Graphs:
Using additional code to scrape ESPN Fightcenter during rounds, I can collect live data whenever it updates. This live data refreshes about every 10 seconds, and using the same model framework discussed above I can predict the win probability for each fighter at any point during the round.
Win probability graph Example:

Want to see this in action?
I post live scores and visuals during UFC events on X (Twitter) @KOTrends