Källrapport: EXP-0020
Tillbaka till forskningsposten
Oförändrad rapportkopia. Rapportens resultat gäller försöket, inte appens allmänna träffsäkerhet.
# EXP-0020 — paus 30 mot paus 60 på nya fönster **Slutlig poolrapport 2026-10-14: fyra av fyra fönster.** f1 vinter 23–27 feb 2026, f2 vår 24–28 maj 2026, f3 sommar 3–7 jul 2026, f4 höst 1–5 nov 2025 (slutdatum exklusiva), valda av `select_windows.py` på en screening **före** något utfall (PREREGISTRERING.md, "Valda fönster"). Åtta svep från `c8e1b6a` (CI 38041844759 grön för exakt den revisionen); **8/8 bit-identiska, båda armarna mätta i varje fönster**; mätt modulsumma `c45a91fba1686987` i alla åtta, projektmodulerna byte-identiska med taggen `exp-0020-rig`. Datatillgång 1,000 (f1–f3), 0,994 (f4). Oberoende analys av Codex (`research/independent/codex-2026-10-14/exp0020/`), låst 06:42 UTC före effektläsning, skriven utan att läsa `analyse.py`: samma heltal. Preregistrerad analys: `analyse.py`, committad `c56b0ec` före svepen; utdata `analysis_raw.json`. Rättad period (nedan): `analysis_corrected.json` — samma skript, inskränkta indata. Larmspåret läste inget utfall förrän Codex dom om sommarfönstrets läsning förelåg (skriptets läsning, 07-03..07-07 står) och Mats beställt analysen 2026-10-14. ## Avgörandet Primärmått **P5**: andel kantrena regnstarter med ett varningsbeslut 5–30 min före starten, räknat från `decision_at`. Δ = P5(paus 30) − P5(paus 60), parad över samma starter; klustrad bootstrap på (lat, lon) × fönster, B = 2 000, frö 20201010, 95 % percentil-KI. | | preregistrerad körning (rå) | rättad period | |---|---|---| | kantrena starter | 3 076 | **3 048** | | P5 paus 60 → paus 30 | 35,47 → 45,12 % | **35,79 → 45,54 %** | | Δ | +9,66 pe | **+9,74 pe** | | 95 % KI | [5,03; 14,21] | **[5,12; 14,27]** | | fyrfält båda / bara 30 / bara 60 / ingen | 1 091 / 297 / 0 / 1 688 | 1 091 / 297 / **0** / 1 660 | | kluster | 180 | 180 | **Dom enligt § 4:** KI:s undre gräns > 0 **och** ≥ 2,0 → *stöd för positiv effekt* och *stöd för minst 2,0 pe effekt*. Båda nivåerna håller i båda beräkningarna; rättelsen ändrar inte domen. Codex egen bootstrap (NumPy PCG64, annan klusterordning) ger [5,28; 14,23] på rättad period — samma dom. Rubrikstalet är den rättade periodens — rättelsen tar bara bort starter som enligt specen ligger utanför perioden och rör ingen täljare — och den preregistrerade körningens tal står bredvid i varje tabell. Den som vill läsa strikt läser +9,66 pe, [5,03; 14,21]: samma dom. Det är **297 fler starter med ett beslut minst fem minuter före**, av 3 048, och **inga** starter där paus 60 hade ett sådant beslut men paus 30 saknade det. ## Per fönster (obligatorisk enligt § 4), rättad period | fönster | starter | P5 60 → 30 | Δ | bara 30 / bara 60 | |---|---|---|---|---| | f1 vinter 23–27 feb | 771 | 24,38 → 36,71 % | +12,32 pe | 95 / 0 | | f2 vår 24–28 maj | 547 | 42,05 → 56,12 % | +14,08 pe | 77 / 0 | | f3 sommar 3–7 jul | 990 | 38,38 → 46,77 % | +8,38 pe | 83 / 0 | | f4 höst 1–5 nov | 740 | 39,59 → 45,27 % | +5,68 pe | 42 / 0 | Samma riktning i fyra av fyra. Rå körning: 793 / 547 / 991 / 745 starter, +11,98 / +14,08 / +8,38 / +5,64 pe. ## Sekundära mått | tröskel | 60 → 30 | Δ | 95 % KI | båda / bara 30 / bara 60 / ingen | |---|---|---|---|---| | P10 | 28,97 → 37,66 % | +8,69 pe | [5,08; 12,02] | 882 / 266 / 1 / 1 899 | | P15 | 23,52 → 25,56 % | +2,03 pe | [−1,15; 5,32] | 659 / 120 / 58 / 2 211 | P_miss (ingen varning alls i [s − 30, s]): 59,74 → 50,59 % på rättad period (rå körning 60,11 → 51,04 %). **P15: otillräckligt underlag** — intervallet täcker noll — och **58 starter förlorar sin femtonminutersförvarning** med paus 30 (de varnas, men senare). "Inga förlorade starter" gäller P5, inte all framförhållning. Per fönster är P15 negativ i f1 (−1,69 pe, 128 mot 141 av 771) och positiv i f2–f4. **Tyst/vaken** (sekundär tabell enligt § 3; `analyse.py` saknade den — räknad ur `onsets_N.json` 2026-10-14 på rättad period, bokfört som lucka i PREREGISTRERING.md § 9): | | starter | P5 60 → 30 | Δ | bara 30 / bara 60 | |---|---|---|---|---| | tyst tid | 941 | 0,74 → 1,06 % | +0,32 pe | 3 / 0 | | vaken | 2 107 | 51,45 → 65,40 % | +13,95 pe | 294 / 0 | Nämnaren i huvudmåttet innehåller tyst tid med avsikt (§ 3). Av 297 nettostarter ligger 294 i vaken tid; i tyst tid kan en paus nästan inte hjälpa (3 av 941 — beslut som faller strax före tysttidens början). ## HYP-0012:s förutsägelser, var för sig 1. **Δ ≥ +2,0 pe poolat: håller** (+9,74; undre gräns 5,12). 2. **Δ > 0 i de två blötaste och |Δ| < 1 pe i det torraste: faller.** Blötast enligt screeningen är f3 (basfrekvens 6,05) och f4 (4,25): +8,38 och +5,68, positiva. Torrast är f2 (2,07): **+14,08 pe**, inte nära noll — störst av alla. Förklaringen "pausen kostar bara där den blockerar" (§ 8.4) stöds inte. Huvudeffekten står; mekanismbilden ska inte upprepas. *Operationalisering:* `analyse.py` rankar "blötast" på antal kantrena starter (f3, f1) och "torrast" på minst (f2); screeningens basfrekvens ger f3, f4 respektive f2. Alla fyra Δ > 0 och f2 är torrast i båda läsningarna, så P2 faller oavsett. Begreppet definieras i nästa preregistrering. 3. **Extra falsklarm per nettostart vid ≥ 5 min ≤ 2,0: håller**, 249/297 = 0,84. 4. **`events_lost(paus 30)` = 0 i varje fönster: håller som observation** vid P5 (0 / 0 / 0 / 0) och i riggens fångstmått. Ingen garanti; vid P10 förloras 1 start, vid P15 58. ## Kostnaderna (§ 3), på samma material | mått | paus 60 | paus 30 | skillnad | |---|---|---|---| | varningar | 2 853 | 4 395 | **+1 542 (+54 %)** | | verifierade falsklarm (`alerts − hits`; alla varningar verifierbara här) | 651 | 900 | **+249** | | precision | 0,7718 | 0,7952 | +2,3 pe | | falsklarm per nettostart vid P5 (§ 6:s storhet) | | | **0,84** | | p95 varningar per enhetsdygn, ur dygnsvektorn (2 400 *schemalagda* dygn; § 3 sade "fullständiga" — fullständighet per dygn går inte att visa ur spannets 0,994) | 5 | 8 | | | max per enhetsdygn | 11 | 19 | | | andel enhetsdygn med ≥ 4 varningar | 14,5 % | 21,0 % | rå, med femte nolldygnet: 11,6 / 16,8 % | | notis inom 60 min efter föregående på samma enhet (beslutstid) | 0,0 % | 59,9 % | 0 per konstruktion för paus 60 | | R-hinken — verifierade upprepningar om *samma* regn | — | — | **saknas**: riggen exporterar den bara för paus 0; raden ovan får inte ersätta den | Per fönster, varningar / falsklarm 60 → 30: f1 590/125 → 927/178; f2 489/139 → 713/156; f3 1 019/184 → 1 579/275; f4 755/203 → 1 176/291. Precisionen stiger i alla fyra. Att precisionen stiger betyder att de tillkomna varningarna *som grupp, netto* träffar oftare än genomsnittet: 1 293 fler träffar på 1 542 fler varningar. Det är **inte** en "precision bland tillkomna" — mängderna är inte nästlade (whitepapret § 1.3, § 7 nr 14). ## Rättelsen: facitsvansen räknades som försöksperiod Codex fann vid granskningen att `alert_replay.py` läser radar till `end + 40 min` för att verifiera de sista varningarna (F09-rättelsen), men att `event_list` (rad 588) och `scoring_days` (rad 765) bara filtrerar `>= start`. Därför ingick **28 starter vid eller efter exklusivt `end`** (f1 22, f2 0, f3 1, f4 5) i nämnaren — alla 28 utan ledtid i någon arm. Beslut tas senast vid bildtid `F == end` (`deciding = F <= end`, rad 371; beslutstid `end + 5 min`), så en svansstart kan bara fångas av ett beslut till och med dess. Att ingen av de 28 fångades är strukturellt, inte tur: fönstren slutar 00:00 UTC, alla 28 ligger i tyst tid, och regeln skickar aldrig i tyst tid (`rain_alert.py` rad 331–333). Och varje punkt fick ett **femte dygn med noll varningar** i bördevektorn (750 celler i stället för 600). Verifierat oberoende i filerna och i koden av larmspåret 2026-10-14. Rättelsen är mekanisk: starter med `slot < end` behålls; cell 5 per punkt tas bort efter kontroll att alla 600 är noll. Totala varningar och träffar påverkas inte. Den gjordes **efter** första analysen och är därför ett bokfört avsteg (PREREGISTRERING.md § 9, avsteg 5); båda tabellerna står kvar och domen är densamma. Felet ligger i mätt kod sedan F09 och gäller EXP-0016–0019 lika; där saknas starttidsexporten som behövs för exakt rättelse, så de rapporterna står orättade med not (whitepapret § 7, nr 13). Deras domar bedöms stå: nämnaren är gemensam för alla armar, här fångade ingen arm någon svansstart, och ett extra nolldygn sänker bara bördemåtten — exakt kontroll kräver starttider de inte exporterar. ## Vad som INTE följer - P5 är ett beslut 5–30 min före en radardefinierad start i en frusen panel — inte leverans, inte läst notis, inte undviket regn, inte ett korrekt 0–15-minuterslöfte. Det är steg 4:s frågor. - Fyra fönster är fyra fönster. 180 kluster hanterar upprepade koordinatrader, inte beroenden mellan platser i samma vädersystem. - +54 % notiser och +249 falsklarm är verkliga kostnader i den enhet användaren känner; avstängningstakten är omätt (§ 3.4). - Om 30 är rätt längd avgörs inte av två armar. - **Ingen produktionsändring följer av den här rapporten.** Beslutet är produktägarens, med talen ovan på bordet. ## Vad som följer - Paus 30 går vidare som kandidat till steg 4, användarprovet (Codex äger; skydd mot oväntat regn som huvudfråga, avstängning och irritation som kostnader). - Före nästa vädersvep: rätta periodgränserna i `alert_replay.py` med regressionstest och exportera start- och varnings-ID:n med verifieringsstatus — ny mätt revision, ny tagg. Gamla råresultat rörs inte.