LIVE
loading live feed… loading live feed…
tail -f ./linehype/model.log // every result, every change

the ledger.

Our public record. How the model is doing, what we change and why, and the days it gets things wrong. We grade ourselves in the open — because a model you only hear about when it wins isn’t one you should trust.

model
elo_v1
season_accuracy
--
games_graded
--
today
--
beat_the_close
--

// beat_the_close = share of graded picks where the market moved toward our pick after we logged it (closing-line value). On free odds lines this sits near 50% and is informational — it becomes a real edge signal with the paid, sportsbook-grade feed at football.

today_board

today's picks.

Every game logged this morning, sorted by edge. Settled after midnight ET.

// picks_log · today · all leagues loading…
leaguematchupmodel pickedgeo/u leanresult
loading…
model_record

the record.

Every settled pick, in the open. No cherry-picking.

loading…
// picks_log · settled · all time loading…
dateleaguematchuppickscoreresult
loading…
the_graveyard

the graveyard.

Every idea we've tested to make the model sharper — each one backtested walk-forward against the closing line, no hindsight. Most sites bury the ones that didn't work. We list them. The honest truth of sports modeling is that the market is efficient and good ideas mostly fail: we ship about one in five.

14 ideas tested · 2 shipped · 1 wired in · 8 buried · 1 reframed · 1 info only · 1 left unchanged

