How We Reconstruct Fair Value

Every number in this document is either something we measured or something we killed. Each sport is priced on its own measured model rather than on one generic formula, and every figure is published beside the market price it was measured against. Today that means the NFL, with a pregame play by play simulation and a live possession engine, and MLB, with run and win probability tables measured on five years of play.

What follows is how each published figure is built, how the constants behind it were fitted, what the model scores against the closing line on 672 graded games across three seasons, and the ideas that did not survive their own measurement, which are the majority. No figure on this page is a live season result: development figures carry their season and their sample and never move, and the current record is graded game by game on the results page.

HOW THE NUMBER IS BUILT

Why a simulation rather than a regression

Every NFL game is played out at play level before kickoff, down by down, with the clock, the field position and the score carried forward, and the numbers we publish are read off the resulting distribution rather than estimated directly. Win probability is the share of simulated games the home side wins, the projected margin is the mean margin across those games, and the spread of that margin, roughly fourteen points, is dispersion the simulation produces rather than a number anyone chose.

The reason for simulating rather than regressing is structural rather than a matter of taste. A regression on team aggregates estimates a conditional mean, while almost everything a market prices lives in the distribution: the probability a favourite wins outright, the probability a total clears a line, the shape of the margin. Recovering those from a point estimate requires assuming a distributional form, and that assumption then does the work the model was supposed to do.

Reading them off simulated games instead keeps win probability, margin and total internally consistent by construction. A coherence check confirms it: across a season the correlation between our projected margin and our win probability is 0.994, which is not a fitted relationship but the same simulated games read two ways. The cost is honest, and it is simulation error, which is why the live engine runs two thousand paths on every tick.

win_prob   = P(margin > 0) = mean(margin_i > 0) over i = 1..N
proj_margin = mean(margin_i)
proj_total  = mean(home_i + away_i)
margin_sd   = SD(margin_i), about 14.2 points

Yardage is drawn from real plays, conditioned on the situation

Yardage is not drawn from a fitted distribution. Each play draws from a pool of real plays from the two prior seasons, bucketed by play type, by whether the down is early or late, by whether the distance is short, medium or long, and with a separate pool for the red zone. This single choice is what makes simulated drives stall the way real ones do.

Drawing from an unconditional distribution produces drives that march down the field, because it never reproduces the particular difficulty of third and long, where the outcome distribution is dominated by incompletions and short gains that fail to convert. An unconditional model also hands the red zone the open field distribution and scores far too many touchdowns. The conditioning is doing work that no coefficient could.

SituationMean yards
Early down, pass, long6.6
Late down, pass, long5.7
Open field, pass6.2
Red zone, pass3.1
Red zone, run2.9

Measured on the two seasons before the graded one.

The live possession engine

Once a game kicks off, a possession simulator takes the live state from the play by play feed, which is the score, the clock, who has the ball, the field position, the down and distance and the timeouts, and plays out the rest of the game two thousand times, drawing each drive from measured outcome tables keyed on field position, score state and time remaining. It reprices every live game about every ten seconds and publishes the win probability, the projected margin and total with their spreads, the projected score, and the probability that the trailing side comes back.

The projected score is the most likely reachable final rather than the mean of each side, because the mean of each side is frequently not a football score at all. The means ride alongside it for anyone who wants them, together with the three most likely scoreboards.

The engine reads two team strength inputs, the pregame spread and the pregame total, so a starting quarterback leaving reaches the number as a move in the spread. That move is the published cost of that team's own backup, applied only once the exit has held, which means an out ruling, two full drives, eight backup dropbacks, or five minutes with the backup in, and it is reversed if the starter returns. Other absences are shown as off the field, and a player who leaves has his remaining prop projection moved to the teammates at his position in proportion to their own projections.

A game whose feed has stopped moving is not priced at all. If the state has not changed past its own age limit the game is marked blind rather than repriced from a stale picture, because a confident number built on a frozen feed is worse than no number.

Freshness, and what an edge is measured against

