Прогнозирование временных рядов с ежедневными значениями

Я делаю прогноз с помощью auto.Arima с одномерными данными, но мой прогноз неверен. Я использовал все шаги правильно, но значение прогноза точки не соответствует действительности. Помогите пожалуйста мне.

Вот мои данные:

s <- read.csv(url('https://ondemand.websol.barchart.com/getHistory.csv?apikey=c3122f072488a29c5279680b9a2cf88e&symbol=zs*1&type=dailyNearest&backAdjust=false&startDate=20100201'))

Вот мой код:

data <- s[c(3, 7)]
summary(data)
data1.ts <- zoo(data[,2], seq(from = as.Date("2010-02-01"), to = as.Date("2022-05-13"), by = 1))
autoplot(data1.ts)

Арима Модель:

fit_arima <- auto.arima(data1.ts, stepwise = FALSE, approximation = FALSE, trace = TRUE)
print(summary(fit_arima)) 
checkresiduals(fit_arima)


forecast_Arima <- forecast(fit_arima, h = 1)
forecast_Arima

Прогнозное значение:

      Point Forecast   Lo 80    Hi 80   Lo 95    Hi 95
19126       976.4357 949.874 1002.997 935.813 1017.058

Небольшое обновление:

Я попытался загрузить данные как объект ts и получил точное значение прогноза Point, но мой год прогноза неверен. Прогнозирование на один шаг вперед дает мне ценность на 2021 год, но моя дата окончания — 13 мая 2022 года. Я просто хочу исправить год. Это новый код:

ts_soy <- ts(data[,2], start = c(2010-02-01), frequency = 214)
autoplot(ts_soy)

fit_arima <- auto.arima(ts_soy) 
print(summary(fit_arima)) 
checkresiduals(fit_arima)

forecast_Arima <- forecast(fit_arima, h = 1)
forecast_Arima


      Point Forecast    Lo 80    Hi 80    Lo 95    Hi 95
2021.472         1646.5 1625.071 1667.929 1613.727 1679.273

Почему ваш прогноз неверен? Можете ли вы опубликовать ожидаемый результат?

Rui Barradas 15.05.2022 11:50
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
1
47
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

Вы можете сделать что-то вроде создания временного ряда, начиная с самой ранней даты и до этой даты + количество записей - 1

data.ts <- zoo(data[,2], seq(from = as.Date("2010-02-01"), 
                             to = as.Date("2010-02-01") + 3096, 
                             by = 1))

fit_ar <- forecast::auto.arima(data.ts, stepwise = FALSE, approximation = FALSE)

forecast::forecast(fit_ar, h = 1)

      Point Forecast    Lo 80    Hi 80    Lo 95    Hi 95
17738       1648.129 1626.759 1669.499 1615.446 1680.812

Это одна из причин, по которой я предпочитаю использовать басню: я могу лучше проверять данные.

library(fpp3)
library(fable.prophet)

fit <- data %>% 
  mutate(id = row_number()) %>% # create index to use otherwise timeseries has gaps
  tsibble(index = id) %>%
  model(naive = NAIVE(close),
        arima = ARIMA(close, stepwise = FALSE, approximation = FALSE),
        )

forecast(fit, h = 1)
# A fable: 2 x 4 [1]
# Key:     .model [2]
  .model    id        close .mean
  <chr>  <dbl>       <dist> <dbl>
1 naive   3098 N(1646, 280) 1646.
2 arima   3098 N(1649, 278) 1649.

# prophet needs dates and can handle weekends
prophet_fit <- data %>% 
  mutate(tradingDay = ymd(tradingDay)) %>%
  tsibble() %>%
  model(prophet_model = prophet(close))

 
forecast(prophet_fit, h = 1)
# A fable: 1 x 4 [1D]
# Key:     .model [1]
  .model        tradingDay        close .mean
  <chr>         <date>           <dist> <dbl>
1 prophet_model 2022-05-14 sample[5000] 1657.

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

M. Talha Bin Asif 15.05.2022 12:27

@M.TalhaBinAsif, ваша частота отключена. Это может работать в течение 1 года, но не весь набор. Вам лучше прогнозировать на основе идентификатора, а затем назначать ему дату, например. совмещая его с календарем.

phiver 15.05.2022 12:30

только еще одна вещь. Как я могу проверить сводку, диагностические меры и остаточный график для модели пророка! @фивер.

M. Talha Bin Asif 15.05.2022 18:40

@M.TalhaBinAsif, подробности в Прогнозирование: принципы и практика, 3-е издание. например график остатков: augment(prophet_fit) %>% ggplot(aes(x = .fitted, y = .resid)) + geom_point() + labs(x = "Fitted", y = "Residuals")

phiver 16.05.2022 09:26

Спасибо большое, дорогой. Очень ценю это, плюс ссылка была очень полезной. Я собираюсь скачать всю эту книгу и выучить ее до мозга костей :). @фивер

M. Talha Bin Asif 16.05.2022 11:30

Другие вопросы по теме