PropBetEdgeUFC
UFC Live Wire
Newsroom →
  1. Home
  2. PBE Model

PBE Fight Model V1

An independent probability.A real market price.The difference is PBE Edge.

PBE builds its own win probability from pre-fight Fight DNA. Sportsbook odds never enter the model. Once the probability exists, PropBetEdge independently reads the fight-week market, removes the vig and measures the disagreement.

  • 33 pre-fight features
  • 0 sportsbook inputs
  • Hourly pre-lock
  • Locked before the fight
  • Public live record
Why it's different

Probability → Market → PBE Edge

Illustrative example — not a current pick

  1. PBE probability64.0%Built independently
  2. Market54.0%De-vigged consensus
  3. PBE Edge+10.0 ptsModel − Market

Books offer -130 · FAV / +108 · DOG → raw implied 56.5% + 48.1% = 104.6% → vig removed → 54.0% → 64.0% − 54.0% = +10.0 pts

  • American odds are what the books actually offer. PBE Picks shows the consensus price and the best available price with its book.
  • Raw implied probability contains vig. Both sides of a fight add up to more than 100%; that excess is the book's margin.
  • PBE removes the vig across the current observed market: the median across books, normalised so both sides sum to 100%.
  • PBE Edge compares the model probability with that de-vigged market probability, in percentage points. It is never measured against a vigged price.
  • Market data is read only after the model has scored the fight. A price never changes a probability, and a stale price never publishes an edge.
The differentiator

The model doesn't follow the market

PBE model lane
  1. Fight DNAAs of the event date, from repaired fight history
  2. 33 pre-fight featuresDifferences between the two corners
  3. PBE probabilityScored before any price is read
Market lane
  1. Sportsbook pricesFight-week snapshots of American odds
  2. Multi-book consensusMedian across the books in one snapshot
  3. Vig removedDe-vigged market probability
PBE probability−market probability=PBE Edge

The 33 inputs are all pre-fight Fight DNA differences; 0 of them come from a sportsbook. The two lanes meet only at the final subtraction, which is why PBE Edge can disagree with the market at all.

Product lifecycle

From card to graded record

How PBE Algo calls a fight →
  1. 1Discover

    Every UFC card inside the horizon is picked up by the hourly scheduler.

  2. 2Verify

    Both fighters resolve to one reconciled identity with current Fight DNA.

  3. 3Score

    33 pre-fight features become an independent PBE probability.

  4. 4Compare

    The current fight-week market is de-vigged and PBE Edge is measured.

  5. 5Regenerate

    Until lock, new pre-fight inputs can change the call, every hour.

  6. 6Lock

    The prediction is written on the database clock and becomes immutable.

  7. 7Grade

    The official result enters the record; corrections are dated revisions.

Proof · live record

What the model has actually done

27-21

Locked before the fight, graded after it, never edited in between. 48 calls locked to date.

A call enters this record only once it has been locked before the bout, and the lock time is the database’s own clock, not a timestamp supplied by whatever wrote the row. From that moment the probability, the pick, the model version and the feature vector are frozen: there is no permitted edit to a locked prediction at all. That is a storage-layer guarantee rather than a promise made in application code. Pre-lock picks regenerate and are never counted.

Results are kept separately, because a result is not a prediction. Combat-sports outcomes get overturned on appeal and corrected by commissions, so a grade can be revised, as a new entry that supersedes the last one and has to say why. The record you see follows the current entry; every superseded one stays on file.

48Locked calls
27-21Record
56.3%Hit rate
0.2555Brierlower is better
0Awaiting result
14-16Last 30
0No contest / draw
0Results revisedoverturned or corrected
Live calibration by probability band
BandDecidedWinsClaimedHappened
55-60%12457.1%33.3%
60-65%181462.4%77.8%
65-70%7365.8%42.9%
70-80%10674.5%60.0%
80-100%1089.6%0.0%

This record and the backtest below are never combined. They answer different questions. A backtest says what the model would have done on fights whose results already existed somewhere; a live record says what it did with the future genuinely unknown. They are stored in separate tables, reported by separate views, and there is deliberately no query in this product that adds them together.

Proof · out-of-sample backtest

