{
  "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-04-19T04:17:01.518133Z",
    "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": [
    "demand",
    "net generation",
    "forecast error",
    "imbalance",
    "imbalance residual"
  ],
  "decision": {
    "method": "grouped_consensus",
    "likelihood_threshold": 0.98,
    "warmth_window_h": 6,
    "groups_required": 2,
    "groups_total": 2,
    "min_persistence_h": 2,
    "groups": [
      {
        "name": "structure",
        "members": [
          "demand",
          "net generation"
        ],
        "min_instant_members": 2,
        "min_group_warmth": 0.45
      },
      {
        "name": "residual",
        "members": [
          "forecast error",
          "imbalance",
          "imbalance residual"
        ],
        "min_instant_members": 1,
        "min_group_warmth": 0.5
      }
    ]
  },
  "counts": {
    "events": 3,
    "predicted": 2,
    "detected": 1,
    "missed": 0,
    "alerts": 19,
    "alert_timesteps": 37,
    "target_first": 3,
    "target_repeat": 1,
    "explained": 7,
    "unexplained": 8,
    "non_target": 15
  },
  "rates_per_year": {
    "unexplained": 1.28,
    "non_target": 2.41
  },
  "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": "CAISO had already declared a Stage 2 Emergency at 3:25 pm local time (22:25 UTC), so this alert came after the first emergency declaration and 1.6 hours before the Stage 3 declaration. That is too short a lead to act on.",
      "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": "2020-08-15 00:00",
      "outcome": "PREDICTED",
      "lead_h": 1.63,
      "lag_h": null,
      "lead_lag_display": "1.6 h lead",
      "models_hot_at_first_alert": [
        "demand_model",
        "imbalance_residual_model",
        "net_generation_model"
      ],
      "repeat_alerts_utc": [],
      "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": "The alert is on the hourly reading stamped 01:00 UTC, the first one after the 00:55 UTC declaration.",
      "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-07 01:00",
      "outcome": "DETECTED",
      "lead_h": null,
      "lag_h": 0.08,
      "lead_lag_display": "<1 h lag",
      "models_hot_at_first_alert": [
        "demand_model",
        "imbalance_model",
        "imbalance_residual_model"
      ],
      "repeat_alerts_utc": [],
      "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-01 08:00",
      "outcome": "PREDICTED",
      "lead_h": 136.28,
      "lag_h": null,
      "lead_lag_display": "136 h lead",
      "models_hot_at_first_alert": [
        "demand_model",
        "forecast_error_model"
      ],
      "repeat_alerts_utc": [
        "2022-09-02 04:00"
      ],
      "superseded_config_onset": "2022-09-06 17:00:00"
    }
  ],
  "alerts": [
    {
      "n": 1,
      "start_utc": "2020-02-04 03:00",
      "end_utc": "2020-02-04 03:00",
      "hours": 1,
      "t_start": 819,
      "t_end": 819,
      "score_class": "unexplained",
      "matched": null,
      "note": "",
      "models_hot_at_start": [
        "demand_model",
        "imbalance_model"
      ]
    },
    {
      "n": 2,
      "start_utc": "2020-04-12 03:00",
      "end_utc": "2020-04-12 03:00",
      "hours": 1,
      "t_start": 2447,
      "t_end": 2447,
      "score_class": "explained",
      "matched": "covid_may2020",
      "note": "COVID-19 demand shift, Apr to May 2020",
      "models_hot_at_start": [
        "demand_model",
        "imbalance_residual_model"
      ]
    },
    {
      "n": 3,
      "start_utc": "2020-05-27 00:00",
      "end_utc": "2020-05-27 00:00",
      "hours": 1,
      "t_start": 3524,
      "t_end": 3524,
      "score_class": "explained",
      "matched": "covid_may2020",
      "note": "COVID-19 demand shift, Apr to May 2020",
      "models_hot_at_start": [
        "demand_model",
        "imbalance_model",
        "net_generation_model"
      ]
    },
    {
      "n": 4,
      "start_utc": "2020-08-15 00:00",
      "end_utc": "2020-08-15 00:00",
      "hours": 1,
      "t_start": 5442,
      "t_end": 5442,
      "score_class": "target_first",
      "matched": "outage_aug2020",
      "note": "August 2020 Rolling Blackouts",
      "models_hot_at_start": [
        "demand_model",
        "imbalance_residual_model",
        "net_generation_model"
      ]
    },
    {
      "n": 5,
      "start_utc": "2020-09-07 01:00",
      "end_utc": "2020-09-07 03:00",
      "hours": 3,
      "t_start": 5995,
      "t_end": 5997,
      "score_class": "target_first",
      "matched": "near_miss_sept2020",
      "note": "September 2020 Labor Day Heat Wave",
      "models_hot_at_start": [
        "demand_model",
        "imbalance_model",
        "imbalance_residual_model"
      ]
    },
    {
      "n": 6,
      "start_utc": "2020-10-08 20:00",
      "end_utc": "2020-10-08 22:00",
      "hours": 3,
      "t_start": 6758,
      "t_end": 6760,
      "score_class": "explained",
      "matched": "psps_wildfire_oct2020",
      "note": "Wildfire power shutoffs, Oct 2020",
      "models_hot_at_start": [
        "demand_model",
        "imbalance_model",
        "imbalance_residual_model",
        "net_generation_model"
      ]
    },
    {
      "n": 7,
      "start_utc": "2022-09-01 08:00",
      "end_utc": "2022-09-01 10:00",
      "hours": 3,
      "t_start": 23336,
      "t_end": 23338,
      "score_class": "target_first",
      "matched": "outage_sept2022",
      "note": "September 2022 Record Demand",
      "models_hot_at_start": [
        "demand_model",
        "forecast_error_model"
      ]
    },
    {
      "n": 8,
      "start_utc": "2022-09-02 04:00",
      "end_utc": "2022-09-02 04:00",
      "hours": 1,
      "t_start": 23356,
      "t_end": 23356,
      "score_class": "target_repeat",
      "matched": "outage_sept2022",
      "note": "September 2022 Record Demand",
      "models_hot_at_start": [
        "demand_model",
        "imbalance_model",
        "net_generation_model"
      ]
    },
    {
      "n": 9,
      "start_utc": "2022-11-29 09:00",
      "end_utc": "2022-11-29 10:00",
      "hours": 2,
      "t_start": 25473,
      "t_end": 25474,
      "score_class": "unexplained",
      "matched": null,
      "note": "",
      "models_hot_at_start": [
        "demand_model",
        "imbalance_model",
        "net_generation_model"
      ]
    },
    {
      "n": 10,
      "start_utc": "2023-04-29 18:00",
      "end_utc": "2023-04-29 18:00",
      "hours": 1,
      "t_start": 29106,
      "t_end": 29106,
      "score_class": "unexplained",
      "matched": null,
      "note": "",
      "models_hot_at_start": [
        "demand_model",
        "imbalance_model"
      ]
    },
    {
      "n": 11,
      "start_utc": "2023-05-17 08:00",
      "end_utc": "2023-05-17 09:00",
      "hours": 2,
      "t_start": 29528,
      "t_end": 29529,
      "score_class": "unexplained",
      "matched": null,
      "note": "",
      "models_hot_at_start": [
        "demand_model",
        "imbalance_model"
      ]
    },
    {
      "n": 12,
      "start_utc": "2023-11-10 08:00",
      "end_utc": "2023-11-10 14:00",
      "hours": 7,
      "t_start": 33774,
      "t_end": 33780,
      "score_class": "explained",
      "matched": "atmospheric_river_nov2023",
      "note": "Atmospheric river, Nov 2023",
      "models_hot_at_start": [
        "imbalance_model",
        "imbalance_residual_model",
        "net_generation_model"
      ]
    },
    {
      "n": 13,
      "start_utc": "2024-05-19 14:00",
      "end_utc": "2024-05-19 14:00",
      "hours": 1,
      "t_start": 38050,
      "t_end": 38050,
      "score_class": "unexplained",
      "matched": null,
      "note": "",
      "models_hot_at_start": [
        "imbalance_model",
        "net_generation_model"
      ]
    },
    {
      "n": 14,
      "start_utc": "2024-12-08 19:00",
      "end_utc": "2024-12-08 19:00",
      "hours": 1,
      "t_start": 42806,
      "t_end": 42806,
      "score_class": "unexplained",
      "matched": null,
      "note": "",
      "models_hot_at_start": [
        "imbalance_model",
        "net_generation_model"
      ]
    },
    {
      "n": 15,
      "start_utc": "2025-02-23 19:00",
      "end_utc": "2025-02-23 19:00",
      "hours": 1,
      "t_start": 44654,
      "t_end": 44654,
      "score_class": "unexplained",
      "matched": null,
      "note": "",
      "models_hot_at_start": [
        "imbalance_model",
        "net_generation_model"
      ]
    },
    {
      "n": 16,
      "start_utc": "2025-10-27 22:00",
      "end_utc": "2025-10-28 00:00",
      "hours": 3,
      "t_start": 50514,
      "t_end": 50516,
      "score_class": "unexplained",
      "matched": null,
      "note": "",
      "models_hot_at_start": [
        "demand_model",
        "forecast_error_model"
      ]
    },
    {
      "n": 17,
      "start_utc": "2026-03-17 04:00",
      "end_utc": "2026-03-17 05:00",
      "hours": 2,
      "t_start": 53784,
      "t_end": 53785,
      "score_class": "explained",
      "matched": "atmospheric_river_mar2026",
      "note": "Atmospheric river, Mar 2026",
      "models_hot_at_start": [
        "demand_model",
        "forecast_error_model",
        "imbalance_residual_model"
      ]
    },
    {
      "n": 18,
      "start_utc": "2026-03-18 04:00",
      "end_utc": "2026-03-18 05:00",
      "hours": 2,
      "t_start": 53808,
      "t_end": 53809,
      "score_class": "explained",
      "matched": "atmospheric_river_mar2026",
      "note": "Atmospheric river, Mar 2026",
      "models_hot_at_start": [
        "demand_model",
        "forecast_error_model",
        "imbalance_residual_model",
        "net_generation_model"
      ]
    },
    {
      "n": 19,
      "start_utc": "2026-03-19 04:00",
      "end_utc": "2026-03-19 04:00",
      "hours": 1,
      "t_start": 53832,
      "t_end": 53832,
      "score_class": "explained",
      "matched": "atmospheric_river_mar2026",
      "note": "Atmospheric river, Mar 2026",
      "models_hot_at_start": [
        "demand_model",
        "imbalance_residual_model",
        "net_generation_model"
      ]
    }
  ]
}
