Урок 8: Неопределенность

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

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

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")

# Модель и прогнозирование
m = NeuralProphet()
m.set_plotting_backend("plotly-static")
metrics = m.fit(df)
forecast = m.predict(df)
m.plot(forecast)

В отличие от точечного прогнозирования, моделирование неопределенности предсказывает интервал возможных значений для прогноза. Предполагая, что мы хотим, чтобы истинное значение находилось в пределах оценочного интервала с вероятностью 90%, мы устанавливаем уровень доверия равным 0.9. Мы определяем два квантиля, 0.05 и 0.95, которые соответствуют 5-му и 95-му процентилям распределения прогноза. Таким образом, 90% доверительный интервал представляет собой разницу между 5-м и 95-м процентилями.

confidence_level = 0.9

boundaries = round((1 - confidence_level) / 2, 2)
# NeuralProphet принимает только значения квантилей от 0 до 1
quantiles = [boundaries, confidence_level + boundaries]

Настройте модель с неопределенностью, используя 10-й и 90-й процентили.

# Создание модели NeuralProphet с списком квантилей
m = NeuralProphet(quantiles=quantiles)
m.set_plotting_backend("plotly-static")

metrics = m.fit(df)
forecast = m.predict(df)
m.plot(forecast)

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

# оценка неопределенности на калибровочном наборе данных
train_df, cal_df = m.split_df(df, valid_p=0.1)
method = "naive"  # или "cqr" для более сложного метода, см. учебное пособие по неопределенности
conformal_forecast = m.conformal_predict(train_df, cal_df, alpha=0.1, method=method)
m.highlight_nth_step_ahead_of_each_forecast(1).plot(conformal_forecast)

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

Last updated