{
  "region_id": "powergrid_tx",
  "name": "Texas",
  "operator": "ERCOT",
  "slug": "tx",
  "generated_by": "scripts/grid_scoring/score_grid.py",
  "source": {
    "run_csv": "outputs/powergrid_tx/run.csv",
    "run_config": "configs/powergrid_tx.yaml",
    "run_generated_at_utc": "2026-10-12T18:45:38.196160Z",
    "events_file": "scripts/grid_scoring/grid_events.yaml",
    "data": "EIA-930 hourly balancing-authority data, UTC hour-ending stamps"
  },
  "standard": {
    "prediction_window_h": 168,
    "detection_window_h": 48,
    "onset_rule": "Onset is the time the grid operator declared the highest emergency level the event reached, converted to UTC.",
    "article_title": "Too early is the same as wrong",
    "article_url": "https://medium.com/@sheiser1/too-early-is-the-same-as-wrong-1ead2456261a",
    "alert_unit": "episode: consecutive alerting hours count once",
    "non_target_rule": "explained if the episode starts inside an explanatory window declared in the run config, otherwise unexplained"
  },
  "scored_period": {
    "start_utc": "2020-01-08 00:00",
    "end_utc": "2026-04-01 00:00",
    "scored_hours": 54519,
    "years": 6.229,
    "warmup_hours": 168,
    "missing_hours_in_timebase": 82
  },
  "signals": [
    "forecast error",
    "demand vs normal",
    "net generation vs normal"
  ],
  "decision": {
    "method": "grouped_consensus",
    "likelihood_threshold": 0.995,
    "warmth_window_h": 8,
    "groups_required": 2,
    "groups_total": 2,
    "min_persistence_h": 3,
    "groups": [
      {
        "name": "structure",
        "members": [
          "demand vs normal",
          "net generation vs normal"
        ],
        "min_instant_members": 2,
        "min_group_warmth": 0.45
      },
      {
        "name": "residual",
        "members": [
          "forecast error"
        ],
        "min_instant_members": 1,
        "min_group_warmth": 0.5
      }
    ]
  },
  "counts": {
    "events": 1,
    "predicted": 1,
    "detected": 0,
    "missed": 0,
    "alerts": 17,
    "alert_timesteps": 92,
    "target_first": 1,
    "target_repeat": 1,
    "explained": 4,
    "unexplained": 11,
    "non_target": 15
  },
  "rates_per_year": {
    "unexplained": 1.77,
    "non_target": 2.41
  },
  "events": [
    {
      "id": "uri",
      "title": "Winter Storm Uri",
      "short": "Uri",
      "when": "Feb 2021",
      "tagline": "Rotating outages, up to 20,000 MW of load shed",
      "note": "",
      "onset_local": "2021-02-15 01:20",
      "local_tz": "America/Chicago",
      "onset_utc": "2021-02-15 07:20",
      "onset_basis": "ERCOT entered Emergency Operations Level 3 (EEA 3) and began rotating outages",
      "source_title": "ERCOT, Review of February 2021 Extreme Cold Weather Event (Feb 24, 2021), slide 11",
      "source_url": "https://www.ercot.com/files/docs/2021/02/24/2.2_REVISED_ERCOT_Presentation.pdf",
      "window_start_utc": "2021-02-08 07:20",
      "window_end_utc": "2021-02-17 07:20",
      "first_alert_utc": "2021-02-11 00:00",
      "outcome": "PREDICTED",
      "lead_h": 103.33,
      "lag_h": null,
      "lead_lag_display": "103 h lead",
      "models_hot_at_first_alert": [
        "demand_anom_model",
        "forecast_error_model",
        "net_generation_anom_model"
      ],
      "repeat_alerts_utc": [
        "2021-02-11 22:00"
      ],
      "superseded_config_onset": "2021-02-15 02:00:00"
    }
  ],
  "alerts": [
    {
      "n": 1,
      "start_utc": "2020-01-11 21:00",
      "end_utc": "2020-01-11 21:00",
      "hours": 1,
      "t_start": 261,
      "t_end": 261,
      "score_class": "unexplained",
      "matched": null,
      "note": "",
      "models_hot_at_start": [
        "forecast_error_model"
      ]
    },
    {
      "n": 2,
      "start_utc": "2020-02-06 05:00",
      "end_utc": "2020-02-06 11:00",
      "hours": 7,
      "t_start": 869,
      "t_end": 875,
      "score_class": "unexplained",
      "matched": null,
      "note": "",
      "models_hot_at_start": [
        "demand_anom_model",
        "forecast_error_model",
        "net_generation_anom_model"
      ]
    },
    {
      "n": 3,
      "start_utc": "2020-05-24 02:00",
      "end_utc": "2020-05-24 08:00",
      "hours": 7,
      "t_start": 3458,
      "t_end": 3464,
      "score_class": "explained",
      "matched": "covid",
      "note": "COVID-19 demand shift, Apr to Jun 2020",
      "models_hot_at_start": [
        "demand_anom_model",
        "forecast_error_model",
        "net_generation_anom_model"
      ]
    },
    {
      "n": 4,
      "start_utc": "2021-01-11 01:00",
      "end_utc": "2021-01-11 03:00",
      "hours": 3,
      "t_start": 9025,
      "t_end": 9027,
      "score_class": "unexplained",
      "matched": null,
      "note": "",
      "models_hot_at_start": [
        "demand_anom_model",
        "forecast_error_model",
        "net_generation_anom_model"
      ]
    },
    {
      "n": 5,
      "start_utc": "2021-02-11 00:00",
      "end_utc": "2021-02-11 06:00",
      "hours": 7,
      "t_start": 9768,
      "t_end": 9774,
      "score_class": "target_first",
      "matched": "uri",
      "note": "Winter Storm Uri",
      "models_hot_at_start": [
        "demand_anom_model",
        "forecast_error_model",
        "net_generation_anom_model"
      ]
    },
    {
      "n": 6,
      "start_utc": "2021-02-11 22:00",
      "end_utc": "2021-02-12 05:00",
      "hours": 8,
      "t_start": 9790,
      "t_end": 9797,
      "score_class": "target_repeat",
      "matched": "uri",
      "note": "Winter Storm Uri",
      "models_hot_at_start": [
        "demand_anom_model",
        "forecast_error_model",
        "net_generation_anom_model"
      ]
    },
    {
      "n": 7,
      "start_utc": "2021-05-27 01:00",
      "end_utc": "2021-05-27 09:00",
      "hours": 9,
      "t_start": 12289,
      "t_end": 12297,
      "score_class": "unexplained",
      "matched": null,
      "note": "",
      "models_hot_at_start": [
        "demand_anom_model",
        "forecast_error_model",
        "net_generation_anom_model"
      ]
    },
    {
      "n": 8,
      "start_utc": "2022-01-02 20:00",
      "end_utc": "2022-01-02 22:00",
      "hours": 3,
      "t_start": 17585,
      "t_end": 17587,
      "score_class": "unexplained",
      "matched": null,
      "note": "",
      "models_hot_at_start": [
        "demand_anom_model",
        "net_generation_anom_model"
      ]
    },
    {
      "n": 9,
      "start_utc": "2022-02-24 04:00",
      "end_utc": "2022-02-24 08:00",
      "hours": 5,
      "t_start": 18841,
      "t_end": 18845,
      "score_class": "unexplained",
      "matched": null,
      "note": "",
      "models_hot_at_start": [
        "demand_anom_model",
        "forecast_error_model"
      ]
    },
    {
      "n": 10,
      "start_utc": "2022-02-26 10:00",
      "end_utc": "2022-02-26 11:00",
      "hours": 2,
      "t_start": 18895,
      "t_end": 18896,
      "score_class": "unexplained",
      "matched": null,
      "note": "",
      "models_hot_at_start": [
        "demand_anom_model"
      ]
    },
    {
      "n": 11,
      "start_utc": "2022-12-23 03:00",
      "end_utc": "2022-12-23 18:00",
      "hours": 16,
      "t_start": 26088,
      "t_end": 26103,
      "score_class": "explained",
      "matched": "elliott_dec2022",
      "note": "Winter Storm Elliott, Dec 2022",
      "models_hot_at_start": [
        "demand_anom_model",
        "forecast_error_model",
        "net_generation_anom_model"
      ]
    },
    {
      "n": 12,
      "start_utc": "2023-01-30 19:00",
      "end_utc": "2023-01-31 02:00",
      "hours": 8,
      "t_start": 27016,
      "t_end": 27023,
      "score_class": "unexplained",
      "matched": null,
      "note": "",
      "models_hot_at_start": [
        "demand_anom_model"
      ]
    },
    {
      "n": 13,
      "start_utc": "2023-05-06 04:00",
      "end_utc": "2023-05-06 08:00",
      "hours": 5,
      "t_start": 29304,
      "t_end": 29308,
      "score_class": "unexplained",
      "matched": null,
      "note": "",
      "models_hot_at_start": [
        "forecast_error_model"
      ]
    },
    {
      "n": 14,
      "start_utc": "2023-12-29 13:00",
      "end_utc": "2023-12-29 13:00",
      "hours": 1,
      "t_start": 34996,
      "t_end": 34996,
      "score_class": "unexplained",
      "matched": null,
      "note": "",
      "models_hot_at_start": [
        "demand_anom_model",
        "net_generation_anom_model"
      ]
    },
    {
      "n": 15,
      "start_utc": "2024-01-14 23:00",
      "end_utc": "2024-01-15 03:00",
      "hours": 5,
      "t_start": 35390,
      "t_end": 35394,
      "score_class": "explained",
      "matched": "heather_jan2024",
      "note": "Winter Storm Heather, Jan 2024",
      "models_hot_at_start": [
        "demand_anom_model",
        "net_generation_anom_model"
      ]
    },
    {
      "n": 16,
      "start_utc": "2024-05-20 03:00",
      "end_utc": "2024-05-20 05:00",
      "hours": 3,
      "t_start": 38417,
      "t_end": 38419,
      "score_class": "unexplained",
      "matched": null,
      "note": "",
      "models_hot_at_start": [
        "forecast_error_model",
        "net_generation_anom_model"
      ]
    },
    {
      "n": 17,
      "start_utc": "2025-02-19 12:00",
      "end_utc": "2025-02-19 13:00",
      "hours": 2,
      "t_start": 45026,
      "t_end": 45027,
      "score_class": "explained",
      "matched": "kingston_feb2025",
      "note": "Winter Storm Kingston, Feb 2025",
      "models_hot_at_start": [
        "demand_anom_model",
        "net_generation_anom_model"
      ]
    }
  ]
}
