Как я могу выполнять «итерационные» одношаговые прогнозы, обновляя свой набор данных фактическими значениями, используя циклы в R - PullRequest
0 голосов
/ 19 июня 2020

Я работаю со следующими наборами данных, содержащими почасовые данные о ценах за 1 год:

  • Обучение (данные с 00:00 01.01.2014 до 23:00 31.12.2014)
  • Тест (данные с 00:00 01.01.2015 по 23:00 31.12.2015)

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

Для начала я хочу использовать метод snaive (Seasonal Naive) из пакета forecast в R, чтобы установить эталон. .

Поскольку определение моей проблемы - прогнозирование цен на сутки вперед, я хочу выполнять прогнозы в следующей последовательности:

  1. Обучите модель на всем наборе обучающих данных (содержащих почасовые информация о ценах с 00:00 01.01.2014 до 23:00 31.12.2014)
  2. Используйте модель для одношагового прогноза на следующие 24 часа (т.е. цены на 2015-01 -01 00: 00-23: 00)
  3. Сохранение прогнозов в матрице Predictions
  4. Обновите обучающий набор, включив в него 24 фактические почасовые значения цен 2015-01-01 00: 00-23: 00
  5. Переобучить модель на этом новом наборе обучающих данных (на этот раз с почасовой информацией о ценах с 00:00 01.01.2014 до 01.01.2015 23 : 00)
  6. Используйте новую модель для выполнения одноэтапного прогноза на следующие 24 часа (т. Е. цены на 02.01.2015 00: 00-23: 00)
  7. Сохранение прогнозов в матрице Predictions
  8. [...]
  9. Повторяйте вышеуказанное до тех пор, пока все прогнозы до 2015-12-31 00: 00-23: 00 не будут завершены и сохранены в матрице Predictions

  10. Измерьте точность прогноза по сравнению с данными испытаний .

Я предполагаю, что в этом случае будет работать a for l oop, однако я с треском проваливаю попытки получить рабочий l oop, который выполняет желаемую последовательность операции.

Любая помощь в создании рабочего l oop будет принята с благодарностью!

Последующий вопрос будет заключаться в том, является ли al oop наиболее эффективным способом достижения моих желаемых результатов. результаты?

Спасибо! BalysLTU

РЕДАКТИРОВАТЬ: Я поделился наборами данных в папке Google Диска здесь .

То, что я пытаюсь сделать, будет примерно таким:

# Reading/cleaning data #

df.elspot.prices.2014 <- as.data.frame(
  read_excel(paste0(dirDataPrices, "elspot-prices_2014_hourly_eur.xlsx"), skip = 2)
)
df.elspot.prices.2015 <- as.data.frame(
  read_excel(paste0(dirDataPrices, "elspot-prices_2015_hourly_eur.xlsx"), skip = 2)

# Training models and updating datasets #

df.elspot.prices.test <- rbind(df.elspot.prices.2014, df.elspot.prices.2015[0,])
msts.elspot.prices.test <- msts(df.elspot.prices.test$Price, seasonal.periods = c(24, 168), ts.frequency = 8760, start = 2014) 
df.elspot.predictions.2015  <- as.data.frame(meanf(msts.elspot.prices.test, h = 24)$mean)

df.elspot.prices.test <- rbind(df.elspot.prices.2014, df.elspot.prices.2015[1:24,])
msts.elspot.prices.test <- msts(df.elspot.prices.test$Price, seasonal.periods = c(24, 168), ts.frequency = 8760, start = 2014) 
df.elspot.predictions.2015  <- as.data.frame(meanf(msts.elspot.prices.test, h = 24)$mean)

df.elspot.prices.test <- rbind(df.elspot.prices.2014, df.elspot.prices.2015[1:48,])
msts.elspot.prices.test <- msts(df.elspot.prices.test$Price, seasonal.periods = c(24, 168), ts.frequency = 8760, start = 2014) 
df.elspot.predictions.2015  <- as.data.frame(meanf(msts.elspot.prices.test, h = 24)$mean)

...

df.elspot.prices.test <- rbind(df.elspot.prices.2014, df.elspot.prices.2015[1:87636,])
msts.elspot.prices.test <- msts(df.elspot.prices.test$Price, seasonal.periods = c(24, 168), ts.frequency = 8760, start = 2014) 
df.elspot.predictions.2015  <- as.data.frame(meanf(msts.elspot.prices.test, h = 24)$mean)
...