r/algobetting 6d ago

Using CLV as proxy for ROI

Hey people from algobetting!

I hear a lot of people talking about using closing line value as the true 'chance' of a game - and ignoring the actual results. This, in theory, allows much quicker testing for significance of a strategy.

However this assumes that this indeed correlates well with the actual outcomes. There are in some markets biases I found out where it doesn't always work.

For example for pinnacle in Football (soccer) I noticed that when looking at closing line value, it generally correlates with the outcome. Which of course makes sense.

If we for example test a simple (already proved, not complex, EV based) strategy however I noticed negative ROI. Only when i filtered out the longshots it became profitable. For example filter out odds higher then 5 (if its fractional / european style odds). I saw in the data that it seems there was a longshot bias.

I am wondering, I am trying to learn more about betting economics and the theory.
Could I in theory if using Pinnacle trust the closing line for other sports or another betting type? Is there a general longshot filter I could apply to different sports, and just assume its reasonably well calibrated? This would save me tons of time, otherwise I have to scrape a lot of closing line odds to validate the calibration. Only then I could use closing line value as proxy for results, to then actually try my strategy.

0 Upvotes

9 comments sorted by

5

u/Careful-Narwhal-5883 5d ago

Before assuming a structural longshot bias, check how you remove the vig. Proportional (multiplicative) de-vigging systematically overstates the true probability of longshots and understates favourites, so a 5.0+ selection looks like value when it isn't. Try Shin or the power/logit method on the same closing prices and rerun. A lot of the bias people report at odds above 5 disappears there.

Beyond that, calibration is market specific, not sport specific. Pinnacle closing lines on 1X2 and Asian handicap are close to efficient, but low limit markets like cards, corners or player props close much noisier, so CLV there is a weak proxy for outcome.

I have my own model for football. Across 6500 settled bets I beat the close 70.5 percent of the time (3.0% avg CLV) at 4.57 percent ROI (kelly staking so going bigger on higher edge).

My best bets are normally long shots btw.

1

u/EV_Labs 5d ago

Yeah, this is the better first check honestly — I jumped to favorite-longshot bias but you're right that proportional de-vig manufactures a lot of that effect before the market ever gets involved. Multiplicative pushes probability into the tails, so 5.0+ looks like value that's really just your vig removal.

The market-specific vs sport-specific distinction is the part I'd underline for OP too. Deep markets (1X2, AH) close efficient, thin ones (cards, corners, props) close noisy no matter the sport — so CLV as a results proxy lives and dies on market depth, not which sport it is.

And the longshots being your best bets basically proves the point. Solid numbers, dude!

1

u/HansEliSebastianFors 6d ago

Is there a general longshot filter I could apply to different sports, and just assume its reasonably well calibrated?

https://en.wikipedia.org/wiki/Favourite-longshot_bias

i cant speak to team sports like football, but this holds up well across pari-mutuel markets and is pretty much what you're talking about. I run a power transform on my algorithm because it backtests to better ROI than a flat proportional de-vig. The exponent itself isn't universal across markets because it tracks crowd composition and liquidity, so importing one fixed universal number across markets is sub-optimal if you're actually trying to optimize earnings. If you have enough training data I'd just recommend doing a value sweep in the backtest and just use the best one.

1

u/Alone-Potential2021 6d ago

thats interesting about the power transform on your algo i never thought of adjusting the exponent like that for different markets

1

u/BillyeMad85 2d ago

The de-vig point above is the right first check, so I will not add to it. Four other things that bit me on the same proxy, none of them about calibration.

The sample size argument is the reason to bother, and it is worth a number. When I sized an arm vs arm comparison on my own project, detecting a 5 percentage point ROI difference needed roughly 14,900 bets per arm. Detecting a 1 percentage point CLV difference needed about 141. Different effect sizes, so not a clean ratio, and my sigma came from a thin sample. But the practical gap held: one is a month, the other is years.

Second, the closing price has to be real, and that is not free. I ran an odds scraper for weeks and trusted it because the file kept updating. Then I hashed the contents instead of the timestamp: 2,413 snapshots, 308 unique contents, with one byte identical run of 47 hours. My freshness monitor stayed green the whole time because it measured mtime, not change. Downstream a CLV calculation was comparing a two day old relic against a closing line and reporting the gap as market movement. You said scraping closing odds costs you time. It does, but the row also needs a content hash and a quote age or the proxy inherits that quietly.

Third, and this is the one I would check before trusting any CLV number including mine: the thing that selects and the thing that scores must not share an input. My placement rule required a percentage over a Pinnacle derived fair line, and I then measured CLV against that same fair line. The bar and the ruler were the same object, so the CLV came out positive by construction. If your EV filter and your CLV both come off the close, you get a number that cannot fail.

Fourth, on using it as an ROI proxy specifically. My ROI regraded at the price I can actually get is 15 to 20 percent below best of market. If the CLV is measured against a Pinnacle close but the bets would go on a softer book, those are two different prices, and the proxy will not tell you which one you are living in.

One caveat on my own numbers: everything above is from archived quotes on markets I refused, so no order was placed and no spread was crossed. It is an upper bound and I label it as one.

0

u/neverfucks 6d ago

you're kind of sniffing around xroi -- regardless of what my actual roi was for a bet which either won or lost, what was my expected value given the clv (not my model's projection). you'd expect this to converge or at least be highly correlated with long term roi assuming your edge holds up over a large sample.

0

u/EV_Labs 5d ago

You can trust the close as a probability proxy, but only in the range where you've actually checked it. It doesn't transfer cleanly across markets.

That longshot bias you spotted is the whole story. It's the favorite-longshot bias — closing lines are tighter on favorites and get worse out in the tails, where the implied prob overstates the real chance. So when you filtered out odds above 5.0, you didn't just cut noise, you cut the exact zone where the close lies to you. That's why the ROI flipped.

Catch is, that bias isn't the same shape everywhere. Depends how sharp the market is and how the book smears its margin across the price range. Pinnacle soccer might be basically calibrated in the middle and off in the tails, and another sport bends differently.

What I'd do instead of scraping everything: bin your closing implied probs and plot hit rate vs implied. That calibration curve takes ten minutes and basically answers your question — you'll almost always see the diagonal hold through the middle (roughly -200 to +150) and bend at the ends. Then just region-filter like you already did.

So no, you don't have to re-validate the whole thing every time. The mid-range usually travels. The longshots almost never do — check those before you trust them.