Därför "ingen mätbar kant"
Innan en enda pappers-signal loggades testades strategin mot historiken: 24 643 matcher (6 säsonger × 12 ligor, fria data). Slutsatsen är ett nej — ingen kant som överlever ärlig granskning — och det är själva poängen. Det här experimentet mäter och visar Closing Line Value (CLV) ärligt, i förväntan att den ligger runt noll. Att ta reda på det kostade en eftermiddag i stället för ett år av live-papper. Endast på papper, inga vinstlöften.
Vad som testades
För varje match: räkna bort marknadens marginal (vig) från förmatch-oddset → rättvisa
sannolikheter; ta det enskilt bästa EV-utfallet (max ett spel per match) och avgör på resultatet.
CLV mättes mot marknadens skarpaste stängningslinje — den lågmarginal-referensbok
som proffs använder som facit (aldrig namngiven här). Urvalet använder bara
förmatch-data — verifierat utan look-ahead. Samma rena eval.mjs-kärna som live-motorn kör.
Det ärliga resultatet
| Mått | Utfall | Betydelse |
|---|---|---|
| Yield (obiaserat vinstmått) | varje 95 % KI spänner noll | Ingen signifikant vinst. De iögonfallande punktvärdena är longshot-varians. |
| Renare adjSharpΔ | −1,4 % till −2,5 % | Den skarpa linjen rör sig svagt bort från våra val → mild anti-kant, inte en kant. |
| fairCLV (off-pris) | −0,3 % till +6,6 % | Övre, uppåt-biaserade parentesen. Tillsammans med adjSharpΔ ringar de in ~0. |
| Kontroller | hemma/favorit svagt neg., adjSharpΔ ≈ 0 | Avgörings-motorn + de-marginal-baslinjen validerade. |
Parenteslogik: två CLV-mått med motsatt bias ringar in det sanna. Den rena undre parentesen ligger svagt negativt, den övre svagt positivt; intervallet omsluter noll. Ihop med det obiaserade yield-KI:t som spänner noll → kant ≈ 0, troligen svagt negativ före kostnader. Efter marginal, gränser och möda: negativ.
Vad den adversariella granskningen fångade
En multi-agent-granskning hittade en winner's-curse-fälla i det första "de-vig-fria" måttet: att välja på ett pris och sedan poängsätta mot samma pris biaserar måttet negativt även på en noll-kant-marknad. Det första körningens självsäkra "−2 % till −4,6 %" var överdrivet. Rättningen: välj på den de-viggade marknads-konsensusen (mestadels skild från priset som poängsätter) → fällan bryts, och den visas sida vid sida med den kontaminerade versionen så artefakten syns. Det här är experimentets kärna: publicera även det som talar emot en själv.
Tre oberoende bevislinjer
- Värde-backtesten — ingen CLV som överlever (ovan).
- 13 förregistrerade nisch-strategier — fixerade i förväg (favorit–longshot, hemma/oavgjort/borta, stora vs mjukare ligor, starka favoriter, Over/Under 2.5), en fast EV-tröskel, Bonferroni-korrektion, separat upptäckts- och hålldata. Ingen av de 13 passerar. Ogatade kontroller (spela biasen på varje match): alltid-favorit −4,3 %, alltid-hemma −6,1 %, alltid-over −4,9 %, alltid-under −6,1 % — alla förlorar mot marginalen.
- En walk-forward Poisson-modell (lagstyrka, Dixon-Coles-stil) — en sämre förutsägare än marknaden i varje liga:
| Förutsägare | log-loss (lägre = bättre) |
|---|---|
| Poisson-modell (bara mål) | 1,004 |
| Marknad förmatch (de-viggad) | 0,978 |
| Marknad stängning (de-viggad) | 0,975 |
| Ingen skicklighet (1/3) | 1,099 |
Modellen lär sig (slår ingen-skicklighet med 0,095) men är en stabilt sämre förutsägare än marknaden (+0,026 till +0,029 i alla 12 ligor). Marknaden prisar redan in lagstyrka och det ingen publik modell ser — laguppställningar (~1 h före), skador, skarpa pengar. Slutsats: ingen odds-härledd signal slår stängningslinjen, i vare sig 1X2 eller O/U 2.5 — precis vad en effektiv marknad förutsäger.
De-vig-kalibrering
Vigen kan tas bort på flera sätt; de skiljer sig i hur de behandlar favorit–longshot-biasen. Varje metods stängnings-sannolikheter poängsattes mot faktiskt resultat över hela urvalet (24 682 matcher, snitt-överrunda 3,02 %) — lägre log-loss = bättre kalibrerad = ärligare CLV-ankare.
| Metod | log-loss | Brier |
|---|---|---|
| power | 0,97524 | 0,58041 |
| shin | 0,97530 | 0,58044 |
| oddsratio | 0,97532 | 0,58045 |
| proportional (standard) | 0,97558 | 0,58059 |
Alla bias-korrigerande metoder slår standard-proportional, och power är
bäst — men glappet är pyttelitet (~0,03 % relativ log-loss). Med en lågmarginal
skarp bok (3 % överrunda) finns knappt någon vig att fördela om. Standard är därför kvar
proportional (transparent, oförändrad); power finns via BET_DEVIG=power.
Ingen kant antyds — det här är mät-rigor för CLV.
Så väljer live-motorn signaler
- De-vig — marginalen räknas bort från flera bookmakers odds (aldrig namngivna).
- Konsensus — ett de-vig-snitt av böckerna blir det skarpa, kontolösa ankaret;
en leave-one-out-variant används vid urval så en enskild avvikande bok inte driver valet.
(Valfritt marginal-viktat läge
BET_CONSENSUS_WEIGHT=margin: skarpare böcker med lägre marginal väger mer — på båda ankarna, annars uppstår open/close-skevhet.) - Z-grind — signalen måste avvika signifikant från konsensus (spridning i stdev),
inte bara ha positivt EV. (Valfritt
BET_Z_MODE=fair: mät ren fair-mot-fair-oenighet i stället för vig-laddad EV-signifikans.) - EV-tröskel — förväntat värde mot ankaret måste överstiga en fast tröskel.
- Bråkdels-Kelly — en konservativ Kelly-formel (kvarts-Kelly, tak 2 % av pappers-kassan) räknar den hypotetiska insatsen.
- CLV mäts — nära avspark fångas stängningslinjen och CLV bokförs (resultat-oberoende). Det är det enda ärliga kant-testet, och det pendlar runt noll.
CLV-formeln: fairClvBps = round(10000 × (pFair_close / pFair_open − 1))
— hur mycket den de-viggade fair-sannolikheten för vårt val rörde sig öppning→stängning.
> 0 = den skarpa linjen rörde sig mot oss. Samma estimator (full konsensus) på
båda sidor (#152), så CLV≈0 visas med 95 % konfidensintervall — en prövad
hypotes, inte ett antagande.
Inga spelbolag namnges eller länkas; inga riktiga pengar; ingen mätbar kant. Live-CLV:n på startsidan är samma sak fast framåt i tiden.
Reproducera
Allt är kontolöst och beroendefritt (Node ≥ 18):
cd infra/bet && node backtest.mjs # laddar + cachar CSV:er, skriver rapporten
node infra/bet/devig-compare.mjs # de-vig-kalibrering (cachad data)
node infra/bet/backfill.mjs # CLV på 24 686 matcher (1X2 + O/U 2.5)
Den sista raden bygger den historiska backfillen (#166) som visas på startsidan: samma de-vig + CLV-motor körd över hela den fria korpusen — CLV pendlar runt noll även där, på en andra oberoende marknad (Över/Under 2.5). 0 API-krediter.
Rå-rapporten med kolumn-semantik: infra/bet/RESULTS.md i repot. Kända
begränsningar (KI:n antar i.i.d. men fotboll klustrar; longshot-yield är tjocksvansad; tröskelskanet
är okorrigerad multipeltestning) pekar alla mot mer försiktighet om ett positivt påstående —
så "ingen kant"-slutsatsen är konservativt säker.