Roman Prigodskii

Work

Vertex Boxing

It began from a thesis:

Regional and club boxing lines are soft enough to beat.

Concluded research, September 2026 Every result is a backtest; no real bet has been placed. The report and the code are public under MIT. The data is not, because BoxRec’s terms forbid redistribution.

I moved the Vertex MMA models to professional boxing to test that claim. On every bout the available odds cover, the lines are not soft. What the model turned out to read is where the line is going.

bouts, 1950 to July 2026
413,279
priced bouts
3,288
nats, blended into the closing price
+0.0043
on the 2026 holdout, against a bar of 20
e = 41.8
real bets
0
github.com/romanprigodskii/vertex-boxing
The final report, docs/REPORT.md, on GitHub. Every result in it is a backtest; no real bet was placed.

The thesis, and what happened to it

The project began from a claim: the UFC closing line is sharp, but regional and club boxing lines are soft, so that is where a model built on records would find room. The data says the reverse.

Bets were struck at the opening price wherever the model’s probability beat the price’s by 2 points, a threshold fixed before the table was seen. Closing-line value, how far the price then moved towards the bet by the close, rises with the level of the fight.

Chart of mean closing-line value per bet by scheduled distance, with 95% intervals: 4 to 6 rounds +0.0044, 8 rounds +0.0075, 10 rounds +0.0093, 12 rounds +0.0180.

realised return

  1. 4 to 6 rounds: −14.9%
  2. 8 rounds: +5.4%
  3. 10 rounds: +4.1%
  4. 12 rounds: +13.1%
Closing-line value by scheduled distance4 to 6 rounds (club, 283 bets): +0.0044, 95% interval +0.0017 to +0.0073, realised return −14.9%. 8 rounds (regional, 337 bets): +0.0075, 95% interval +0.0033 to +0.0119, realised return +5.4%. 10 rounds (national, continental, 781 bets): +0.0093, 95% interval +0.0060 to +0.0127, realised return +4.1%. 12 rounds (title, 468 bets): +0.0180, 95% interval +0.0130 to +0.0232, realised return +13.1%.closing-line value, in probabilityreturn0+0.01+0.02+0.034 to 6 rounds club+0.0044−14.9%8 rounds regional+0.0075+5.4%10 rounds national, continental+0.0093+4.1%12 rounds title+0.0180+13.1%
The figure from section 4.2 of the report, with the realised return of each group’s bets beneath it.Closing-line value by scheduled distance, with 95% intervals, and the realised return on the right. Priced test bouts, June 2023 to July 2026, in a backtest. Report, section 4.2

The belt on the line gives the same ordering. The model reads records and ratings, and a rating is only as good as the record under it. At world level both fighters have thirty bouts behind them; on a club card the market knows which of the two is being managed, and the model is reading two thin records. The anonymous regional card the claim was aimed at gets no price at all, so there it cannot be tested.

On a window the rule was never chosen on

Refit on data up to June 2021 and run unchanged on the two years after, the pattern held: the top of the market gave 2.0 times the closing-line value of the bottom (+0.0276 against +0.0136), and the two intervals do not overlap.

10 June 2021 to 10 June 2023

The rule copied unedited onto two years it was never chosen on. Lines are 95% intervals. The outlined rod is the lower tier’s value laid twice end to end. Report, section 4.2

Closing-line value by tier, 10 June 2021 to 10 June 2023Lower tier, 365 bets: +0.0136, 95% interval +0.0080 to +0.0191. Upper tier, 461 bets: +0.0276, 95% interval +0.0200 to +0.0347. The upper tier gave 2.0 times the closing-line value of the lower, and the two intervals do not overlap.closing-line value, in probability0+0.01+0.02+0.03+0.04the intervals do not overlapLower tier8 rounds or fewer, no belt365 bets+0.0136Upper tier12 rounds, or a continentalor world belt, 461 bets+0.0276the lower tier, twice: 2.0 times
Closing-line value by tier, 10 June 2021 to 10 June 2023Lower tier, 365 bets: +0.0136, 95% interval +0.0080 to +0.0191. Upper tier, 461 bets: +0.0276, 95% interval +0.0200 to +0.0347. The upper tier gave 2.0 times the closing-line value of the lower, and the two intervals do not overlap.closing-line value, in probability0+0.01+0.02+0.03+0.04no overlapLower tier 8 rounds or fewer, no belt365 bets+0.0136Upper tier 12 rounds, or a continental or world belt461 bets+0.02762.0 times
What the upper tier's 461 bets returned, 10 June 2021 to 10 June 2023Realised return at the price bet: +9.5%, 95% interval −2.6% to +22.8%, so zero is inside it. At the closing price: −3.2% with the margin taken out by the power method, +2.8% with the proportional method.return on the upper tier's 461 bets−10%0+10%+20%← lostmade money →At the price betrealised, with its 95% intervalzero, inside the interval+9.5%At the close, powerthe calibrated method−3.2%At the close, proportional+2.8%
What the upper tier's 461 bets returned, 10 June 2021 to 10 June 2023Realised return at the price bet: +9.5%, 95% interval −2.6% to +22.8%, so zero is inside it. At the closing price: −3.2% with the margin taken out by the power method, +2.8% with the proportional method.return on the upper tier's 461 bets−10%0+10%+20%← lostmade money →At the price bet realised, with its 95% intervalzero, inside+9.5%At the close, power the calibrated method−3.2%At the close, proportional+2.8%