Every live edge sits beside the venue price it was measured against and the age of that price, where age means the seconds since the price last changed rather than the seconds since it was last written down. Those are different numbers, and only the first one tells a reader whether anybody is still trading. Past the freshness window the edge is withheld and the screen says so instead of showing a figure.

A live number is only compared with a price that is still tracking the same game. After a turnover the engine also reports whether the market price has moved as far as the engine has, so the size of any gap is visible rather than implied.

Our line is compared against the median line across the sportsbooks the odds feed returns for that game, which is what the board means by the consensus. The count of books varies by game and is recorded with the line.

edge_pp = (P_ours - P_venue) * 100
published only while the venue price is inside the freshness window

Run and win probability tables for baseball

For baseball the live number comes from two tables measured on five years of play: the runs still to come from every inning, out and base state together with their spread, and the probability that the home team wins from every inning, out, base and score state.

Remaining runs are priced with a negative binomial tail rather than a Poisson one, because a Poisson tail is too narrow for real scoring and prices the far rungs of a totals ladder with a confidence the data does not support. The measured park factor and the day's temperature adjust the run environment for totals, and where the tables do not cover a state the engine falls back to a roll that follows the starting pitcher through the order and into the bullpen.

P(home wins) = measured win probability at (inning, half, outs, bases, score difference)
P(over L)    = P(runs so far + remaining runs > L), remaining runs ~ negative binomial

Pricing what an edge really costs

Prediction markets are thin, so an edge is only as good as the price that side really trades at. Ladder edges are priced at the ask or the bid for each side rather than mid to mid, the spread is reported alongside so an illiquid market cannot present itself as an opportunity, and a mapped contract whose line does not match the game's line is never priced as that line.

The expected value shown on a play is taken after the venue fee, and the breakeven price is printed beside it. Where a stake is sized, the size is Kelly with an uncertainty shrink, which was introduced after a measured bleed on low conviction disagreements in the baseball engine. A two point edge under high uncertainty keeps roughly a tenth of raw Kelly while a thirty point edge keeps about ninety six per cent of it.

Positions on the same slate are then shrunk jointly, because same day games are not independent and a naive per bet Kelly over bets the portfolio badly. Six correlated twelve per cent bets shrink from a raw aggregate of 0.72 to 0.41.

fee  = 0.07 * p * (1 - p) per contract, each side
f*   = f_kelly * e^2 / (e^2 + sigma_p^2)
       e = edge, sigma_p = sampling uncertainty combined with model uncertainty

HOW IT WAS FITTED AND TESTED

How a team becomes four numbers

Teams enter the simulator as four unit ratings in expected points added per play: pass offence, run offence, pass defence allowed and run defence allowed. Three transformations stand between the raw data and the number the simulator uses, and each exists to defeat a specific failure rather than to improve a fit.

Ratings are exponentially decayed by weeks elapsed, so a team that changed in November is rated as it is now rather than as its September self. They are then shrunk toward the league mean by an empirical Bayes weight in sample size, because small samples produce confident nonsense. The shrinkage constant is not universal: it is set per quantity by how quickly that quantity stabilises. Quarterback ratings use eight hundred dropbacks, while the same machinery in the baseball engine uses thirty for strikeout rate, two hundred for home run rate and four hundred and fifty for weighted on base average. Using one constant across statistics is a common and expensive error.

Shrinkage alone was not enough for quarterbacks. A backup with one hundred and fifty five efficient relief attempts ranked fourteenth in the league on the raw rate. The answer was to clip the input to a plausible band before shrinking it, which removes the leverage of a small extreme sample rather than merely diluting it.

The step most models omit is re-centring. After the adjustments are applied the ratings are shifted so the league mean returns to its baseline. Without that the model deflates: an early version applied injury and quarterback penalties team by team, and because penalties are far more common than upgrades, the league's aggregate scoring level fell by seven points across a season. Injuries redistribute expected points between teams, they do not remove them from the league, and re-centring is how that fact gets encoded.

