{
  "split": "2007\u20132008 training; January\u2013June 2009 configuration and baseline selection; July\u2013December 2009 interval calibration; January\u2013November 2010 untouched testing. Only hours with 60 observed minute readings are scored.",
  "train_rows": 17440,
  "test_rows": 7608,
  "selection": "Select lowest validation MAE; freeze fit. Calibrate a nominal 90% symmetric residual band on a separate six-month block. Test dates are never used for selection.",
  "target": "Energy in a complete clock hour, kWh",
  "features": [
    "hour",
    "weekday",
    "month",
    "lag_24",
    "lag_48",
    "lag_168",
    "lag_336",
    "prior_week_same_hour"
  ],
  "candidates": [
    {
      "leaves": 7,
      "validation_mae_kwh": 0.48807653431730197
    },
    {
      "leaves": 15,
      "validation_mae_kwh": 0.4844270375107689
    }
  ],
  "forecast_contract": "At midnight, forecast each coming hour using the same hours from prior days; all feature timestamps precede forecast midnight. Earlier test-day data become available to the following forecast day. Assume finalized prior-day measurements available at midnight.",
  "uncertainty": {
    "metric": "baseline MAE minus model MAE",
    "estimate": 0.005574172206218128,
    "ci95_low": -0.0027359151781461083,
    "ci95_high": 0.013021750127163143,
    "resampling": "paired calendar-day clusters",
    "repeats": 500
  },
  "interval_limitation": "Temporal dependence and distribution shift violate exchangeability; 90% is a nominal calibration target, not a guaranteed future coverage rate.",
  "timezone_limitation": "Source timestamps are naive local clock readings. No UTC or DST disambiguation is supplied; do not infer physical elapsed UTC hours."
}