The money did not follow. The return was +9.5% with zero inside its interval. At closing prices it was −3.2% with the margin taken out by the power method, the one whose closing price is calibrated, and +2.8% with the proportional method.

What the model knows

On its own the model does not beat the closing line: −0.0211 nats [−0.0322, −0.0100], and −0.0198 when refit yearly. Blended into the closing price at a weight of 0.17 it improves that price by +0.0043 [+0.0024, +0.0062] on 3,288 priced bouts, so it carries information the price does not.

The model against the closing price, in natsOn its own the model trails the closing price by 0.0211 nats, 95% interval −0.0322 to −0.0100. Blended into the price at a weight of 0.17 it improves the price by +0.0043, interval +0.0024 to +0.0062, on 3,288 priced bouts.against the closing price, in natsthe price−0.03−0.02−0.010+0.01← worse than the pricebetter →The model on its own−0.0198 when refit yearly−0.0211Blended into the priceat a weight of 0.17, 3,288 bouts+0.0043
The model against the closing price, in natsOn its own the model trails the closing price by 0.0211 nats, 95% interval −0.0322 to −0.0100. Blended into the price at a weight of 0.17 it improves the price by +0.0043, interval +0.0024 to +0.0062, on 3,288 priced bouts.against the closing price, in natsthe price−0.03−0.02−0.010+0.01← worse than the pricebetter →The model on its own−0.0198 when refit yearly−0.0211Blended into the priceat a weight of 0.17, 3,288 bouts+0.0043
The model against the closing price, alone and blended, with 95% intervals.

At the closing price that is worth nothing in money: the one result that looked like money there came from stale prices (e = 1.15 on true closing prices) and was withdrawn. At the opening price, a median three days before the fight, it is different. On its own the model forecasts worse than the opening price. Blended in, it moves that price 87% of the way to where it closes.

Blended into the opening price, the model moves it 87% of the way to the closeA scale from the opening price, a median three days before the fight, to the closing price. Blended with the model, the opening price moves 87% of the way to where it closes. On its own the model forecasts worse than the opening price.against the opening price, a median three days before the fightBlended into the openalone, the model is worsethe opening pricethe closing pricehalfway87% of the way
Blended into the opening price, the model moves it 87% of the way to the closeA scale from the opening price, a median three days before the fight, to the closing price. Blended with the model, the opening price moves 87% of the way to where it closes. On its own the model forecasts worse than the opening price.against the opening price,a median three days before the fightthe opening pricethe closing price87% of the way
Blended with the model, the opening price moves 87% of the way to where it closes.

The opening price, tested by betting

Each window was scored as an e-value, the same machinery as my first paper: a bet against the price that cannot grow in expectation if the price is right. The bar is 20; 2023–2025 was registered as one of four hypotheses tested together, so its bar was 80.

Four windows at the opening price, each scored as an e-value

On a log scale from 1, where every bet starts, to 1,000. Blue marks a window past its bar.

