Ranking Generator Exit Risk in PJM and ISO-NE: A Supervised Approach
Ранжирование риска вывода генераторов в PJM и ISO-NE: подход с учителем
We frame U.S. power-plant retirement as a ranking problem over a unit-level annual panel, labeling each generator-year positive if the unit exits within a 24-month horizon. Features span heat-rate penalty, age, capacity-factor decay, and a cost-pressure term equal to a unit's marginal cost less its regional clearing price. A gradient-boosted classifier, validated walk-forward and calibrated with isotonic regression, reaches 0.91 holdout AUC and captures 78% of 2024 exits in the top decile of its watchlist against a 10.4% base rate. We report discrimination, precision@k, calibration and per-ISO breakdowns, and are explicit about announcement lag, policy-regime shifts and generalization limits.
Мы формулируем вывод электростанций США как задачу ранжирования на годовой панели уровня энергоблоков, помечая каждый год-генератор положительно, если энергоблок выводится в течение 24-месячного горизонта. Признаки охватывают штраф за удельный расход тепла, возраст, спад коэффициента использования мощности и член ценового давления, равный маржинальным издержкам энергоблока за вычетом его региональной клиринговой цены. Классификатор на градиентном бустинге, валидированный методом walk-forward и откалиброванный изотонической регрессией, достигает AUC 0,91 на отложенной выборке и улавливает 78% выводов 2024 года в верхнем дециле своего списка наблюдения против базовой доли 10,4%. Мы приводим различающую способность, точность@k, калибровку и разбивку по ISO, и открыто говорим о задержке объявления, сдвигах регуляторного режима и пределах обобщаемости.
1. Introduction & framing
1. Введение и постановка
Retirement decisions in wholesale power markets are economically driven and, because the economics move slowly, forecastable. An aging, inefficient unit does not exit on a whim; it exits after years of dispatching above the clearing price, running fewer hours, and watching a compliance deadline approach. The information that predicts the filing is in the data long before the filing itself. The problem is not signal — it is framing.
Решения о выводе на оптовых рынках электроэнергии экономически обусловлены и, поскольку экономика меняется медленно, прогнозируемы. Стареющий неэффективный энергоблок не уходит по прихоти; он уходит после лет отпуска электроэнергии выше клиринговой цены, работы всё меньшего числа часов и приближения срока соблюдения норм. Информация, предсказывающая заявку, есть в данных задолго до самой заявки. Проблема не в сигнале — она в постановке.
The naive framing, "classify each unit as retire / not-retire," is a trap under class imbalance. In any given year only about one unit in ten exits, so a model that predicts "nobody retires" scores ~90% accuracy while being useless. We therefore treat the task as ranking: order the fleet by exit risk and judge the model on how many of next year's real exits land in the top decile of that order. The deliverable an analyst uses is not a label but a watchlist — one ranked page per market. We score the two markets where the training economics transfer most cleanly, PJM and ISO-NE (a 1,480-unit 2024 cross-section), while the model itself learns from the national record of roughly 15,000 generator exits.
Наивная постановка, «классифицировать каждый энергоблок как вывод / не-вывод», — ловушка при дисбалансе классов. В любой отдельно взятый год выводится лишь около одного энергоблока из десяти, поэтому модель, предсказывающая «никто не уходит», даёт ~90% точности, будучи бесполезной. Поэтому мы трактуем задачу как ранжирование: упорядочить парк по риску вывода и судить модель по тому, сколько реальных выводов следующего года попадает в верхний дециль этого порядка. То, чем пользуется аналитик, — не метка, а список наблюдения — одна ранжированная страница на рынок. Мы оцениваем два рынка, где обучающая экономика переносится наиболее чисто, PJM и ISO-NE (срез 2024 года из 1 480 энергоблоков), тогда как сама модель обучается на национальной летописи из примерно 15 000 выводов генераторов.
2. Data & label construction
2. Данные и построение метки
2.1 The panel
2.1 Панель
The unit of analysis is the generator-year. Rows are keyed on EIA plant and generator IDs and joined to EIA-923 monthly generation, ISO day-ahead clearing prices, and EPA compliance calendars. Training uses the national footprint; scoring is restricted to the PJM and ISO-NE fleets, which in the 2024 cross-section total 1,480 units (1,180 PJM, 300 ISO-NE). Of those, 154 units (122 PJM, 32 ISO-NE) exit within the forward horizon — a prevalence of 10.4%.
Единица анализа — год-генератор. Строки ключуются по идентификаторам станций и генераторов EIA и соединяются с помесячной выработкой EIA-923, клиринговыми ценами ISO на сутки вперёд и календарями соблюдения норм EPA. Обучение использует национальный охват; оценка ограничена парками PJM и ISO-NE, которые в срезе 2024 года насчитывают 1 480 энергоблоков (1 180 PJM, 300 ISO-NE). Из них 154 энергоблока (122 PJM, 32 ISO-NE) выводятся в пределах прогнозного горизонта — распространённость 10,4%.
2.2 The exit label
2.2 Метка вывода
A generator-year is labeled positive if the unit executes or files a firm retirement/deactivation within a 24-month forward window. We distinguish announcement from execution deliberately: a unit that files in year Y but does not physically deactivate until Y+2 is still economically "exiting," and an analyst wants the early read. The 24-month horizon is chosen to match the lead time that is actually useful — long enough to precede the filing season, short enough that the economic signal is still current.
Год-генератор помечается положительно, если энергоблок исполняет или подаёт твёрдую заявку на вывод/деактивацию в пределах 24-месячного прогнозного окна. Мы намеренно различаем объявление и исполнение: энергоблок, подавший заявку в год Y, но физически деактивируемый лишь к Y+2, всё равно экономически «выходит», и аналитику нужен ранний сигнал. 24-месячный горизонт выбран, чтобы соответствовать действительно полезному опережению — достаточно длинному, чтобы предшествовать сезону подачи заявок, и достаточно короткому, чтобы экономический сигнал был ещё актуален.
2.3 Blocking look-ahead
2.3 Блокировка заглядывания вперёд
Every feature is computed as-of the observation date using only trailing data; no row sees its own future. Walk-forward folds enforce the same discipline at the model level — a test year never touches rows from a later year. Retirements that are announced but not yet effective are handled by the horizon definition itself rather than leaked through the features, which is the subtle failure mode this design is built to avoid.
Каждый признак вычисляется «на момент» даты наблюдения только по предшествующим данным; ни одна строка не видит собственного будущего. Фолды walk-forward обеспечивают ту же дисциплину на уровне модели — тестовый год никогда не касается строк более позднего года. Выводы, которые объявлены, но ещё не вступили в силу, обрабатываются самим определением горизонта, а не просачиваются через признаки — а это тонкий режим отказа, который этот дизайн призван избежать.
| Feature | Признак | Type | Тип | Definition | Определение | Source | Источник | Transform | Преобразование |
|---|---|---|---|---|---|---|---|---|---|
| heat_rate_penalty | cont. | Unit heat rate minus best-in-class for its fuel/tech class (MMBtu/MWh gap) | Удельный расход тепла энергоблока минус лучший в классе для его топливно-технологического класса (разрыв MMBtu/MWh) | EIA-923 | winsorized 1/99 | винзоризация 1/99 | |||
| unit_age | cont. | Years since commercial operation date | Число лет с даты начала коммерческой эксплуатации | EIA-860 | raw | без преобр. | |||
| capacity_factor | cont. | Trailing-12-mo net generation ÷ (nameplate × 8760) | Чистая выработка за 12 мес ÷ (номинал × 8760) | EIA-923 | 12-mo rolling | скользящее 12 мес | |||
| capfactor_decay | cont. | OLS slope of monthly capacity factor over trailing 36 mo | Наклон МНК помесячного коэффициента использования за 36 мес | EIA-923 | 36-mo slope | наклон за 36 мес | |||
| cost_pressure | cont. | Unit marginal cost − regional day-ahead clearing price ($/MWh) | Маржинальные издержки энергоблока − региональная клиринговая цена на сутки вперёд ($/MWh) | EIA + ISO LMP | 12-mo mean | среднее за 12 мес | |||
| policy_exposure | cont. | Months-to-nearest-deadline × rule-applicability index | Месяцы до ближайшего срока × индекс применимости правила | EPA | engineered index | сконструир. индекс | |||
| regional_reserve_margin | cont. | ISO installed reserve margin (%) | Установленный резерв мощности ISO (%) | ISO / NERC | annual | годовой | |||
| ramp_cost | cont. | Start/ramp cost proxy by unit technology | Прокси издержек пуска/набора нагрузки по технологии энергоблока | EIA-860 | engineered | сконструир. | |||
| ownership_type | cat. | IOU / merchant / municipal / cooperative | IOU / коммерч. / муниципальный / кооператив | EIA-860 | one-hot | ||||
| fuel_type | cat. | Coal / gas-CT / gas-CC / oil | Уголь / газ-CT / газ-CC / мазут | EIA-860 | one-hot | ||||
| nameplate_capacity | cont. | Unit nameplate (MW) | Номинальная мощность энергоблока (МВт) | EIA-860 | log |
3. Feature engineering
3. Конструирование признаков
3.1 Cost pressure
3.1 Ценовое давление
The single most economically literal feature is cost pressure, defined as a unit's marginal cost minus its regional day-ahead clearing price ($/MWh), averaged over a trailing 12-month window. A positive value means the unit is structurally out-of-merit — it clears only when prices spike, earns little in between, and is exactly the profile that gets shut down.
Наиболее экономически буквальный признак — ценовое давление, определяемое как маржинальные издержки энергоблока минус его региональная клиринговая цена на сутки вперёд ($/MWh), усреднённые за скользящее 12-месячное окно. Положительное значение означает, что энергоблок структурно вне порядка загрузки — он проходит клиринг лишь при скачках цен, мало зарабатывает в промежутках и представляет собой ровно тот профиль, который закрывают.
3.2 Capacity-factor decay
3.2 Спад коэффициента использования мощности
A unit "running fewer hours" is the classic tell, but the level of the capacity factor is a lagging indicator. We instead fit an OLS slope of the monthly capacity factor over the trailing 36 months; the decay captures the trend earlier than the level does, and a steep negative slope is a leading signal of an impending exit.
Энергоблок, «работающий меньше часов», — классический признак, но уровень коэффициента использования — запаздывающий индикатор. Вместо этого мы подгоняем наклон МНК помесячного коэффициента использования за скользящие 36 месяцев; спад улавливает тренд раньше, чем это делает уровень, а крутой отрицательный наклон — опережающий сигнал надвигающегося вывода.
3.3 Compliance-deadline proximity
3.3 Близость срока соблюдения норм
Emissions rules impose hard dates. We compute months-to-the-nearest-binding-deadline that
applies to the unit's fuel and vintage, and fold that together with a rule-applicability score
into a single policy_exposure index. A coal unit six months from a MATS or regional
haze deadline carries very different risk than a gas CC that no current rule touches.
Экологические нормы задают жёсткие даты. Мы вычисляем число месяцев до ближайшего
обязывающего срока, применимого к топливу и возрасту энергоблока, и сворачиваем это вместе с оценкой
применимости правила в единый индекс policy_exposure. Угольный энергоблок за шесть месяцев
до срока MATS или регионального ограничения дымки несёт совсем иной риск, чем газовый CC, которого не
касается ни одно действующее правило.
4. Model & training
4. Модель и обучение
4.1 Gradient boosting
4.1 Градиентный бустинг
We use scikit-learn's HistGradientBoostingClassifier. The rationale is practical:
it handles the mixed continuous/categorical panel natively, supports monotone constraints, is
robust to feature scale, and trains fast on the full national footprint. We impose monotone
constraints where domain priors are unambiguous — a unit that is older, has a higher
heat-rate penalty, or is under more cost pressure should never be scored as
less likely to exit, all else equal.
Мы используем HistGradientBoostingClassifier из scikit-learn. Обоснование
практическое: он нативно работает со смешанной непрерывно-категориальной панелью, поддерживает
монотонные ограничения, устойчив к масштабу признаков и быстро обучается на полном национальном
охвате. Мы налагаем монотонные ограничения там, где предметные априори однозначны — энергоблок,
который старше, имеет более высокий штраф за удельный расход тепла или находится под
бо́льшим ценовым давлением, при прочих равных никогда не должен оцениваться как менее
склонный к выводу.
4.2 Walk-forward CV
4.2 Walk-forward кросс-валидация
Validation is strictly temporal: train on all data through year Y, test on Y+1, for six folds spanning 2019–2024. Per-fold AUC and top-decile capture are reported in Table 3. This is the only honest evaluation for a time-series ranking problem — a random k-fold split would leak future economics into the training set and flatter the model.
Валидация строго временна́я: обучение на всех данных до года Y, тест на Y+1, для шести фолдов, охватывающих 2019–2024. AUC по фолдам и охват верхнего дециля приведены в Таблице 3. Это единственная честная оценка для задачи ранжирования на временны́х рядах — случайное k-блочное разбиение просочило бы будущую экономику в обучающую выборку и приукрасило бы модель.
4.3 Class imbalance
4.3 Дисбаланс классов
Prevalence is 10.4%. We carry the imbalance with class_weight='balanced' (sample
weights) rather than resampling, because resampling the time axis would distort the walk-forward
structure and the base rate the calibration depends on.
Распространённость — 10,4%. Мы учитываем дисбаланс через class_weight='balanced'
(веса выборки), а не через ресемплинг, потому что ресемплинг по оси времени исказил бы структуру
walk-forward и базовую долю, от которой зависит калибровка.
4.4 Calibration
4.4 Калибровка
Raw boosting scores rank well but are not probabilities. We fit isotonic regression on a held-out slice of each training window, which pulls the scores onto the reliability diagonal (FIG 05) and yields a Brier score of 0.046. Calibrated scores are what make a 15% or 10% operating threshold interpretable rather than arbitrary.
Сырые оценки бустинга хорошо ранжируют, но не являются вероятностями. Мы подгоняем изотоническую регрессию на отложенном срезе каждого обучающего окна, что притягивает оценки к диагонали надёжности (РИС 05) и даёт оценку Брайера 0,046. Именно откалиброванные оценки делают рабочий порог в 15% или 10% интерпретируемым, а не произвольным.
| Parameter | Параметр | Value | Значение | Note | Примечание |
|---|---|---|---|---|---|
| estimator | HistGradientBoostingClassifier | scikit-learn | |||
| learning_rate | 0.05 | — | |||
| max_iter | 600 | with early stopping | с ранней остановкой | ||
| max_leaf_nodes | 31 | — | |||
| min_samples_leaf | 40 | guards thin exit class | защищает тонкий класс выводов | ||
| l2_regularization | 1.0 | — | |||
| max_bins | 255 | — | |||
| early_stopping | on, patience 30 | вкл., терпение 30 | validation-window loss | потери на валидационном окне | |
| class_weight | balanced | ~10.4% prevalence | ~10,4% распространённость | ||
| monotonic_cst | age +, heat_rate_penalty +, cost_pressure + | domain priors | предметные априори | ||
| calibration | isotonic | fit on held-out slice | подгонка на отложенном срезе |
5. Evaluation
5. Оценка качества
5.1 Discrimination
5.1 Различающая способность
Holdout AUC is 0.91 (FIG 01). Under 10% prevalence, however, ROC flatters; the honest view is precision–recall. The model's average precision is 0.83 against a PR baseline of 0.104 (FIG 04) — an eight-fold lift over the base rate that ROC alone does not make visible.
AUC на отложенной выборке — 0,91 (РИС 01). Однако при распространённости 10% ROC приукрашивает; честный взгляд — точность–полнота. Средняя точность модели — 0,83 против базовой линии PR в 0,104 (РИС 04) — восьмикратный прирост над базовой долей, который один лишь ROC не делает видимым.
5.2 Ranking quality
5.2 Качество ранжирования
The deliverable metric is top-decile capture: 78% of 2024 exits (and 82% of 2023 exits) fall in the top 10% of the ranked watchlist. Precision at the top decile is 0.81 — of the 148 units flagged, 120 are true exits. A looser 15% operating cut trades precision for recall (Table 5).
Итоговая метрика — охват верхнего дециля: 78% выводов 2024 года (и 82% выводов 2023 года) попадают в верхние 10% ранжированного списка наблюдения. Точность в верхнем дециле — 0,81 — из 148 помеченных энергоблоков 120 являются истинными выводами. Более мягкий рабочий порог 15% меняет точность на полноту (Таблица 5).
5.3 Calibration
5.3 Калибровка
The reliability curve tracks the identity line within every decile bin, and the Brier score is 0.046 (FIG 05). A calibrated 0.7 means roughly 70% odds, not just "high in the ranking," which is what lets an analyst set a threshold with a known false-positive budget.
Кривая надёжности держится линии тождества внутри каждого децильного бина, а оценка Брайера — 0,046 (РИС 05). Откалиброванные 0,7 означают примерно 70% шанс, а не просто «высоко в рейтинге», и именно это позволяет аналитику задать порог с известным бюджетом ложноположительных.
5.4 Per-ISO
5.4 По ISO
PJM outperforms ISO-NE on every metric (FIG 07, Table 4). The combined AUC of 0.91 is the fleet-weighted blend of PJM's 0.92 and ISO-NE's 0.88; the thinner 300-unit ISO-NE fleet is measurably harder, which is the expected penalty of a smaller sample and a different market design.
PJM превосходит ISO-NE по каждой метрике (РИС 07, Таблица 4). Совокупный AUC 0,91 — это взвешенная по парку смесь 0,92 у PJM и 0,88 у ISO-NE; более тонкий парк ISO-NE из 300 энергоблоков измеримо сложнее, что является ожидаемым штрафом за меньшую выборку и иной дизайн рынка.
| Fold | Фолд | Train | Обучение | Test | Тест | N units | N энергоблоков | Exits | Выводы | AUC | Top-decile capture | Охват верх. дециля |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | ≤2018 | 2019 | 1,360 | 96 | 0.89 | 74% | ||||||
| 2 | ≤2019 | 2020 | 1,395 | 128 | 0.90 | 76% | ||||||
| 3 | ≤2020 | 2021 | 1,420 | 141 | 0.90 | 80% | ||||||
| 4 | ≤2021 | 2022 | 1,440 | 122 | 0.91 | 79% | ||||||
| 5 | ≤2022 | 2023 | 1,465 | 168 | 0.92 | 82% | ||||||
| 6 | ≤2023 | 2024 | 1,480 | 154 | 0.91 | 78% | ||||||
| Mean | Среднее | — | — | — | — | 0.91 | 78% |
| Market | Рынок | Units | Энергоблоки | Exits | Выводы | Prev. | Распр. | AUC | AP | Capture | Охват | Prec@10% | Brier |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| PJM | 1,180 | 122 | 10.3% | 0.92 | 0.85 | 79% | 0.82 | 0.044 | |||||
| ISO-NE | 300 | 32 | 10.7% | 0.88 | 0.78 | 74% | 0.79 | 0.053 | |||||
| Combined | Совокупно | 1,480 | 154 | 10.4% | 0.91 | 0.83 | 78% | 0.81 | 0.046 |
| Actually exits | Реально выводится | Survives | Остаётся | Total | Всего | |
|---|---|---|---|---|---|---|
| Flagged (222) | Помечено (222) | 135 (TP) | 87 (FP) | 222 | ||
| Not flagged (1,258) | Не помечено (1 258) | 19 (FN) | 1,239 (TN) | 1,258 | ||
| Total | Всего | 154 | 1,326 | 1,480 |
At the 15% cut the confusion matrix gives precision 0.61, recall 0.88 and F1 0.72 — the model recovers nearly nine in ten true exits at the cost of an 87-unit false-positive budget. Tightening to the top decile (10%) raises precision to 0.81 while still holding 78% recall; the choice between the two is an analyst's call about how wide a watchlist they want to read.
При пороге 15% матрица ошибок даёт точность 0,61, полноту 0,88 и F1 0,72 — модель улавливает почти девять из десяти истинных выводов ценой бюджета в 87 ложноположительных. Сужение до верхнего дециля (10%) поднимает точность до 0,81, всё ещё удерживая полноту 78%; выбор между этими вариантами — решение аналитика о том, насколько широкий список наблюдения он готов читать.
6. A unit flagged early (case example)
6. Энергоблок, помеченный заранее (пример)
To make the mechanism concrete, consider an anonymized illustration. Unit A is a ~1971-vintage 620 MW coal steam unit in PJM. On the 2022 watchlist the model placed it in the top decile: its heat-rate penalty sat in the 92nd percentile of its fuel class, its capacity factor had decayed from ~55% in 2018 to ~18% by 2021, and its cost pressure averaged +$14/MWh above the zonal clearing price. The unit announced retirement in 2024, two years after the flag — precisely the lead time the 24-month horizon is designed to buy. This is illustrative rather than a specific disclosed asset, but it is representative of the profile the model surfaces.
Чтобы сделать механизм наглядным, рассмотрим анонимизированную иллюстрацию. Энергоблок A — угольный паротурбинный энергоблок 620 МВт постройки ~1971 года в PJM. В списке наблюдения 2022 года модель поместила его в верхний дециль: его штраф за удельный расход тепла находился в 92-м процентиле своего топливного класса, его коэффициент использования упал с ~55% в 2018 году до ~18% к 2021 году, а ценовое давление в среднем составляло +$14/MWh над зональной клиринговой ценой. Энергоблок объявил о выводе в 2024 году, через два года после метки — ровно то опережение, которое призван обеспечить 24-месячный горизонт. Это иллюстрация, а не конкретный раскрытый актив, но она репрезентативна для профиля, который выявляет модель.
7. Limitations & threats to validity
7. Ограничения и угрозы валидности
Announcement lag. Firms delay and re-time filings for strategic reasons, so the label is noisy in its timing even when the economic direction is right; a unit "should" have exited a year earlier than it filed. The horizon absorbs some of this but not all.
Задержка объявления. Компании откладывают и пересматривают сроки заявок по стратегическим соображениям, поэтому метка зашумлена по времени, даже когда экономическое направление верно; энергоблок «должен был» уйти на год раньше, чем подал заявку. Горизонт поглощает часть этого, но не всё.
Policy-regime shifts. The model learns deadlines as if fixed, but a new rule — or a
relaxed one — can move the compliance calendar the features encode. The mapping from
policy_exposure to exit risk is non-stationary across regulatory regimes.
Сдвиги регуляторного режима. Модель усваивает сроки как фиксированные, но новое
правило — или ослабленное — может сдвинуть календарь соблюдения норм, который кодируют признаки.
Отображение из policy_exposure в риск вывода нестационарно между регуляторными режимами.
Survivorship. Units that exited before the panel's start are unobserved, so the training distribution is conditioned on having survived to the panel window — a bias toward the units that lasted.
Систематическая ошибка выжившего. Энергоблоки, выведенные до начала панели, не наблюдаемы, поэтому обучающее распределение обусловлено дожитием до окна панели — смещение в пользу энергоблоков, которые продержались.
Coal-vs-gas structural change. Much of the historical exit signal is coal-driven. As the fleet gasifies, the learned relationships may transfer imperfectly to a gas-heavy future in which the marginal exit looks different.
Структурный переход уголь–газ. Большая часть исторического сигнала выводов обусловлена углём. По мере газификации парка усвоенные зависимости могут несовершенно переноситься в газоёмкое будущее, в котором маргинальный вывод выглядит иначе.
Generalization to other ISOs. MISO, ERCOT and CAISO run materially different market designs (energy-only vs capacity, different reserve constructs). The PJM/ISO-NE model should not be assumed to port to them without refitting.
Обобщение на другие ISO. MISO, ERCOT и CAISO работают на существенно иных рыночных дизайнах (только энергия против мощности, разные конструкции резервов). Не следует полагать, что модель PJM/ISO-NE переносится на них без переобучения.
8. Conclusion & deployment
8. Заключение и внедрение
The model ships as a ranked watchlist, refreshed each filing season, rendered one page per ISO in Tableau. Because the scores are calibrated, thresholds are interpretable: a desk can choose the top decile for a tight, high-precision list or the top 15% for wider coverage, with a known trade-off either way. Next steps are to extend scoring to MISO with a refit, and to model the announcement-to-execution gap explicitly rather than folding it into the horizon.
Модель поставляется как ранжированный список наблюдения, обновляемый каждый сезон подачи заявок, отображаемый по одной странице на ISO в Tableau. Поскольку оценки откалиброваны, пороги интерпретируемы: подразделение может выбрать верхний дециль для узкого высокоточного списка или верхние 15% для более широкого охвата, с известным компромиссом в любом случае. Дальнейшие шаги — распространить оценку на MISO с переобучением и явно моделировать разрыв между объявлением и исполнением, а не сворачивать его в горизонт.
References
Источники
- U.S. Energy Information Administration. Forms EIA-860 and EIA-923: Generator and Generation Data. 2001–2024.
- Gorman, W., et al. Drivers of Power-Plant Retirements in U.S. Wholesale Electricity Markets. UT Austin Energy Institute Working Paper, 2023.
- PJM Interconnection. Generator Deactivations and Status Reports. 2015–2024.
- ISO New England. Forward Capacity Market Results and Retirement/De-list Bids. 2015–2024.
- Pedregosa, F., et al. Scikit-learn: Machine Learning in Python. JMLR 12, 2011.
- Niculescu-Mizil, A., Caruana, R. Predicting Good Probabilities with Supervised Learning. ICML, 2005.
- Davis, J., Goadrich, M. The Relationship Between Precision-Recall and ROC Curves. ICML, 2006.
- U.S. Environmental Protection Agency. Compliance Deadlines: MATS, CSAPR and Regional Haze. 2015–2024.