Brain cycle 82: fix calibration mutation bias β venn_abers boosted across all 3 GA implsβ
Claude
d1af5f1
PROBLEM: venn_abers is the confirmed best calibration (S13 pareto_best 0.21773,
delta -0.00543), but mutation weights were PENALIZING it:
- hf-space/app.py: init=22 β mutation=14 (dropped by 36%)
- genetic_loop_v3.py: venn_abers MISSING ENTIRELY (only isotonic/sigmoid/none)
FIXES:
1. hf-space/app.py mutation: venn_abers 14β25, none 22β16
- Now mutation preserves venn_abers instead of reverting to uncalibrated
2. genetic_loop_v3.py: add venn_abers to Kaggle GPU loop
- Init + mutation both now use weighted choices matching HF island config
- GPU Karpathy sessions will now explore venn_abers for first time
Expected: GPU Kaggle loop discovers venn_abers advantage within first session.
HF islands maintain calibration gains instead of mutating them away.
https://claude.ai/code/session_01KtBfaHJZ3YzfFqzerNp23f
d1: DART dropout trees on LightGBM in GA loop β expected Brier delta -0.0025β
P012: Add boosting_type=dart, drop_rate=0.1, skip_drop=0.5, uniform_drop=True
to LGBMClassifier in _build_model (genetic_loop_v3.py). DART prevents first-tree
dominance, improves probability spread across [0.3,0.7], reduces reliability
component of Brier. Consistent with Rashmi & Gilad-Bachrach 2015 (AISTATS).
Already verified working in app.py stacking path β now applied to main GA loop.
1. Brier-based elitism: protect top-2 by raw Brier in addition to composite
(prevents fossil loss like S15's 0.22159 config disappearing)
2. CatBoost CPU cap: n_estimators=60 + early_stopping=15 on CPU
(3-5x speedup on S10/S13 where catboost dominates)
3. Feature penalty: -0.05 per 200 features above 80 threshold
(breaks the n_feat=200 trap that causes convergence)
4. Default n_splits: 5β3 for 1.6x faster walk-forward CV
Expected: fleet 219β350 gen/hr, prevents config loss, better Brier pressure
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
WS1: Real box score data pipeline
- New ops/backfill-boxscores.py β fetches FGM/FGA/FG3M/FG3A/FTM/FTA/OREB/DREB/PF from NBA API
- engine.py _parse_stats() detects real data, computes real possessions/eFG%/pace/ORtg/DRtg
- app.py /api/command now supports backfill_boxscores (background thread)
WS2: Feature engine cleanup
- skip_placeholder flag skips categories 11-15 (all zeros without real data)
- Fitness weights: Brier 70%, Cal 20%, ROI 5%, Sharpe 5% (was 60/20/10/10)
- Soft penalty 0.001 per feature above 80 (replaces hard cliff at 150)
WS3: Karpathy autoresearch loop (S10 side)
- POST /api/checkpoint β saves best individual + Brier to disk
- POST /api/rollback β reverts to specific or best checkpoint
- GET /api/checkpoint/best β returns lowest Brier checkpoint
- Rule 7 LIVE_REGRESSION in run_logger β auto-rollback if live Brier drifts
WS4: Prediction bridge
- fetch_evolved_predictions() calls S10 /api/predict
- predict_game() blends 60% evolved + 40% ensemble when available
Co-Aβ¦
Added /api/predict POST endpoint β uses best evolved individual to generate
live NBA game predictions. Trains on full historical data with evolved
feature selection + hyperparams. Accepts team pairs or date (fetches ESPN schedule).
Fixed run_logger.py auto-cut rules:
- BRIER_FLOOR: raised threshold 30β50 gens, moderate params instead of full reset,
clears brier_history after trigger to prevent repeated firing
- STAGNATION: moderate mutation boost (2x capped at 0.15) instead of
destructive pop_size 200 + mutation 0.20
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
fix: Supabase logging to public schema + 47 secrets on S10β
- All SQL now uses explicit public.nba_evolution_* table names
(DB user defaults to n8n_engine_1 schema, was silently writing there)
- Direct psycopg2 INSERT for gen/cycle logging (bypasses pool issues)
- Deep numpy-safe JSON serializer for /api/status endpoint
- deploy.py expanded from 5 to 47 secrets (all LLM keys, DBs, Telegram, search, GitHub, HF tokens)
- Data confirmed flowing: 24 gens, 240 evals, 9 runs in Supabase public schema
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
fix: RunLogger DB connection diagnostics + robust error handlingβ
- Log when DATABASE_URL is not set
- Test connection on first use (SELECT 1)
- Return True (not empty list) for successful INSERT/UPDATE
- Flush print statements for HF Space logs visibility
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
feat: Supabase run logger + auto-cut + 2058 features (25 categories)β
- RunLogger: logs every gen/cycle/eval to Supabase PostgreSQL (4 tables)
- 6 auto-cut rules: regression, stagnation, ROI, diversity, features, brier floor
- Integrated into app.py (S10) and genetic_loop_v3.py
- Feature engine expanded: 580 β 2058 features across 25 categories
- New categories: interactions, advanced rolling, season trajectory, lineup,
game theory, environmental, cross-window momentum, market II, power ratings, fatigue
- S10 API endpoints: /api/run-stats, /api/cuts, /api/brier-trend, /api/recent-runs
- Deploy script for S10 HF Space
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>