Model de adaptare dinamică augmentată (ADAM) pentru datele sezoniere zilnice

URMĂREȘTE-NE
16,065FaniÎmi place
1,142CititoriConectați-vă

(Acest articol a fost publicat pentru prima dată pe DateAgeeekși a contribuit cu drag la R-Bloggers). (Puteți raporta problema despre conținutul de pe această pagină aici)


Doriți să vă împărtășiți conținutul pe R-Bloggers? Faceți clic aici dacă aveți un blog sau aici dacă nu.

Am modelat indicele Bist 100 pentru a construi intervale predictive. Deoarece datele au sezonalitatea zilnică, am preferat ModelTime :: Adam_reg funcţie.

Nu am folosit TIMETK :: Step_Timeseries_Signature Funcționează deoarece modelul nu poate prelucra prea mulți regresori exteriori, iar algoritmul surprinde bine tendința și sezonalitatea prin natură. Deci nu am preprocesat datele pentru a le păstra simplu.

library(tidyverse)
library(tidyquant)
library(tidymodels)
library(timetk)
library(modeltime)

#BIST 100
df_bist <- 
  tq_get("XU100.IS") %>% 
  select(date, close)


#Splitting the Data 
splits <- 
  time_series_split(
    df_bist,
    assess     = "1 month",
    cumulative = TRUE
  )

df_train <- training(splits)
df_test <- testing(splits)


#Seasonality Diagnostic
arima_reg() %>% 
  set_engine("auto_arima") %>% 
  fit(close ~ date, df_train)


#Model
mod_adam <- 
  adam_reg() %>% 
  set_engine("auto_adam")

#Fitting
mod_fit <- 
  mod_adam %>% 
  fit(formula = close ~ date, data = df_train)

#Calibrate the model to the testing set
calibration_tbl <- 
  mod_fit %>%
  modeltime_calibrate(new_data = df_test)


#Accuracy of the finalized model
calibration_tbl %>%
  modeltime_accuracy(metric_set = metric_set(rmse, rsq, mape))



#Prediction Intervals
calibration_tbl %>% 
  modeltime_forecast(new_data = df_test, 
                     actual_data = df_test) %>%
  plot_modeltime_forecast(.interactive = FALSE,
                          .legend_show = FALSE,
                          .line_size = 1.5,
                          .color_lab = "",
                          .title = "BIST 100") +
  labs(subtitle = "Predictive Intervals of the Augmented Dynamic Adaptive Model") + 
  scale_y_continuous(labels = scales::label_currency(prefix = "₺", 
                                                     suffix = "")) +
  scale_x_date(labels = scales::label_date("%b %d"),
               date_breaks = "4 days") +
  theme_minimal(base_family = "Roboto Slab", base_size = 16) +
  theme(plot.subtitle = ggtext::element_markdown(face = "bold", size = 14),
        plot.title = element_text(face = "bold"),
        plot.background = element_rect(fill = "azure", color = "azure"),
        panel.background = element_rect(fill = "snow", color = "snow"),
        axis.text = element_text(face = "bold"),
        axis.text.x = element_text(angle = 45, 
                                   hjust = 1, 
                                   vjust = 1),
        legend.position = "none")

Dominic Botezariu
Dominic Botezariuhttps://www.noobz.ro/
Creator de site și redactor-șef.

Cele mai noi știri

Pe același subiect

LĂSAȚI UN MESAJ

Vă rugăm să introduceți comentariul dvs.!
Introduceți aici numele dvs.