In the matchup function defence enters additively, because the defensive rating is points conceded, so a worse defence carries a higher value and should help the offence facing it. That is worth stating plainly because we once shipped an attribution bug on exactly this sign, which made a diagnostic report claim a game's efficiency matchup favoured the team the engine was picking against. The matchup scale is set by a controlled comparison, and the trade it encodes is instructive: at a lower scale the model compresses toward the market, so accuracy against the spread rose from 44 per cent to 47 per cent while straight up accuracy fell from 62 per cent to 59 per cent. Flattening buys agreement with the market and destroys differentiation, so we kept the differentiation.

theta_hat = (n * x_bar + k * mu) / (n + k)
            n = observed sample, x_bar = raw estimate, mu = population mean
            k = shrinkage constant, in sample units, set per quantity
shift     = K_EPA * ((off_rating - mu_off) + (def_allowed - mu_def)) * w

Point in time, or it is not a backtest

Every input is point in time and the engine prints a timing manifest on every run stating the window of each input. This is not decoration. A backtest that leaks is worse than no backtest, because it produces confidence.

Two caveats are stated in the output rather than hidden. Weather uses observed actuals in backtest where live prediction uses forecasts, and a few measured constants span eras that include graded seasons. The defence against the second is an untuned control season rather than a claim that the problem does not exist. The engine also writes a ratings tape, recording every team's rating and every starting quarterback as the engine believed them to be in each week, so any historical claim can be audited rather than trusted.

InputWindow
Team unit ratingsPrior weeks this season plus last season, rebuilt each week
Quarterback performancePrior weeks and prior seasons, decayed 0.72 per year
Quarterback identity priorDraft slot, a pre season fact
Starters, depth, injuriesThat week's pre game report
Snap sharesPrior weeks only
Play shape poolsThe two seasons before the graded one

Fitting the constants through the origin

Most constants in the engine are regressions through the origin on measured events, estimated as the ordinary least squares slope with no intercept. The origin constraint is a modelling decision rather than a convenience: when the input is zero the effect must be zero, so zero vacated share must produce zero redistribution. An intercept here would let the model invent an effect out of nothing.

Injury redistribution is the worked example. When a team's producers are out, two separate things happen, and both were measured on weeks where at least six per cent of a statistic's production was sidelined. The first question is whether the team's total output shrinks, and the answer is that teams retain roughly ninety per cent of a lost producer's output: the offence largely replaces the volume, and it is quality rather than quantity that walks out the door. The second question is whether the survivors absorb the vacated share in proportion to their own usage, and they very nearly do, which contradicts the common assumption that defences simply key on the remaining option.

The proportional model still says nothing about who absorbs, so that was measured by cell, as gain realised per unit of proportional expectation. Depth players at the same position absorb around three to four times their proportional slice. The next man up is literally true, and it is the sixth receiver whose role multiplies rather than the star whose role grows. Those depth cells were initially pinned at a safety clip, which told us the true value was higher than the ceiling we had imposed, because a clip that binds is information rather than a setting.

Two mistakes in this area are worth recording because both were expensive. The turnover dial was tuned for thirty builds against a hand entered benchmark of 13 per cent. When the real rate was finally measured from drive result data it was 11.1 per cent, against a simulator producing 12.9 per cent, and the fitted weight moved from 1.30 to 1.12. Never tune against a remembered number, because the instrument is cheap and the thirty builds were not. Separately, red zone field goal share measured at play level returned 65 per cent, because kicks attempted after a penalty pushed the ball outside the twenty were excluded by the filter. Measured at drive level the answer is 85 per cent. The unit of measurement was the bug.

Absorption cellReceiving yardsReceptionsRushing
Same position, top of order1.671.981.51
Same position, depth3.0 or more3.0 or more3.73
Cross position, top1.111.410.67
Cross position, depth2.402.871.43

Gain realised per unit of proportional expectation. A value of 1.00 would mean the survivor gains exactly his proportional slice.

Roster carryover, the largest validated gain

How much of last season's team quality should carry into this one? The standard answer is a fixed blend weight. We measured it across 128 team seasons and found that the weight is not fixed at all, because it depends on how much of the roster actually returned.