Four betting windows at the opening price, scored as e-values2016–2020, 2,016 bouts, pre-registered in public: e = 7.0 × 10 to the 6, past the bar of 20. 2021–2023, 1,545 bouts, declared in advance as already seen: e = 12.5, short of the bar of 20. 2023–2025, 3,077 bouts, pre-registered, committed locally: e = 3.9 × 10 to the 8, past the bar of 20 (registered as one of four hypotheses, with a bar of 80). Jan–Jul 2026, 541 bouts, pre-registered in public: e = 41.8, past the bar of 20.the bar, 20110100201,0002016–20202,016 bouts, ProBoxingOdds opene = 7.0 × 106off this scale2021–20231,545 bouts, Bet365 opene = 12.52023–20253,077 bouts, Bet365 opene = 3.9 × 108off this scaleJan–Jul 2026541 bouts, Bet365 opene = 41.8
Four betting windows at the opening price, scored as e-values2016–2020, 2,016 bouts, pre-registered in public: e = 7.0 × 10 to the 6, past the bar of 20. 2021–2023, 1,545 bouts, declared in advance as already seen: e = 12.5, short of the bar of 20. 2023–2025, 3,077 bouts, pre-registered, committed locally: e = 3.9 × 10 to the 8, past the bar of 20 (registered as one of four hypotheses, with a bar of 80). Jan–Jul 2026, 541 bouts, pre-registered in public: e = 41.8, past the bar of 20.the bar, 20110100201,0002016–2020 2,016 bouts, ProBoxingOdds opene = 7.0 × 106off this scale2021–2023 1,545 bouts, Bet365 opene = 12.52023–2025 3,077 bouts, Bet365 opene = 3.9 × 108off this scaleJan–Jul 2026 541 bouts, Bet365 opene = 41.8
How each window was fixed before it was scored
WindowHow it was fixedResult
2016–20202,016 bouts, ProBoxingOdds open Pre-registered in public: the protocol’s hash was timestamped in Bitcoin blocks 968272 and 968274 and pushed to GitHub before the model was trained. e = 7.0 × 106passed; +18% to +24% on flat stakes
2021–20231,545 bouts, Bet365 open The same protocol, declared in advance as already seen. e = 12.5did not clear the bar
2023–20253,077 bouts, Bet365 open Pre-registered, but committed locally, so the order rests on my word. e = 3.9 × 108passed; 1.2 × 108 with everything settled in fight week removed; +10.9% [+6.2%, +15.9%] on flat stakes
Jan–Jul 2026541 bouts, Bet365 open Pre-registered in public: the rule for which bouts to bet was chosen on the three windows above and pushed before the holdout model was trained. e = 41.8passed

The obvious refinement, betting only title fights and dropping club fights, lowered the evidence in every past window, so the rule stayed as it was. The 2016–2020 opening line carries no timestamp and no named book, and that market was thinner, so that result is historical.

The leak it caught

Judges’ scorecards are published only for fights that went the distance, so the mere presence of judge fields told the model how a fight had ended, a fact nobody has before the bell. Where judges were recorded, 9.7% of fights ended early; where they were not, 74.3% did.

How a fight ended, read off whether its judges were recorded

A control on 5,673 events confirmed it was the outcome and not the crawler. Report, section 6

Probability that a fight ended early, by whether its judges were recordedWhere judges were recorded, 0.097; where they were not, 0.743. A control on 5,673 events confirmed it was the outcome and not the crawler.probability the fight ended early00.51Judges recorded0.097Judges not recorded0.743
Probability that a fight ended early, by whether its judges were recordedWhere judges were recorded, 0.097; where they were not, 0.743. A control on 5,673 events confirmed it was the outcome and not the crawler.probability the fight ended early00.51Judges recorded0.097Judges not recorded0.743

Put back into the final model, the leak is worth +0.0038 on held-out bouts and nothing on priced ones. It is gone, and a check now tests every column for it. So are two smaller bugs that made identical runs disagree: re-run seven weeks later, the published scoreboard came back identical to sixteen significant digits.

Checks built to kill the result

The opening-price result survived retraining without anything settled in fight week, a simulated null (mean e 0.20, never reaching its registered bar of 80), price-only controls with no model in them (1.2 and 0.25), and every year on its own. Sixteen classic price biases, among them favourite–longshot, the unbeaten record and the home fighter, were tested at Bet365’s close; none reached 20.

