НАУКА ДАННЫХ, ВИЗУАЛИЗАЦИЯ ДАННЫХ

Как построить модель SARIMA на Python

Реальный пример с полным кодом.

В этом посте моя цель - дать краткое руководство о том, как реализовать модель SARIMA (сезонная авторегрессионная интегрированная скользящая средняя) для прогнозирования сезонных данных с использованием python в записной книжке Jupyter. Если вы хотите продолжить, загрузите данные и код из моей учетной записи GitHub.

Набор данных

По данным Управления энергетической информации США, эти данные отражают ежемесячное чистое производство электроэнергии из угля в стране. Цифры указаны в киловатт-часах.

Цель этого упражнения - построить модель SARIMA для прогнозирования значений до 2030 года.

Импорт зависимостей

Теперь приступим к созданию модели с импорта различных библиотек в блокнот Jupyter, которые упростят нашу работу, таких как NumPy, Pandas, Matplotlib, Sklearn, Itertools, Warnings и Statsmodels.

Загрузка данных

На первом этапе мы загрузим набор данных с помощью Pandas и проверим первые пять элементов таблицы, то есть заголовок набора данных.

Визуализация набора данных

Давайте визуализируем чистую выработку электроэнергии в период с 1973 по 2021 год. Код для создания этой визуализации выглядит следующим образом:

Проверка стационарности набора данных

Давайте воспользуемся расширенным тестом Дики-Фуллера, хорошо известным статистическим тестом, который может помочь определить, является ли временной ряд стационарным. Тест ADF - это разновидность теста единичного корня. Единичные корни являются причиной нестационарности, тест ADF проверит, присутствует ли единичный корень. Нулевая гипотеза утверждает, что существует единичный корень. Если значение P меньше заданного уровня значимости, мы отклоняем нулевую гипотезу о том, что временной ряд содержит единичный корень. Другими словами, отвергая гипотезу нулевого значения, мы можем сделать вывод, что временной ряд является стационарным.

ADF Statistic: -1.1428788781480856
p-value: 0.6976730759149153

Различие

Поскольку ряд не является стационарным, мы выполним дифференцирование значений электричества в первом порядке и снова проведем тест ADF для набора данных.

ADF Statistic: -6.082264335282732
p-value: 1.0850793453618744e-07

Визуализируйте различающиеся серии

Значение p теперь меньше 0,05, что означает, что мы можем отклонить нулевую гипотезу, т.е. временной ряд является стационарным. Затем давайте визуализируем разностный ряд.

Графики ACF и PACF

Теперь давайте используем Statsmodels library для построения графиков автокорреляции (ACF) и частичной автокорреляции из разностных рядов. ACF описывает, насколько хорошо текущая стоимость ряда связана с его прошлыми значениями, в то время как PACF находит корреляцию остатков со следующим значением запаздывания.

Модель SARIMA

После определения того, что наш временной ряд является стационарным, мы можем использовать модель SARIMA для прогнозирования будущих значений. Обозначение модели - задержка SARIMA (p, d, q) (P, D, Q). Эти три параметра учитывают сезонность, тенденцию и шум в данных. Мы будем использовать индикатор AIC (информационный критерий Акаике), который является оценкой относительного качества статистических моделей. Чем ниже значение AIC, тем лучше. После выполнения нескольких итераций модель предполагает, что SARIMAX (2, 1, 2) x (2, 1, 2, 12) со значением AIC 11413 является наилучшей комбинацией.

После того, как мы подогнали модель к данным, мы проверяем графики остатков, чтобы проверить достоверность подгонки модели. При хорошем методе прогнозирования в остатках остается минимум информации, если таковая имеется.

Коррелограмма в правом нижнем углу предполагает, что в остатках нет автокорреляции, и поэтому они фактически представляют собой белый шум. Следовательно, эти остатки некоррелированы, а среднее значение близко к нулю.

Модельный прогноз

На этапе прогноза мы попытаемся спрогнозировать данные о производстве электроэнергии на следующие 160 этапов или 10 лет. График ниже показывает хорошее соответствие по сравнению с историческими данными.

Проверка прогноза

Чтобы оценить производительность модели, мы вычисляем оценку R-квадрат и среднеквадратичную ошибку моего набора данных, чтобы проверить подлинность модели.

R в квадрате показывает, насколько хорошо модель соответствует заданному набору данных. Он указывает, насколько близка линия регрессии (т.е. нанесенные на график прогнозируемые значения) к фактическим значениям данных. Значение R в квадрате находится между 0 и 1, где 0 означает, что эта модель не соответствует заданным данным, а 1 означает, что модель идеально соответствует предоставленному набору данных.

Среднеквадратичная ошибка (RMSE) - это среднее расстояние между точкой данных от подобранной линии, измеренное вдоль вертикальной линии.

Заключение

Наша модель имеет точность 90,0%, что вполне прилично.

Значение RMSE 8056 можно напрямую интерпретировать в киловатт-часах, и оно не слишком велико.

Мы можем быть уверены в способности модели точно прогнозировать значения электроэнергии в будущем.

Спасибо за чтение.