В данной статье я расскажу о нескольких полезных способах улучшения качества предсказаний модели Facebook Prophet. В этой статье я не буду уделять внимание таким подходам, как denoising или различным трансформациям (например, box-cox), а сконцентрируюсь на двух методах, которые позволят получить лучшее качество, не внося изменения в данные.
На Хабре уже есть подробные обзоры о Prophet (ссылка), поэтому мы ограничимся кратким введением. Prophet — это аддитивная линейная модель (GAM) для прогнозирования временных рядов, которая объединяет несколько компонентов для выявления различных закономерностей в данных (тренд, сезонность, праздники и т.д.). Даже спустя несколько лет после релиза Prophet остается одним из лучших решений для одномерного прогнозирования (univariate forecasting).
Одной из ключевых особенностей Prophet является то, что он генерирует не только прогнозы, но и признаки как для тренировочных, так и для тестовых данных. Поэтому возникает идея: «Почему бы не использовать эти данные в какой‑нибудь другой модели?». Это похоже на стекинг, где результаты первой модели улучшаются мета-моделью. Такой подход достаточно хорошо известен и иногда используется, например, в Microsoft Azure ML.
Продолжение этого подхода — обучение нескольких Prophet'ов с использованием данных, агрегированных на разных временных шкалах. Например, если у нас есть данные с ежедневной частотой, они могут быть сильно зашумленными, что затрудняет выявление более общих паттернов (недельных или месячных). Чтобы преодолеть эту проблему, можно агрегировать исходные данные на более высоком временном уровне, используя сумму, среднее или медиану, а затем обучить отдельные модели Prophet на этих данных. Таким образом можно сгенерировать дополнительные признаки для обучения мета-модели.