Возобновляемая Энергия: Прогнозирование Солнечной Энергии
Обучение будет проводиться на 90% данных, оставляя последние 10% для оценки.
if "google.colab" in str(get_ipython()):
# Удаление предустановленных пакетов из Colab, чтобы избежать конфликтов
!pip uninstall -y torch notebook notebook_shim tensorflow tensorflow-datasets prophet torchaudio torchdata torchtext torchvision
#!pip install git+https://github.com/ourownstory/neural_prophet.git # может занять некоторое время
#!pip install neuralprophet # намного быстрее, но может не иметь последних обновлений/исправлений ошибок
import pandas as pd
import numpy as np
from neuralprophet import NeuralProphet, set_log_level
set_log_level("ERROR")data_location = "https://raw.githubusercontent.com/ourownstory/neuralprophet-data/main/datasets/"
# Загрузка данных о солнечной энергии в Сан-Франциско
sf_pv_df = pd.read_csv(data_location + "energy/SF_PV.csv")m = NeuralProphet(
yearly_seasonality=3, # Учитывать сезонность с периодом в 3 года
weekly_seasonality=False, # Игнорировать недельную сезонность
daily_seasonality=8, # Учитывать суточную сезонность с периодом в 8 единиц (часов?)
growth="off", # Отключить учет тренда (роста/падения)
learning_rate=0.1, # Скорость обучения модели (0.1 - типичное значение)
)
# Разделение данных на обучающую и тестовую выборки
df_train, df_test = m.split_df(sf_pv_df, freq="H", valid_p=0.10)
# Обучение модели с использованием обучающей выборки и валидации на тестовой
metrics = m.fit(df_train, freq="H", validation_df=df_test, progress="bar")
Общий прогноз: только функции, основанные на времени.
В этом первом разделе мы будем обучать модель только с функциями времени, как если бы мы делали это с Facebook Prophet.
С самого начала мы знаем, что интенсивность солнечного света зависит от времени суток и сезона в течение года. Кроме того, известно, что максимальная дневная интенсивность пропорциональна сезону. На данный момент ни Prophet, ни NeuralProphet не могут умножать две сезонности, поэтому пик будет слишком низким летом и может стать отрицательным зимой. Не идеально, но нормально для первой попытки.
108
131.362961
146.889999
0.013868
0.0
108
92.142319
118.028023
0.006694
0.0
Прогноз на 1 шаг вперед с авторегрессией
Во втором разделе мы будем обучать прогнозиста на один шаг опережать данные о солнечном излучении (которые могут служить показателем производства солнечной фотоэлектрической энергии). Мы можем обучить этого прогнозиста, учитывая предыдущие 24 шага и отключив тренд и сезонность.
Параметры, которые мы можем изменить, - это количество лагов и разреженность AR.
108
18.209431
30.536762
0.000599
0.0
108
30.15587
52.70145
0.001442
0.0
Разрежение коэффициентов AR
Установив ar_reg > 0, мы можем уменьшить количество ненулевых коэффициентов авторегрессии (AR).
108
17.369593
31.082371
0.00119
0.000569
108
30.580618
53.85133
0.002069
0.000569
Прогноз на 1 шаг вперед с авторегрессией, включая интеграцию
Далее мы добавим разности ряда как лаговую ковариату. Это позволяет расширить модель с AR до ARI, где I обозначает "интегрированный" временной ряд.
8757
2015-12-31 22:00:00
0
0
8758
2015-12-31 23:00:00
0
0
8759
2016-01-01 00:00:00
0
0
108
17.883141
30.405554
0.000594
0.0
108
29.873787
52.650181
0.001445
0.0
Прогноз на 1 шаг вперед с AR-Net: использование нейронной сети
Важно учесть следующее: если рассматривать нейронную сеть хотя бы с одним скрытым слоем, скорость обучения играет значительную роль при тренировке нейронной сети.
При достаточно высокой скорости обучения (вероятно, > 0.1) градиент, кажется, исчезает и заставляет выходные данные сети AR стремиться к нулю. Простой способ избежать этой проблемы - установить скорость обучения на достаточно низком уровне, вероятно, около 0.01 до 0.001.
108
14.277524
27.617516
0.00049
0.0
108
21.769081
41.479614
0.000905
0.0
Last updated