Выбор гиперпараметров

NeuralProphet включает в себя ряд гиперпараметров, которые пользователь должен задать самостоятельно. Если они не указаны, будут использоваться значения гиперпараметров по умолчанию. Подробности обо всех гиперпараметрах класса NeuralProphet смотрите в документации API файла forecaster.py

Горизонт прогноза

n_forecasts is the size of the forecast horizon. The default value of 1 means that the model forecasts one step into the future.

Авторегрессия

n_lags определяет, активирована ли AR-Net (если n_lags > 0) или нет. Обычно рекомендуется задавать значение n_lags больше, чем n_forecasts, если это возможно, поскольку желательно, чтобы полносвязные нейронные сети (FFNNs) анализировали хотя бы n_forecasts длину прошлого для прогнозирования на n_forecasts вперед. Таким образом, n_lags определяет, насколько далеко в прошлое должны учитываться авторегрессивные зависимости. Это может быть значение, выбранное на основе либо доменных знаний, либо эмпирического анализа.

Параметры, связанные с обучением модели

NeuralProphet настраивается с использованием стохастического градиентного спуска, а точнее, с оптимизатором AdamW и политикой One-Cycle. Если параметр learning_rate не указан, проводится тест диапазона скорости обучения для определения оптимальной скорости обучения. Параметры epochs, loss_func и optimizer напрямую влияют на процесс обучения модели. Если они не заданы, epochs и loss_func автоматически устанавливаются исходя из размера датасета таким образом, чтобы контролировать общее количество шагов обучения в районе от 1000 до 4000. NeuralProphet позволяет выбрать один из двух различных значений для optimizer: AdamW и SDG (стохастический градиентный спуск).

Если вы заметили, что модель переобучается на тренировочных данных (здесь может пригодиться график изменения потерь в реальном времени), вы можете уменьшить epochs и learning_rate, а также увеличить batch_size. Если происходит недообучение, количество epochs и learning_rate можно увеличить, а batch_size уменьшить.

Функцией потерь по умолчанию является SmoothL1Loss, которая считается устойчивой к выбросам. Однако вы можете выбрать стандартное MSE или любую другую функцию потерь PyTorch torch.nn.modules.loss

Увеличение глубины модели

ar_layers определяет количество скрытых слоев и их размеры для AR-Net в общей модели. Это массив, где каждый элемент является размером соответствующего скрытого слоя. По умолчанию это пустой массив, что означает, что AR-Net будет иметь только один конечный слой размера n_forecasts. Добавление дополнительных слоев приводит к увеличению сложности и, соответственно, к увеличению времени вычислений. Однако добавление дополнительных скрытых слоев может помочь построить более сложные взаимосвязи. Для сбалансирования между вычислительной сложностью и улучшенной точностью рекомендуется установить ar_layers как массив с 1-2 элементами. Тем не менее, в большинстве случаев достаточно хорошая производительность может быть достигнута без скрытых слоев вообще.

lagged_reg_layers определяет количество скрытых слоев и их размеры для FFNN (Feedforward Neural Network, прямая нейронная сеть) с лаговыми регрессорами в общей модели. Это массив, где каждый элемент является размером соответствующего скрытого слоя. Значение по умолчанию — пустой массив, что означает, что FFNN с лаговыми регрессорами будет иметь только один конечный слой размером n_forecasts. Добавление дополнительных слоев приводит к увеличению сложности и, соответственно, к увеличению времени вычислений. Однако добавление скрытых слоев может помочь построить более сложные взаимосвязи, что особенно полезно для лаговых регрессоров. Чтобы найти компромисс между вычислительной сложностью и улучшенной точностью, рекомендуется устанавливать lagged_reg_layers как массив с 1-2 элементами. Тем не менее, в большинстве случаев достаточно хорошее качество работы можно достичь и без скрытых слоев.

Обратите внимание, что предыдущие аргументы num_hidden_layers и d_hidden теперь устарели. Конфигурация архитектуры ar_net и covar_net теперь задается через ar_layers и lagged_reg_layers. Если настройка производится вручную, рекомендуется устанавливать значения между n_lags и n_forecasts для размеров скрытых слоев. Также важно отметить, что с текущей реализацией NeuralProphet позволяет указывать разные размеры для скрытых слоев в ar_net и covar

Параметры, связанные с предварительной обработкой данных

normalize_y связан с масштабированием временных рядов перед моделированием. По умолчанию NeuralProphet использует (мягкую) нормализацию по минимуму и максимуму временных рядов. Нормализация может помочь процессу обучения модели, если значения в рядах сильно колеблются. Однако, если ряд не требует такого масштабирования, пользователи могут отключить это или выбрать другой метод нормализации.

