03:00
Introducciendo Tidymodels

¿Como ajustar un modelo linear en R?
¿De cuantas maneras sabes como ajustar este tipo de modelo?
03:00
lm para regresión linear
glm para regresión linear generalizada
glmnet para regresión regularizada
keras para regresión dentro de Tensorflow
stan para regresión bayensiana
spark para datos “grandes”

Corre el “chunk” arbol_espec en tu archivo .qmd.
Cambia el código para que utilize una regresión linear
El listado de modelos se encuentra aquí: https://www.tidymodels.org/find/parsnip/
Reto: Edita el código para usar otro tipo de modelo. Por ejemplo, trata de usar el árbol disponible dentro del paquete partykit, o trata un modelo de tipo diferente
05:00
\(log(\frac{p}{1 - p}) = \beta_0 + \beta_1\cdot \text{A}\)
El resultado es decidido usando una serie de decisiones basados en las variables predictivas
Primero, el arbol crece hasta que se llega a una decision
Después, el arbol es recortado para que no sea tan complejo
flowchart LR
dt[Datos]
pr[Predictores]
subgraph fl[Flujo del modelo]
pca[PCA]
ls[Menos cuadrados]
pca-->ls
end
dt-->fl
pr-->fl
ft[Modelo ajustado]
fl-->ft
style fl fill:#fff,stroke:#666,color:#000
flowchart LR
dt[Datos]
pr[Predictores]
pca[PCA]
subgraph fl[Flujo del modelo]
ls[Menos cuadrados]
end
pca-->fl
dt-->pca
pr-->pca
ft[Modelo ajustado]
fl-->ft
style fl fill:#fff,stroke:#666,color:#000
workflow()? workflow maneja nuevos niveles factoriales mejor que las herramientas regulares de Rworkflow encaja todo el processo de modelamiento, desde la creación (fit()) del modelo, hasta el uso del modelo (predict())arbol_espec <-
decision_tree(cost_complexity = 0.002) %>%
set_mode("classification")
arbol_espec %>%
fit(propina ~ ., data = taxi_entrenar)
#> parsnip model object
#>
#> n= 8000
#>
#> node), split, n, loss, yval, (yprob)
#> * denotes terminal node
#>
#> 1) root 8000 616 si (0.92300000 0.07700000)
#> 2) distancia>=14.12 2041 68 si (0.96668300 0.03331700) *
#> 3) distancia< 14.12 5959 548 si (0.90803826 0.09196174)
#> 6) distancia< 5.275 5419 450 si (0.91695885 0.08304115) *
#> 7) distancia>=5.275 540 98 si (0.81851852 0.18148148)
#> 14) compania=Chicago Independents,City Service,otra,Sun Taxi,Taxi Affiliation Services,Taxicab Insurance Agency Llc 478 68 si (0.85774059 0.14225941) *
#> 15) compania=Flash Cab 62 30 si (0.51612903 0.48387097)
#> 30) dia=Jue 12 2 si (0.83333333 0.16666667) *
#> 31) dia=Lun,Mar,Mie,Vie,Sab,Dom 50 22 no (0.44000000 0.56000000)
#> 62) distancia>=11.77 14 4 si (0.71428571 0.28571429) *
#> 63) distancia< 11.77 36 12 no (0.33333333 0.66666667) *arbol_espec <-
decision_tree(cost_complexity = 0.002) %>%
set_mode("classification")
workflow() %>%
add_formula(propina ~ .) %>%
add_model(arbol_espec) %>%
fit(data = taxi_entrenar)
#> ══ Workflow [trained] ════════════════════════════════════════════════
#> Preprocessor: Formula
#> Model: decision_tree()
#>
#> ── Preprocessor ──────────────────────────────────────────────────────
#> propina ~ .
#>
#> ── Model ─────────────────────────────────────────────────────────────
#> n= 8000
#>
#> node), split, n, loss, yval, (yprob)
#> * denotes terminal node
#>
#> 1) root 8000 616 si (0.92300000 0.07700000)
#> 2) distancia>=14.12 2041 68 si (0.96668300 0.03331700) *
#> 3) distancia< 14.12 5959 548 si (0.90803826 0.09196174)
#> 6) distancia< 5.275 5419 450 si (0.91695885 0.08304115) *
#> 7) distancia>=5.275 540 98 si (0.81851852 0.18148148)
#> 14) compania=Chicago Independents,City Service,otra,Sun Taxi,Taxi Affiliation Services,Taxicab Insurance Agency Llc 478 68 si (0.85774059 0.14225941) *
#> 15) compania=Flash Cab 62 30 si (0.51612903 0.48387097)
#> 30) dia=Jue 12 2 si (0.83333333 0.16666667) *
#> 31) dia=Lun,Mar,Mie,Vie,Sab,Dom 50 22 no (0.44000000 0.56000000)
#> 62) distancia>=11.77 14 4 si (0.71428571 0.28571429) *
#> 63) distancia< 11.77 36 12 no (0.33333333 0.66666667) *arbol_espec <-
decision_tree(cost_complexity = 0.002) %>%
set_mode("classification")
workflow(propina ~ ., arbol_espec) %>%
fit(data = taxi_entrenar)
#> ══ Workflow [trained] ════════════════════════════════════════════════
#> Preprocessor: Formula
#> Model: decision_tree()
#>
#> ── Preprocessor ──────────────────────────────────────────────────────
#> propina ~ .
#>
#> ── Model ─────────────────────────────────────────────────────────────
#> n= 8000
#>
#> node), split, n, loss, yval, (yprob)
#> * denotes terminal node
#>
#> 1) root 8000 616 si (0.92300000 0.07700000)
#> 2) distancia>=14.12 2041 68 si (0.96668300 0.03331700) *
#> 3) distancia< 14.12 5959 548 si (0.90803826 0.09196174)
#> 6) distancia< 5.275 5419 450 si (0.91695885 0.08304115) *
#> 7) distancia>=5.275 540 98 si (0.81851852 0.18148148)
#> 14) compania=Chicago Independents,City Service,otra,Sun Taxi,Taxi Affiliation Services,Taxicab Insurance Agency Llc 478 68 si (0.85774059 0.14225941) *
#> 15) compania=Flash Cab 62 30 si (0.51612903 0.48387097)
#> 30) dia=Jue 12 2 si (0.83333333 0.16666667) *
#> 31) dia=Lun,Mar,Mie,Vie,Sab,Dom 50 22 no (0.44000000 0.56000000)
#> 62) distancia>=11.77 14 4 si (0.71428571 0.28571429) *
#> 63) distancia< 11.77 36 12 no (0.33333333 0.66666667) *
Corre el “chunk” arbol_flujo en tu archivo .qmd.
Edita el codigo para crear un flujo con un modelo que tú elijas
Reto: ¿Que otros “preprocesadores”, aparte de formulas, podemos usar en workflow?
05:00
¿Como usar su nuevo modelo arbol_flujo?

