Вопрос или проблема
У меня есть данные о температуре за несколько лет, которые часто снимаются каждые ~20 минут, но также есть и пропуски, которые могут составлять много дней, хотя чаще – час или два. Я подумал использовать Prophet и попросить его интерполировать недостающие данные.
Результат выше. Он распознает ежедневную сезонность, но не пытается соответствовать ежедневным колебаниям. Это с
model = Prophet(daily_seasonality=False)
model.add_seasonality(name="daily", period=1, fourier_order=20) # Добавить настраиваемую ежедневную сезонность
Есть ли какие-то другие параметры, которые я мог бы настроить для получения лучшего соответствия с существующими данными?
Спасибо,
Мне удалось одновременно убрать тренд из временного ряда и интерполировать недостающие данные, предполагая периодическую функцию F(t), определяемую 16 сплайновыми точками на протяжении всего одного дня, а затем минимизируя L2-разность против A(t)*F(t-T(t))+B(t), где A(t), T(t) и B(t) были сплайнами с узлами в полночь и полдень каждого дня. Я использовал scipy PchipInterpolator
, а не традиционные кубические сплайны.
Так что я предполагаю, что этот функционал похож на то, что минимизирует Prophet [хотя он использует фурье-термины для F(t)], но у меня больше гибкости в определении тренда. Или наоборот, я вовсе не предполагаю тренд в A(t), B(t).
Ответ или решение
Применение модели Prophet для интерполяции разреженных временных рядов, таких как данные о температуре с пропусками, требует глубинного понимания как особенностей самой модели, так и особенностей анализируемых данных. Ниже представлены стратегии и рекомендации, которые могут помочь улучшить результаты интерполяции с помощью Prophet, учитывая предложенную вами информацию.
1. Оптимизация параметров сезонности
Согласно вашему коду, вы отключили автоматическую обработку дневной сезонности, добавив свою собственную. Задача с интерполяцией данных предполагает, что модель должна учитывать не только общую сезонность, но и внутридневные колебания. Параметр fourier_order
можно увеличить для улучшения степени приближения к сложным паттернам. Также стоит поэкспериментировать с параметрами seasonality_mode
, чтобы выбрать между «additive» и «multiplicative» моделями в зависимости от того, как ваши данные ведут себя.
2. Использование дополнительных регрессоров
Иногда сезонные изменения могут быть дополнительно объяснены другими факторами (например, временем года или ПО). Добавьте регрессоры, которые могли бы улучшить интерполяцию. Это могут быть, например, праздники или указатели на значимые события, которые также могут влиять на температуру.
3. Обработка пропусков
На вход модели необходимо подавать только полные данные. Для этого можно предварительно заполнить пропуски с использованием других методов интерполяции (например, линейной или кубической интерполяции), что может помочь в создании более полного ряда данных, который затем может быть использован для обучения Prophet с учетом уже существующих значений.
4. Улучшение качества данных
Очистите данные от выбросов. Детальная проверка и очистка на начальном этапе помогут значительным образом сократить количество ошибок в интерполяции.
5. Гибкость в определении тренда
Ваш подход с использованием сплайнов для определения трендов может дать модели возможность более эффективно выявлять локальные колебания, которые Prophet может не учитывать. Рассмотрите возможность создания нескольких регулярных трендов с впоследствии их комбинированием.
6. Повышение частоты данных
Сохранение накопленных данных в более высоком разрешении может также послужить улучшению модели. Наполните данные интерполяцией между дискретными временными координатами, что сделает временные ряды более гладкими и повышает качество интерполяции.
7. Анализ и тестирование модели
После внесения всех улучшений необходимо протестировать хорошесть подгонки, используя такие метрики, как MAE (средняя абсолютная ошибка) или RMSE (корень квадратной средней ошибки). Наблюдение за целостностью оценок предсказаний при разнообразных подходах поможет выявить наилучшие параметры и стратегии для вашей конкретной задачи.
Заключение
Стратегии интерполяции временных рядов с помощью Prophet включают в себя оптимизацию параметров, улучшение качества данных, а также детальную проверку потенциальных трендов и сезонностей. Используйте гибкие методы и регрессоры для максимизации точности ваших предсказаний. Это позволит вам не только успешно интерполировать пропущенные данные, но и глубже понять сезонные колебания температуры, способствующие более точным предсказаниям в будущем.