Konfidenzintervalle (scipy-Bootstrap) — und sie korrigieren den Befund vom 06.08.

backtest_cost_gate.ci95(): 95-%-Bootstrap-KI des Mittelwerts (Perzentil, 2000
Resamples, random_state fest -> reproduzierbar, ab n>=20). kennzahlen() liefert
es als neuen Schluessel `ci` — rein additiv, alle 11 Aufrufer lesen weiter nur
n/wr/oer/sr/pf, keine dokumentierte Zahl verschiebt sich (geprueft).

Sofortiger Ertrag: der erste Lauf relativiert das `3 von 7 tragen` vom 06.08.
Auf der entscheidenden Spalte C (Beruehrungs-Fill):

  KONTROLLE Squeeze  H1 [+0,037…+0,229]   H2 [+0,225…+0,366]
  PDH / PDL          H1 [-0,032…+0,544]⚠  H2 [+0,155…+0,764]
  Equal H/L          H1 [+0,001…+0,425]   H2 [-0,035…+0,356]⚠
  Asian Range        H1 [-0,067…+0,357]⚠  H2 [-0,060…+0,332]⚠

Nur der Squeeze hat in BEIDEN Haelften ein Intervall klar ueber null. Bei Asian
Range enthalten beide die Null — als Ueberlebender war das zu stark formuliert.
Formulierung auf `1 gesichert, 2 unklar` korrigiert.

Zwei verschiedene Fragen, beide noetig: die 2-Stichproben-Regel prueft die
Stabilitaet des VORZEICHENS ueber Regime, das KI die Unterscheidbarkeit vom
RAUSCHEN innerhalb einer Stichprobe. Hier war Ersteres erfuellt, Letzteres
nicht. Ein KI, das die Null enthaelt, heisst nicht widerlegt, sondern nicht
belegt — und zwei gleichgerichtete Haelften sind zusammen mehr Evidenz als jede
fuer sich.

Grenze dokumentiert: der Bootstrap unterstellt unabhaengige Ziehungen. Fuer die
sequentielle Sim mit EINEM Slot passt das; fuer ueberlappende Fenster
(analyze_hl_funding.py) ist er zu optimistisch — dort braeuchte es einen
Block-Bootstrap. ci95 ist dafuer ausdruecklich NICHT gedacht.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Axel Hocks
2026-08-07 00:25:02 +02:00
co-authored by Claude Opus 5
parent e69907edbe
commit 79f3e8efe1
3 changed files with 105 additions and 4 deletions
+12
View File
@@ -258,6 +258,18 @@ def main():
if c1["n"] < _MIN_N or c2["n"] < _MIN_N:
z += " (duenn)"
print(z)
# ⚠⚠ 95-%-KI der ENTSCHEIDENDEN Spalte (C, Beruehrungs-Fill). Enthaelt es
# die Null, ist das Vorzeichen NICHT gesichert — und genau darauf ruht die
# ganze Entscheidung. Ohne diese Zahl sah „+0,142 / +0,134" nach einem
# Befund aus; mit ihr ist sofort sichtbar, ob n ausreicht.
unsicher = []
for k, tag in ((c1, "H1"), (c2, "H2")):
if k.get("ci"):
lo, hi = k["ci"]
unsicher.append(f"{tag} [{lo:+.3f}{hi:+.3f}]"
+ ("⚠0" if lo <= 0 <= hi else ""))
if unsicher:
print(f" └ 95-%-KI: {' '.join(unsicher)}")
if ok and not name.startswith("KONTROLLE"):
treffer.append(name)