What the model would have done

7,047 bouts scored between 2013-01-19 and 2026-09-05. Every fold trains only on bouts that had already happened and is scored only on bouts that had not; the model is refit from scratch each calendar year, and the ridge penalty is chosen on an inner chronological split of the training window, never on the year being scored. There is no random train/test split anywhere in this pipeline — with fighters recurring across years, a random split would let the model learn how a career turned out before predicting its middle.

0.2363Brier5.48% better than a coin
0.6651Log losscoin = 0.6931
59.58%Accuracy
0.6337ROC AUC
0.0139Calibration ECEslope 1.035
7,047Fights scored
Model against its baselines, same fights
BenchmarkFightsBrierLog lossAccuracyAUC
PBE Fight Model V17,0470.23630.665159.58%0.6337
50/50 baseline7,0470.25000.693150.00%—
Historical win-rate baseline7,0470.24470.682655.68%0.5849
Market implied (de-vigged)0No completed bout in the release backtest carries a market observation recorded before it started, so no market benchmark is shown here. It is not estimated.

Brier and log loss lead because they are proper scoring rules: only the true probability minimises them, so a model cannot improve them by being confidently wrong. Accuracy is shown because people ask for it, but a model that says 51% and is right is not the same product as one that says 80% and is right, and accuracy cannot tell them apart.

Proof · calibration

Does 62% mean 62%

Both corners of a bout are the same prediction stated two ways, so every row below is folded onto the side the model actually picked: confidence is max(p, 1−p) and a hit is that pick winning. The gold line is what happened; the blue block is what was claimed.

50–55%53.0% · n=2778
55–60%60.2% · n=1996
60–65%62.4% · n=1230
65–70%69.5% · n=609
70–75%74.5% · n=274
75–80%76.8% · n=99
80–100%86.9% · n=61
Predicted confidenceObserved hit rateECE 0.0139 · slope 1.035
Out-of-sample performance by confidence band
BandFightsClaimedHit rateBrier
50-55%2,77852.4%53.0%0.2489
55-60%1,99657.3%60.2%0.2400
60-65%1,23062.3%62.4%0.2343
65-70%60967.2%69.5%0.2121
70-80%37373.5%75.1%0.1874
80-100%6184.5%86.9%0.1209
Proof · worked examples

What a model call looks like

Real bouts, real out-of-sample probabilities, real results — and a deliberate mix of right and wrong. These are backtest output, clearly marked as such, and never current PBE Picks; the current calls are in PBE Picks for UFC Pro.

PBE MODEL
Backtest · 2026-03-28 · Women's Strawweight
Bruna Brasil30.0%
Alexia Thainara70.0%
Market implied
No timestamp-compatible price
Model edge
Not computed without a price
Confidence
65-70% band · picks in this band went 69.5% across 609 backtested fights
Sample
Thinner corner: 3 prior bouts, 2 with round stats · 32/33 features available Low sample
Result
Model correct · Alexia Thainara won by DEC/U
pbe-fight-model-v1 · pbe-fight-features-v1Backtest output. Not a PBE Pick.

A typical confident call that landed.

PBE MODEL
Backtest · 2025-03-08 · Women's Strawweight
Iasmin Lucindo69.9%
Amanda Lemos30.1%
Market implied
No timestamp-compatible price
Model edge
Not computed without a price
Confidence
65-70% band · picks in this band went 69.5% across 609 backtested fights
Sample
Thinner corner: 5 prior bouts, 5 with round stats · 32/33 features available
Result
Model wrong · Amanda Lemos won by DEC/U
pbe-fight-model-v1 · pbe-fight-features-v1Backtest output. Not a PBE Pick.

The same confidence, wrong. Roughly a third of calls in this band are.

PBE MODEL
Backtest · 2024-03-23 · Bantamweight
Cameron Saaiman95.7%
Payton Talbott4.3%
Market implied
No timestamp-compatible price
Model edge
Not computed without a price
Confidence
80-100% band · picks in this band went 86.9% across 61 backtested fights
Sample
Thinner corner: 2 prior bouts, 1 with round stats · 31/33 features available Low sample
Result
Model wrong · Payton Talbott won by KO/TKO
pbe-fight-model-v1 · pbe-fight-features-v1Backtest output. Not a PBE Pick.

