Spaces:
Paused
Paused
Commit History
-
sync: engine.py to hf-space (auto-deploy)
89fc340
-
[FRANKENSTEIN] engine: mirror Cat 66 Pace-Norm Per-100 Diffs from mon-ipad (sha256 5e66371c) — Rule #2 parity fix
1325036
-
[FRANKENSTEIN] frankenstein: impl cycle99-pace-norm-per100-cat66 — Cat66 pace-normalized per-100 box-score differentials
b1d2faa
-
fix(parity): sync hf-space/features/engine.py to mon-ipad canonical (Rule 2)
CI check.yml has failed 20 consecutive runs since 6ea03029 (Apr 11 06:30) because features/engine.py and hf-space/features/engine.py diverged after a partial auto-sync touched only the hf-space copy. Per CLAUDE.md Rule 2, /home/termius/mon-ipad/features/engine.py is the canonical source. This commit sets BOTH nomos-nba-agent copies to an exact byte-for-byte copy of the mon-ipad canonical (sha256 13ef12d9..., v3.1-65cat, 8012 LOC). Previously nomos-nba-agent was pinned to v3.1-59cat and missing Cat 60-65 (score margin distribution, pace-adjusted net rating, clutch performance, Pythagorean luck, opponent-Elo-weighted perf, style matchup). Verified locally: - Parity check: PASS (sha256 match) - Import smoke test: PASS (ENGINE_VERSION=v3.1-65cat, NBAFeatureEngine present) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>04cdc6c
-
sync: engine.py to hf-space (auto-deploy)
ba22691 -
sync: engine.py to hf-space (auto-deploy)
926b359 -
sync: engine.py to hf-space (auto-deploy)
1e7de57
-
sync: engine.py to hf-space (auto-deploy)
ce74851 -
sync: engine.py to hf-space (auto-deploy)
e26dc5d -
sync: engine.py to hf-space (auto-deploy)
c5527b8
-
Revert "fix: replace all /home/termius/ → /home/lahargnedebartoli/ (VM username fix)"
ClaudeThis reverts commit 64c86437f1d27b920790b2c054fc0287114390d9.1dc0b7f -
fix: replace all /home/termius/ → /home/lahargnedebartoli/ (VM username fix)
Claudehttps://claude.ai/code/session_0127NuynGmn5fsJBnjDbTpjg0eabc42
-
Brain cycle 83: Cat59 opponent graph features (arXiv 2303.16741 GATv2-TCN)
Claude12 new features: 2nd-order SOS, common-opp advantage, transitive wins, schedule difficulty trend, opponent form at time of matchup. Engine: v3.1-59cat (6350+ feature candidates) https://claude.ai/code/session_01KtBfaHJZ3YzfFqzerNp23fc588104 -
Brain cycle 83: Cat56-58 + engine v3.1-58cat (3 new SOTA 2026 categories)
ClaudeCat56: Directional Circadian Advantage (10 features) - Chronobiology Int'l 2022 + ScienceDaily 2024: 25,016-game study - Westbound home teams win 63.5% vs 55.0% eastbound → net +8.5pp effect - SIGNED timezone delta (vs abs() in Cat39) captures direction, not just magnitude - Sigmoid-encoded probability boost; double advantage if home→west AND away→east Cat57: Sequential Exponential Form (12 features) - arXiv 2512.08591: LSTM 8-season paper, sequential dependencies > rolling avg - α=0.4 exp-weighted form: recency-preserved, covers 5-10 game horizon - Hot hand (3+ consecutive wins), form variance (consistency), momentum Cat58: Model Confidence & Calibration Anchors (10 features) - arXiv 2303.06021: Brier-calibrated model selection beats accuracy by 5-7% ROI - Spread confidence, B2B uncertainty, H2H consistency, home reliability signal - Compound confidence; matchup × market signal compound ENGINE_VERSION: v3.1-55cat → v3.1-58cat (6338+ feature candidates) Both features/engine.py and h…0e6ea15 -
Brain cycle 83: Cat55 market consensus deviation (MDPI 2026 fused model)
ClaudeAdd Cat55: 10 vig-free cross-instrument divergence features. Key insight (MDPI Information 2026): fused model AUC 0.95 vs 0.76/0.94 separate. Features: fair_h_prob (sigmoid spread), ml_vs_spread_gap, books_internal_disagree, market_edge_h, liquidity_proxy, ml_confidence, spread_confidence, consensus_strength, vig_distortion. ENGINE_VERSION: v3.1-54cat → v3.1-55cat (6306+ feature candidates) Both features/engine.py and hf-space/features/engine.py updated (parity maintained). Expected Brier delta: -0.002 to -0.004 https://claude.ai/code/session_01KtBfaHJZ3YzfFqzerNp23fd1173a9
-
sync: engine.py to hf-space (auto-deploy)
1169dc3
-
D9 iter10: fix CLAUDE.md + engine.py docstring (35→54 categories, 3-way parity)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>7176be3 -
fix(engine): Cat15 polymarket fallback to book-implied prob from odds_data
polymarket_home_prob and prediction_market_consensus defaulted to constant 0.5 for all historical games — polymarket data is never available during training, making both features zero-variance (filtered out by app.py). Now falls back to odds_data[(gd,home,away)].implied_home_prob and fair_home_prob respectively, using the same lookup pattern as Cat46. This gives 2 of 8 Cat15 features real variance from book consensus odds, allowing them to survive the zero-variance filter and contribute signal. Feature names unchanged; fallback remains 0.5 when odds_data has no entry. Estimated Brier impact: -0.0003. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>8daa57a -
Merge remote-tracking branch 'origin/main'
a923bd9 -
fix(engine): replace Cat14 constant placeholders with real defensive proxies
shot_contest_rate was hardcoded 0.6 and rim_protection_rate 0.55 for all games — zero differential signal between teams, plus a positive directional bias. Replaced with blk_rate*5 (shot contest proxy, same scale as stl_rate*5) and opp_efg() or 0.5 (opponent eFG% for rim/perimeter defense, fallback 0.5 neutral instead of biased 0.55). Feature names unchanged; values now provide genuine per-team differentiation. Estimated Brier impact: -0.0005. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>0031745 -
sync: engine.py to hf-space (auto-deploy)
560a631 -
fix(engine): reset _season_spreads/_season_totals at season boundaries (Cat 52/54)
_season_spreads and _season_totals were never reset between seasons, making line52_spread_season_pct, line52_total_season_pct, line52_season_spread_std, and ou54_total_trend compute against a growing multi-season pool instead of the current season only. Fix: detect season change via _era_season_id(gd) at the top of each game iteration and clear both lists when season flips. _team_ats and _team_ou trackers are intentionally preserved cross-season. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>74c15ad
-
fix(engine): _ats_rate home_only=False was a no-op — ats53_a_away_only returned wrong values
`if home_only:` treated False as falsy, so passing home_only=False never filtered to away games. Feature ats53_a_away_only was silently duplicating ats53_a_season (all-game rate) instead of computing road-only ATS rate. Fixed by using `if home_only is True:` / `elif home_only is False:` guards, matching the correct pattern already used in Cat 54 _ou_rate(). No API change — existing callers with home_only=True unaffected. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>273b555 -
feat(engine): add h_next_is_home + a_next_is_home to Cat6 [brain-cycle-71]
ClaudeResearch (cmunch1/nba-prediction, uncertainty-aware 2025, nature s41598-025-13657-1) consistently identifies home_next (is team's NEXT game at home?) as top-3 predictor. Changes: - Cat6 REST & SCHEDULE: 24 → 26 features - Pre-compute _team_next_is_home O(n) lookup before main evolution loop - 1.0 = next game is home, 0.0 = away, 0.5 = unknown (last game in dataset) - ENGINE_VERSION: v3.1-51cat → v3.1-51cat-sched - Parity maintained: features/engine.py == hf-space/features/engine.py (6871 lines each) Expected Brier delta: -0.001 to -0.003 (schedule motivation signal) Fleet best: 0.2222 (S15), gap to threshold: 0.00383c25c25f -
fix(engine): replace last bare except: with except Exception: in CV fitting block
Completes full bare-except audit — 0 remaining. All 45 tests pass. Parity maintained: features/engine.py == hf-space/features/engine.py (md5: 2435c9e4) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>d90f42c -
sync: engine.py to hf-space (auto-deploy)
22acae9 -
sync: engine.py to hf-space (auto-deploy)
deef4ee
-
sync: engine.py to hf-space (auto-deploy)
0027972
-
feat(engine): Add Cat51 Season Era Normalization (v3.1-50cat → v3.1-51cat)
Claude8 new features encoding team stats as z-scores vs league-wide running average for the current season. Removes era drift across 2018-2026 data (league ORtg ~98 in 2018-19 vs ~115 in 2025-26 due to pace/rules). Features: era51_h_ortg_vs_league, era51_h_drtg_vs_league, era51_a_ortg_vs_league, era51_a_drtg_vs_league, era51_h_pace_vs_league, era51_a_pace_vs_league, era51_h_netrtg_vs_league, era51_h_ortg_a_drtg_edge. Design: running per-season tracker updated AFTER feature extraction per game — no lookahead bias. Expected Brier delta -0.001 to -0.003. Research: MDPI 2026 (Info 17:56) season-fixed effects → Brier 0.199. Both root + hf-space updated. Diff = 0 lines (parity verified).31a1cb2 -
feat(engine): Add Cat50 Temporal Win-Sequence Encoding (v3.1-49cat → v3.1-50cat)
ClaudeAdd 12 new features encoding the ORDER of last-10-game outcomes: - seq50_h/a_early_wp: win% in older half of last 10 games - seq50_h/a_late_wp: win% in recent half (momentum direction) - seq50_h/a_slope: late_wp - early_wp (positive = improving trajectory) - seq50_h/a_margin_slope_norm: recent 3 vs older 3 avg margin (/30 normalized) - seq50_h/a_streak_norm: current streak direction normalized (/10) - seq50_slope_diff / seq50_streak_diff: cross-team differentials Research basis: MDPI 2026 (temporal sequence > rolling averages for NBA prediction), expected Brier delta -0.001 to -0.005 as GA discovers that seq50_slope_diff captures transitional team states better than static window averages. Both root + hf-space updated (diff=0).a980ffb
-
feat: update ENGINE_VERSION v3.1-46cat → v3.1-49cat
ClaudeCat47 (Drive-Rim Matchup 14f), Cat48 (Passing Network 10f), Cat49 (Play-Type PPP 10f) were implemented last cycle but version string was not updated. Fixes Supabase experiment tagging — all new GA runs will now log v3.1-49cat. Parity maintained root==hf-space. Brain cycle 53 — 2026-04-02fb717bd
-
feat: add Cat47-49 (drive matchup, passing network, play-type PPP) — 34 new features
Three quick-win feature categories using data already on disk but previously unused: - Cat47: Drive-Offense vs Rim-Defense Matchup (14 features) — drive_fg_pct, def_rim_fg_pct - Cat48: Passing Network Quality (10 features) — AST/pass ratio, potential assists, ball movement - Cat49: Play-Type Efficiency (10 features) — iso/PnR/spot-up/transition PPP from NBA play-type data Engine: 6219 → 6253 features (v3.1-46cat) Tracking data: 20 → 43 per-team features (defense, passing, play-type aggregation added) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>9431266
-
engine: v3.0-43cat — Cat 42 Shot Quality + Cat 45 Player Tracking (+22 features)
Adds Cat 42 (Shot Quality Zone, 10 features) and Cat 45 (Player Tracking/Hustle, 12 features) bringing total to 6211 features across 43 categories. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>4883e97 -
feat: engine v3.0-41cat — add Cat 39/41/43 to hf-space
Deploy circadian rhythm & travel fatigue (Cat 39), transition vs half-court splits (Cat 41), and clutch performance features (Cat 43) to HF Spaces. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>b4acf60
-
feat: MOVDA raw delta features (Cat37 6→13) + beta calibration + browser scraper
- engine.py: add 7 raw delta_MOV rolling features (no EWM smoothing) - app.py: beta calibration method (betacal) added to evolution search space - browser_scraper.py: Crawl4AI + requests fallback for odds scraping - scrape_odds.py: structured odds scraper - requirements.txt: betacal, html2text, beautifulsoup4 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>2ca3b0b -
feat: Cat 38 venue-conditional matchup features (14 new) + doc updates
Engine v3.0-38cat: 6149 features. Venue-specific home/away comparisons (WP edge, margin edge, ORtg/DRtg cross-matchup) at 5/10/20 game windows. Updated CLAUDE.md and HF README to reflect current architecture. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>3a83eb9
-
fix: defensive guard against non-dict game entries
- engine.py: skip non-dict entries in build() loop (both root and hf-space) - predict_today.py: handle Bovada price field as string or dict - Colab notebook: handle wrapped JSON format {"games": [...]} Fixes AttributeError: 'str' object has no attribute 'get' on Colab. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>f432a89 -
feat: add MOVDA Elo features to engine (Cat 37, 6 features)
MOVDA (arXiv:2506.00348) — Margin of Victory Differential Analysis. Update rule: R' = R + K*(S-E) + λ*(MOV-E_MOV) where E_MOV = α*tanh(β*ΔR) + γ + δ 6 new features: movda_rating (×2), mov_surprise_ewm (×2), movda_diff, movda_win_prob Total features: 6129 → 6135. Validated: Brier 0.21877 vs Elo 0.22134 (+1.16%). NOT deployed to HF Spaces yet — waiting for xgboost_brier fix to stabilize. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>f366f5b -
fix: Category 36 _travel_dist called with wrong args (string index out of range)
_travel_dist(records, team) was called as _travel_dist(home, away) which passed a team name string where a record list was expected, causing IndexError on records[-1][3] → "S"[3]. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>488bf98
-
feat: add Category 36 — EWMA performance, crossovers, rest interactions (+168 features)
3 quick wins from repo-scout findings: 1. EWMA rolling stats (5 alphas × 8 stats) — captures momentum decay patterns 2. Fast/slow EWMA crossover signals (MACD-style for 8 stats) 3. Rest days × performance interactions (rest×wp, b2b×margin, fatigue×ortg, etc.) Engine: v3.0-35cat → 6129 features (was 5961). Parity maintained. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>c7268b8 -
feat: unify feature engine + add version tracking to experiments
- Copy HF Space engine (35 cats, 6000+ features) as canonical features/engine.py - Add ENGINE_VERSION = "v3.0-35cat" to both engine files - Add deploy-time parity check in hf-space/deploy.py - Add feature_engine_version column to nba_experiments (Supabase migration) - Tag all experiment INSERT/UPDATE with engine version: - S10/S11: "v3.0-35cat-6000feat" - Colab: "colab-inline-163feat" - Kaggle: "kaggle-inline-121feat" - Align Colab GPU runner feature naming to S10 convention (home_ → h_, away_ → a_) - Make evolution/genetic_loop_v3.py try real NBAFeatureEngine before inline fallback Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>c711f10
-
feat: scale feature engine from 2058 to 6021 features
10 new categories (26-35): Advanced Player Impact, Referee Deep Analysis, Venue & Environmental, Advanced Market III, Time Series Decomposition, Cross-Team Interaction Matrix, Bayesian Priors, Network/Graph Features, Ensemble Meta-Features, Temporal Decay Features. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>853341e
-
feat: NBA Quant Full Blast — 4 workstreams
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…34dbefa
-
feat: 1064 computed features + stacking ensemble + model diversity
Feature Engine (213 → 1064 non-zero features): - Cat 16: Interaction/polynomial features (pairwise products, ratios) - Cat 17: EWMA, volatility, z-scores, skew/kurtosis, CV (168 features) - Cat 18: Season trajectory, Pythagorean win%, improvement trends - Cat 24: ELO ratings, Glicko, TrueSkill, Bayesian, power differentials - Cat 25: Fatigue, cumulative load, travel miles, rest patterns Evolution (app.py): - Stacking model type: XGB + LGBM + CatBoost → LogisticRegression meta - 70% dominance rule forces model diversity - Stacking injection every 5 generations - Equal initial distribution across 6 model types - All 2058 feature names, 1064 computed (52%) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>bd05ada -
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>4a39063