Methodology
Where the records come from, how estimates are tested, and what remains uncertain.
Fighter data
The matchup report compares each fighter’s last five recorded UFC bouts, opponents and results. Striking and takedown rates use summed round counts and measured fight time. Percentages include raw attempts; a missing denominator stays unavailable.
New records come from a versioned published UFCStats mirror, checked against existing records with source hashes retained. Unresolved identities are excluded. A disputed finish time or round is excluded from duration-based statistics. Importing new research data does not retrain the model.
Previous meetings and shared opponents provide context, not a guaranteed winner. Each report identifies incomplete samples, disputed records and its data cutoff.
Additional professional fight history
Earlier results and other promotions come from a pinned Fight Canon snapshot. Fighters are linked by source IDs. Duplicate bouts, unresolved results and known source conflicts are excluded. These partial histories are separate from UFC round statistics and do not establish a complete career record.
Historical features use only earlier fight dates, although the source does not establish when every record was first published. Adding 12 career-history measures reduced accuracy from 64.1% to 63.1% on the same 985-fight historical replay and slightly worsened probability error. These records remain available for research; matchup estimates still use the corrected UFC model.
Model estimates
An estimate needs a fight date, division, three or five scheduled rounds, and title-bout status. The model uses earlier fights, recent measured performance, age, layoff and opponent-adjusted ratings. A hypothetical matchup is not a scheduled event.
Unsupported divisions, inadequate history and untested extreme confidence cause the model to decline an estimate. Dates are limited to one year after the research cutoff. Known ages or layoffs outside the observed training range are also declined.
The published replay covers 2025–2026 fights after training and calibration. Those outcomes were already examined during development, so this is not independent validation. No reliable 90% confidence band or advantage over market prices has been established.
Training and evaluation protocol
The candidate was selected using an earlier development period, fitted on 2010–2022 fights and probability-calibrated on separate 2023–2024 fights. Preprocessing is fitted on training data only. Both corner orders are averaged before calibration, so swapping fighters preserves their probabilities.
Draws and no contests are excluded from the binary target but retained in historical context. Replay accuracy includes all eligible decisive bouts before the app’s matchup restrictions.
The model was refitted after correcting records that merged fighters with identical names. The original project’s classifiers still have those identity errors and no longer produce app estimates. Their archived scores report random-split and chronological cross-validation; preprocessing was fitted before those splits, so they are not independent holdout estimates. The original combined prediction after averaging corner orders was not independently evaluated or calibrated.
Current injuries, training camps and weight-cut conditions are not model inputs. A hypothetical matchup may also differ from the combinations represented in training.
Prices and journal
Price comparison
Enter both moneylines from one bookmaker in American or decimal format. Compare your own probability estimate or the research model with the quote’s break-even probability and the two-sided market baseline after normalizing out the bookmaker’s margin.
Expected return per unit depends on the probability estimate being correct. It is not evidence of a betting edge. No live price feed is connected by default; an optional The Odds API connection loads upcoming two-outcome markets on request. Every quote has a source and observation time.
Your decision record
The journal saves the quoted odds, estimate, stake, reasoning and time. You enter outcomes to calculate net result and return on settled stake. Entries stay in this browser and can be exported as CSV; they do not sync across devices. This is a personal record, not a verified performance history.
Code and data sources
- Versus source code — interface, API and prediction engine.
- MMA data pipeline — preparation, training and release artifacts.
- Published UFCStats mirror — versioned UFC records and round statistics.
- Fight Canon — additional professional fight histories, compiled by Jaden Pain.
Implementation and project credits
Flask serves the Python API. scikit-learn provides classifiers and preprocessing; pandas and NumPy handle data and feature calculations. The interface uses HTML, CSS and JavaScript, with IBM Plex Sans and IBM Plex Mono. Vercel hosts the site and API.
Originally built for CIS 5450 at the University of Pennsylvania by Thomas Ou, Aakash Jha and Kevin Jiang. Thomas’s GitHub.