impute_missing используется для восстановления пропущенных значений в предоставленном ряде данных. Аналогично Prophet, NeuralProphet также может работать с пропущенными значениями, когда находится в режиме регрессии без AR-Net. Однако, когда необходимо учесть автокорреляцию, восстановление пропущенных значений становится обязательным, поскольку в этом случае моделирование превращается в упорядоченную задачу. Оставление этого параметра по умолчанию в большинстве случаев позволяет идеально справиться с задачей.

Функция collect_metrics используется для выбора названий метрик, которые следует вычислить. По умолчанию она установлена в значение True и вычисляет mae (средняя абсолютная ошибка) и rmse (корень из среднеквадратичной ошибки).

Параметры, связанные с трендом

Пример на практике можно найти в example_notebooks/trend_peyton_manning.ipynb

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

Параметр changepoints_range контролирует диапазон тренировочных данных, используемых для настройки тренда. Значение по умолчанию 0.8 означает, что изменения не устанавливаются в последних 20 процентах тренировочных данных.

Если предоставлен список changepoints, параметры n_changepoints и changepoints_range игнорируются. Вместо этого этот список используется для указания дат, когда разрешается изменять скорость тренда.

n_changepoints — это количество точек изменения, выбранных вдоль ряда для анализа тренда. Значение по умолчанию для этого параметра — 10.

Параметры, связанные с сезонностью

Сезонность

Параметры yearly_seasonality, weekly_seasonality и daily_seasonality относятся к компонентам сезонности, которые должны быть смоделированы. Например, при использовании данных о температуре можно выбрать дневную и годовую сезонность. Использование данных о количестве пассажиров, пользующихся метро, скорее всего, покажет недельную сезонность. Установка этих сезонностей в режим по умолчанию auto позволяет NeuralProphet решить, какие из них включить, в зависимости от объема доступных данных. Например, годовая сезонность не будет учитываться, если данных меньше чем за два года. Точно так же, недельная сезонность не будет учитываться, если данных меньше чем за две недели и т. д. Тем не менее, если пользователь уверен, что в ряде отсутствует годовая, недельная или дневная сезонность, и таким образом модель не должна искажаться такими компонентами, он может явно отключить их, установив соответствующие компоненты в False. Кроме того, параметры yearly_seasonality, weekly_seasonality и daily_seasonality также могут быть установлены в число терминов Фурье для соответствующих сезонностей. Значения по умолчанию составляют 6 для годовой, 4 для недельной и 6 для дневной. Пользователи могут установить любое число, которое они хотят. Если число терминов составляет 6 для годовой сезонности, это эффективно делает общее количество терминов Фурье для годовой сезонности 12 (6*2), чтобы вместить как синусные, так и косинусные термины. Увеличение числа терминов Фурье может сделать модель способной улавливать довольно сложные сезонные закономерности. Однако, подобно ar_layers, это также приводит к увеличению сложности модели. Пользователи могут получить некоторое представление об оптимальном числе терминов Фурье, изучив финальные графики компонентов. Режим сезонности по умолчанию является аддитивным. Это означает, что в ряде не ожидается гетероскедастичности в отношении сезонности. Однако, если ряд содержит явную дисперсию, при которой сезонные колебания становятся больше пропорционально тренду, seasonality_mode можно установить в мультипликативный.

Параметры, связанные с регуляризацией

В NeuralProphet также содержится ряд параметров регуляризации для контроля над коэффициентами модели и введения разреженности в модель. Это также помогает избежать переобучения модели на обучающих данных. Для seasonality_reg небольшие значения в диапазоне 0.1-1 позволяют учитывать большие сезонные колебания, в то время как большие значения в диапазоне 1-100 накладывают большее наказание на Фурье коэффициенты и, таким образом, снижают сезонность. Для ar_sparsity ожидаются значения в диапазоне от 0 до 1, где 0 вызывает полную разреженность, а 1 не накладывает вообще никакой регуляризации. ar_sparsity вместе с n_lags может быть использован для исследования данных и выбора функций. Благодаря масштабируемости AR-Net, можно использовать большее количество лагов и использовать разреженность для выявления важности прошлых временных шагов для точности прогноза. Для future_regressor_regularization, event_regularization и country_holiday_regularization, значения могут быть установлены между 0 и 1 по той же концепции, что и в ar_sparsity. Вы можете устанавливать различные параметры регуляризации для отдельных регрессоров и событий в зависимости от того, какие из них необходимо больше подавлять.

Last updated