Corre:
predict(arbol_flujo, new_data = taxi_prueba)
¿Que resultado te dio?
03:00

Corre:
augment(arbol_flujo, new_data = taxi_prueba)
¿Que resultado te dio?
03:00
new_data) y los resultados siempre var a ser el mismo¿Como podemos entender nuestro nuevo modelo arbol_flujo?
¿Como podemos entender nuestro nuevo modelo arbol_flujo?
Puedes extraer varios componentes de tu flujo usando las funciones que empiezan con extract_*()
⚠️ ¡Nunca trate de predecir usando los componentes extraídos!
¿Como podemos entender nuestro nuevo modelo arbol_flujo?
Puedes usar tu flujo ajustado para obtener explicaciones del modelo o de las predicciones:
Para aprender más: https://www.tmwr.org/explain.html

Extrae el “motor” del modelo de tu flujo y examínalo
05:00
flowchart LR ad[Todos\nlos datos] style ad fill:#fff,stroke:#666,color:#000 tr[Entrenamiento] style tr fill:#FBE9BF,stroke:#666,color:#000 ts[Prueba] style ts fill:#E5E7FD,stroke:#666,color:#000 ad --> tr ad --> ts rs[Remuestreo] style rs fill:#fff,stroke:#eee,color:#ddd tr --> dt lg[Regresión\nlogística] style lg fill:#fff,stroke:#eee,color:#ddd rs --> lg dt[Arbol de\nDecisión] style dt fill:#FDF4E3,stroke:#666,color:#000 rs --> dt rf[Bosque\nAleatorio] style rf fill:#fff,stroke:#eee,color:#ddd rs --> rf sm[Seleccionar\nmodelo] style sm fill:#fff,stroke:#eee,color:#ddd lg --> sm dt --> sm rf --> sm fm[Entrenar modelo\nselecionado] style fm fill:#fff,stroke:#eee,color:#ddd sm --> fm tr --> fm vm[Verificar la\ncalidad] style vm fill:#fff,stroke:#eee,color:#ddd fm --> vm ts --> vm