// linehype_research · what we tested vs the marketmlb · 2026 season
the ideathe bet we were makingwhat happenedverdict
trusting our biggest “edges” (5%+ gaps)when our model disagrees most with the market, that's our strongest playbackwards — the biggest gaps are our worst picks. Over 30 live days the 5%+ gaps went 28–28 (a coin flip) while the modest 2.5–5% band hit 57%. A 1,159-game calibration backtest shows the model itself is well-calibrated — so when our number is that far off the market's, it's not that we're right, it's that the market knows something we don't (a scratch, an injury, a lineup we haven't priced). Wide gaps now carry a warning on the board, not a highlight.REFRAMED
starting-pitcher quality (FIP)an ace vs a scrub should move the line more than team ratings alone+0.9% accuracy, every metric improvedSHIPPED
weather — wind on totalswind blowing out (or in) should swing run totalssmall, defensible effect — wired into the totals modelLIVE
statcast xwOBAcontact quality (exit velo/launch angle) beats outcome-based FIPtied FIP to the decimal — better data, identical predictionsBURIED
pitcher rest daysa starter on short rest should pitch worseflat at every weight — nobody throws on true short rest anymoreBURIED
bullpen recent forma tired or cold bullpen leaks late runsevery weight made the model worse — 14-day samples are noiseBURIED
platoon splits (tested twice)lefty-heavy lineups feast on left-handed starterszero signal, both attempts — already inside the team ratingBURIED
park factorsCoors inflates, Petco suppresses — adjust the totala rounding error — a full season of team data already knows the parkBURIED
strikeout props (K over/under)our recent-form projection can beat the book's posted strikeout linethe projection is sharp — 1.99 Ks average error over 188 starts, better than a naive guess — but as an over/under call against the book it went 73–80 (47.7%), under the vig. Good number, doesn't beat the line. Shown as information, never a play.INFO ONLY
a second model: totalsover/under is a softer market than sides — more room for edgewell-calibrated, but ~50% against the line. doesn't beat vegasBURIED
line movement / CLVthe closing line is sharper than the open — ride the movemlb totals barely move; the close is no sharper than the openBURIED
causal home-field estimatemaybe our home-field number is set wrongtrue value is ~15, not 24 — but Elo self-corrects, so it doesn't matterNO CHANGE

This is the part nobody shows you. A model you only hear about when it wins isn't one you should trust — so here's the whole notebook, losses and all. The full methodology is in how it works.

jul 3, 2026report · 30 days

thirty days in the open: one thing is making money, and it isn’t the loud one.

A full month of live, settled results — every MLB pick graded against what actually happened, no cherry-picking. Here’s the whole scoreboard, including the parts that don’t flatter us.

The model’s moneyline picks went 96–86 — 52.7%. That clears the ~52.4% you need to beat a standard line, but barely. This is a grind, not a printing press, and anyone who tells you their MLB model prints money is selling something. Baseball is coin-flippy by nature; a thin, honest edge is the realistic ceiling.

57.1%
modest 2.5–5% gaps (32–24)
50.0%
wide 5%+ gaps (28–28)
52.7%
all moneyline picks (96–86)

The edge bands tell the real story — and confirm what we flagged last month. When the model disagrees with the market by a modest 2.5–5%, it hits 57%. When it disagrees by a wide 5%+, it’s a coin flip: 28–28, dead even. The loudest signal is the emptiest one. A month of fresh results says the same thing a 1,159-game backtest did — when our number is that far off the market’s, it isn’t that we’ve found something, it’s that the market knows something we don’t: an injury, a scratch, a lineup we haven’t priced. So on the board, wide gaps now carry a warning, not a highlight.

The other markets, honestly: our totals lean went 92–84 (52.3%) — right at coin-flip, which is exactly why we show projected totals as analysis, never a pick. And our strikeout-prop projections are genuinely sharp — 1.99 Ks of average error across 188 starts, better than a naive guess — but turned into an over/under call against the book they went 73–80 (47.7%), under water. Good number, doesn’t beat the line. So strikeout props are information only on LineHype — never framed as a play. The books price Ks well.

This isn’t a victory lap. Exactly one thing here is beating the market: moneyline picks in the modest-edge band. Totals, wide-edge picks, and K-props are all at or below break-even — which is what an efficient market looks like, and we’d rather tell you that than dress it up. One caveat worth stating plainly: this whole record rides on free odds lines. Before football we move to a paid, sportsbook-grade feed, which makes the edge math — and closing-line value especially — a good deal more trustworthy. Whatever that shows, beat or bust, lands right here.

// correction, jul 18 2026: doubleheaders were broken two ways, and we found both today. Our picks table had no way to tell one game of a doubleheader from the other, so (1) the second game was silently discarded on the way in — it never entered the published record even though the model priced it — and (2) the surviving first-game pick was then graded against the second game’s final score. One game in this report’s window was dropped (chc@nym, jun 24); five across everything we’ve logged through jul 18. Four settled games carried the wrong score; we’ve re-graded all four against the correct game. The re-grade changed no number in this report — the moneyline picks happened to be right either way, because all four doubleheaders were swept by one side — but it did move our all-time totals record by one game. The dropped games we cannot restate: the model’s numbers for them are gone. The honest bound is that if the jun 24 game had been a modest-band loss, the 57.1% above becomes 56.1%. Doubleheaders are makeup and bullpen games, so this was never a random sample to lose. Both bugs are fixed at the database level as of jul 18; every game now carries its own ID from the source feed.

// source: 182 settled MLB games and 188 graded pitcher-strikeout projections from our own picks_log, jun 3 – jul 3 2026. Break-even is 52.4% at standard −110 pricing. Drafted with AI from the live results and reviewed before posting.

jun 15, 2026build · totals

we built a whole second model. it doesn’t beat vegas — and that’s worth saying.

After two misses on the win model, we changed targets: instead of who wins, predict how many runs get scored — the over/under. The theory was that park, weather, and pitching have real leverage on totals, and aren’t already baked into a team’s win-loss record the way they are in our Elo.

We built it from the ground up: each team’s offense and run-prevention, opponent-adjusted, park-adjusted, then — the big one — the starting pitcher folded into the run-prevention side, since an ace on the mound suppresses a game’s total. Walk-forward across the season, graded against both the actual totals and the market’s closing line.

The starter did exactly what we hoped. Our first version was pitcher-blind and its disagreements with the line were systematically wrong — under 50%, worse the more it disagreed, because it kept screaming "over" on games two aces were quietly turning into pitchers’ duels. Adding the starter fixed that bias and pushed our over/under calls from losing to roughly break-even.

3.63
model MAE runs (market 3.46)
~51%
o/u calls (need 52.4% to beat the vig)
honest
shown as analysis, not a tip

But "roughly break-even" isn’t an edge. To actually beat a standard −110 total you need to be right 52.4% of the time, and we land between 50 and 52. The model predicts totals nearly as well as the market — within two-tenths of a run — but it does not beat the market. The honest conclusion is the one nobody selling picks will give you: the over/under market is efficient, and our public-data model, good as it is, doesn’t crack it.

So we’ll show our projected total next to the line as analysis — useful context, not a wager. The one lever that could still move it is weather: wind and temperature swing run-scoring more than almost anything, and we don’t pull that data yet. If we find a clean source, it goes through the same gauntlet, and the result — beat or bust — lands right here.

// methodology: multiplicative run model (team offense × opponent run-prevention ÷ league), park factors, team-relative recent-form starter adjustment; historical over/under from ESPN’s odds archive. Walk-forward, no hindsight. Drafted with AI from the model’s real backtest output and reviewed before posting.

jun 15, 2026test · platoon

platoon offense: a swing and a miss — and what two of them are telling us.

Next up: platoon offense — the idea that a lineup which mashes left-handers but fades against righties should be rated differently depending on who’s starting against them. Real effect, well documented. We expected this one to land.

It hit a data wall first. The clean measure — a team’s OPS versus lefties and righties — exists, but the source only serves full-season totals. Using those to "predict" a game from May would mean feeding the model June’s results. That’s hindsight, and we don’t do that. So we built it the honest way: each team’s runs scored in games started by a lefty versus a righty, accumulated game by game, as it stood beforehand.

+0.0
accuracy pts (no move)
−0.0002
log-loss (noise)
cut
not shipped

Nothing. The honest, as-of version of platoon is just too noisy — small samples per hand, bullpens of mixed handedness muddying the runs, opponent quality bleeding in. Whatever real signal exists, our Elo and the starter rating had already eaten it.

And here’s the part worth saying out loud. That’s two straight swings — the bullpen, now platoon — that didn’t clear the bar. When good ideas keep failing to add value, that’s not bad luck; it’s a message. We think we’re near the ceiling of predicting who wins a baseball game: even the sharpest models top out around 56–57%, because so many games are coin flips. Stacking more tweaks onto win probability is chasing decimal dust.

So we’re changing direction. The next build isn’t another win-prob feature — it’s a separate totals model (over/under on runs). That’s where park, weather, and offense actually move the needle, and where they aren’t already baked into a team’s win-loss record. New target, same rules: walk-forward, no hindsight, and whatever it says lands here.

// methodology: as-of platoon built from runs scored vs LHP/RHP starters, regressed for sample size, walk-forward on top of v2. Drafted with AI from the model’s real backtest output and reviewed before posting.

jun 15, 2026test · bullpen

we tested the bullpen. it didn’t make the cut.

After starting pitchers, the obvious next lever was the bullpen — relievers throw roughly four of every nine innings, and our model knew nothing about them. So we built it and tested it, same as always: walk-forward across the full season, no hindsight.

One trap we flagged up front: a bullpen is the same group every game, so its overall quality is already inside a team’s Elo rating — crediting it again would double-count, exactly the mistake that sank our first pitcher attempt. The only thing Elo can’t see is recent bullpen form: a pen that’s been lights-out or gassed over the last two weeks. So that’s what we measured — each pen’s last-14-days versus its own season baseline.

−0.3
accuracy pts (it got worse)
+0.0006
log-loss (worse calibration)
cut
not shipped

It didn’t just fail to help — every weight we tried made the model worse. The reason: two weeks of bullpen innings is a tiny, noisy sample, mostly luck and sequencing. The "recent form" we were feeding in was closer to random than to signal, so it just added static. The pen’s real quality was already in Elo, right where we suspected.

This is the part we promised you: we’re not shipping it. A change has to earn its place, and this one didn’t. The bullpen idea isn’t dead — but the version that might work is availability and fatigue (are a team’s best relievers rested or used up tonight), which needs pitch-count data we don’t yet pull, not aggregate recent stats. Next on the bench: a hitter’s platoon matchup against the day’s starter, and a separate over/under model where park and weather actually move the needle.

// methodology: bullpen line = team pitching total minus the starter’s line, per game; recent-form deviation vs season baseline, walk-forward. Drafted with AI from the model’s real backtest output and reviewed before posting.

jun 15, 2026model · v1 → v2

we added starting pitchers. the first try failed.

It started with a bad night. On June 14 our MLB model went 5 for 14 — 36%, worse than a coin flip. One night is noise (our picks that night were near-tossups, 50–60% leans on almost every game), but it sent us to the obvious question: the model didn’t know who was pitching. In baseball, that’s supposed to be everything. So we tried to add it.

Attempt one: rate every starter by his season FIP versus the league, and nudge the team’s rating. We backtested it walk-forward across all 1,159 games this season — predicting each game using only what was known beforehand, no hindsight. The result was almost insulting in its flatness: accuracy unchanged, prediction error down by a rounding error. Adding the supposedly-most-important factor in baseball did nothing.

The diagnosis was the interesting part. We were double-counting. A team’s Elo rating already reflects how it plays with its normal rotation — a team with a great staff is already rated highly. Crediting a starter again versus the league piled the same information on twice, and it washed out. Worse, when we cranked the weight up, accuracy got worse — proof that the lazy take ("pitching is everything") is wrong once team strength is already in the model.

Attempt two fixed the logic. We rate a starter against his own team’s typical starter, not the league — so the adjustment only captures the part Elo doesn’t already know: is today’s guy better or worse than what this team usually runs out there? And we measure him by recent form (his last five starts), because a pitcher in June is not his April self.

+0.7
accuracy pts (55.0 → 55.7%)
−0.0013
log-loss (better calibrated)
stable
across nearby settings = not overfit

Modest. Real. Honest. Not the leap intuition promised — because MLB is genuinely coin-flippy, and even Vegas, with every input we’ll never have, hits only ~55–58% straight up. But it improves every metric, it makes individual game predictions more sensible (an ace-vs-spot-starter mismatch now shows up), and it’s the right direction. elo_v2 is now the MLB model.

What’s next, and where we think the bigger gains hide: an opponent-offense adjustment (a great pitcher facing a great lineup is less great), bullpen quality, and park & weather. We’ll test each the same way — walk-forward, no hindsight — and whatever the backtest says, win or lose, it lands here.

// methodology: walk-forward backtest, FIP from K/BB/HR, team-relative recent-form adjustment, weight chosen to minimize log-loss. Full detail on the methodology page. This recap was drafted with AI from the model’s real backtest output and reviewed before posting.

jun 14, 2026launch · v1

the model goes live — and so does the scoreboard on us.

We shipped elo_v1: our own power ratings, built from chess’s Elo system and every game result this season, measured live against the betting market. Where our number and the market’s disagree by five points or more, we flag an edge.

And we shipped this page alongside it on purpose. From day one, the model’s record is public — including the bad days. Through 1,159 games, v1 graded out at 55.0% straight up, which for MLB is respectable and unspectacular, exactly as advertised. The flagged edges on June 14 went 4 of 6, including a +14% call on Milwaukee that hit — a small sample, but the kind of disagreement-with-the-market that’s the whole point.

The deal we’re making: every number here is computed from public data, the methods are written down, and when the model is wrong we’ll tell you, dig into why, and adjust. That last part is not a disclaimer. It’s the product.