Почему моя модель Prophet выдает всплеск прогнозов на будущие периоды?

Вопрос или проблема

Я использую модель Prophet для прогнозирования временных рядов с целью предсказания ежемесячных расходов. Однако я заметил проблему, при которой мои прогнозы показывают неожиданные всплески в будущих значениях. Вот краткий обзор моего процесса:

  1. Данные: У меня есть набор данных временных рядов с ежемесячными расходами за несколько лет. Данные предварительно обработаны с помощью расширенных функций, таких как лаговые переменные (lag_1 до lag_6), скользящие средние (ma_6, ma_3) и скользящие стандартные отклонения.
  2. Сезонность: Я динамически анализировал сезонность с помощью seasonal_decompose и добавил сезонные компоненты для годовых и квартальных паттернов.
  3. Моделирование: Я подогнал модель Prophet с динамической конфигурацией сезонности на основе анализа сезонности. Модель обучена с регрессорами, такими как tahun, bulan, quarter, ma_6 и лаговые функции.
  4. Прогнозирование: После обучения я прогнозирую будущие значения (на 42 месяца вперед), динамически обновляя лаги на каждой итерации.

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

Вот упрощенная версия моего цикла прогнозирования для будущих периодов:

# Цикл прогнозирования на будущее
for i in range(future_periods):
    future_input = {
        'ds': lags['ds'],
        'tahun': lags['ds'].year,
        'bulan': lags['ds'].month,
        'quarter': lags['ds'].quarter,
        'ma_6': lags['ma_6'],
        'ma_3': lags['ma_3'],
        'rolling_std': lags['rolling_std']
    }
    for lag in range(1, 7):
        future_input[f'lag_{lag}'] = lags[f'lag_{lag}']
    future_df = pd.DataFrame([future_input])
    
    # Прогноз Prophet
    prophet_forecast = prophet_model.predict(future_df)
    final_prediction = max(prophet_forecast['yhat'].values[0], 0)
    predictions.append(final_prediction)
    
    # Обновление лагов
    lags['ds'] = forecast_dates[i + 1] if i + 1 < future_periods else lags['ds']
    for j in range(6, 1, -1):
        lags[f'lag_{j}'] = lags[f'lag_{j-1}']
    lags['lag_1'] = final_prediction
    lags['ma_6'] = np.mean([lags[f'lag_{k}'] for k in range(1, 7)])
    lags['ma_3'] = np.mean([lags[f'lag_{k}'] for k in range(1, 4)])
    lags['rolling_std'] = np.std([lags[f'lag_{k}'] for k in range(1, 7)])

Наблюдения:

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

Что я пробовал:

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

Вопросы:

  1. Почему модель показывает такие всплески в будущих прогнозах, особенно после определенного момента?
  2. Как я могу настроить модель или шаги предварительной обработки, чтобы сгладить всплески и получить более стабильные прогнозы?
  3. Может ли динамическое обновление значений лагов привести к нестабильности модели, и если да, то как я могу решить эту проблему?

Ответ или решение

Почему модель Prophet выводит пики в прогнозах на будущее?

Проблема и ее контекст

Ваши наблюдения о неожиданных пиках в прогнозах временных рядов, особенно в более поздних периодах, представляют собой распространенную ситуацию при использовании модели Prophet. Эти пики могут возникать из-за различных факторов, связанных как с самим моделированием, так и с обработкой данных. Давайте подробно рассмотрим возможные причины и рекомендации для их устранения.

Причины возникновения пиков

  1. Чувствительность к последним данным: Модель Prophet может быть довольно чувствительной к изменчивости последних наблюдений в данных. Если в последние месяцы были резкие изменения или аномалии (например, высокая волатильность в ваших расходах), это может привести к резким колебаниям в прогнозах, так как модель пытается "дополнить" эти изменения в будущем.

  2. Параметры модели: Числовые параметры, такие как "changepoint prior scale" и "seasonality prior scale", управляют тем, насколько модель восприимчива к изменениям. Если они установлены слишком высоко, модель будет генерировать резкие изменения даже из небольших колебаний в данных.

  3. Динамическое обновление лагов: Ваш подход к обновлению значений лагов может создавать дополнительную шумность. Резкое изменение последнего наблюдения (через лаги или скользящие средние) может иметь непропорционально сильное влияние на последующие прогнозы.

Рекомендации по улучшению прогнозов

  1. Сглаживание данных: Рассмотрите возможность применения более агрессивного сглаживания данных перед их подачей в модель. Это может снизить влияние краткосрочных колебаний. Например, использование экспоненциального сглаживания или дополнительных методов фильтрации может помочь.

  2. Настройка параметров модели: Поскольку вы уже пытались настраивать параметры модели, стоит сделать это снова, проведя серию экспериментов с меньшими значениями для "changepoint prior scale" и "seasonality prior scale". Это позволит модели быть менее чувствительной к изменениям в данных.

  3. Устранение динамического обновления лагов: Вместо динамического обновления значений лагов, попробуйте использовать фиксированные значения или менее чувствительные инструменты. Это позволит избежать резких изменений в будущих прогнозах, что может снизить вероятность появления пиков.

  4. Анализ отстающих показателей и дополнительных переменных: Если возможно, попробуйте исследовать влияние внешних факторов (например, экономических показателей или сезонных трендов) и добавьте их в модель. Это может помочь модели лучше захватывать более широкие тренды, а не сосредотачиваться на резких изменениях.

  5. Проверка на аномалии: Периодически проверяйте данные на наличие аномальных значений. Вы можете использовать методы обнаружения аномалий для анализируемой последовательности и исключить или скорректировать такие значения.

Заключение

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

Оцените материал
Добавить комментарий

Капча загружается...