Урок 2: Тренды

В этом учебнике мы научимся использовать компонент Trend для моделирования трендов временного ряда.

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

import pandas as pd
from neuralprophet import NeuralProphet, set_log_level

# Отключение сообщений журнала, кроме случаев ошибок
set_log_level("ERROR")

# Загрузка набора данных из CSV-файла с помощью pandas
df = pd.read_csv("https://github.com/ourownstory/neuralprophet-data/raw/main/kaggle-energy/datasets/tutorial01.csv")

В NeuralProphet по умолчанию включены компоненты Тренд и Сезонность. В этом втором уроке мы подробнее рассмотрим компонент Тренд и начнем с его самой базовой конфигурации. Поэтому мы сейчас отключим компонент Сезонность и установим количество точек изменения Тренда на 0 (ноль).

# Модель и прогнозирование
m = NeuralProphet(
    # Отключение изменения точек изменения тренда
    n_changepoints=0,
    # Отключение сезонных компонентов
    yearly_seasonality=False,
    weekly_seasonality=False,
    daily_seasonality=False,
)
m.set_plotting_backend("plotly-static")
metrics = m.fit(df)
forecast = m.predict(df)
m.plot(forecast)

В графике уже присутствует линейная линия тренда, которая хорошо соответствует данным.

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

m.plot_components(forecast, components=["trend"])

NeuralProphet использует классический подход для моделирования тренда, комбинируя начальное значение m и скорость роста k. Влияние тренда в момент времени t1 определяется умножением скорости роста k на разницу времени t1 - t0 с начальной точки t0 плюс начальное значение m.

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

df_future = m.make_future_dataframe(df, periods=365, n_historic_predictions=True)

# Прогнозирование будущих значений
forecast = m.predict(df_future)

# Визуализация прогноза
m.plot(forecast)

Линейный тренд продолжается в будущем. В целом, наблюдается небольшой восходящий тренд в данных.

После изучения основ тенденций в NeuralProphet, давайте рассмотрим точки изменения тренда, которые мы ранее отключили. Точки изменения тренда — это моменты времени, когда тренд меняется. NeuralProphet автоматически обнаруживает эти точки изменения и подстраивает новую линию тренда к данным до и после точки изменения. Давайте посмотрим, сколько точек изменения тренда обнаружил NeuralProphet.

# Модель и прогнозирование
m = NeuralProphet(
    # Использование количества точек изменения тренда по умолчанию (10)
    # n_changepoints=0,
    # Отключение сезонных компонентов
    yearly_seasonality=False,
    weekly_seasonality=False,
    daily_seasonality=False,
)
m.set_plotting_backend("matplotlib")  # Использование matplotlib из-за #1235
metrics = m.fit(df)
forecast = m.predict(df)
m.plot(forecast)
m.plot_parameters(components=["trend"])

Теперь трендовая линия значительно лучше соответствует данным. Мы видим, что NeuralProphet использовал значение параметра по умолчанию в 10 точек изменений и адаптировал их под наши данные.

Last updated