The fitted relationship therefore includes the interaction term explicitly, and it is wired into the simulator as a bounded multiplier on last season's contribution so that an extreme roster cannot produce an absurd rating. The returning share is computed as of the graded week from players who have actually taken a snap, which makes it free of leakage by construction.

We did not simply wire the fitted slope in. We ran it at half strength first and it was a wash, moving the target metric from 0.0349 to 0.0346, which is nothing. Two readings were available at that point: the channel is real but diluted downstream, or the channel does not exist. Running the full fitted slope distinguished them, because the target moved and the aggregate moved with it. A dose and response test separates an effect that is too small to see from an effect that is not there, and those two situations demand opposite decisions.

The gate it then had to pass was a season no constant had ever seen. Fitted with 2025 available and graded on 2024, every metric improved: straight up accuracy from 64.7 per cent to 67.4 per cent, Brier from 0.2212 to 0.2160, accuracy against the spread from 46.4 per cent to 49.1 per cent, and the mid season target error from 0.032 to 0.025. A fitted lever that improves an untuned season is measuring football. A fitted lever that only improves its own season is measuring that season.

Returning shareCorrelation, last to thisSlope
Low return0.3010.42
Mid return0.2210.29
High return0.4610.61
carry = 0.45 * last + 2.17 * last * (ret - 0.67)
        ret  = snap weighted share of last season's roster that has played
        0.67 = the population mean returning share
m     = clip(1 + 4.8 * (ret - 0.67), 0.45, 1.45)

Why the normal distribution failed on player props

The player props layer needs the probability of going over a line, and the first implementation did what almost everyone does, which is to assume a normal distribution around the projection with the player's own historical volatility as its width. It produced badly calibrated probabilities, with every band compressing toward roughly forty per cent realised regardless of what had been predicted.

Standardising each weekly outcome against that player's own trailing mean and volatility explained why. The mean of the standardised outcome is approximately zero while the median is clearly negative, because football production is right skewed and the occasional enormous game pulls the mean above the typical week. A trailing average is therefore an unbiased estimator of the mean week and a biased estimator of the typical week, so a symmetric model centred on the mean prices every over roughly ten points too high, structurally.

Three attempts followed and each taught something. Fitting the skew by recentring and rescaling barely moved the bands, because a normal distribution fitted to a skewed sample still cannot represent skew: the parameters absorb it and the shape does not change. Dropping the parametric form entirely and reading probabilities off the measured empirical distribution did better, improving Brier from 0.2483 to 0.2448, because the skew now set the base rate correctly and the fat tails tempered the extremes automatically.

The attempt that worked recognised that the miscalibration was conditional rather than uniform. The residual error depended on how far the projection sat from the line, because when a projection strays far, most of that distance is our own forecast error rather than signal, so realised rates flatten toward the base rate. A conditional relationship needs a conditional estimator, so the mapping itself was measured: bin a control season by the threshold statistic, take the realised rate in each bin, and enforce monotonicity by pooling adjacent violators, which is isotonic regression by the pool adjacent violators algorithm. There is no distributional assumption anywhere in that chain.

The honest reading of the result matters more than the result. A predictor that ignored every input and always quoted the base rate would score about 0.2400 on this population, and we score 0.2390 against a coin flip at 0.2500. Calibration is solved and discrimination is now the binding constraint. The probabilities are trustworthy, in that when we say 57 per cent, 57 per cent happens, but the measured conviction range only spans roughly 35 to 58 per cent, because the projections do not yet separate outcomes hard enough to justify more. Reporting the Brier score without that comparison would overstate the result substantially, and that distinction is the difference between a calibrated model and a profitable one.

StatMean of zMedian of zShare above the mean
Receiving yards+0.06-0.2042.4%
Receptions+0.07-0.1345.4%
Rushing yards+0.03-0.3439.4%

z is each week's outcome standardised against that player's own trailing mean and volatility. Mean near zero with a negative median is the signature of right skew.

