Show HN: How NBA teams perform vs. prediction market expectations

4 points by helloiamvu ↗ HN
Hi HN, we built this.

The NBA Edge Index uses pre-game win probabilities from Polymarket (real-money prediction markets). After each game finalizes, we compare the outcome to the pre-game odds. Beating expectations moves a team's rating up; underperforming moves it down. Each team starts at 2000, and ratings accumulate game-by-game throughout the season. Updates happen automatically after games finalize.

A few data points we found interesting:

Polymarket odds are pretty accurate on average: teams priced at 80%+ won 82% of the time (119 games), and teams priced 60–69% won 63%.

Biggest overperformer: Phoenix Suns, +14.7% vs expectations (market gave them 45.8% avg odds; they won 60.5%).

Most overrated by market: Cleveland Cavaliers — 55.8% win rate but market gave them 67.4% implied. They've lost 12 games as heavy favorites.

Biggest called upset: Utah Jazz beat Cleveland on Jan 13 with 18.5% market odds; our edge model gave Utah 70.9%.

Stability: After ~40 games per team, rankings start to diverge meaningfully and early noise smooths out.

We're working on more indices like this. The core idea: prediction market data is fragmented across hundreds of contracts that expire and disappear. We turn it into persistent, trackable indices.

Two patterns we use:

Composite — Blend related markets into one number. Our Global Conflict Risk Index combines ~15 Polymarket contracts (Ukraine, Taiwan, Iran) into a single number.

Rolling — Auto-replace expiring contracts. For example our weather indices track 6-city temperature deviations by rolling forward daily.

Curious to hear feedback or suggestions of ideas for other indices.

The live NBA Edge index is here: https://attena.xyz/nba

2 comments

[ 3.4 ms ] story [ 20.2 ms ] thread
This is nice. As you point out the underlying data is transient but you add value by persisting it. Good luck!
I really appreciate this product but i would like to hear more about the rolling that how it works