Вопрос или проблема
Я долго искал ответ на свой вопрос, но ничего не нашел. Поэтому надеюсь, вы сможете помочь.
Я ищу возможность добавить регрессор в свою модель Prophet в Python. Я знаю метод ‘model.add_regressor’, но он не решает мою проблему. Потому что я добавлю данные, которые я не знаю в будущем, а именно только в прошлом, в качестве регрессора. Я хочу предсказать 6 временных шагов (ежемесячные данные, то есть на 6 месяцев вперед).
Так что, знает ли кто-нибудь, как это решить?
Возможно, ваш регрессор предназначен для одного временного шага назад. Например, если вы прогнозируете завтрашнюю цену акции, тогда регрессор, например объем рынка, может быть взят с сегодня.
Другой вариант – построить отдельную модель, которая оценивает регрессор на следующий день, а затем использовать это в Prophet. Имейте в виду, что ваш регрессор тогда станет несовершенным, так как он представляет собой оценку, а не истинное значение. В зависимости от вашего варианта использования, это может быть либо проблемой, либо нет.
Ответ или решение
Чтобы добавить регрессор в модель Facebook Prophet, используя данные из прошлого, вам необходимо учитывать несколько важных моментов. Посмотрим на алгоритмы, которые могут помочь вам предсказать значения на 6 временных отсчетов вперёд (то есть на 6 месяцев), используя информацию о регрессорах только за прошлые временные промежутки.
1. Основы работы с регрессорами в Prophet
Facebook Prophet – это инструмент для прогнозирования временных рядов, который позволяет настраивать модель с использованием регрессоров. Метод add_regressor
позволяет добавить дополнительную информацию (регрессоры) к модели, что может значительно улучшить точность прогноза. Однако, как вы уже заметили, возникла проблема с использованием данных, которые известны только в прошлом.
2. Обработка регрессоров для будущих предсказаний
Если ваши регрессоры доступны только для исторических данных, это может вызвать затруднения при прогнозировании. Стандартный подход в Prophet предполагает, что регрессор должен быть доступен и для будущих временных интервалов, поскольку модель использует эти данные для генерации прогнозов. Ваша ситуация требует другого подхода:
-
Использование исторических данных для создания дополнительных признаков: Вы можете использовать исторические данные для расчета дополнительных признаков (например, средних значений, скользящих средних и т.д.), которые могут дать пророческие сигналы о будущем.
-
Определение регрессора как временного сдвига: Если ваш регрессор относится к предыдущим временным интервалам (например, значение за предыдущий месяц), вы можете создать новый столбец в вашем наборе данных, который будет содержать это значение для соответствующего временного шага.
3. Простейший пример
Допустим, у вас есть временной ряд с данными о продажах и дополнительный регрессор – реклама. Вам нужно заранее подготовить данные для модели.
import pandas as pd
from fbprophet import Prophet
# Загружаем данные
df = pd.read_csv('your_data.csv')
# Преобразуйте даты в формат datetime
df['ds'] = pd.to_datetime(df['date'])
# Создаем новые столбцы для статических регрессоров на основе исторических данных
df['regressor'] = df['advertising'] # предполагается, что рекламные расходы известны в прошлом
# Инициализация модели Prophet
model = Prophet()
model.add_regressor('regressor')
# Обучение модели
model.fit(df)
# Создаем dataframe для прогнозов
future = model.make_future_dataframe(periods=6, freq='M')
# Обратите внимание, что здесь вам нужно будет добавить значения ваших регрессоров для будущего
# Вам нужно запланировать их значения, например, используя скользящее среднее или метод экстраполяции.
# Прогнозирование
forecast = model.predict(future)
# Показать результаты
model.plot(forecast)
4. Альтернативные методы
Если стратегия добавления регрессоров не даст хороших результатов, вы можете рассмотреть возможность создания отдельной модели для оценки будущих значений ваших регрессоров. Это можно сделать с использованием временных рядов, и результаты прогноза могут быть использованы как входные данные для вашей модели Prophet.
Заключение
Работа с регрессорами в Prophet с использованием исключительно исторических данных требует некоторой подготовки и дополнительных шагов, но это возможно. Применяйте методы предварительной обработки данных и экстраполяции, чтобы восполнить недостаток информации о будущих значениях регрессоров. Такой подход может позволить улучшить точность ваших прогнозов на основе временных рядов.