{
  "generated_at": "2026-08-28T08:17:59.888199+00:00",
  "command": "python scripts/published_figures.py",
  "breakeven_ats": 0.5238,
  "confidence_cap": 0.85,
  "evaluation_a": {
    "label": "nflverse lines, 2016-2025",
    "provenance": "nflverse spread_line - an undocumented periodic snapshot, not a documented close",
    "seasons": "2016-2025",
    "results": {
      "elo": {
        "n": 2671,
        "brier": 0.22217,
        "log_loss": 0.63517,
        "accuracy": 0.6398,
        "ece": 0.02698,
        "ats_record": "1287-1321-63",
        "ats_pct": 0.4935,
        "beats_breakeven": false
      },
      "independent": {
        "n": 2671,
        "brier": 0.22151,
        "log_loss": 0.6332,
        "accuracy": 0.6353,
        "ece": 0.03074,
        "ats_record": "1298-1310-63",
        "ats_pct": 0.4977,
        "beats_breakeven": false
      },
      "consensus": {
        "n": 2671,
        "brier": 0.21439,
        "log_loss": 0.61729,
        "accuracy": 0.6634,
        "ece": 0.03221,
        "ats_record": "1316-1292-63",
        "ats_pct": 0.5046,
        "beats_breakeven": false
      },
      "market": {
        "n": 2671,
        "brier": 0.21038,
        "log_loss": 0.60818,
        "accuracy": 0.6664,
        "ece": 0.01913,
        "ats_record": "1296-1312-63",
        "ats_pct": 0.4969,
        "beats_breakeven": false
      }
    }
  },
  "evaluation_b": {
    "label": "real consensus closes, 2023-2025",
    "provenance": "median across books, captured 5-28 min before each kickoff, from our own paid backfill",
    "seasons": "2023-2025",
    "results": {
      "elo": {
        "n": 854,
        "brier": 0.22246,
        "log_loss": 0.63628,
        "accuracy": 0.637,
        "ece": 0.03265,
        "ats_record": "398-435-21",
        "ats_pct": 0.4778,
        "beats_breakeven": false
      },
      "independent": {
        "n": 854,
        "brier": 0.22176,
        "log_loss": 0.63404,
        "accuracy": 0.6347,
        "ece": 0.03356,
        "ats_record": "401-432-21",
        "ats_pct": 0.4814,
        "beats_breakeven": false
      },
      "consensus": {
        "n": 854,
        "brier": 0.21395,
        "log_loss": 0.61651,
        "accuracy": 0.6745,
        "ece": 0.04186,
        "ats_record": "411-422-21",
        "ats_pct": 0.4934,
        "beats_breakeven": false
      },
      "market": {
        "n": 854,
        "brier": 0.21008,
        "log_loss": 0.60754,
        "accuracy": 0.6838,
        "ece": 0.02598,
        "ats_record": "416-417-21",
        "ats_pct": 0.4994,
        "beats_breakeven": false
      }
    }
  },
  "selectivity": {
    "rule_threshold_pts": 4.0,
    "evaluation_a": {
      "thresholds": [
        {
          "edge": 0.0,
          "all": {
            "n": 2671,
            "record": "1298-1310-63",
            "pct": 0.4977,
            "ci95": [
              0.4785,
              0.5169
            ],
            "per_season": 260.8
          },
          "underdog": {
            "n": 1667,
            "record": "830-803-34",
            "pct": 0.5083,
            "ci95": [
              0.484,
              0.5325
            ],
            "per_season": 163.3
          },
          "favourite": {
            "n": 1004,
            "record": "468-507-29",
            "pct": 0.48,
            "ci95": [
              0.4488,
              0.5114
            ],
            "per_season": 97.5
          }
        },
        {
          "edge": 2.0,
          "all": {
            "n": 1318,
            "record": "657-631-30",
            "pct": 0.5101,
            "ci95": [
              0.4828,
              0.5373
            ],
            "per_season": 128.8
          },
          "underdog": {
            "n": 898,
            "record": "459-420-19",
            "pct": 0.5222,
            "ci95": [
              0.4891,
              0.555
            ],
            "per_season": 87.9
          },
          "favourite": {
            "n": 420,
            "record": "198-211-11",
            "pct": 0.4841,
            "ci95": [
              0.436,
              0.5325
            ],
            "per_season": 40.9
          }
        },
        {
          "edge": 3.0,
          "all": {
            "n": 863,
            "record": "438-409-16",
            "pct": 0.5171,
            "ci95": [
              0.4835,
              0.5506
            ],
            "per_season": 84.7
          },
          "underdog": {
            "n": 611,
            "record": "315-284-12",
            "pct": 0.5259,
            "ci95": [
              0.4859,
              0.5656
            ],
            "per_season": 59.9
          },
          "favourite": {
            "n": 252,
            "record": "123-125-4",
            "pct": 0.496,
            "ci95": [
              0.4343,
              0.5578
            ],
            "per_season": 24.8
          }
        },
        {
          "edge": 4.0,
          "all": {
            "n": 530,
            "record": "278-245-7",
            "pct": 0.5315,
            "ci95": [
              0.4887,
              0.5739
            ],
            "per_season": 52.3
          },
          "underdog": {
            "n": 389,
            "record": "210-173-6",
            "pct": 0.5483,
            "ci95": [
              0.4982,
              0.5974
            ],
            "per_season": 38.3
          },
          "favourite": {
            "n": 141,
            "record": "68-72-1",
            "pct": 0.4857,
            "ci95": [
              0.4044,
              0.5678
            ],
            "per_season": 14.0
          }
        },
        {
          "edge": 5.0,
          "all": {
            "n": 313,
            "record": "169-140-4",
            "pct": 0.5469,
            "ci95": [
              0.4912,
              0.6015
            ],
            "per_season": 30.9
          },
          "underdog": {
            "n": 244,
            "record": "135-106-3",
            "pct": 0.5602,
            "ci95": [
              0.497,
              0.6214
            ],
            "per_season": 24.1
          },
          "favourite": {
            "n": 69,
            "record": "34-34-1",
            "pct": 0.5,
            "ci95": [
              0.3844,
              0.6156
            ],
            "per_season": 6.8
          }
        }
      ],
      "by_season": {
        "2016": {
          "n": 48,
          "record": "26-22-0",
          "pct": 0.5417,
          "ci95": [
            0.4029,
            0.6742
          ],
          "per_season": 48.0
        },
        "2017": {
          "n": 50,
          "record": "24-26-0",
          "pct": 0.48,
          "ci95": [
            0.348,
            0.6149
          ],
          "per_season": 50.0
        },
        "2018": {
          "n": 59,
          "record": "28-30-1",
          "pct": 0.4828,
          "ci95": [
            0.3593,
            0.6084
          ],
          "per_season": 58.0
        },
        "2019": {
          "n": 51,
          "record": "29-21-1",
          "pct": 0.58,
          "ci95": [
            0.4423,
            0.7063
          ],
          "per_season": 50.0
        },
        "2020": {
          "n": 47,
          "record": "23-24-0",
          "pct": 0.4894,
          "ci95": [
            0.3528,
            0.6276
          ],
          "per_season": 47.0
        },
        "2021": {
          "n": 59,
          "record": "33-25-1",
          "pct": 0.569,
          "ci95": [
            0.4412,
            0.6882
          ],
          "per_season": 58.0
        },
        "2022": {
          "n": 58,
          "record": "31-23-4",
          "pct": 0.5741,
          "ci95": [
            0.4416,
            0.6967
          ],
          "per_season": 54.0
        },
        "2023": {
          "n": 45,
          "record": "23-22-0",
          "pct": 0.5111,
          "ci95": [
            0.37,
            0.6504
          ],
          "per_season": 45.0
        },
        "2024": {
          "n": 65,
          "record": "38-27-0",
          "pct": 0.5846,
          "ci95": [
            0.4634,
            0.6964
          ],
          "per_season": 65.0
        },
        "2025": {
          "n": 48,
          "record": "23-25-0",
          "pct": 0.4792,
          "ci95": [
            0.3447,
            0.6167
          ],
          "per_season": 48.0
        }
      },
      "rule": "absolute edge >= 4.0 points",
      "live": {
        "n": 530,
        "record": "278-245-7",
        "pct": 0.5315,
        "ci95": [
          0.4887,
          0.5739
        ],
        "per_season": 52.3
      }
    },
    "evaluation_b": {
      "thresholds": [
        {
          "edge": 0.0,
          "all": {
            "n": 854,
            "record": "401-432-21",
            "pct": 0.4814,
            "ci95": [
              0.4476,
              0.5153
            ],
            "per_season": 277.7
          },
          "underdog": {
            "n": 526,
            "record": "241-272-13",
            "pct": 0.4698,
            "ci95": [
              0.427,
              0.513
            ],
            "per_season": 171.0
          },
          "favourite": {
            "n": 328,
            "record": "160-160-8",
            "pct": 0.5,
            "ci95": [
              0.4455,
              0.5545
            ],
            "per_season": 106.7
          }
        },
        {
          "edge": 2.0,
          "all": {
            "n": 406,
            "record": "189-207-10",
            "pct": 0.4773,
            "ci95": [
              0.4285,
              0.5265
            ],
            "per_season": 132.0
          },
          "underdog": {
            "n": 259,
            "record": "118-134-7",
            "pct": 0.4683,
            "ci95": [
              0.4076,
              0.5299
            ],
            "per_season": 84.0
          },
          "favourite": {
            "n": 147,
            "record": "71-73-3",
            "pct": 0.4931,
            "ci95": [
              0.4126,
              0.5738
            ],
            "per_season": 48.0
          }
        },
        {
          "edge": 3.0,
          "all": {
            "n": 258,
            "record": "125-127-6",
            "pct": 0.496,
            "ci95": [
              0.4348,
              0.5574
            ],
            "per_season": 84.0
          },
          "underdog": {
            "n": 170,
            "record": "81-85-4",
            "pct": 0.488,
            "ci95": [
              0.413,
              0.5634
            ],
            "per_season": 55.3
          },
          "favourite": {
            "n": 88,
            "record": "44-42-2",
            "pct": 0.5116,
            "ci95": [
              0.4078,
              0.6145
            ],
            "per_season": 28.7
          }
        },
        {
          "edge": 4.0,
          "all": {
            "n": 153,
            "record": "80-72-1",
            "pct": 0.5263,
            "ci95": [
              0.4473,
              0.6041
            ],
            "per_season": 50.7
          },
          "underdog": {
            "n": 103,
            "record": "52-50-1",
            "pct": 0.5098,
            "ci95": [
              0.4142,
              0.6047
            ],
            "per_season": 34.0
          },
          "favourite": {
            "n": 50,
            "record": "28-22-0",
            "pct": 0.56,
            "ci95": [
              0.4231,
              0.6884
            ],
            "per_season": 16.7
          }
        },
        {
          "edge": 5.0,
          "all": {
            "n": 88,
            "record": "45-42-1",
            "pct": 0.5172,
            "ci95": [
              0.4137,
              0.6193
            ],
            "per_season": 29.0
          },
          "underdog": {
            "n": 65,
            "record": "33-31-1",
            "pct": 0.5156,
            "ci95": [
              0.3958,
              0.6337
            ],
            "per_season": 21.3
          },
          "favourite": {
            "n": 23,
            "record": "12-11-0",
            "pct": 0.5217,
            "ci95": [
              0.3296,
              0.7076
            ],
            "per_season": 7.7
          }
        }
      ],
      "by_season": {
        "2023": {
          "n": 44,
          "record": "23-21-0",
          "pct": 0.5227,
          "ci95": [
            0.3794,
            0.6625
          ],
          "per_season": 44.0
        },
        "2024": {
          "n": 62,
          "record": "36-25-1",
          "pct": 0.5902,
          "ci95": [
            0.465,
            0.7046
          ],
          "per_season": 61.0
        },
        "2025": {
          "n": 47,
          "record": "21-26-0",
          "pct": 0.4468,
          "ci95": [
            0.3141,
            0.5875
          ],
          "per_season": 47.0
        }
      },
      "rule": "absolute edge >= 4.0 points",
      "live": {
        "n": 153,
        "record": "80-72-1",
        "pct": 0.5263,
        "ci95": [
          0.4473,
          0.6041
        ],
        "per_season": 50.7
      }
    }
  },
  "line_provenance": {
    "matched_games": 855,
    "mean_abs_spread_delta": 0.18,
    "median_abs_spread_delta": 0.0,
    "pct_spread_differs": 0.3146,
    "pct_spread_differs_by_half_pt_or_more": 0.2854,
    "pct_spread_differs_by_full_pt_or_more": 0.0444
  },
  "reliability_independent": [
    {
      "bucket": "0.1-0.2",
      "n": 27,
      "predicted": 0.1663,
      "actual": 0.2593,
      "gap": -0.093
    },
    {
      "bucket": "0.2-0.3",
      "n": 152,
      "predicted": 0.2607,
      "actual": 0.2895,
      "gap": -0.0288
    },
    {
      "bucket": "0.3-0.4",
      "n": 273,
      "predicted": 0.3602,
      "actual": 0.3333,
      "gap": 0.0268
    },
    {
      "bucket": "0.4-0.5",
      "n": 414,
      "predicted": 0.4532,
      "actual": 0.4227,
      "gap": 0.0305
    },
    {
      "bucket": "0.5-0.6",
      "n": 577,
      "predicted": 0.5504,
      "actual": 0.4991,
      "gap": 0.0512
    },
    {
      "bucket": "0.6-0.7",
      "n": 582,
      "predicted": 0.6493,
      "actual": 0.622,
      "gap": 0.0273
    },
    {
      "bucket": "0.7-0.8",
      "n": 444,
      "predicted": 0.7488,
      "actual": 0.732,
      "gap": 0.0168
    },
    {
      "bucket": "0.8-0.9",
      "n": 189,
      "predicted": 0.84,
      "actual": 0.8519,
      "gap": -0.0119
    },
    {
      "bucket": "0.9-1.0",
      "n": 13,
      "predicted": 0.9117,
      "actual": 0.9231,
      "gap": -0.0114
    }
  ],
  "models": {
    "elo": "Elo + margin-of-victory. The transparent baseline.",
    "independent": "Elo + opponent-aware EPA + rest. Never sees the line.",
    "consensus": "The above plus the de-vigged market price."
  }
}