{"id":74755,"plugin_id":"plugin_asdk_app_6ad1467bd8f88191bead2eb0a9b87e49","kind":"skill","collection_source":"plugin_package","comparison_source":null,"observed_at":"2026-10-31T15:03:55.335Z","digest":"5d3dddb22ad9f2aa17af25fec90d8350099624f103131e0be1d41cb5b7a4cf0f","against":null,"payload":{"description":"Odds math for two-way tennis markets: American to implied probability, margin, devigging (multiplicative, power, Shin), no-vig fair odds, consensus across books, favorite-longshot bias, and expected value of a price. Use when the user asks what a price implies, how to remove the vig, what the true probability is, or how to compare books. Do not use for fetching or comparing live prices: see odds-explorer.","included_files":[],"name":"odds-analysis","skill_md_contents":"---\nname: odds-analysis\ndescription: \"Odds math for two-way tennis markets: American to implied probability, margin, devigging (multiplicative, power, Shin), no-vig fair odds, consensus across books, favorite-longshot bias, and expected value of a price. Use when the user asks what a price implies, how to remove the vig, what the true probability is, or how to compare books. Do not use for fetching or comparing live prices: see odds-explorer.\"\nmetadata:\n  version: 1.0.0\n  author: AcesAPI\n---\n\n# Odds Analysis\n\n> **Default data tool:** AcesAPI (`acesapi-tool`).\n> Prices come from the `odds` array of `get_match` (2 credits per match). The math here needs no calls. With the user's own prices, it costs nothing.\n\nYou are an expert in converting prices to probabilities. The market's close is the best public estimate of a match's win probability, so most of this skill is about reading it correctly: remove the margin without distorting the favorite and the underdog.\n\n## When to Use\n\n- \"What probability does -450 imply?\"\n- \"Remove the vig from this line\"\n- \"What is the fair price if the book charges 4 percent?\"\n- \"Which book is sharpest?\" (lowest margin, closest to consensus)\n- \"Why does the underdog look like value after I devig?\" (usually a method problem)\n\n## When NOT to Use\n\n- Fetching and displaying prices: see `odds-explorer`\n\n## Commands Available\n\n| Command | What It Does | Credits |\n|---------|-------------|---------|\n| `get_match` | Source of `odds`: `p1_open`, `p1_close`, `p2_open`, `p2_close` per book | 2 |\n| `get_schedule` | Find `match_id` for upcoming matches | 2 |\n| `get_matches` | Find `match_id` for past matches | 2 |\n\n## Commands That Do NOT Exist\n\n| Not Available | Use Instead |\n|--------------|-------------|\n| `get_odds` | `get_match` |\n| `get_implied_probability` | Compute from the formulas below |\n| `get_consensus_line` | Average no-vig probabilities across the rows of `odds` |\n\n## Conversion\n\n```\nAmerican a > 0:  decimal = 1 + a/100;  implied = 100/(a+100)\nAmerican a < 0:  decimal = 1 + 100/(-a);  implied = (-a)/(-a+100)\nfair American from probability p:  p >= 0.5 -> -100p/(1-p);  p < 0.5 -> 100(1-p)/p\nmargin (overround) = implied1 + implied2 - 1\n```\n\nA two-way tennis market has exactly two outcomes (no draw), which makes devigging a one-parameter problem.\n\n## Devigging Methods\n\nLet `q1`, `q2` be the raw implied probabilities with `q1 + q2 = 1 + m`.\n\n**1. Multiplicative (proportional).** `p_i = q_i / (q1 + q2)`. Fast, standard. It removes margin in proportion to price, which tends to leave the favorite slightly underpriced and the underdog overpriced when books load margin on longshots.\n\n**2. Additive.** `p_i = q_i - m/2`. Equal subtraction per side. Can push a longshot's probability below zero on lopsided matches. Do not use when either price is beyond about +1000.\n\n**3. Power.** Find `k` such that `q1^k + q2^k = 1`, then `p_i = q_i^k`. Shrinks longshots more than favorites, which matches the favorite-longshot bias seen in most markets. Solve with bisection on `k` in [1, 2].\n\n**4. Shin.** Models the margin as protection against informed bettors. Solve numerically for `z` (the insider proportion):\n\n```\nwith S = q1 + q2:\np_i(z) = (sqrt(z^2 + 4(1-z) q_i^2 / S) - z) / (2(1-z))\nfind z in [0, 0.4] such that p_1(z) + p_2(z) = 1   (bisection)\n```\n\nTreat Shin and power as the better choices for lopsided matches and multiplicative for near-even matches. When methods differ by less than 0.5 percentage points, the choice does not matter.\n\n## Worked Example (real data: Pinnacle, 2025 Wimbledon final, close)\n\n`p1_close = -116`, `p2_close = 105`.\n\n```\nq1 = 116/216 = 0.5370      q2 = 100/205 = 0.4878      margin = 2.48%\nmultiplicative: p1 = 0.5370 / 1.0248 = 0.5240\nfair American for p1: -100*0.5240/0.4760 = -110\n```\n\nSo the market's fair price on Sinner was about -110 against -116 on offer.\n\nLopsided case (real data: Pinnacle close, 2026 Shanghai Masters third round, scheduled at time of the call): `-673` and `+537`.\n\n```\nq1 = 673/773 = 0.8706      q2 = 100/637 = 0.1570      margin = 2.76%\nmultiplicative: favorite 0.8472, underdog 0.1528\n```\n\nPower (k = 1.070): favorite 0.8622, underdog 0.1378. Shin (z = 0.028): favorite 0.8568, underdog 0.1432. The underdog's fair probability ranges from 13.8% to 15.3% depending on method, a gap larger than most claimed edges. Run two methods before arguing about value on a +537 price.\n\n## Consensus and Sharpness\n\n1. Devig each book at close with the same method.\n2. Weight books by inverse margin (or give Pinnacle 2x weight if present).\n3. Consensus close = weighted mean of no-vig probabilities.\n\nOn the Wimbledon final, the six books' no-vig close for Sinner ranged from 0.506 to 0.531 (multiplicative). A spread under 3 points is normal; wider than 5 means one row is stale or a quirk of an exchange back price. The lowest-margin book is not automatically the sharpest, but it is a good reference.\n\n## Expected Value of a Price\n\nFor a stake of 1 and decimal odds `d` with win probability `p`:\n\n```\nEV = p * (d - 1) - (1 - p) = p * d - 1\nbreak-even p = 1 / d\n```\n\nEV is only as good as `p`. If `p` comes from the no-vig market, the EV of the best price at any book equals minus the margin gap between the best price and the fair price. That is the benchmark: any claimed edge should be measured against the closing no-vig number, not against zero.\n\n## Pitfalls\n\n- Using `p1_open` from one row and `p2_close` from another.\n- Treating `p1` as the favorite.\n- Averaging American odds. Average probabilities instead.\n- Devigging an exchange back price as if it were a two-sided quote: Betfair's margin of 0.7% on the final reflects that it is a tight market, not a free lunch.\n- Applying a margin that was measured on a favorite to an underdog price. Margin is not evenly split.\n- Concluding value from a single match. One outcome cannot confirm a probability.\n\n## Credit Usage\n\n| Operation | Credits |\n|-----------|---------|\n| Devig prices the user pasted | 0 |\n| Devig one match from AcesAPI | 2 (plus 2 to find the id) |\n| Consensus for a day of 20 priced matches | about 40 |\n\n## Anti-patterns\n\n| What the Model Might Do | Why It's Wrong | Do This Instead |\n|---------------------|---------------|-----------------|\n| Treat implied probability as true probability | It includes margin | Devig first |\n| Use additive devig on +1000 or longer | Can go negative or distort | Power or Shin |\n| Average American odds across books | Not linear in probability | Average no-vig probabilities |\n| Say the underdog is \"+EV\" after one devig method | The method choice can create the edge | Show two methods; if they disagree, say so |\n| Use open prices as the fair line | Close is more informed | Use close for fair probability, open for movement |\n\n## Output Format\n\n```\nPrice: [p1 price] / [p2 price]   Margin: X.X%\nRaw implied:   P1 xx.x%   P2 xx.x%\nNo-vig (multiplicative): P1 xx.x%   (power: xx.x%)\nFair American: P1 [price]\n```\n\n## What to Do Next\n\n| What You Found | Next Action | Skill |\n|----------------|-------------|-------|\n| A model whose probabilities look off | Check calibration | `probability-calibration` |\n"},"changes":[],"summary":"First saved snapshot. No earlier version is available for comparison.","summary_kind":"deterministic","summary_metadata":{}}