The most confident miss in the whole out-of-sample period.

PBE MODEL
Backtest · 2025-06-07 · Featherweight
Jeka Saragih50.0%
JooSang Yoo50.0%
Market implied
No timestamp-compatible price
Model edge
Not computed without a price
Confidence
50-55% band · picks in this band went 53.0% across 2,778 backtested fights
Sample
One corner is debuting — no prior bouts on record · 4/33 features available Low sample
Result
Model wrong · JooSang Yoo won by KO/TKO
pbe-fight-model-v1 · pbe-fight-features-v1Backtest output. Not a PBE Pick.

A fight the model has no read on. It says so.

Methodology
Limits

Where the model has nothing to say

Performance by evidence available
Evidence availableFightsBrierAccuracyAUC
both corners 1-2 prior bouts2,0680.234460.30%0.6434
both corners 6+ prior bouts1,8190.234660.86%0.6457
both corners 3-5 prior bouts1,6420.230162.85%0.6654
one corner debuting1,5180.247753.52%0.5591
Performance by division
DivisionFightsBrierAccuracyAUC
Lightweight1,0720.235359.33%0.6369
Welterweight9960.237159.44%0.6309
Middleweight8450.237258.46%0.6232
Featherweight8330.234160.38%0.6486
Bantamweight7520.235062.37%0.6473
Light Heavyweight5270.242755.98%0.5926
Heavyweight5230.235562.72%0.6478
Flyweight4520.232859.96%0.6489
Women's Strawweight3990.235557.52%0.6278
Women's Flyweight2900.237958.28%0.6261
Women's Bantamweight2550.236460.00%0.6435
Catchweight720.248558.33%0.5862
Women's Featherweight310.232654.84%0.6272

The debut row is the honest headline of this table. When one corner has never fought inside the promotion, the model has almost no signal beyond age, reach and stance, and its AUC there is barely above a coin. It says so by producing probabilities near 50% rather than by manufacturing confidence — which is why the calibration above survives including those fights rather than being computed on a flattering subset. PBE Picks does not call those fights at all.

Fold by fold

Every year, scored separately

Walk-forward folds
YearTrained onScoredPenaltyBrierLog lossAccuracyAUC
20132,1283763200.235870.6640262.23%0.6470
20142,504494400.244610.6817553.85%0.5812
20152,9984641600.234090.6598860.13%0.6470
20163,462483800.243680.6808055.69%0.5997
20173,9454851600.239280.6710658.25%0.6102
20184,430522800.236960.6661861.69%0.6303
20194,952553800.244910.6829153.89%0.5770
20205,5054921600.237820.6688962.60%0.6384
20215,9975453200.241180.6759757.80%0.6054
20226,5425553200.232590.6569559.64%0.6544
20237,0975523200.232560.6571562.14%0.6624
20247,6495581600.229920.6534762.72%0.6773
20258,207574200.229130.6500562.72%0.6713
20268,781394100.224580.6389061.17%0.6756
Leakage

Proof the model could not see the future

A fight model that has quietly read the result is easy to build and worthless. Six independent checks run on every build, and the run fails if any one of them does.

  • PASSThe extract never selects a present-day career total. record_w, career_slpm and every other accumulator that describes a fighter as they are today is absent from the pipeline, so it cannot leak into a 2015 bout.
  • PASSEvery as-of Fight DNA snapshot used for a bout was checked against its own provenance list. The bout under prediction never appears in it, and no bout inside it is dated on or after the event. Independent cross-check of the running record against every snapshot: 0 mismatches in 15610 comparisons.
  • PASSThe decisive test. For 250 sampled bouts, every row dated on or after the bout was deleted and the feature vector rebuilt from what remained. Not one value changed.
  • PASSTraining labels were shuffled and the model refit. Skill collapsed to 0.0013 against a real-label skill of 5.48%. A pipeline reading the answer would have kept performing.
  • PASSSwapping the corners returns exactly the complementary probability, so no artifact of which fighter the source listed first can be doing work. In this database the first-listed fighter wins 93.5% of bouts, purely because the ingest lists the winner first — a model with an intercept would have learned that and reported it as skill.
  • PASSIn every fold, the last training event is strictly earlier than the first scored event.