zt = (line - projection) / sigma
bin a control season by zt, take the realised over rate per bin
enforce a monotone non increasing rate in zt (pool adjacent violators)
the target season reads P(over) by interpolation

Measuring our own noise floor

Every change ships one dial at a time, graded against a locked baseline with the dial on and off, and then graded again on an untuned control season before it locks. A dial that cannot survive its own absence is removed regardless of how good the story behind it is.

That protocol nearly produced a false negative, and the recovery is the most useful methodological result in the project. A new dial appeared to cost 2.7 points of straight up accuracy, dropping it from 65.6 per cent to 62.9 per cent, which is large enough to kill a dial. But the dial was a symmetric one per cent scaling on yardage, which has no plausible mechanism for moving winner accuracy by that much. Rather than accept the number or dismiss it, we measured the estimator's own variance by running the same physics on the same data with different random paths.

The same model scored 65.6 per cent at five hundred simulations and 64.3 per cent at fifteen hundred, which is 1.3 points apart with nothing changed but the dice. Re-running the comparison at fifteen hundred paths gave a Brier score of 0.2338 with the dial on and 0.2338 with it off, identical to four decimal places. The dial was exonerated, and the apparent regression was resampling noise wearing a costume.

The standing rule that came out of it is that no verdict is taken on a straight up gap below 1.5 points at five hundred paths, that Brier arbitrates instead, and that close calls escalate to fifteen hundred. Brier is the better arbiter for a structural reason: it is a proper scoring rule computed on the whole probability, whereas straight up accuracy thresholds that probability at one half and throws away the magnitude, and the discarded information is exactly what makes the binary metric noisier. Across the same resampling that moved straight up accuracy by 1.3 points, Brier moved by 0.0003. Most model development processes never measure their own noise floor and therefore cannot tell a real regression from a bad shuffle.

The regime finding, and why the calibration constants are set to one

Define the chalk index as the market favourite's straight up hit rate to date. In seasons where it runs high, disagreeing with the market is severely punished, and in normal or upset seasons disagreement pays. The effect was confirmed independently in five separate measurements, and it governs how the output is used rather than how the model is built.

The critical negative result sits underneath it. Every post hoc calibration layer we tried flipped sign between regimes: confidence shrinkage helps in upset years and hurts in chalk years, while record weighting does the reverse. No static mapping generalises, so all calibration constants were set to one and the effect is handled as a sizing regime instead, measured weekly and applied to stake, never baked into the model.

We also tested trading the regime as a gate and rejected that too. A trailing chalk index caught only two of fifty two flips on a chalk season, because the signal arrives more slowly than the season moves. Continuous sizing survives the test and a discrete throttle does not.

SeasonMarket favourite, straight upOur accuracy when we flippedRegime
202563.4%55.8%Normal or upset
202474.1%29%Chalk anomaly
202369.6%26.2%Chalk

WHAT DID NOT SURVIVE

The ledger of things that died

Roughly two thirds of the work below is a hypothesis that did not survive contact with data, and it is kept in the record because the surviving third is only credible in its company. Each of these was plausible, several are things practitioners assume without testing, and all of them were killed by their own measurement.

Rest and travel is the clearest case. Across 4,175 games the correlation between a rest advantage and the residual against the spread is minus 0.001, and teams coming off a bye actually under cover, which means the market overprices rest slightly rather than underpricing it. A widely repeated handicapping factor is measurably already in the price and a little beyond it.

Player talent in the sides model failed differently and more usefully. A complete roster wire across seven measured units, tested three ways, degraded Brier from 0.2313 to 0.2354, and the symmetric totals only version landed at 50.9 per cent. Offences adapt and the market already prices known injuries, so the wire added variance without information. Player talent moved to the props engine, where it belongs, and the sides model stayed clean.

One asymmetry did survive, in the pair persistence work, and it is genuinely interesting. Across roughly twelve thousand player against opponent meeting pairs, players with strong history against a team went over at 41.3 per cent in the next meeting, which is identical to the neutral bucket, and ten of the twelve largest reputations for owning a team went under next time. But the struggles side is mildly sticky at 37.0 per cent against that same 41.3 per cent neutral rate, and roughly half of it survives adjusting for how the whole league performed against that defence. Suppression persists where domination does not, which is consistent with a scheme or personnel answer being repeatable in a way that a big game is not. The magnitude is about one yard, far below anything that could be acted on.

