P(break) v2 live geprueft: Kalibrierung daneben, Trennschaerfe unentschieden

Faellige B4-Messung nach dem Nachtrainieren vom 31.07. (878 Vorhersagen ab
01.08.). Drei Befunde.

1) Das Skript mischte zwei Modelle. Es trennte bei der M30-Umstellung (30.07.),
nicht beim Nachtrainieren (31.07.) - "GESAMT" las altes und neues Modell
zusammen. Derselbe Fehler wie am 02.08. in analyze_divergence.py. Neu:
MODELL_V2 mit demselben Stichtag wie die Faelligkeitsbedingung.

2) Kalibrierung messbar daneben. Die Basisrate ist gewandert: Training 37,8 %,
live 53,2 %, stabil ueber vier volle Tage (51,4 / 54,1 / 56,4 / 53,8 % bei
n=122-276). Ein Modell, dessen Niveau an 37,8 % verankert ist, muss in einem
53-%-Regime systematisch zu niedrig sagen - genau das passiert. Oberste Klasse
invertiert (69 % vorhergesagt, 17 % real).

3) Trennschaerfe NICHT entscheidbar - und das ist der wichtigere Befund.
Entkoppelt n=87, AUC 0,556, 95-%-Bootstrap-KI [0,434 ... 0,674]. Das Intervall
enthaelt den Zufall (0,50) UND die Messlatte (0,654).

Die Faelligkeitsbedingung zaehlte die falsche Groesse: 800 ROHE Vorhersagen,
die aber nicht unabhaengig sind (dieselbe Position pendelt um dasselbe Level).
Aus 878 rohen werden 87 entkoppelte - die Bedingung ueberschaetzte die
Beweismenge um rund das Zehnfache und meldete "faellig", obwohl die Messung
nichts entscheiden konnte. Jetzt 350 ENTKOPPELTE (halbiert die KI-Breite).
Stand 87/350.

Operativ kein Notfall: auto_sr_close ist seit 06.08. false, das Modell
schliesst keine Trades. Es speist nur Anzeige, Chart-Linien und
Copilot-Kontext.

Nichts umgestellt - ein drittes Fitten derselben Bauart wuerde denselben Weg
gehen; der Befund zeigt aufs Niveau, nicht zwingend auf die Rangfolge.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Axel Hocks
2026-08-07 07:43:24 +02:00
co-authored by Claude Opus 5
parent 3e8fa9fea8
commit 908e20a9d0
3 changed files with 117 additions and 5 deletions
+17 -3
View File
@@ -62,9 +62,23 @@ CHECKS = [
"backtest_srclose_prob.py aufnehmen und neu fitten (live in beiden "
"Hälften +6/+4 Pp für die 2.4. Berührung, 5.+ fällt zurück). "
"Danach mit frischen Live-Daten gegenprüfen.",
"have": lambda: _q("SELECT COUNT(*) FROM pbreak_predictions "
"WHERE outcome IS NOT NULL AND ts >= strftime('%s','2026-08-01')"),
"need": 800, "unit": "Vorhersagen seit 01.08.",
# ⚠⚠ EINHEIT KORRIGIERT 2026-08-07 — die alte Bedingung zählte die FALSCHE
# Größe. Sie stand auf 800 ROHEN Vorhersagen; die sind aber NICHT
# unabhängig (dieselbe Position pendelt vielfach um dasselbe Level). Am
# 07.08. war sie mit 878 „fällig" — entkoppelt (max. 1 je Level und
# Stunde) waren es **87**, und das 95-%-Bootstrap-Intervall der AUC ging
# von 0,434 bis 0,674: es enthält sowohl den Zufall (0,50) als auch die
# Messlatte (0,654). Die Messung konnte also gar nichts entscheiden.
# Die Abhängigkeit war im Skript seit jeher dokumentiert („entkoppelte
# Sicht"), nur die Fälligkeit zählte daran vorbei — sie überschätzte die
# Beweismenge um rund das Zehnfache.
# 350 entkoppelte Zeilen ≈ halbe KI-Breite (0,12 → 0,06), erst dann sind
# 0,50 und 0,65 überhaupt trennbar. Bei ~17/Tag sind das ~3 Wochen.
"have": lambda: _q(
"SELECT COUNT(*) FROM (SELECT DISTINCT ROUND(level,2), ts/3600 "
"FROM pbreak_predictions WHERE outcome IS NOT NULL "
"AND ts >= strftime('%s','2026-08-01'))"),
"need": 350, "unit": "ENTKOPPELTE Vorhersagen seit 01.08. (max. 1 je Level und Stunde)",
"cmd": "python analyze_pbreak_live.py",
},
{