business-science / modeltime.resample

Resampling Tools for Time Series Forecasting with Modeltime
https://business-science.github.io/modeltime.resample/
Other
19 stars 5 forks source link

Resample Fails with Parnsip Fit Model that uses Inline Functions #7

Open mdancho84 opened 3 years ago

mdancho84 commented 3 years ago

Full Example: https://github.com/wtmoreland3/reprex/blob/3915d45d424135d8ca27c8c607ffc9da70aa89bf/modeltime_resample_error

Models that have inline functions fail. Example:

model_fit_lm <- linear_reg() %>%
    set_engine("lm") %>%
    fit(
        value ~ as.numeric(date) + month(date, label = TRUE), 
        data = training(splits)
    )

Causes this error:

## > model_tbl_tuned_resamples <- submodels_tbl %>%
## +     slice(c(5)) %>%
## +     modeltime_fit_resamples(
## +         resamples = resamples_tscv,
## +         control   = control_resamples(verbose = TRUE, allow_par = TRUE)
## +     )
## -- Fitting Resamples --------------------------------------------
## 
## * Model ID: 5 LM
## Error: No in-line functions should be used here; use steps to define baking actions.
## 0.03 sec elapsed
mdancho84 commented 3 years ago

Solution: Convert to a workflow with recipe()

Example:

mod_lm <- linear_reg() %>%
    set_engine("lm")

recipe_spec <- recipe(value ~ date, data = training(splits)) %>%
    step_mutate(
        date_num = as.numeric(date),
        date_mon = month(date, label = TRUE)
    ) %>%
    step_rm(date)

wflw_lm <- workflow() %>%
    add_model(mod_lm) %>%
    add_recipe(recipe_spec) %>%
    fit(training(splits))

This succeeds:

# > modeltime_table(wflw_lm) %>%
#     +     modeltime_fit_resamples(
#         +         resamples = resamples_tscv,
#         +         control   = control_resamples(verbose = TRUE, allow_par = TRUE)
#         +     )
# -- Fitting Resamples --------------------------------------------
#     
#     * Model ID: 1 LM
# i Slice1: preprocessor 1/1
# v Slice1: preprocessor 1/1
# i Slice1: preprocessor 1/1, model 1/1
# v Slice1: preprocessor 1/1, model 1/1
# i Slice1: preprocessor 1/1, model 1/1 (predictions)
# i Slice2: preprocessor 1/1
# v Slice2: preprocessor 1/1
# i Slice2: preprocessor 1/1, model 1/1
# v Slice2: preprocessor 1/1, model 1/1
# i Slice2: preprocessor 1/1, model 1/1 (predictions)
# i Slice3: preprocessor 1/1
# v Slice3: preprocessor 1/1
# i Slice3: preprocessor 1/1, model 1/1
# v Slice3: preprocessor 1/1, model 1/1
# i Slice3: preprocessor 1/1, model 1/1 (predictions)
# 1.37 sec elapsed
# 
# # Modeltime Table
# # A tibble: 1 x 4
# .model_id .model     .model_desc .resample_results
# <int> <list>     <chr>       <list>           
#     1         1 <workflow> LM          <rsmp[+]>