One item is parked rather than killed, because its measurement still prints on every run. An opponent defence tilt on props, built two ways, produced slopes whose variation between adjacent seasons exceeded their own magnitude, with the receiving slope swinging from 0.13 to 1.11, and applying it turned a control lane negative. The application is off and the ledger keeps watching. The candidate route is positional matchup read from play by play, where a claim that a defence erases slot receivers is directly measurable rather than inferred from team aggregates.

IdeaWhat was measuredVerdict
Rest and travel advantageCorrelation with the spread residual across 4,175 games: -0.001Killed
Player talent in the sides modelBrier degraded 0.2313 to 0.2354; totals only version 50.9%Killed
Credit for roster additionsNet import against early season signed error, 96 team seasons: -0.034Killed before build
A player owns a team12,000 meeting pairs; carry slope +0.029 raw, +0.023 adjusted; 41.3% against 41.3%Killed, one asymmetry kept
Pooling seasons to double sample sizeThe degradation constant moved from 0.13 to 0.29 on one added seasonKilled
Opponent defence tilt on propsReceiving slope swung 0.13 to 1.11 between adjacent seasonsParked, still measured
Post hoc probability calibration on sidesEvery fitted mapping flipped sign between chalk and upset seasonsKilled, constants set to one
Four confident mechanical fixesFourth down: the simulator converts at 68.7% against a real 68.0%Refuted by instrument

WHERE WE STAND

Graded against the closing line

The closing line is the benchmark, because it is the sharpest publicly available number and any backtest that comfortably beats it is describing a bug rather than a discovery. These are development figures, fixed to the seasons and samples named, and they do not move.

Read honestly, this says three things. We pick winners at or above the market's own favourite rate in a normal season. The market retains a Brier advantage of roughly 0.02 everywhere, which is real and which we have not closed with public data. Against the spread we sit below the breakeven rate of 52.4 per cent in every season measured, so the closing spread is a number this system has not yet beaten with the information it currently carries. The best published NFL models sit near 53 per cent against the close over thousands of games, and claiming materially more than that would be claiming a bug.

That is also why the current work is aimed at the opening line rather than the close. The close absorbs everything the week learns, while the opener is where an injury read has somewhere to go, and that is where the measurable room appears to be.

A second moment check that most model reports omit compares the cross game spread of our projections to the market's on the same slate. The market's dispersion is a benchmark for how much cross game differentiation is defensible, and when ours substantially exceeds it, the extreme disagreements are where our estimation error concentrates, which inverts the naive reading that the biggest gaps are the strongest signals. This diagnostic immediately earned its keep: a pre season board showed a ratio of 1.89 and produced totals disagreements of fourteen points, while the same engine on real data shows 1.40. That separated an input problem from a model problem without any argument, and it prevented a board that should not be traded from being traded.

SeasonOur winnersMarket winnersOur BrierMarket BrierAgainst the spreadTotals
2025, tuning62.9 to 65.6%63.4%0.23410.215045.5%54.5%
2024, control67.4%74.1%0.21600.191049.1%not run
2023, control60.7%69.6%0.23500.214645.1%not run

Lower Brier is better. 672 games across three seasons, strict point in time inputs, graded against the closing line.

dispersion = SD(our projections) / SD(market lines)
  margin : 7.62 / 6.49 = 1.18
  totals : 6.14 / 4.39 = 1.40   on real data
  totals : 6.70 / 3.60 = 1.89   on a pre season board with no rosters

What is still open

A methodology page that reports only wins is a sales document, so these are stated plainly. On props the probabilities are honest but the conviction range is narrow, and improving that means better projections rather than better calibration, because the calibration machinery is finished and carries to real book lines unchanged.

