Použití tidymodels navrženého modelu pro nové, neoznačené údaje

0

Otázka

Byl jsem čtení článků a dokumentace, prohlížení videa z youtube, atd a nemohu najít proces použít tidymodels workflow pro on-průběžně.

Například, https://tune.tidymodels.org/reference/last_fit.html předepisuje "dalším krokem by mělo být, aby se vešly použití celé trénovací množiny a ověření výkonnosti pomocí testovací data."

Chci naladit model s školení/zkoušek, údaje o vytvoření last_fit, a pak aplikovat na data, pro které je výkon nemůže být ověřeny, protože není označené/nemá výsledek.

V mém konkrétním případě jsem vytvořil klasifikaci modelu předpovědět, zda konkrétní výrobek předplatné bude chrlit nebo obnovit. V předstihu, řekněme, 30 dnů, chci vytvořit predikci pro dané předplatné je výsledek (nebo pro všechny odběry, které vyprší v příštích 30 dnech).

Pokud můžu říct, rsample neobsahuje způsob, jak rozdělit data tímto způsobem, nebo ještě bych to udělal. Cítím, že musí být něco chybí jednoduché, ale mohu jen najít příklady, kdy lidé používají zcela označené data.

1

Nejlepší odpověď

0

Můžete si přesnou finální vybavené model/workflow z výsledku last_fit() pomocí extract_fit_parsnip() a extract_workflow() resp.

library(tidymodels)

set.seed(6735)
tr_te_split <- initial_split(mtcars)

rec_spec <- recipe(mpg ~ ., data = training(tr_te_split)) %>%
  step_normalize(all_predictors())

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

wf_spec <-
 workflow() %>%
 add_recipe(rec_spec) %>%
 add_model(lin_mod)

wf_res <- last_fit(wf_spec, split = tr_te_split)

final_wf <- wf_res %>%
  extract_workflow()
final_wf
#> ══ Workflow [trained] ══════════════════════════════════════════════════════════
#> Preprocessor: Recipe
#> Model: linear_reg()
#> 
#> ── Preprocessor ────────────────────────────────────────────────────────────────
#> 1 Recipe Step
#> 
#> • step_normalize()
#> 
#> ── Model ───────────────────────────────────────────────────────────────────────
#> 
#> Call:
#> stats::lm(formula = ..y ~ ., data = data)
#> 
#> Coefficients:
#> (Intercept)          cyl         disp           hp         drat           wt  
#>   19.387500    -1.167165    -1.311400    -0.005379     0.237784    -0.602792  
#>        qsec           vs           am         gear         carb  
#>    0.262839     0.758393     2.791441    -0.516713    -1.773907

Pak simulovat neznačený dat, jsme vytvořit některé náhodné auta. Všimněte si, že tato data nemá proměnná odezvy mpg.

random_cars <- mtcars %>%
  select(-mpg) %>%
  map_dfc(sample)

random_cars
#> # A tibble: 32 × 10
#>      cyl  disp    hp  drat    wt  qsec    vs    am  gear  carb
#>    <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#>  1     8  79     205  3.07  2.46  18.6     0     0     3     4
#>  2     8 460     180  3.77  2.77  18.0     1     0     4     1
#>  3     8  95.1   175  3     3.22  18.9     0     1     4     4
#>  4     8 145     123  4.93  3.44  14.6     1     1     4     1
#>  5     8 360      52  4.11  3.44  20.0     1     1     4     3
#>  6     4 276.    230  4.08  2.78  14.5     0     0     4     4
#>  7     6 472      95  3.9   3.44  19.5     0     0     4     2
#>  8     6  78.7   215  2.76  3.15  17.3     0     1     3     4
#>  9     8 225     113  3.92  1.62  18.5     1     0     5     1
#> 10     8 160     175  3.7   2.62  17.4     1     0     3     2
#> # … with 22 more rows

Nyní můžeme předpovědět na tento pracovní postup s predict()

predict(final_wf, random_cars)
#> # A tibble: 32 × 1
#>    .pred
#>    <dbl>
#>  1  17.4
#>  2  17.4
#>  3  21.9
#>  4  26.2
#>  5  22.2
#>  6  16.9
#>  7  15.9
#>  8  23.8
#>  9  20.1
#> 10  20.2
#> # … with 22 more rows
2021-11-23 01:03:43

Díky, extract_workflow() a dělat, že konečné wf, bylo to, co jsem potřeboval a nenašel. Nyní problém mám, je, že některé z transformací z receptu, který jsem použil na rozdělení dat je třeba udělat na moje předpověď set. Pro jednoduchost, můžete se zaměřit na jednom: já používám step_dummy(all_nominal_predictors()). Jak mohu použít to, aby moje nová data? Zkoušel jsem dělat kopii receptu, uplatnění na mé nové údaje, a pak workflow z toho ale objekt vytváří není workflow a nemůžu se přidal do final_wf
Chris Umphlett

Předzpracování kroky v receptu, bude provedena automaticky při predict() workflow
EmilHvitfeldt

Zkoušel jsem to předtím a jsem stále varovná zpráva pro "novou úrovní" v sub_id, které by neměly být použit jako prediktor, protože jsem to v mém receptu: update_role(sub_id, renewal_decision_date, next_renewal_decision_date, new_role = "ID"). Tak jsem byl za předpokladu, že recept nebyl stále aplikován.
Chris Umphlett

V jiných jazycích

Tato stránka je v jiných jazycích

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................