{
  "region_id": "powergrid_ca",
  "name": "California",
  "operator": "CAISO",
  "slug": "ca",
  "generated_by": "scripts/grid_scoring/score_grid.py",
  "source": {
    "run_csv": "outputs/powergrid_ca/run.csv",
    "run_config": "configs/powergrid_ca.yaml",
    "run_generated_at_utc": "2026-10-12T18:48:20.088796Z",
    "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": 53973,
    "years": 6.229,
    "warmup_hours": 168,
    "missing_hours_in_timebase": 628
  },
  "signals": [
    "forecast error",
    "imbalance",
    "demand vs normal",
    "net generation vs normal",
    "imbalance 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",
          "imbalance",
          "imbalance vs normal"
        ],
        "min_instant_members": 1,
        "min_group_warmth": 0.5
      }
    ]
  },
  "counts": {
    "events": 3,
    "predicted": 1,
    "detected": 1,
    "missed": 1,
    "alerts": 9,
    "alert_timesteps": 16,
    "target_first": 2,
    "target_repeat": 1,
    "explained": 1,
    "unexplained": 5,
    "non_target": 6
  },
  "rates_per_year": {
    "unexplained": 0.8,
    "non_target": 0.96
  },
  "events": [
    {
      "id": "outage_aug2020",
      "title": "August 2020 Rolling Blackouts",
      "short": "Aug 2020 blackouts",
      "when": "Aug 2020",
      "tagline": "Stage 3 Emergency, rotating outages on Aug 14 and 15",
      "note": "Missed. The demand and generation models were strongly anomalous from about 25 hours before the Stage 3 declaration, but no residual signal (forecast error, imbalance) agreed, so the two-group rule did not fire. An earlier version caught this event only through an imbalance feature normalized with hour-of-day medians from the whole 2020-26 period, which used future data; with that feature made causal, the event is missed.",
      "onset_local": "2020-08-14 18:38",
      "local_tz": "America/Los_Angeles",
      "onset_utc": "2020-08-15 01:38",
      "onset_basis": "CAISO declared a Stage 3 Emergency",
      "source_title": "CAISO, CPUC, CEC, Preliminary Root Cause Analysis: Mid-August 2020 Heat Storm, section 3.3.2",
      "source_url": "https://www.caiso.com/documents/preliminary-root-cause-analysis-rotating-outages-august-2020.pdf",
      "window_start_utc": "2020-08-08 01:38",
      "window_end_utc": "2020-08-17 01:38",
      "first_alert_utc": null,
      "outcome": "MISSED",
      "lead_h": null,
      "lag_h": null,
      "lead_lag_display": "",
      "models_hot_at_first_alert": [],
      "repeat_alerts_utc": [],
      "nearest_alert_before_utc": "2020-06-28 06:00",
      "nearest_alert_after_utc": "2020-09-06 04:00",
      "superseded_config_onset": "2020-08-14 18:00:00"
    },
    {
      "id": "near_miss_sept2020",
      "title": "September 2020 Labor Day Heat Wave",
      "short": "Sep 2020 heat wave",
      "when": "Sep 2020",
      "tagline": "Stage 2 Emergency, no outages ordered",
      "note": "",
      "onset_local": "2020-09-06 17:55",
      "local_tz": "America/Los_Angeles",
      "onset_utc": "2020-09-07 00:55",
      "onset_basis": "CAISO declared a statewide Stage 2 Emergency",
      "source_title": "CAISO, system conditions bulletin (September 2020)",
      "source_url": "https://www.caiso.com/Documents/sept9-2020-systemconditions.pdf",
      "window_start_utc": "2020-08-31 00:55",
      "window_end_utc": "2020-09-09 00:55",
      "first_alert_utc": "2020-09-06 04:00",
      "outcome": "PREDICTED",
      "lead_h": 20.92,
      "lag_h": null,
      "lead_lag_display": "21 h lead",
      "models_hot_at_first_alert": [
        "demand_anom_model",
        "imbalance_model",
        "net_generation_anom_model"
      ],
      "repeat_alerts_utc": [
        "2020-09-07 03:00"
      ],
      "superseded_config_onset": "2020-09-06 12:00:00"
    },
    {
      "id": "outage_sept2022",
      "title": "September 2022 Record Demand",
      "short": "Sep 2022 record demand",
      "when": "Sep 2022",
      "tagline": "EEA 3 declared, no load shed ordered by CAISO",
      "note": "",
      "onset_local": "2022-09-06 17:17",
      "local_tz": "America/Los_Angeles",
      "onset_utc": "2022-09-07 00:17",
      "onset_basis": "CAISO declared an EEA 3",
      "source_title": "CAISO, Grid Emergencies History Report (EEA3, 09/06/2022 17:17 to 20:00)",
      "source_url": "https://www.caiso.com/documents/grid-emergencies-history-report-1998-to-present.pdf",
      "window_start_utc": "2022-08-31 00:17",
      "window_end_utc": "2022-09-09 00:17",
      "first_alert_utc": "2022-09-07 10:00",
      "outcome": "DETECTED",
      "lead_h": null,
      "lag_h": 9.72,
      "lead_lag_display": "9.7 h lag",
      "models_hot_at_first_alert": [
        "forecast_error_model"
      ],
      "repeat_alerts_utc": [],
      "superseded_config_onset": "2022-09-06 17:00:00"
    }
  ],
  "alerts": [
    {
      "n": 1,
      "start_utc": "2020-04-29 05:00",
      "end_utc": "2020-04-29 05:00",
      "hours": 1,
      "t_start": 2857,
      "t_end": 2857,
      "score_class": "explained",
      "matched": "covid_may2020",
      "note": "COVID-19 demand shift, Apr to May 2020",
      "models_hot_at_start": [
        "imbalance_model"
      ]
    },
    {
      "n": 2,
      "start_utc": "2020-06-28 06:00",
      "end_utc": "2020-06-28 06:00",
      "hours": 1,
      "t_start": 4298,
      "t_end": 4298,
      "score_class": "unexplained",
      "matched": null,
      "note": "",
      "models_hot_at_start": [
        "net_generation_anom_model"
      ]
    },
    {
      "n": 3,
      "start_utc": "2020-09-06 04:00",
      "end_utc": "2020-09-06 06:00",
      "hours": 3,
      "t_start": 5974,
      "t_end": 5976,
      "score_class": "target_first",
      "matched": "near_miss_sept2020",
      "note": "September 2020 Labor Day Heat Wave",
      "models_hot_at_start": [
        "demand_anom_model",
        "imbalance_model",
        "net_generation_anom_model"
      ]
    },
    {
      "n": 4,
      "start_utc": "2020-09-07 03:00",
      "end_utc": "2020-09-07 05:00",
      "hours": 3,
      "t_start": 5997,
      "t_end": 5999,
      "score_class": "target_repeat",
      "matched": "near_miss_sept2020",
      "note": "September 2020 Labor Day Heat Wave",
      "models_hot_at_start": [
        "demand_anom_model",
        "imbalance_model",
        "net_generation_anom_model"
      ]
    },
    {
      "n": 5,
      "start_utc": "2021-07-10 02:00",
      "end_utc": "2021-07-10 04:00",
      "hours": 3,
      "t_start": 13316,
      "t_end": 13318,
      "score_class": "unexplained",
      "matched": null,
      "note": "",
      "models_hot_at_start": [
        "demand_anom_model",
        "imbalance_model"
      ]
    },
    {
      "n": 6,
      "start_utc": "2022-04-09 07:00",
      "end_utc": "2022-04-09 08:00",
      "hours": 2,
      "t_start": 19859,
      "t_end": 19860,
      "score_class": "unexplained",
      "matched": null,
      "note": "",
      "models_hot_at_start": [
        "net_generation_anom_model"
      ]
    },
    {
      "n": 7,
      "start_utc": "2022-09-07 10:00",
      "end_utc": "2022-09-07 10:00",
      "hours": 1,
      "t_start": 23482,
      "t_end": 23482,
      "score_class": "target_first",
      "matched": "outage_sept2022",
      "note": "September 2022 Record Demand",
      "models_hot_at_start": [
        "forecast_error_model"
      ]
    },
    {
      "n": 8,
      "start_utc": "2023-07-01 08:00",
      "end_utc": "2023-07-01 08:00",
      "hours": 1,
      "t_start": 30608,
      "t_end": 30608,
      "score_class": "unexplained",
      "matched": null,
      "note": "",
      "models_hot_at_start": [
        "demand_anom_model"
      ]
    },
    {
      "n": 9,
      "start_utc": "2024-07-25 03:00",
      "end_utc": "2024-07-25 03:00",
      "hours": 1,
      "t_start": 39599,
      "t_end": 39599,
      "score_class": "unexplained",
      "matched": null,
      "note": "",
      "models_hot_at_start": [
        "net_generation_anom_model"
      ]
    }
  ]
}