The dispersion excess of 1.18 on margins and 1.40 on totals is mild, is flagged on every run, and has not been shown to cost money, so no correction has been applied. One season, 2023, fails to beat the close on totals even after a measured level bias was found and fixed, and the ranking failure underneath that remains unexplained. It is the weakest season on every metric, but our worst season is a description rather than a mechanism.

The redistribution work sits at a sample floor of roughly 150 qualifying weeks per season with effect sizes under a yard, which is why tuning it further was abandoned rather than pursued. Two shape errors remain in the simulator, with turnovers on downs running 3.7 points above the real rate and field goals 3.3 points below, both carrying a small measured Brier cost, deliberately deprioritised and recorded here rather than quietly tolerated.

Every call graded in public

None of the figures above are this season's results, and that is deliberate, because a number typed onto a page goes stale the moment the next game finishes. The current record is computed from the games themselves and published in full, week by week and game by game, on a page anyone can read without an account.

That record grades the winner call, the side of the spread, the side of the total, the Brier score of our win probability against the market's on the same games, the live engine against both the market and the previous model quarter by quarter, and every paper pick at a flat five dollar stake with the price it was taken at. A win rate is never published without the price paid beside it, because a rate without a price is not a result. In game returns are shown per one dollar contract after the venue fee on both legs, pushes are excluded from win rates and shown in the record, and the sample size is stated on every block.

One week is a small sample, so each week reads as a record rather than a verdict. This is data rather than advice.

Common questions

How does LazyEdge predict NFL games?

By simulating them play by play rather than fitting a regression. Each game is played out down by down with the clock, field position and score carried forward, and the published numbers are read off the resulting distribution: win probability is the share of simulated games the home side wins, and the projected margin and total are the means across those games. Once a game kicks off a possession engine takes the live state from the play by play feed and plays out the remainder two thousand times, repricing about every ten seconds.

How accurate is the LazyEdge NFL model?

On 672 games across three seasons with strict point in time inputs, the pregame simulation picked winners at 62.9 to 65.6 per cent in 2025 against the market favourite's 63.4 per cent, and at 67.4 per cent on the untuned 2024 control season against the market's 74.1 per cent. Brier scores were 0.2341 and 0.2160 against the market's 0.2150 and 0.1910, so the market retained an advantage of roughly 0.02. The current season's record is graded game by game and published at lazyedge.net/results.

Does LazyEdge beat the closing line?

Not yet with the information the model currently carries. Against the spread the system graded 45.5 per cent, 49.1 per cent and 45.1 per cent across the three measured seasons, all below the 52.4 per cent breakeven. The closing line absorbs everything a week learns and the best published NFL models sit near 53 per cent against it over thousands of games, so the current work targets the opening line, where an injury read has somewhere to go before the number settles.

What is a Brier score and why does LazyEdge use it?

A Brier score is the mean squared error of a probability forecast, calculated as the square of the difference between the stated probability and the outcome, where the outcome is one or zero. Lower is better, a coin flip scores 0.2500, and it is a proper scoring rule, meaning it is minimised by stating your true belief. LazyEdge uses it in preference to a hit rate because a hit rate thresholds the probability at one half and throws the magnitude away, which makes it far noisier: across the same resampling that moved straight up accuracy by 1.3 points, Brier moved by 0.0003.

How does LazyEdge price player props?

From the same simulation, as a projection, a median and a spread for each player and stat, graded at the median against the venue's main line because a mean overshoots a skewed stat. The probability of going over a line does not assume a normal distribution, because a normal centred on the mean prices every over roughly ten points too high on right skewed football production. Instead the mapping from the standardised distance to the line onto the realised over rate is measured directly on a control season and made monotone by isotonic regression.

How often does the live NFL number update?

About every ten seconds for each live game, with two thousand simulated paths behind every tick. Every edge is published beside the venue price it was measured against and the age of that price, where age means the seconds since the price last changed rather than since it was last written down. Past the freshness window the edge is withheld, and a game whose feed has stopped moving is not priced at all.

Where does LazyEdge get its data?

