Auditable

Methodology

Every +EV pick Parlae fires can be reproduced by hand from the line set captured at fire time. This page covers all four de-vig methods, anchor weighting, conviction scoring, and hit-rate sourcing — nothing modeled, nothing padded.

1. Implied probability

For any American price a:

d = 1 + (a > 0 ? a / 100 : 100 / |a|)
q = 1 / d   // raw implied probability (still vigged)

Raw probabilities q_i sum to more than 1 — the excess is the book's vig. De-vig removes it.

2. Multiplicative de-vig

Simplest method — divide each side by the overround.

p_i = q_i / Σ q_j
2-way market
DK price A-110 → q = 0.5238
DK price B-110 → q = 0.5238
Σ q1.0476 (4.76% vig)
p_A (mult)0.5238 / 1.0476 = 0.5000
Fair odds+100

3. Power (Stern) de-vig

Solve for exponent r ≥ 1 such that Σ (q_i)^r = 1. Bisect on r in [1, 8]. Default for 2-way and 3-way markets — preserves relative pricing between favorites and dogs better than multiplicative on high-vig books.

Σ (q_i)^r = 1   ⇒   p_i = (q_i)^r
Favorite/dog 2-way
q_A0.60 (≈ -150)
q_B0.45 (≈ +122)
Σ q1.05 (5% vig)
Solve0.60^r + 0.45^r = 1 → r ≈ 1.123
p_A (power)0.60^1.123 ≈ 0.566
p_B (power)0.45^1.123 ≈ 0.434

4. Sharp-consensus blend

Two layers. First, sharp consensus: per-book de-vig the sportsbook prices (Pinnacle, Circa, Betfair Exchange weighted 3×; Novig / ProphetX 2.5×; Bookmaker 2×; every other real book 1×), then sharp-weighted-average across books and renormalize to Σ = 1. Second, prediction-market anchor: Polymarket and Kalshi midpoints, multiplicatively de-vigged when both sides are quoted, then blended as a low-weight check on the sharp consensus.

p_fair = (1 · p_sharp + w · p_anchor) / (1 + w)   then renormalize Σ p_fair = 1

w ∈ [0, 0.25] scales with anchor liquidity (log10(1 + max-liquidity) / 4, capped).
The 0.25 ceiling keeps the anchor a check on sharp consensus, not a 50/50 co-author —
prediction markets carry overnight volume and lag sportsbook close.
Anchor blend (w at the 0.25 cap)
p_sharp (sportsbook consensus)0.531
p_anchor (Polymarket/Kalshi)0.544
w (liquid anchor → at cap)0.25
p_fair before renorm(1 × 0.531 + 0.25 × 0.544) / 1.25 = 0.534
p_fair after Σ = 10.534

5. Conservative (worst-case)

Take the minimum fair probability across the two de-vig methods on the raw (vigged) consensus implieds. A pick that still shows +EV under the conservative estimate is the most defensible — fragile picks (positive central EV but negative worst-case) are kept but proportionally penalized and capped at the Lean tier.

p_worst = min(p_mult, p_power)   on the median-across-books raw implieds (Σ > 1)

6. EV% and Kelly

EV%   = (p_fair × d_offer − 1) × 100
kelly = (p × d − 1) / (d − 1)   // bankroll fraction
Parlae displays 0.25 × Kelly by default (quarter-Kelly).

7. Conviction (0–100)

A single score per pick combining:

  • EV% magnitude (most of the weight)
  • Market width in cents (tighter → higher)
  • Books contributing (more independent prices → higher)
  • Anchor inclusion (Pinnacle/Circa present → higher)
  • Movement signal — line drifting toward our side

Tiers: S ≥ 80 · A ≥ 65 · B ≥ 50 · C < 50. Thin markets (< 3 books, no sharp anchor) are forced to Lean, capped at conviction 40.

8. Hit-rate (recent form)

The 10-game strip and "Recent form" bars are sourced from real settled box scores — never modeled or padded. For each player we read the last N official games for the matching stat, compute over/under the offered line, and require N ≥ 3. Fewer than 3 → we say so ("Not enough settled games (n=X)") instead of inventing a number.

9. CLV — closing-line value

Every fire is captured with exact price, line, book, fair odds, and timestamp. At kickoff we re-read the market and record a median closing fair price (requires ≥ 2 books at close). CLV is never re-priced after the fact.

CLV_pp = (p_close − p_fire) × 100   // in probability points

We lead with average CLV and sample size, not binary win-rate. Samples are marked "accruing" until N ≥ 200 — that's where confidence intervals tighten meaningfully.

10. Reproduce any edge by hand

The no-vig calculator and the no-vig fair-odds tool let you paste any two-way or three-way set and reproduce our power / multiplicative numbers exactly. If a Parlae fair price is ever off by more than 0.5pp from what those tools compute for the same input, that's a bug — file it and we'll fix it publicly.

11. Score coverage & grading sources

Every captured +EV pick is graded against the official final at the price we fired at — never re-priced, never backfilled. The score itself comes from a small set of providers. We are explicit about which sport goes through which path so you can audit gaps in the published numbers on /track-record.

  • Game-line markets (h2h / spread / total) resolve via game_state.status = "final". SGO publishes finals for the major US books' feed; ESPN's public scoreboard is the fallback for MLB / NBA / NHL / NFL / NCAAF / NCAAB / WNBA / MLS. A cross-provider matcher bridges sgo:* event_keys to espn:* / apisports:* finals by team-name + commence-time so the same pick can be graded from either source.
  • Player props (prop:*) resolve via player_game_logs — ingested from ESPN boxscores (US sports) and API-Sports (soccer). The grader looks up the player's actual stat line and compares to the line.
  • Coverage gaps we have today. SGO does not always publish finals for tennis, MMA, KBO, NPB, or niche soccer leagues, and ESPN does not cover all of them either. Outright / futures markets (e.g. golf tournament winner) need a dedicated grader that we have not yet written. Picks in these markets sit Pending until coverage catches up.
  • Markets we deliberately do not grade. Half-period markets (h2h_1st_half, total_2nd_half, …) and 3-way markets (moneyline_3way, 1x2, draw_no_bet) need either period scores from a richer feed or a dedicated 3-way grader. The full-game grader is anchored on exact h2h / spread / total only — so a half-period market can never be silently graded against the full-game score (which would give the wrong answer; e.g. a 1st-half "Draw" can still be a winner even when the full game ended decisively). Such picks stay Pending rather than misreport a result.

The pledge. We never auto-void or exclude a pending pick to inflate the published win-rate or ROI. The headline numbers on /track-record are computed only from graded picks; the Coverage % badge tells you what fraction that is, and a per-sport Stale count flags any pick whose game started more than 72 hours ago and still hasn't been graded — those are real coverage gaps that bias the published sample, and we want them visible, not hidden.

See the methodology working live

Every value bet on the live feed is de-vigged using the steps above. Compare any line yourself with the free no-vig tool.

Find value bets →