Создание долгосрочных прогнозов, включая предсказание и временную агрегацию (вор)

Я только начал использовать {fable} и {tidyverts} семейство инструментов, и пока все идет неплохо.

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

Для ежедневных данных я планирую использовать prophet + covariates, для более высоких агрегатов (от месяца к году) экспоненциальное сглаживание кажется подходящим.

Хотя мне интересно, кажется ли этот подход в целом многообещающим, я не совсем уверен, как структурировать проблему прогноза, используя {thief} для получения вероятностных прогнозов.

PS: Я нашел этот полезный пост для почасовых данных, но у меня возникают проблемы с его реализацией для ежедневных данных (например, создание значимых агрегатов и объединение прогнозов): https://stats.stackexchange.com/questions


person stats-hb    schedule 10.12.2020    source источник


Ответы (1)


Для составления вероятностных прогнозов с использованием {thief} вам нужно преобразовать басню в объект {forecast} стиля forecast. Базовая минимальная структура объекта forecast (и то, как его можно создать из раздачи fable, которую можно получить для prophet через {fable.prophet}):

library(forecast)
library(distributional)
dist <- dist_normal(1:10)

structure(
  list(
    # A time series of the forecast means
    mean = ts(mean(dist)),
    # A matrix time series of the forecast interval's upper bound
    upper = ts(cbind("80%" = quantile(dist, 0.90), "95%" = quantile(dist, 0.975))),
    # A matrix time series of the forecast interval's lower bound
    lower = ts(cbind("80%" = quantile(dist, 0.10), "95%" = quantile(dist, 0.025))),
    # A vector containing forecast interval levels in order of appearance
    level = c(80, 95)
  ),
  class = "forecast"
)
#>    Point Forecast      Lo 80     Hi 80       Lo 95     Hi 95
#>  1              1 -0.2815516  2.281552 -0.95996398  2.959964
#>  2              2  0.7184484  3.281552  0.04003602  3.959964
#>  3              3  1.7184484  4.281552  1.04003602  4.959964
#>  4              4  2.7184484  5.281552  2.04003602  5.959964
#>  5              5  3.7184484  6.281552  3.04003602  6.959964
#>  6              6  4.7184484  7.281552  4.04003602  7.959964
#>  7              7  5.7184484  8.281552  5.04003602  8.959964
#>  8              8  6.7184484  9.281552  6.04003602  9.959964
#>  9              9  7.7184484 10.281552  7.04003602 10.959964
#> 10             10  8.7184484 11.281552  8.04003602 11.959964

Создано 10 декабря 2020 г. пакетом REPEX (v0.3.0)

Затем вы можете использовать эти структуры прогноза с thief::reconcilethief() для их согласования.

Тем не менее, временное (и кросс-темпоральное) согласование в настоящее время разрабатывается для {fable}. Соответствующая проблема разработки находится здесь: https://github.com/tidyverts/fabletools/issues/59 Есть некоторые сложности с согласованием ежедневных или субдневных временных иерархий с месячными и годовыми иерархиями, которые еще не реализованы, но прототип в настоящее время хорошо работает для ›ежемесячных нижних уровней. Эта недавняя презентация на ISF2020 представляет временное согласование с {fable}: https://www.youtube.com/watch?v=6D7rNHZ5E-Q&t=1120

Стоит отметить, что интервалы из {thief} - это просто сумма интервалов из более высоких временных частот. Эти интервалы не являются оптимальными и поэтому будут отличаться от оптимальных распределений вероятностного прогноза, которые будут даны {fable}.

person Mitchell O'Hara-Wild    schedule 10.12.2020
comment
Это превосходно, и я очень рад попробовать. В основном из любопытства, каковы дополнительные сложности с еженедельными / дневными / субдневными данными? Моя наивная первая мысль заключалась в том, что распределение во временной иерархии будет достаточно четким? (или все дело в других возможных типах сезонности?) - person stats-hb; 10.12.2020
comment
Типичное построение матриц суммирования, используемых при временной согласовании, определяет, как более высокочастотные интервалы (1 месяц, 1 квартал и т. Д.) Вкладываются в наибольший частотный интервал (1 год). Это легко для ежемесячных и квартальных агрегатов, так как все размещается точно. Недели не совпадают с годами, поэтому агрегирование от года к году меняется. Способ агрегирования ежедневных данных в годовые (и, следовательно, суб-суточные) также варьируется из-за високосных лет, поэтому матрица суммирования для дней в годы меняется в зависимости от года. - person Mitchell O'Hara-Wild; 11.12.2020