Modèles de classification

Modélisation avec tidymodels en R

David Svancer

Data Scientist

Prédire les achats de produits

Les modèles de classification prédisent des variables cibles catégorielles

  • Prédire l'achat d'un produit
purchased total_time total_visits
yes 800 3
yes 978 7
no 220 4
no 124 5
yes 641 4

 

Graphique de classification

Modélisation avec tidymodels en R

Algorithmes de classification

Objectif : Créer des régions distinctes et non chevauchantes selon les valeurs des variables prédictives

  • Prédire la même catégorie de résultat dans chaque région

 

Graphique de classification

Modélisation avec tidymodels en R

Algorithmes de classification

Objectif : Créer des régions distinctes et non chevauchantes selon les valeurs des variables prédictives

  • Prédire la même catégorie de résultat dans chaque région

 

Régression logistique

  • Algorithme de classification populaire qui crée une séparation linéaire entre les catégories

 

Classification avec frontières

Modélisation avec tidymodels en R

Données de notation des pistes

leads_df
# A tibble: 1,328 x 7
   purchased total_visits total_time pages_per_visit total_clicks lead_source    us_location
   <fct>            <dbl>      <dbl>           <dbl>        <dbl> <fct>          <fct>      
 1 yes                  7       1148            7              59 direct_traffic west       
 2 no                   8        100            2.67           24 direct_traffic west       
 3 no                   5        228            2.5            25 email          southeast  
 4 no                   7        481            2.33           21 organic_search west       
 5 no                   4        177            4              37 direct_traffic west       
 6 no                   2       1273            2              26 email          midwest    
 7 no                   3        711            3              28 organic_search west       
 8 no                   3        166            3              32 direct_traffic southeast  
 9 no                   3          7            3              23 organic_search west       
10 no                   6        562            6              48 organic_search southeast  
# ... with 1,318 more rows
Modélisation avec tidymodels en R

Rééchantillonnage des données

Première étape pour ajuster un modèle

  • Créer un objet de découpage des données avec initial_split()
  • Créer les ensembles d'entraînement et de test avec training() et testing()
leads_split <- initial_split(leads_df, 
                             prop = 0.75,
                             strata = purchased)

leads_training <- leads_split %>% training()
leads_test <- leads_split %>% testing()
Modélisation avec tidymodels en R

Spécification du modèle de régression logistique

Spécification du modèle dans parsnip

  • logistic_reg()
    • Interface générale pour les modèles de régression logistique dans parsnip
    • Moteur courant : « glm »
    • Mode : « classification »
logistic_model <- logistic_reg() %>% 

set_engine('glm') %>%
set_mode('classification')
Modélisation avec tidymodels en R

Ajustement du modèle

Une fois le modèle spécifié, la fonction fit() sert à l'entraîner

  • Passer l'objet modèle à fit()
  • Indiquer la formule du modèle
  • Fournir les données d'entraînement, data
logistic_fit <- logistic_model %>% 

fit(purchased ~ total_visits + total_time,
data = leads_training)
Modélisation avec tidymodels en R

Prédire des catégories de résultat

La fonction predict()

  • new_data précise l'ensemble sur lequel prédire
  • type
    • 'class' retourne des prédictions catégorielles

Sortie normalisée de predict()

  1. Retourne un tibble
  2. Quand type vaut 'class', retourne une colonne facteur nommée .pred_class
class_preds <- logistic_fit %>%

predict(new_data = leads_test,
type = 'class')
class_preds
# A tibble: 332 x 1
   .pred_class
   <fct>      
 1 no         
 2 yes        
 3 no         
 4 no         
 5 yes 
 # ... with 327 more rows
Modélisation avec tidymodels en R

Probabilités estimées

En réglant type à 'prob', on obtient les probabilités estimées pour chaque catégorie

 

La fonction predict() retourne un tibble à plusieurs colonnes

  • Une par catégorie de la variable cible
  • Convention de nommage : .pred_{outcome_category}
prob_preds <- logistic_fit %>%
  predict(new_data = leads_test,
          type = 'prob')

prob_preds
# A tibble: 332 x 2
   .pred_yes .pred_no
       <dbl>    <dbl>
 1    0.134     0.866
 2    0.729     0.271
 3    0.133     0.867
 4    0.0916    0.908
 5    0.598     0.402
# ... with 327 more rows
Modélisation avec tidymodels en R

Combiner les résultats

Pour évaluer le modèle avec le paquet yardstick, il faut un tibble de résultats

 

La variable cible du jeu de test et les tibbles de prédictions peuvent être combinés avec bind_cols()

leads_results <- leads_test %>% 
  select(purchased) %>% 
  bind_cols(class_preds, prob_preds)
leads_results
# A tibble: 332 x 4
   purchased .pred_class .pred_yes .pred_no
   <fct>     <fct>           <dbl>    <dbl>
 1 no        no             0.134     0.866
 2 yes       yes            0.729     0.271
 3 no        no             0.133     0.867
 4 no        no             0.0916    0.908
 5 yes       yes            0.598     0.402
# ... with 327 more rows
Modélisation avec tidymodels en R

Données de télécommunications

telecom_df
# A tibble: 975 x 9
   canceled_service cellular_service avg_data_gb avg_call_mins avg_intl_mins internet_service   contract    months_with_company monthly_charges
   <fct>            <fct>               <dbl>         <dbl>        <dbl>         <fct>           <fct>               <dbl>           <dbl>
 1 yes              single_line         7.78           497         127         fiber_optic     month_to_month         7              76.4
 2 yes              single_line         9.04           336         88          fiber_optic     month_to_month         10             94.9
 3 no               single_line         10.3           262         55          fiber_optic     one_year               50             103. 
 4 yes              multiple_lines      5.08           250         107         digital         one_year               53             60.0
 5 no               multiple_lines      8.05           328         122         digital         two_year               50             75.2
 6 no               single_line         9.3            326         114         fiber_optic     month_to_month         25             95.7
 7 yes              multiple_lines      8.01           525         97          fiber_optic     month_to_month         19             83.6
 8 no               multiple_lines      9.4            312         147         fiber_optic     one_year               50             99.4
 9 yes              single_line         5.29           417         96          digital         month_to_month         8              49.8
10 no               multiple_lines      9.96           340         136         fiber_optic     month_to_month         61             106. 
# ... with 965 more rows 
Modélisation avec tidymodels en R

Passons à la pratique !

Modélisation avec tidymodels en R

Preparing Video For Download...