Research Library

Every findings document in the repo, rendered. Sourced directly from the markdown under backtests/ and docs/ — nothing to register, a new file shows up here automatically. Negative results are kept deliberately: most of what's here is a hypothesis that didn't survive. Terms used throughout are defined in the glossary.

39 documents are private and not shown.
113 documents
nfl_q1_passing_shape · 2
defense_fantasy · 1
nfl_title_predictability · 1
nfl_first_td · 1
nfl_kicker_wind · 3
nfl_q1_forward · 1
nfl_playcaller_totals · 1
nfl_schedule_edges · 1
kalshi_ingame · 1
nfl_alt_ladders · 1
nfl_receptions_low_line · 1
devig_calibration · 1
nfl_bounceback · 1
college_to_nfl · 3
march_bracket · 1
kyler_cod · 1
pickem · 10
NFL survivor pools: which strategy earns the most pot equity? (2026-10-24) 2026-10-24 · 2kb
survivor_sim.py (strategies fixed in its docstring before running) → survivor_sim_results.json, survivor_sim_rows.csv, survivor_actual_paths.csv. 2010-2025, 16 seasons, 1,000 simulated seasons each, outcomes drawn from the devigged closing moneyline. Rules: on…
backtests/pickem/FINDINGS_SURVIVOR.md
Survivor strategies vs the REAL ESPN field, 2020-2025 (2026-10-24) 2020-20 · 3kb
survivor_sim.py had to model the other players. ESPN's free survivor game publishes every week's pick count per team (public gambit API, 2020+: scripts/nfl/espn_survivor_picks.py → [redacted], survivor_pick_shares; ~0.2-1.2M entries in week 1). survi…
backtests/pickem/FINDINGS_SURVIVOR_REAL.md
$2,500 across 24 small confidence pools (2026-10-24) 2026-10-24 · 2kb
portfolio_sim.py → portfolio_sim_results.json. Always-favorite (ordered by market probability) in every league; each league has its own rivals; payout top 3 = 50/30/20 of the pot; $104 a league; 2014-2025 seasons.
backtests/pickem/FINDINGS_PORTFOLIO.md
Do pick'em players get gutsier late, or when behind? (2026-10-19) 2026-10-19 · 2kb
Pre-registered in desperation_test.py (commit 1fc4334, before any result). Data: our Yahoo pool, 2025 wk 1-12 and 2026 wk 1-6, 7,237 usable picks from 62 member-seasons (week 1 dropped: no standings). Overall underdog rate 18.8%. Controls: spread bin + member …
backtests/pickem/FINDINGS_DESPERATION_2026.md
How well does the public pick? — field baseline, 2014–2025 2026-09-13 · 4kb
2026-09-13. field_baseline.py → field_baseline_results.json (gitignored). Source: NFL Pickwatch per-game pick shares, captured by scripts/nfl/capture_pickwatch.py into [redacted] (weekly cron, Tue 14:00 UTC). Lines and results come from nflverse, not…
backtests/pickem/FINDINGS_FIELD_BASELINE.md
Winning a 30-Person Confidence Pool 2026-07-20 · 11kb
Date: 2026-07-20 · Harness: pool_strategy_sim.py → pool_strategy_sim_results.json · 6,000 simulated seasons per regime · Seed: 20260720
backtests/pickem/FINDINGS_POOL_2026.md
Testing "always pick the favorite" — and why a Monte Carlo can't do it 2026-08-12 · 5kb
2026-08-12. calibration_test.py, 6,937 REG games, 1999–2025.
backtests/pickem/FINDINGS_CALIBRATION_2026.md
Season Prize vs Weekly Prize: Shoot for the Season 2026-07-20 · 5kb
Date: 2026-07-20 · Harness: pool_ev_analysis.py → pool_ev_analysis_results.json · 4,000 simulated seasons per regime · Seed: 20260720
backtests/pickem/FINDINGS_EV_2026.md
Best Pick'em Strategy for 2026: Pick Every Favorite 2026-07-20 · 6kb
Date: 2026-07-20 · Harness: strategy_search_2026.py → strategy_search_2026_results.json · Data: 2,119 REG games, 2018–2025 · Seed: 20260720
backtests/pickem/FINDINGS_STRATEGY_2026.md
Confidence Pick'em — Honest Rebuild (2018–2025) 2026-07-20 · 4kb
Date: 2026-07-20 · Harness: backtest_pickem.py → backtest_pickem_results.json · Sample: 2,119 completed regular-season games · Seed: 20260720
backtests/pickem/FINDINGS.md
college_hockey_eval · 7
College hockey calibration (2026-10-21) 2026-10-21 · 1kb
Scripts: calibration_options.py, calibration_forward_2026.py, plus their _results.json.
backtests/college_hockey_eval/FINDINGS_CALIBRATION.md
Starting goalie vs the market (2026-10-21) 2026-10-21 · 2kb
Question: does knowing who starts in goal beat the college hockey moneyline?
backtests/college_hockey_eval/FINDINGS_GOALIE_STARTER_MARKET.md
Moneyline accuracy by series position (2026-10-17) 2026-10-17 · 2kb
Script: series_position.py → series_position_results.json. Series = the same two teams meeting twice within 2 days; same rink = same home team both nights, home-and-home = home team swaps. Regular season only (March+ conference playoffs reported separately in …
backtests/college_hockey_eval/FINDINGS_SERIES_POSITION.md
College hockey player value: shot xG, zones, goalies, skaters (2026-10-10) 2026-10-10 · 5kb
Scripts: scripts/college_hockey/build_shot_xg.py (fit + write), scripts/college_hockey/goalie_value.py, geometry in [redacted]. Results JSON next to this file.
backtests/college_hockey_eval/FINDINGS_SHOT_XG.md
College hockey betting angles backlog (2026-09-29) 2026-09-29 · 3kb
Context. The model loses to the market (FINDINGS_MODEL_VS_MARKET.md): log loss 0.625 vs 0.603. Fading it also loses. Anything that squeezes more prediction out of the same stats is dead. These angles are timing ones, or use information the line may not have.
backtests/college_hockey_eval/ANGLES_BACKLOG.md
Pre-registration: roster turnover vs the October market (2026-27) 2026-27 · 3kb
Frozen 2026-09-29, before the season's first puck drop on 2026-10-02. The commit containing this file, forward_2026_team_ratings.json and roster_turnover_forward.py is the record. Nothing in them changes after 2026-10-02. Any later change goes in an "Amendment…
backtests/college_hockey_eval/PREREG_ROSTER_TURNOVER_2026.md
College hockey model vs the betting market (first comparison, 2026-09-29) 2026-09-29 · 2kb
The market is better than the model, and the model adds nothing to it.
backtests/college_hockey_eval/FINDINGS_MODEL_VS_MARKET.md
nfl_ml_anchor · 1
nfl_player_splits · 1
wind_unders · 2
nfl_edges · 1
nfl_props_bias · 1
nfl_middles · 1
kalshi_weather · 1
kalshi_nfl · 1
nfl_topdown · 1
nhl_eval · 2
qb_handedness · 1
fantasy_eval · 16
Do the Injury-Aware Multipliers Actually Improve Projections? 2026-09-26 · 6kb
Validation of commit 02fba14, which replaced the projection engine's injury multiplier table using results from backtests/nfl_context_signals/FINDINGS.md.
backtests/fantasy_eval/FINDINGS_INJURY_MULTIPLIERS.md
If an Injured Player Suits Up, What Does He Score? shipped · 9kb
Follow-up to FINDINGS_INJURY_MULTIPLIERS.md, which shipped an expected-value injury multiplier and left the conditional one — "if he is active, what should I expect?" — as an aside: ~0.82 / 0.92 / 0.97 relative to healthy for DNP / Limited / Full. Nothing in t…
backtests/fantasy_eval/FINDINGS_INJURY_CONDITIONAL.md
Depth-chart multiplier damp — re-measured after the input fix (2026-09-12) 2026-09-12 · 2kb
Verdict: keep 0.4. Mean error is flat across the damp; what moves is bias.
backtests/fantasy_eval/FINDINGS_DEPTH_DAMP.md
Snap Counts + Depth Charts Close ~30% of the ECR Gap 2026-07-19 · 13kb
Date: 2026-07-19 · Season: 2025, weeks 7–17 · Harness: snap_depth_experiment.py → snap_depth_experiment_results.json · Seed: 20260719
backtests/fantasy_eval/FINDINGS_SNAP_DEPTH.md
Cross-player usage redistribution: the effect is real, the projection gain is not rejected 2026-08-31 · 3kb
Date: 2026-08-31 · Verdict: ❌ REJECTED — usage_redistribution = False
backtests/fantasy_eval/FINDINGS_USAGE_REDISTRIBUTION.md
Backup QB: shade the receivers, not the quarterback shipped 2026-08-31 · 2kb
Date: 2026-08-31 · Verdict: ✅ SHIPPED, receiving only
backtests/fantasy_eval/FINDINGS_BACKUP_QB.md
Train / dev / holdout: what the accuracy numbers are actually worth 2026-08-30 · 2kb
Date: 2026-08-30 · Report: scripts/report_split_accuracy.py (re-runnable)
backtests/fantasy_eval/FINDINGS_EVAL_SPLIT.md
Two dead knobs: one was worth fixing, one was worth measuring and leaving off shipped 2026-08-30 · 2kb
Date: 2026-08-30 · Harness: evaluate_fantasy_mae.py --set <knob>=true
backtests/fantasy_eval/FINDINGS_PACE_AND_ROSTERS.md
Start/sit accuracy of the shipped surface shipped 2026-08-30 · 1kb
Date: 2026-08-30 · Harness: start_sit_live_accuracy.py (re-runnable)
backtests/fantasy_eval/FINDINGS_START_SIT_LIVE.md
Floor/ceiling were covering half the outcomes they claimed 2026-08-30 · 2kb
Date: 2026-08-30 Verdict: ✅ FIXED — empirical residual quantiles replace the simulated band
backtests/fantasy_eval/FINDINGS_INTERVALS.md
The team+position "soup" is not a bug — it beats the clean matcher rejected 2026-08-30 · 2kb
Date: 2026-08-30 Harness: scripts/evaluate_fantasy_mae.py --set unified_player_matching=true|false Verdict: ❌ REJECTED — keep unified_player_matching = False
backtests/fantasy_eval/FINDINGS_PLAYER_MATCHING.md
Volume features: do they add anything on top of the snap re-ranker? shipped 2026-08-30 · 3kb
Date: 2026-08-30 Harness: backtests/fantasy_eval/volume_features_experiment.py (re-runnable) Verdict: ✅ SHIPPED — small but consistent incremental gain
backtests/fantasy_eval/FINDINGS_VOLUME_FEATURES.md
TD models: not unpredictable, just pointed at the wrong output 2026-08-30 · 3kb
Date: 2026-08-30 Harness: backtests/fantasy_eval/td_probability_experiment.py (re-runnable) Verdict: ✅ PARTIAL — ships for rushing and receiving TDs, NOT for passing TDs
backtests/fantasy_eval/FINDINGS_TD_PROBABILITY.md
Our Fantasy Projections vs FantasyPros Expert Consensus (ECR) 2026-07-19 · 9kb
Our side is the strict walk-forward regeneration from scripts/evaluate_fantasy_mae.py --dump-projections (2,438 player-weeks): the engine is fed one historical week at a time and may only use data from before the week it projects. Unlike the 2024 db rows, this…
backtests/fantasy_eval/FINDINGS_VS_ECR.md
The Close Band Can Be Improved (+2.5pp, ~half the ECR gap) 2026-07-20 · 3kb
Date: 2026-07-20 · Harness: close_band_experiment.py · Sample: 12,510 close pairs of 56,046, 2025 weeks 5–17 · Seed: 20260719
backtests/fantasy_eval/FINDINGS_CLOSE_BAND.md
Start/Sit Decision Accuracy — 2025 2026-07-19 · 3kb
Date: 2026-07-19 · Harness: start_sit_accuracy.py · Sample: 64,150 within-(week, position) pairs, 2025 weeks 5–17 · Seed: 20260719
backtests/fantasy_eval/FINDINGS_START_SIT.md
nfl_game_quality · 1
pickem_tiebreak · 1
nfl_war · 1
injury_impact · 1
player_movement · 2
elway_review · 1
kicker_dst · 1
fantasy_model_audit · 1
bet_timing · 1
middles · 1
leg_correlation · 1
stable_filter_audit · 1
ev_clv_prereg_2026_09 · 1
clv_line_adjustment · 1
ev_record_2026_08 · 1
weather_ftn_value · 1
qb_weather · 1
nfl_context_signals · 1
preseason_signal · 1
nfl_prop_usage · 2
hr_derby · 1
backtests · 3
cfb_eval · 2
ncaab_eval · 1
tennis_eval · 1
split_miner · 1
strategies · 1
stacking_eval · 4
kelly_sim · 1
docs · 9
Strategy 002: 12-1 Cross-Sectional Momentum · 3kb
Jegadeesh & Titman, Returns to Buying Winners and Selling Losers (Journal of Finance, 1993). Still one of the most-replicated equity anomalies.
backtests/docs/002_momentum_12_1.md
Strategy 009: Insider Cluster Buying · 2kb
Cohen, Malloy & Pomorski, Decoding Inside Information (Journal of Finance, 2012). Also Lakonishok & Lee (2001), Jeng et al. (2003).
backtests/docs/009_insider_cluster.md
Strategy 008: Sell-in-May Calendar Effect · 2kb
Folk wisdom + Bouman & Jacobsen, The Halloween Indicator, "Sell-in-May-and-Go-Away": Another Puzzle (American Economic Review, 2002). Subsequent decades of replication.
backtests/docs/008_sell_in_may.md
Strategy 007: Short-Term Reversal (1-week loser-winner) · 2kb
Jegadeesh (1990), Lehmann (1990) — the original short-horizon reversal papers. The mirror image of 12-1 momentum: short-term returns reverse at 1-week/1-month horizons, while medium-term (12-1) returns continue.
backtests/docs/007_short_term_reversal.md
Strategy 006: Net-Net (Graham Deep Value) · 2kb
Benjamin Graham, The Intelligent Investor (1949) and Security Analysis (1934). The original quantitative value strategy. Tweedy Browne, Walter Schloss, and others used variants for decades.
backtests/docs/006_net_net.md
Strategy 005: VIX Term Structure · 2kb
Multiple — vol-arbitrage literature 2010s. Notable: Simon (2014), Donninger (2015), the "Hayek" / "Boggs" VIX-term-structure papers. Popularized in retail circles via SVXY / VXX strategies after the 2011 launch of VIX ETPs.
backtests/docs/005_vix_term_structure.md
Strategy 004: Piotroski F-Score · 3kb
Joseph Piotroski, Value Investing: The Use of Historical Financial Statement Information to Separate Winners from Losers (Journal of Accounting Research, 2000).
backtests/docs/004_piotroski.md
Strategy 003: Post-Earnings Announcement Drift (PEAD) · 2kb
Bernard & Thomas, Post-Earnings-Announcement Drift: Delayed Price Response or Risk Premium? (1989). Replicated and refined for ~40 years.
backtests/docs/003_pead.md
Strategy 001: Magic Formula (Greenblatt) · 3kb
Joel Greenblatt, The Little Book That Beats the Market (2006).
backtests/docs/001_magic_formula.md