Play by play history and the game spine come from the public nflverse dataset, live game state from the public ESPN feed, market prices and order books from Kalshi and Polymarket, and sportsbook lines from an odds aggregator, where the consensus line is the median across the books returned for that game. Baseball tables are measured on five years of play.

Does LazyEdge give betting picks or tips?

No. LazyEdge publishes a number, the market price beside it, the difference between them, the age of that price and the sample behind every figure, and then grades every call in public. It is a data product rather than advice, and no row on the terminal tells a reader to place a wager.

How does LazyEdge handle an injury or a quarterback change during a game?

A starting quarterback leaving reaches the number as a move in the pregame spread, sized at the published cost of that team's own backup rather than a generic penalty. The move is applied only once the exit has held, meaning an out ruling, two full drives, eight backup dropbacks, or five minutes with the backup in, and it is reversed if the starter returns. Other absences are shown as off the field, and a player who leaves has his remaining prop projection moved to teammates at his position in proportion to their own projections, because depth players at the same position were measured absorbing three to four times their proportional slice.

Why simulate instead of fitting a regression on team statistics?

Because a regression estimates a conditional mean while almost everything a market prices lives in the distribution: the probability a favourite wins outright, the probability a total clears a line, the shape of the margin. Recovering those from a point estimate requires assuming a distributional form, and that assumption then does the work the model was supposed to do. Simulation produces the distribution directly, which is why our projected margin and our win probability correlate at 0.994 without any fitting: they are the same simulated games read two ways.

How is an edge calculated and does it account for costs?

An edge is the difference between our probability and the venue's, in percentage points. Ladder edges are priced at the ask or the bid for each side rather than mid to mid, because the ask is what a position actually costs, and the bid to ask spread is reported alongside so an illiquid market cannot present itself as an opportunity. Expected value is taken after the venue fee, which on Kalshi is 0.07 multiplied by the price and by one minus the price, per contract per side, and the breakeven price is printed beside the edge.

What does LazyEdge say it cannot do yet?

Four things, stated on the methodology page. The model has not beaten the closing spread in any measured season. The market keeps a Brier advantage of roughly 0.02 on winners. Player prop probabilities are well calibrated but their conviction range only spans about 35 to 58 per cent, so discrimination rather than calibration is the binding constraint. And two simulator shape errors remain, with turnovers on downs running 3.7 points high and field goals 3.3 points low.

Terms

Brier score
The mean squared error of a probability forecast, squared difference between the stated probability and the outcome. Lower is better and a coin flip scores 0.2500.
Edge, in percentage points
Our probability minus the venue's probability, multiplied by one hundred. A ten point edge means we price something ten percentage points differently from the market.
Closing line
The final line a sportsbook offers before kickoff. It is the sharpest publicly available number and the benchmark any model should be graded against.
Expected points added
The change in a team's expected points across one play, given the down, distance and field position before and after. Team ratings are carried in this unit, per play.
Empirical Bayes shrinkage
Pulling a small sample estimate toward the population mean by a weight that depends on sample size, so a player with few attempts is not rated as if he had many.
Isotonic regression
Fitting a monotone mapping by pooling adjacent points that violate the required direction. Used here to map the distance between a projection and a line onto a realised rate, with no distributional assumption.
Negative binomial
A count distribution with a wider tail than the Poisson at the same mean. Baseball remaining runs use it because a Poisson tail prices the far rungs of a totals ladder with more confidence than the data supports.
Push
A wager that lands exactly on the line and returns the stake. Pushes are excluded from published win rates and shown separately in the record.
Price age
The seconds since a venue price last changed, not the seconds since it was last recorded. Only the first tells a reader whether anybody is still trading.
Chalk index
The market favourite's straight up hit rate so far in a season. A high index marks a season in which disagreeing with the market is punished.
Kelly fraction
The stake size that maximises the long run growth rate for a given edge and price. Here it is shrunk by the uncertainty in the edge, and shrunk again across correlated same day positions.
Point in time
An input restricted to what was knowable before the graded event. A backtest that leaks future information is worse than no backtest, because it produces confidence.