{"model_version":"nfl_v2","trained_at":"2026-09-17","methodology":{"snapshotting":"Every /v1/nfl/fair-line response for an unplayed game is stored append-only (the database rejects edits) with the market line at prediction time.","scoring":"After the final, the last pre-game snapshot per game is scored: spread error vs the market's, ATS result at the stored line, and win-probability Brier score.","honesty":"Misses are shown. The closing market is the benchmark."},"backtest_holdout":{"games":570,"seasons":[2024,2025],"spread":{"mae_model":10.053,"mae_market":9.687,"su_accuracy_model":0.6573,"su_accuracy_market":0.6819,"ats_breakeven":0.5238,"ats":[{"threshold":0.0,"bets":565,"wins":283,"losses":282,"pushes":5,"hit_rate":0.5009},{"threshold":1.0,"bets":414,"wins":208,"losses":206,"pushes":3,"hit_rate":0.5024},{"threshold":2.0,"bets":286,"wins":145,"losses":141,"pushes":2,"hit_rate":0.507},{"threshold":3.0,"bets":193,"wins":95,"losses":98,"pushes":0,"hit_rate":0.4922}]},"total":{"mae_model":10.256,"mae_market":10.096,"ou":[{"threshold":0.0,"bets":567,"wins":288,"losses":279,"pushes":3,"hit_rate":0.5079},{"threshold":1.0,"bets":405,"wins":207,"losses":198,"pushes":2,"hit_rate":0.5111},{"threshold":2.0,"bets":266,"wins":138,"losses":128,"pushes":0,"hit_rate":0.5188},{"threshold":3.0,"bets":162,"wins":82,"losses":80,"pushes":0,"hit_rate":0.5062}]},"win_prob":{"brier_model":0.2154,"brier_market":0.2078,"brier_coinflip":0.25},"moneyline":{"games_priced":570,"brier_model_wp":0.2154,"brier_market_devig":0.2059,"note":"market prob = proportional devig of the quoted moneylines; picks settle at the ACTUAL quoted odds (vig paid)","picks":[{"threshold":0.02,"bets":457,"wins":184,"losses":273,"units_pnl":-41.66,"roi":-0.0912},{"threshold":0.05,"bets":335,"wins":127,"losses":208,"units_pnl":-27.4,"roi":-0.0818},{"threshold":0.08,"bets":217,"wins":81,"losses":136,"units_pnl":-7.03,"roi":-0.0324}],"pick_all":{"bets":569,"wins":374,"losses":195,"accuracy":0.6573,"units_pnl":-6.53,"roi":-0.0115}},"curves":{"note":"cumulative hypothetical units by holdout week, flat 1-unit tickets; spread/total at -110, moneyline at quoted odds","spread_edge_pts":2.0,"moneyline_edge_prob":0.05,"total_edge_pts":2.0,"spread":[[2024,1,4.55,5],[2024,2,8.82,16],[2024,3,11.18,27],[2024,4,15.45,38],[2024,5,12.27,45],[2024,6,8.09,53],[2024,7,5.82,61],[2024,8,9.27,69],[2024,9,5.18,75],[2024,10,4.91,81],[2024,11,5.64,86],[2024,12,5.55,88],[2024,13,5.18,96],[2024,14,5.91,101],[2024,15,8.45,108],[2024,16,5.09,119],[2024,17,8.55,127],[2024,18,9.09,136],[2024,19,6.0,141],[2024,20,5.91,143],[2024,21,4.91,144],[2024,22,5.82,145],[2025,1,7.27,155],[2025,2,3.91,166],[2025,3,1.64,174],[2025,4,2.09,185],[2025,5,0.82,192],[2025,6,1.45,199],[2025,7,-0.82,207],[2025,8,-3.82,210],[2025,9,-5.0,215],[2025,10,-5.27,221],[2025,11,-6.45,226],[2025,12,0.73,236],[2025,13,0.64,238],[2025,14,-3.45,244],[2025,15,-3.82,252],[2025,16,-6.09,260],[2025,17,-6.45,268],[2025,18,-8.82,278],[2025,19,-8.09,283],[2025,20,-7.18,284],[2025,21,-8.18,285],[2025,22,-9.18,286]],"moneyline":[[2024,1,0.63,10],[2024,2,8.58,22],[2024,3,14.98,32],[2024,4,12.52,43],[2024,5,12.11,56],[2024,6,10.81,63],[2024,7,10.46,71],[2024,8,12.61,79],[2024,9,7.79,87],[2024,10,6.86,94],[2024,11,7.13,102],[2024,12,5.13,104],[2024,13,1.64,113],[2024,14,-2.05,121],[2024,15,-4.68,131],[2024,16,-7.03,139],[2024,17,-10.11,151],[2024,18,-10.27,160],[2024,19,-14.27,164],[2024,20,-15.27,165],[2024,21,-16.27,166],[2024,22,-15.27,167],[2025,1,-19.42,178],[2025,2,-23.18,189],[2025,3,-23.93,202],[2025,4,-23.97,214],[2025,5,-18.8,223],[2025,6,-19.19,234],[2025,7,-23.05,243],[2025,8,-24.25,248],[2025,9,-18.56,254],[2025,10,-16.57,262],[2025,11,-19.53,270],[2025,12,-20.71,280],[2025,13,-18.07,285],[2025,14,-18.87,289],[2025,15,-21.6,297],[2025,16,-21.46,306],[2025,17,-27.43,317],[2025,18,-28.03,327],[2025,19,-27.24,333],[2025,20,-26.4,334],[2025,21,-26.4,334],[2025,22,-27.4,335]],"moneyline_pick_all":[[2024,1,4.6,16],[2024,2,-3.22,32],[2024,3,-2.17,48],[2024,4,-1.92,64],[2024,5,-0.95,78],[2024,6,3.97,92],[2024,7,4.65,107],[2024,8,5.26,123],[2024,9,7.87,138],[2024,10,5.31,152],[2024,11,7.89,166],[2024,12,7.38,179],[2024,13,6.91,195],[2024,14,7.92,208],[2024,15,9.32,224],[2024,16,8.48,240],[2024,17,9.77,256],[2024,18,9.62,272],[2024,19,7.45,278],[2024,20,7.92,282],[2024,21,7.32,284],[2024,22,8.32,285],[2025,1,10.24,301],[2025,2,11.42,317],[2025,3,13.06,333],[2025,4,11.29,348],[2025,5,9.68,362],[2025,6,7.33,377],[2025,7,11.02,392],[2025,8,13.53,405],[2025,9,12.48,419],[2025,10,13.47,433],[2025,11,13.15,448],[2025,12,12.69,462],[2025,13,8.83,478],[2025,14,4.4,492],[2025,15,0.23,508],[2025,16,-5.47,524],[2025,17,-10.37,540],[2025,18,-12.55,556],[2025,19,-8.93,562],[2025,20,-6.72,566],[2025,21,-5.53,568],[2025,22,-6.53,569]],"total":[[2024,1,3.55,6],[2024,2,5.0,16],[2024,3,6.64,22],[2024,4,8.09,32],[2024,5,5.91,38],[2024,6,4.73,43],[2024,7,5.36,50],[2024,8,4.0,59],[2024,9,4.64,66],[2024,10,5.36,71],[2024,11,5.09,77],[2024,12,7.64,84],[2024,13,5.45,90],[2024,14,7.18,94],[2024,15,4.0,101],[2024,16,4.73,106],[2024,17,-0.36,113],[2024,18,2.91,125],[2024,19,4.73,127],[2024,20,4.73,127],[2024,21,3.73,128],[2024,22,3.73,128],[2025,1,6.27,135],[2025,2,5.0,142],[2025,3,6.55,150],[2025,4,3.36,157],[2025,5,6.91,163],[2025,6,7.55,170],[2025,7,10.0,179],[2025,8,7.0,182],[2025,9,5.64,191],[2025,10,5.45,195],[2025,11,7.0,203],[2025,12,4.91,207],[2025,13,5.64,212],[2025,14,1.55,218],[2025,15,-2.73,228],[2025,16,-4.09,237],[2025,17,-4.55,247],[2025,18,-4.18,260],[2025,19,-4.27,262],[2025,20,-2.45,264],[2025,21,-2.55,266],[2025,22,-2.55,266]]},"per_season":{"2024":{"games":285,"spread_mae_model":9.955,"spread_mae_market":9.704,"ats_all":{"threshold":0.0,"bets":281,"wins":145,"losses":136,"pushes":4,"hit_rate":0.516},"ats_edge2":{"threshold":2.0,"bets":145,"wins":79,"losses":66,"pushes":2,"hit_rate":0.5448}},"2025":{"games":285,"spread_mae_model":10.151,"spread_mae_market":9.67,"ats_all":{"threshold":0.0,"bets":284,"wins":138,"losses":146,"pushes":1,"hit_rate":0.4859},"ats_edge2":{"threshold":2.0,"bets":141,"wins":66,"losses":75,"pushes":0,"hit_rate":0.4681}}}},"live":{"predictions_scored":31,"games_pending":0,"spread_mae_model":11.86,"spread_mae_market":11.06,"ats_edge2":{"wins":10,"losses":9,"hit_rate":0.5263},"brier_win_prob":0.2377,"recent":[{"game_id":"2026_02_NYG_LA","matchup":"NYG@LA","predicted_margin":5.019999980926514,"market_line_at_pred":7.0,"final":"6-28","actual_margin":22.0,"predicted_at":"2026-09-17T22:23:32.002767+00:00"},{"game_id":"2026_02_CAR_ATL","matchup":"CAR@ATL","predicted_margin":2.4100000858306885,"market_line_at_pred":-2.5,"final":"34-3","actual_margin":-31.0,"predicted_at":"2026-09-17T22:23:25.722655+00:00"},{"game_id":"2026_02_CIN_HOU","matchup":"CIN@HOU","predicted_margin":1.440000057220459,"market_line_at_pred":2.5,"final":"20-6","actual_margin":-14.0,"predicted_at":"2026-09-17T22:23:24.824702+00:00"},{"game_id":"2026_02_CLE_TB","matchup":"CLE@TB","predicted_margin":4.170000076293945,"market_line_at_pred":8.5,"final":"23-19","actual_margin":-4.0,"predicted_at":"2026-09-17T22:23:29.930414+00:00"},{"game_id":"2026_02_GB_NYJ","matchup":"GB@NYJ","predicted_margin":-0.949999988079071,"market_line_at_pred":-3.5,"final":"20-17","actual_margin":-3.0,"predicted_at":"2026-09-17T22:23:29.928048+00:00"},{"game_id":"2026_02_IND_KC","matchup":"IND@KC","predicted_margin":2.3399999141693115,"market_line_at_pred":6.5,"final":"30-33","actual_margin":3.0,"predicted_at":"2026-09-17T22:23:32.159740+00:00"},{"game_id":"2026_02_JAX_DEN","matchup":"JAX@DEN","predicted_margin":1.5099999904632568,"market_line_at_pred":2.5,"final":"13-20","actual_margin":7.0,"predicted_at":"2026-09-17T22:23:30.120847+00:00"},{"game_id":"2026_02_LV_LAC","matchup":"LV@LAC","predicted_margin":3.9000000953674316,"market_line_at_pred":6.5,"final":"26-14","actual_margin":-12.0,"predicted_at":"2026-09-17T22:23:30.828447+00:00"},{"game_id":"2026_02_MIA_SF","matchup":"MIA@SF","predicted_margin":4.800000190734863,"market_line_at_pred":13.5,"final":"13-35","actual_margin":22.0,"predicted_at":"2026-09-17T22:23:31.717183+00:00"},{"game_id":"2026_02_MIN_CHI","matchup":"MIN@CHI","predicted_margin":4.980000019073486,"market_line_at_pred":4.5,"final":"9-3","actual_margin":-6.0,"predicted_at":"2026-09-17T22:23:24.725660+00:00"}],"status":"scoring"}}