Recipe Spec Base
recipe_spec_base_ihsg <- recipe(value ~ ., data = train_data) %>%
step_timeseries_signature(date) %>%
step_rm(matches("(iso)|(xts)|(hour)|(minute)|(second)|(am.pm)")) %>%
step_normalize(matches("(index.num)|(year)|(yday)")) %>%
step_rm(c("date_month.lbl","date_wday.lbl"))
recipe_spec_base_ihsg %>% prep() %>% juice() %>% glimpse()
## Rows: 6,277
## Columns: 18
## $ date <date> 1990-04-06, 1990-04-09, 1990-04-10, 1990-04-11, 1990-0…
## $ value <dbl> 641.269, 633.482, 632.086, 634.693, 639.614, 640.014, 6…
## $ date_index.num <dbl> -1.729721, -1.728614, -1.728245, -1.727875, -1.727506, …
## $ date_year <dbl> -1.696131, -1.696131, -1.696131, -1.696131, -1.696131, …
## $ date_half <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1…
## $ date_quarter <int> 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2…
## $ date_month <int> 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5…
## $ date_day <int> 6, 9, 10, 11, 12, 16, 17, 18, 19, 20, 23, 24, 1, 2, 3, …
## $ date_wday <int> 6, 2, 3, 4, 5, 2, 3, 4, 5, 6, 2, 3, 3, 4, 5, 6, 2, 3, 4…
## $ date_mday <int> 6, 9, 10, 11, 12, 16, 17, 18, 19, 20, 23, 24, 1, 2, 3, …
## $ date_qday <int> 6, 9, 10, 11, 12, 16, 17, 18, 19, 20, 23, 24, 31, 32, 3…
## $ date_yday <dbl> -0.8469349, -0.8180303, -0.8083955, -0.7987606, -0.7891…
## $ date_mweek <int> 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 1, 1, 1, 1, 2, 2, 2…
## $ date_week <int> 14, 15, 15, 15, 15, 16, 16, 16, 16, 16, 17, 17, 18, 18,…
## $ date_week2 <int> 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1…
## $ date_week3 <int> 2, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 0, 0, 0, 0, 1, 1, 1…
## $ date_week4 <int> 2, 3, 3, 3, 3, 0, 0, 0, 0, 0, 1, 1, 2, 2, 2, 2, 3, 3, 3…
## $ date_mday7 <int> 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 1, 1, 1, 1, 2, 2, 2…
recipe_spec_base_ihsg %>% str()
## List of 7
## $ var_info : tibble [2 × 4] (S3: tbl_df/tbl/data.frame)
## ..$ variable: chr [1:2] "date" "value"
## ..$ type :List of 2
## .. ..$ : chr "date"
## .. ..$ : chr [1:2] "double" "numeric"
## ..$ role : chr [1:2] "predictor" "outcome"
## ..$ source : chr [1:2] "original" "original"
## $ term_info : tibble [2 × 4] (S3: tbl_df/tbl/data.frame)
## ..$ variable: chr [1:2] "date" "value"
## ..$ type :List of 2
## .. ..$ : chr "date"
## .. ..$ : chr [1:2] "double" "numeric"
## ..$ role : chr [1:2] "predictor" "outcome"
## ..$ source : chr [1:2] "original" "original"
## $ steps :List of 4
## ..$ :List of 6
## .. ..$ terms :List of 1
## .. .. ..$ : language ~date
## .. .. .. ..- attr(*, ".Environment")=<environment: 0x0000018aed966a90>
## .. .. ..- attr(*, "class")= chr [1:2] "quosures" "list"
## .. ..$ role : chr "predictor"
## .. ..$ trained: logi FALSE
## .. ..$ columns: NULL
## .. ..$ skip : logi FALSE
## .. ..$ id : chr "timeseries_signature_Bn4Hk"
## .. ..- attr(*, "class")= chr [1:2] "step_timeseries_signature" "step"
## ..$ :List of 6
## .. ..$ terms :List of 1
## .. .. ..$ : language ~matches("(iso)|(xts)|(hour)|(minute)|(second)|(am.pm)")
## .. .. .. ..- attr(*, ".Environment")=<environment: 0x0000018aed966b38>
## .. .. ..- attr(*, "class")= chr [1:2] "quosures" "list"
## .. ..$ role : logi NA
## .. ..$ trained : logi FALSE
## .. ..$ removals: NULL
## .. ..$ skip : logi FALSE
## .. ..$ id : chr "rm_GN9Od"
## .. ..- attr(*, "class")= chr [1:2] "step_rm" "step"
## ..$ :List of 9
## .. ..$ terms :List of 1
## .. .. ..$ : language ~matches("(index.num)|(year)|(yday)")
## .. .. .. ..- attr(*, ".Environment")=<environment: 0x0000018aed966be0>
## .. .. ..- attr(*, "class")= chr [1:2] "quosures" "list"
## .. ..$ role : logi NA
## .. ..$ trained : logi FALSE
## .. ..$ means : NULL
## .. ..$ sds : NULL
## .. ..$ na_rm : logi TRUE
## .. ..$ skip : logi FALSE
## .. ..$ id : chr "normalize_OsRgZ"
## .. ..$ case_weights: NULL
## .. ..- attr(*, "class")= chr [1:2] "step_normalize" "step"
## ..$ :List of 6
## .. ..$ terms :List of 1
## .. .. ..$ : language ~c("date_month.lbl", "date_wday.lbl")
## .. .. .. ..- attr(*, ".Environment")=<environment: 0x0000018aed966c88>
## .. .. ..- attr(*, "class")= chr [1:2] "quosures" "list"
## .. ..$ role : logi NA
## .. ..$ trained : logi FALSE
## .. ..$ removals: NULL
## .. ..$ skip : logi FALSE
## .. ..$ id : chr "rm_NFnHQ"
## .. ..- attr(*, "class")= chr [1:2] "step_rm" "step"
## $ template : tibble [6,277 × 2] (S3: tbl_df/tbl/data.frame)
## ..$ date : Date[1:6277], format: "1990-04-06" "1990-04-09" ...
## ..$ value: num [1:6277] 641 633 632 635 640 ...
## ..- attr(*, "na.action")= 'omit' Named int [1:315] 6 14 15 16 17 25 31 35 77 96 ...
## .. ..- attr(*, "names")= chr [1:315] "6" "14" "15" "16" ...
## $ levels : NULL
## $ retained : logi NA
## $ requirements:List of 1
## ..$ bake: Named logi(0)
## .. ..- attr(*, "names")= chr(0)
## - attr(*, "class")= chr "recipe"
# recipe_spec_base_ihsg %>% write_rds("recipe_spec_base_ihsg")
Recipe Spec Base Forecast
workflow() %>%
add_model(linear_reg(mode = "regression",
penalty = 0.01,
mixture = 0) %>%
set_engine("glmnet")) %>%
add_recipe(recipe_spec_base_ihsg %>%
step_mutate(date = as.numeric(date))) %>%
# fit(train_data) %>%
fit(training(splits)) %>%
# modeltime_calibrate(new_data = test_data) %>%
modeltime_calibrate(new_data = testing(splits)) %>%
# modeltime_forecast(h = "1 year", actual_data = ihsg_tbl) %>%
modeltime_forecast(new_data = testing(splits), actual_data = ihsg_tbl) %>%
plot_modeltime_forecast()
## Converting to Modeltime Table.
Recipe Spec IHSG
recipe_spec_ihsg <- recipe(value ~ ., data = train_data) %>%
step_timeseries_signature(date) %>%
step_rm(matches("(iso)|(xts)|(hour)|(minute)|(second)|(am.pm)")) %>%
step_normalize(matches("(index.num)|(year)|(yday)")) %>%
step_dummy(all_nominal(), one_hot = TRUE) %>%
step_interact(~ matches("week2") * matches("wday.lbl")) %>%
step_fourier(date, period = c(5, 20, 60, 200), K = 2)
recipe_spec_ihsg %>% prep() %>% juice() %>% glimpse()
## Rows: 6,277
## Columns: 60
## $ date <date> 1990-04-06, 1990-04-09, 1990-04-10, 1990…
## $ value <dbl> 641.269, 633.482, 632.086, 634.693, 639.6…
## $ date_index.num <dbl> -1.729721, -1.728614, -1.728245, -1.72787…
## $ date_year <dbl> -1.696131, -1.696131, -1.696131, -1.69613…
## $ date_half <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,…
## $ date_quarter <int> 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,…
## $ date_month <int> 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5,…
## $ date_day <int> 6, 9, 10, 11, 12, 16, 17, 18, 19, 20, 23,…
## $ date_wday <int> 6, 2, 3, 4, 5, 2, 3, 4, 5, 6, 2, 3, 3, 4,…
## $ date_mday <int> 6, 9, 10, 11, 12, 16, 17, 18, 19, 20, 23,…
## $ date_qday <int> 6, 9, 10, 11, 12, 16, 17, 18, 19, 20, 23,…
## $ date_yday <dbl> -0.8469349, -0.8180303, -0.8083955, -0.79…
## $ date_mweek <int> 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 1, 1,…
## $ date_week <int> 14, 15, 15, 15, 15, 16, 16, 16, 16, 16, 1…
## $ date_week2 <int> 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0,…
## $ date_week3 <int> 2, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 0, 0,…
## $ date_week4 <int> 2, 3, 3, 3, 3, 0, 0, 0, 0, 0, 1, 1, 2, 2,…
## $ date_mday7 <int> 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 1, 1,…
## $ date_month.lbl_01 <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ date_month.lbl_02 <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ date_month.lbl_03 <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ date_month.lbl_04 <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,…
## $ date_month.lbl_05 <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1,…
## $ date_month.lbl_06 <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ date_month.lbl_07 <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ date_month.lbl_08 <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ date_month.lbl_09 <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ date_month.lbl_10 <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ date_month.lbl_11 <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ date_month.lbl_12 <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ date_wday.lbl_1 <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ date_wday.lbl_2 <dbl> 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0,…
## $ date_wday.lbl_3 <dbl> 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0,…
## $ date_wday.lbl_4 <dbl> 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1,…
## $ date_wday.lbl_5 <dbl> 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0,…
## $ date_wday.lbl_6 <dbl> 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,…
## $ date_wday.lbl_7 <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ date_week2_x_date_wday.lbl_1 <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ date_week2_x_date_wday.lbl_2 <dbl> 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,…
## $ date_week2_x_date_wday.lbl_3 <dbl> 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,…
## $ date_week2_x_date_wday.lbl_4 <dbl> 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ date_week2_x_date_wday.lbl_5 <dbl> 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ date_week2_x_date_wday.lbl_6 <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ date_week2_x_date_wday.lbl_7 <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ date_sin5_K1 <dbl> -0.000000000000987761088, -0.587785252292…
## $ date_cos5_K1 <dbl> 1.000000, -0.809017, 0.309017, 1.000000, …
## $ date_sin5_K2 <dbl> -0.000000000001975522176, 0.9510565162950…
## $ date_cos5_K2 <dbl> 1.000000, 0.309017, -0.809017, 1.000000, …
## $ date_sin20_K1 <dbl> -0.00000000000024694027, 0.80901699437491…
## $ date_cos20_K1 <dbl> 1.0000000000000000000000, 0.5877852522925…
## $ date_sin20_K2 <dbl> -0.0000000000004938805441, 0.951056516295…
## $ date_cos20_K2 <dbl> 1.000000, -0.309017, -0.809017, -1.000000…
## $ date_sin60_K1 <dbl> 0.86602540378447978586, 0.669130606358928…
## $ date_cos60_K1 <dbl> -0.4999999999999287237, -0.74314482547733…
## $ date_sin60_K2 <dbl> -0.86602540378435632906, -0.9945218953682…
## $ date_cos60_K2 <dbl> -0.5000000, 0.1045285, 0.3090170, 0.50000…
## $ date_sin200_K1 <dbl> -0.00000000000000195666, 0.09410831331853…
## $ date_cos200_K1 <dbl> 1.0000000, 0.9955620, 0.9921147, 0.987688…
## $ date_sin200_K2 <dbl> -0.000000000000003913319, 0.1873813145857…
## $ date_cos200_K2 <dbl> 1.0000000000000000000, 0.9822872507286822…
# recipe_spec_ihsg %>% write_rds("recipe_spec_ihsg")
Recipe Spec IHSG Forecast
workflow() %>%
add_model(linear_reg(mode = "regression",
penalty = 0.01,
mixture = 0) %>%
set_engine("glmnet")) %>%
add_recipe(recipe_spec_ihsg %>%
step_mutate(date = as.numeric(date))) %>%
# fit(train_data) %>%
fit(training(splits)) %>%
# modeltime_calibrate(new_data = test_data) %>%
modeltime_calibrate(new_data = testing(splits)) %>%
# modeltime_forecast(h = "1 year", actual_data = ihsg_tbl) %>%
modeltime_forecast(new_data = testing(splits), actual_data = ihsg_tbl) %>%
plot_modeltime_forecast()
## Converting to Modeltime Table.