Прогнозируем нагрузку группы солнечных электростанций на сутки вперед с помощью машинного обучения. Сравниваем два метода - Random Forest и LSTM За последнее десятилетие доля солнечной генерации в балансе российской энергосистемы многократно возросла. Развитие и рост солнечной генерации помимо всех плюсов и преимуществ «чистой» энергетики привнесли в работу энергосистемы ряд дополнительных особенностей. Одним из вопросов, проявившихся в процессе роста объема солнечной энергетики, стала проблема учета почасового объема солнечной генерации при планировании баланса производства и потребления электроэнергии на одни и несколько суток вперед.  Возникает вопрос, можно ли предсказать выработку одной солнечной электростанции или группы СЭС в конкретный час конкретных суток в будущем, и если можно, то с какой точностью. Решать эту задачу будем с применением методов машинного обучения, используя архив данных с метеоусловиями и фактической выработкой электростанций при данных метеоусловиях. В качестве объекта для прогнозирования возьмем группу из нескольких электростанций, расположенных на территории Оренбургской области. Так нам поможет эффект масштаба — прогнозирование по группе объектов почти всегда точнее, чем по каждому объекту в отдельности.  Стоит сразу сказать, что высокой точности прогнозирования ждать не стоит. Этому есть ряд причин: Уровень генерации СЭС определяется погодными факторами, такими как облачность, осадки, температура воздуха, сила ветра, время восхода и захода солнца. А еще, календарной датой, ведь в разное время года угол солнца над горизонтом разный. Специалисты, занимающиеся прогнозированием погоды, например, на сутки вперед, делают прогноз с некоторым усреднением по времени. т. е. прогнозируют усредненную температуру, на утро, день и вечер. И даже если прогноз точен, т. е. точны усредненные значения, то от часу к часу температура может значительно меняться, что скажется на точности нашего прогнозирования. То же самое — и с остальными погодными факторами. Наш прогноз будет основан будет основан на прогнозных метеофакторах, которые сами по себе не являются точными на 100%. т. е. на ошибку нашего прогноза будет накладываться ошибка прогноза погоды.  Кроме того, мы располагаем данными о погоде в одной точке — г. Оренбург, и предполагаем, что погода по всей территории области примерно одинаковая, что тоже является допущением со своей погрешностью.  Теперь, определим, какую величину конкретно мы будем прогнозировать и как определять качество прогноза.  Что касается определяемой величины, казалось, бы ответ очевиден — почасовую выработку группы СЭС на конкретную дату. Но все немного сложнее. Дело в том, что располагаемая мощность станций (т. е. теоретически возможный максимум) в каждые сутки разный. И тому есть две причины.  Во‑первых, время от времени имеют место ремонты оборудования самих станций и/или сетевого оборудования, с помощью которого электроэнергия выдается в сеть. Такие ремонты снижают потенциальную выработку отдельных станций. Ремонты эти плановые, их сроки заранее известны.  Во‑вторых, для обучения нами взяты данные за длительный период, в течение которого сам состав электростанций менялся — вводились новые объекты генерации. Поэтому, более правильно прогнозировать не абсолютную величину выработки, а долю, которую составит фактическая генерация от заранее известной располагаемой мощности. Теперь определим, как мы будем оценивать точность прогнозирования. Погрешность прогнозирования обычно оценивают как разность прогноза и факта по отношению к факту, но в нашем случае такой метод будет работать плохо и вот почему. Допустим, сделав прогноз на произвольную дату, мы получим следующий результат: В околонулевых значениях (в часах 6 и 19) даже незначительное отклонение факта от плана может составлять десятки и сотни процентов. И тогда усредненное за 24 часа относительное отклонение будет сильно искажено. Поэтому для оценки качества прогнозирования в каждом часе лучше использовать абсолютное отклонение, отнесенное к фиксированной величине, например, к максимуму фактической выработки в конкретных сутках — так мы нормируем отклонение в каждом часе по отношению к максимуму генерации. Таким образом, ошибка прогнозирования в конкретном часе будет вычисляться по формуле: В качестве критерия точности возьмем усредненную за сутки ошибку прогнозирования MAPE.   В нашем распоряжении 3 дата‑сета, которые мы будем использовать для обучения моделей.  Данные о максимальной располагаемой мощности солнечных станций на сутки вперед за период с 01.09.2022 по 03.03.2023.   Данные о фактической почасовой выработке группы СЭС. Данные о фактической погоде в г. Оренбург. Здесь нужно обратить внимание на то, что данные о погоде — не почасовые, как в первых двух таблицах, а собраны через каждые три часа. Рассчитать данные в недостающих часах можно линейной аппроксимацией значений. Затем, после обработки дубликатов, пропусков и артефактов соединяем все три таблицы и получаем итоговый датасет, который и будем использовать для обучения модели: В данной работе мы рассмотрим два метода построения модели машинного обучения – методику, основанную на линейной регрессии и алгоритм прогнозирования временных рядов LSTM. В нашей задаче мы имеем датасет из 10 050 наблюдений, в котором целевая переменная - load_rate (доля фактической загрузки станций от располагаемого максимума) и 10 переменных, по которым определяется load_rate: Температура Уровень облачности Уровень осадков Номер месяца Номер часа rainfall_type_Слабый дождь (индикативная переменная: 1-есть, 0-нет) rainfall_type_Слабый снег (индикативная переменная: 1-есть, 0-нет) rainfall_type_Умеренный дождь (индикативная переменная: 1-есть, 0-нет) rainfall_type_ Умеренный снег (индикативная переменная: 1-есть, 0-нет) rainfall_type_б/о (индикативная переменная: 1-есть, 0-нет) Имеющиеся наблюдения разделяем на обучающую и тестовую выборки в пропорции 80/20. При помощи алгоритма Random Forest Regressor из библиотеки SkLearn строим модель и оцениваем результат.  Для примера построим график прогноза выработки группы СЭС на конкретную дату 27.02.2023 и сравним ее с фактической генерацией. В дальнейшем мы посмотрим, как работает наша модель на новых, незнакомых данных на протяжении 42 дней, оценим точность предсказаний и сравним с результатами работы модели, работающей на основе другого алгоритма. Модель сети LSTM расшифровывается как “сети с долговременной краткосрочной памятью” (Long Short Term Memory). Это особый вид нейронных сетей, которые обычно способны различать долгосрочные зависимости. Принципиальное отличие от других методов (в частности, от описанного выше) заключается в том, что в данном случае значение целевой переменной рассчитывается не только на основании влияющих факторов, но и на основании истории изменения значений целевой переменной за определенный период в прошлом. Т.е. модель “ловит“ микро- и макро-тренды и учитывает их при расчете прогноза.  В нашей задаче попробуем предсказать суточную кривую нагрузки группы СЭС (24 точки) на основании данных за предшествующие 5 суток (120 часов). Для начала, как и в предыдущем методе, разделим имеющиеся у нас данные на обучающую и тестовую выборки. Размер обучающей выборки установим 8000 наблюдений. Для реализации данного алгоритма разобьём 8000 наблюдений (каждое наблюдение соответствует 1 часу) на обучающие группы. Каждая группа состоит из обучающего вектора размерности (12011 – 120 наблюдений 11 влияющих факторов) и целевого вектор размерности (241 – прогноз на сутки).  Полученные 7880 наборов становятся данными для обучения модели, каждый из которых на графике выглядит следующим образом. Обучаем модель, используя библиотеку TensorFlow. Для примера построим график прогноза выработки группы СЭС на конкретную дату 22.02.2023 и сравним ее с фактической генерацией. Среднее относительное отклонение для данных суток составило 16 %. Теперь протестируем работу двух алгоритмов прогнозирования на достаточно продолжительном временном периоде. Для этого возьмем статистику рабы группы СЭС и погодные данные за 42 дня, с 23.05.2023 по 06.06.2023. Для каждого дня рассчитаем прогнозный график работы группы СЭС, сравним с фактической генерации и для каждых суток рассчитаем среднее относительное отклонение MAPE. По результатам тестирования двух моделей видно, что средняя относительная ошибка прогнозирования для метода Random Forest оказалась меньше, чем для модели LSTM(11,3% против 15%), то есть прогнозирование методом Random Forest точнее. Поскольку, как видно на рисунке выше, в точности прогнозирования имеются редкие спорадические выбросы, правильнее ориентироваться не на среднее, а на медиану. Поэтому, примем, что в результате нашего исследования мы получили точность прогноза 10,5%. Более совершенный и сложный метод LSTM не обеспечил более точного результата. Причина этому кроется, вероятнее всего, в особенностях конкретных данных. Как было сказано выше, данный метод работает хорошо при прогнозировании непрерывной во времени изменяющейся величины, где каждое последующее значение зависит от предшествующих, где есть повторяющиеся тренды на коротких и длинных периодах.  В нашей задаче рассматривается величина генерации солнечных станций, которая такими свойствами не обладает. Как было сказано выше, определяющий фактор здесь — освещенность, а она может носить абсолютно непредсказуемый характер — условно, если 2 или 3 предыдущих дня были солнечными, вовсе не означает, что следующий день будет солнечным. В данном случае при прогнозировании правильнее опираться на прогнозные метеоданные, чем на статистику последних дней.  Полученная величина MAРE равная 10,5% — достаточно велика. Причины такой высокой погрешности вероятнее всего в том, что прогноз строится не на основании точных и безусловных данных, а на прогнозных метеофакторах, которые, как известно, тоже весьма неточны. Тем не менее, данное исследование показало, что нагрузку солнечных станций можно прогнозировать с определенной точностью, вероятно, достаточной для практического применения.  Благодарю пользователя OLZ1, автора статьи «Прогнозирование временных рядов с помощью рекуррентных нейронных сетей» за подробное описание метода, который я использовал в своем проекте.  data analyst