Inputs

33 features, and no odds among them

Every input is a difference between the two corners, and the model is fitted with no intercept, so swapping the corners negates the vector and the two probabilities are exactly complementary. Sportsbook prices are not an input at any stage; the market appears only after a probability exists.

  • age_diff_yearsage · staticAge in years at the event date. Older is normally worse.
  • reach_diff_inreach · staticReach in inches.
  • height_diff_inreach · staticHeight in inches.
  • experience_log_diffexperience · dna snapshotlog1p of completed prior bouts in the snapshot sample.
  • five_round_exp_diffexperience · dna snapshotlog1p of prior scheduled-five-round appearances.
  • title_exp_diffexperience · dna snapshotlog1p of prior title-bout appearances.
  • winrate_diffform · dna snapshotLaplace-smoothed prior win rate, (w+1)/(appearances+2).
  • recent5_winrate_diffform · dna bout rowsWin rate over the last five completed bouts before the event date.
  • streak_diffform · dna bout rowsSigned current win or loss streak, clamped to plus or minus five.
  • layoff_log_diffform · dna bout rowslog1p of days since the previous bout. A long layoff is normally a negative.
  • slpm_diffstriking · dna snapshotSignificant strikes landed per minute.
  • sapm_diffstriking · dna snapshotSignificant strikes absorbed per minute.
  • sig_diff_per_min_diffstriking · dna snapshotSignificant strikes landed minus absorbed, per minute.
  • sig_accuracy_diffaccuracy · dna snapshotSignificant strike accuracy.
  • sig_defense_diffaccuracy · dna snapshotSignificant strike defence, one minus opponent accuracy.
  • kd_per15_diffstriking · dna snapshotKnockdowns scored per fifteen minutes.
  • kd_absorbed_per15_diffdurability · dna snapshotKnockdowns conceded per fifteen minutes.
  • td_landed_per15_difftakedowns · dna snapshotTakedowns landed per fifteen minutes.
  • td_accuracy_difftakedowns · dna snapshotTakedown accuracy.
  • td_defense_difftakedowns · dna bout rowsOne minus opponent takedown accuracy across prior stat-covered bouts.
  • control_share_diffcontrol · dna snapshotControl time as a share of observed fight time.
  • sub_att_per15_diffcontrol · dna snapshotSubmission attempts per fifteen minutes.
  • finish_rate_difffinishing · dna snapshotFinishes as a share of prior wins.
  • ko_rate_difffinishing · dna snapshotKO/TKO wins as a share of prior wins.
  • sub_rate_difffinishing · dna snapshotSubmission wins as a share of prior wins.
  • ko_loss_rate_diffdurability · dna snapshotTimes stopped by strikes as a share of prior appearances.
  • sub_loss_rate_diffdurability · dna snapshotTimes submitted as a share of prior appearances.
  • pace_retention_diffpace · dna snapshotRound-three attempt pace divided by round-one pace.
  • champ_round_delta_diffpace · dna snapshotRounds four and five pace minus rounds one to three pace.
  • southpaw_edgestance · staticPlus one when this corner is the only southpaw, minus one when the opponent is, otherwise zero. Antisymmetric by construction.
  • sos_diffopponent · dna bout rowsMean pre-fight win rate of prior opponents, each measured as of the date they were fought.
  • quality_wins_diffopponent · dna bout rowslog1p of prior wins over opponents who were above a .600 pre-fight win rate at the time.
  • stat_sample_log_diffconfidence · dna snapshotlog1p of stat-covered prior bouts. Carries how much evidence each corner actually has.
Method

How to argue with this

Model pbe-fight-model-v1, features pbe-fight-features-v1, spec hash 75da0a1de14de2e1…. ridge logistic regression, no intercept, antisymmetric differential features, trained on 9,175 graded bouts from 1994-03-11 to 2026-09-05. The full methodology, the leakage argument and the complete backtest tables are in the repository under docs/model/.

The underlying temporal feature source is the repaired historical Fight DNA snapshot layer. How Fight DNA works →