The checks built to kill the opening-price result, as e-values on a log scaleA logarithmic e-value axis from 0.01 to 1,000, with the bar at 20. The result at Bet365's open over 2023 to 2025, e = 3.9 times 10 to the 8, and the same retrained without anything settled in fight week, 1.2 times 10 to the 8, are both off the scale to the right. Price-only controls with no model in them score 0.25 and 1.2. A simulated null averages 0.20. None of sixteen classic price biases, tested at Bet365's close, reached 20.the bar, 20The result, at Bet365’s open over 2023–2025e = 3.9 × 108off this scaleRetrained without anything settled in fight weeke = 1.2 × 108off this scalePrice-only controls, no model in them0.251.2A simulated null, on averagemean e 0.20Sixteen classic price biases, at Bet365’s closenone reached 200.010.1110100201,000
The checks built to kill the opening-price result, as e-values on a log scaleA logarithmic e-value axis from 0.01 to 1,000, with the bar at 20. The result at Bet365's open over 2023 to 2025, e = 3.9 times 10 to the 8, and the same retrained without anything settled in fight week, 1.2 times 10 to the 8, are both off the scale to the right. Price-only controls with no model in them score 0.25 and 1.2. A simulated null averages 0.20. None of sixteen classic price biases, tested at Bet365's close, reached 20.the bar, 20The result, at Bet365’s open over 2023–2025e = 3.9 × 108Retrained without anything settled in fight weeke = 1.2 × 108Price-only controls, no model in them0.251.2A simulated null, on averagemean e 0.20Sixteen classic price biases, at Bet365’s closenone reached 200.010.1110201,000
Each check as an e-value, on a log scale from 0.01 to 1,000. Every test starts with its wealth at 1.

One pattern I had published:

All the value is on favourites.

It came from taking the margin off the open and the close by two different methods. Fixed, it vanished, and the report records the correction.

A random search, with the rules written first

The last thing tried was brute force, under a protocol committed before the first fit. 200 random configurations were trained on bouts up to June 2021 and ranked on 2021–2023, and the top five were scored once on 2023–2026, which the search never saw.

Six of the 200 had beaten the model already in use on the window they were ranked on; none of the five taken forward kept that lead on unseen bouts. The best had led by +0.0017 where it was chosen and trailed by 0.0004 where it was not.

The best of 200 random configurations, against the model already in useRanked on 2021 to 2023, where it was chosen, it led the model already in use by 0.0017. Scored once on 2023 to 2026, which the search never saw, it trailed by 0.0004.where it was chosenranked on 2021–2023where it was notscored once, 2023–2026+0.0017−0.0004
The best of the 200. The dashed line is the model already in use.

What it does not show

  • The model does not beat the market on its own.−0.0211 nats against the close
  • It makes nothing at the close.e = 1.15 on true closing prices
  • The opening-price result is historical.0 real bets
  • The edge was absent in 2021–2023.e = 12.5, short of 20
  • A bookmaker limits an account that keeps winning at the open.

The anonymous regional card carries no price, so the thesis was refuted where it can be tested and cannot be tested where it was aimed.

Section 9 of the report has all three tests and every check that could have killed them.

The live test

No real bet has been placed. The weight in the final rule, 0.10, was picked after the 2026 holdout was scored, so only fights that had not happened can test it. On 24 September 2026 the rule was frozen and pushed publicly before any bout it covers had been fought: a model trained to 24 July 2026, blended into Bet365’s opening price, one unit on every side where the blend beats the posted price, scored with no stake placed.

It is an e-value that can be read at any checkpoint, rejects at 20, and closes on 25 September 2029, three years after the freeze. At 60 to 90 bets a year, a true return of +19%, the rule’s 2016–2026 average, would be expected to pass in one to two years, before the close. A true +10% would take three to four, so the test would probably close before it passed. With no edge it would never pass. The result will be reported either way.

When a true return would pass, at 60 to 90 bets a year

From the freeze to the close, with the ranges the protocol gives for a pass. The +10% range begins where the test closes.

The live test, from its freeze to its closeFrozen and pushed on 24 September 2026; it closes on 25 September 2029. At 60 to 90 bets a year, a true return of +19%, the rule's 2016 to 2026 average, would pass one to two years after the freeze, before the close; +10% would take three to four, so the test would probably close before it passed; with no edge it would never pass.Frozen and pushed24 September 2026The test closes25 September 20292027202820292030the calendara true return oftoday+19%the rule’s 2016–2026 averageone to two years+10%three to four yearsNo edgenever01 year2 years3 years4 yearsyears since the freeze
The live test, from its freeze to its closeFrozen and pushed on 24 September 2026; it closes on 25 September 2029. At 60 to 90 bets a year, a true return of +19%, the rule's 2016 to 2026 average, would pass one to two years after the freeze, before the close; +10% would take three to four, so the test would probably close before it passed; with no edge it would never pass.Frozen24 Sep 2026Closes25 Sep 20292027202820292030today+19% the rule’s 2016–2026 averageone to two years+10%three to four yearsNo edgenever01 year234years since the freeze