1 - Introduction

Advanced tidymodels

Welcome!

Wi-Fi network name

TODO-ADD-LATER

Wi-Fi password

TODO-ADD-LATER

Workshop policies

Who are you?

  • You can use the magrittr %>% or base R |> pipe

  • You are familiar with functions from dplyr, tidyr, ggplot2

  • You have exposure to basic statistical concepts

  • You do not need intermediate or expert familiarity with modeling or ML

  • You have used some tidymodels packages

  • You have some experience with evaluating statistical models using resampling techniques

Who are tidymodels?

  • Simon Couch
  • Hannah Frick
  • Emil Hvitfeldt
  • Max Kuhn

Many thanks to Davis Vaughan, Julia Silge, David Robinson, Julie Jung, Alison Hill, and Desirée De Leon for their role in creating these materials!

👀

Tentative plan for this workshop

  • Feature engineering with recipes
  • Model optimization by tuning
    • Grid search
    • Racing
    • Iterative methods
  • Extras (time permitting)
    • Effect encodings
    • A case study

Introduce yourself to your neighbors 👋



Log in to Posit Cloud (free): TODO-ADD-LATER

Let’s install some packages

If you are using your own laptop instead of RStudio Cloud:

# Install the packages for the workshop
pkgs <- 
  c("bonsai", "doParallel", "embed", "finetune", "lightgbm", "lme4",
    "plumber", "probably", "ranger", "rpart", "rpart.plot", "rules",
    "splines2", "stacks", "text2vec", "textrecipes", "tidymodels", 
    "vetiver", "remotes")

install.packages(pkgs)



Hotel Data

We’ll use data on hotels to predict the cost of a room.

The data are in the modeldata package. We’ll sample down the data and refactor some columns:

library(tidymodels)

# Max's usual settings: 
tidymodels_prefer()
theme_set(theme_bw())
options(
  pillar.advice = FALSE, 
  pillar.min_title_chars = Inf
)
data(hotel_rates)
set.seed(295)
hotel_rates <- 
  hotel_rates %>% 
  sample_n(5000) %>% 
  arrange(arrival_date) %>% 
  select(-arrival_date) %>% 
  mutate(
    company = factor(as.character(company)),
    country = factor(as.character(country)),
    agent = factor(as.character(agent))
  )

Hotel date columns

names(hotel_rates)
#>  [1] "avg_price_per_room"             "lead_time"                     
#>  [3] "stays_in_weekend_nights"        "stays_in_week_nights"          
#>  [5] "adults"                         "children"                      
#>  [7] "babies"                         "meal"                          
#>  [9] "country"                        "market_segment"                
#> [11] "distribution_channel"           "is_repeated_guest"             
#> [13] "previous_cancellations"         "previous_bookings_not_canceled"
#> [15] "reserved_room_type"             "assigned_room_type"            
#> [17] "booking_changes"                "agent"                         
#> [19] "company"                        "days_in_waiting_list"          
#> [21] "customer_type"                  "required_car_parking_spaces"   
#> [23] "total_of_special_requests"      "arrival_date_num"              
#> [25] "near_christmas"                 "near_new_years"                
#> [27] "historical_adr"

Data splitting strategy

Data Spending

Let’s split the data into a training set (75%) and testing set (25%) using stratification:

set.seed(4028)
hotel_split <- initial_split(hotel_rates, strata = avg_price_per_room)

hotel_train <- training(hotel_split)
hotel_test <- testing(hotel_split)

Your turn

Let’s take some time and investigate the training data. The outcome is avg_price_per_room.

Are there any interesting characteristics of the data?

10:00

Our versions

R version 4.3.3 (2024-02-29), Quarto (1.5.30)

package version
bonsai 0.2.1
broom 1.0.5
dials 1.2.1
doParallel 1.0.17
dplyr 1.1.4
embed 1.1.4
finetune 1.2.0
ggplot2 3.5.0
lightgbm 4.3.0
package version
lme4 1.1-35.3
modeldata 1.3.0
parsnip 1.2.1
plumber 1.2.2
probably 1.0.3
purrr 1.0.2
ranger 0.16.0
recipes 1.0.10
remotes 2.5.0
package version
rpart 4.1.23
rpart.plot 3.1.2
rsample 1.2.1
rules 1.0.2
scales 1.3.0
splines2 0.5.1
stacks 1.0.4
text2vec 0.6.4
textrecipes 1.0.6
package version
tibble 3.2.1
tidymodels 1.2.0
tidyr 1.3.1
tune 1.2.1
vetiver 0.2.5
workflows 1.1.4
workflowsets 1.1.0
yardstick 1.3.1