0Pricing
R Academy · Leçon

Ingénierie des caractéristiques avec recipes

Définissez les étapes de prétraitement pour la normalisation, l’encodage et l’imputation.

Ingénierie des caractéristiques avec recipes est une leçon R Academy gratuite sur CoddyKit. Ceci est la leçon 1 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage R Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours R Academy comprend 4 leçons au total.

Qu’est-ce qu’une recette ?

Dans tidymodels, une recette est un modèle directeur pour le prétraitement de vos données. Elle consigne les étapes nécessaires pour transformer des données brutes en variables prêtes pour un modèle, sans les appliquer immédiatement.

La fonction principale est recipe(outcome ~ ., data = train) : elle définit la formule et le jeu de données de référence utilisés pour estimer les statistiques nécessaires au prétraitement.

library(recipes)
library(tidymodels)

# Create a recipe using the training data
rec <- recipe(price ~ ., data = train_data)
print(rec)

step_normalize()

step_normalize(all_numeric_predictors()) centre chaque variable explicative numérique sur une moyenne de 0 et la réduit à un écart-type de 1. Cela est essentiel pour les algorithmes sensibles à l’échelle des variables, comme la régression logistique, SVM ou les réseaux neuronaux.

La moyenne et SD sont calculées à partir du jeu d’entraînement, puis appliquées de manière cohérente aux données de test via bake().

rec <- recipe(price ~ ., data = train_data) |>
  step_normalize(all_numeric_predictors())

# Check what steps are recorded
print(rec)

step_dummy()

step_dummy(all_nominal_predictors()) convertit les variables catégorielles (facteurs ou chaînes de caractères) en colonnes numériques indicatrices (codées en variables binaires). Par défaut, il crée k-1 colonnes pour un facteur à k niveaux, ce qui évite la multicolinéarité parfaite.

Utilisez one_hot = TRUE pour les modèles fondés sur des arbres qui tirent avantage d’un codage binaire complet.

rec <- recipe(price ~ ., data = train_data) |>
  step_dummy(all_nominal_predictors())

# After prep and bake, factor columns become 0/1 numeric columns
prepped <- prep(rec)
baked <- bake(prepped, new_data = NULL)
names(baked)

step_impute_median()

Les valeurs manquantes font échouer la plupart des moteurs de modèles. step_impute_median(all_numeric_predictors()) remplace les valeurs NA par la médiane calculée à partir du jeu d’entraînement. La médiane résiste mieux aux valeurs aberrantes que l’imputation par la moyenne.

Pour les variables catégorielles, utilisez step_impute_mode() pour remplacer les valeurs par la modalité la plus fréquente.

rec <- recipe(price ~ ., data = train_data) |>
  step_impute_median(all_numeric_predictors()) |>
  step_impute_mode(all_nominal_predictors())

print(rec)

step_zv() — Supprimer la variance nulle

step_zv(all_predictors()) supprime toute variable explicative qui ne possède qu’une seule valeur distincte (variance nulle). Ces colonnes n’apportent aucune information et peuvent provoquer des erreurs dans certains moteurs de modèles.

Pour une variance quasi nulle, utilisez step_nzv(all_predictors()), qui supprime également les colonnes où une valeur est très largement dominante.

rec <- recipe(price ~ ., data = train_data) |>
  step_impute_median(all_numeric_predictors()) |>
  step_dummy(all_nominal_predictors()) |>
  step_zv(all_predictors()) |>
  step_normalize(all_numeric_predictors())

print(rec)

prep() — Entraîner la recette

prep(recipe) estime tous les paramètres requis par les étapes — par exemple la moyenne et SD pour la normalisation, ou les médianes pour l’imputation — à partir des données d’entraînement. Le résultat est une recette préparée qui connaît tous les paramètres de transformation.

Préparez toujours la recette uniquement sur les données d’entraînement afin d’éviter toute fuite de données provenant du jeu de test.

# Build the full recipe
rec <- recipe(price ~ ., data = train_data) |>
  step_impute_median(all_numeric_predictors()) |>
  step_dummy(all_nominal_predictors()) |>
  step_zv(all_predictors()) |>
  step_normalize(all_numeric_predictors())

# Estimate parameters from training data
prepped_rec <- prep(rec)
print(prepped_rec)

bake() — Appliquer à de nouvelles données

bake(prepped_recipe, new_data = test_data) applique toutes les étapes de prétraitement, en utilisant les paramètres déjà estimés, à n’importe quel jeu de données. Cela garantit la cohérence des transformations entre l’entraînement et le test.

Transmettez new_data = NULL pour appliquer les transformations aux données d’entraînement utilisées lors de prep().

# Apply recipe to test data
baked_test <- bake(prepped_rec, new_data = test_data)
head(baked_test)

# Apply to training data (same as juice())
baked_train <- bake(prepped_rec, new_data = NULL)
dim(baked_train)

juice() — Extraire les données d’entraînement traitées

juice(prepped_recipe) est une fonction pratique équivalente à bake(prepped_recipe, new_data = NULL). Elle renvoie la version prétraitée des données d’entraînement utilisées lors de prep().

Remarque : juice() est légèrement déconseillée au profit de bake(prep, new_data = NULL), mais vous la verrez dans du code tidymodels plus ancien.

# juice() extracts the processed training data
train_processed <- juice(prepped_rec)
glimpse(train_processed)

# Equivalent modern approach
train_modern <- bake(prepped_rec, new_data = NULL)
identical(train_processed, train_modern)  # TRUE

Combiner plusieurs étapes

Les étapes sont appliquées dans l’ordre où elles sont ajoutées. Une recette classique destinée à la production suit l’ordre suivant :

  1. Imputation (corriger d’abord les NA)
  2. Création de variables (interactions, polynômes)
  3. Codage indicateur (convertir les facteurs)
  4. Suppression des variables à variance nulle
  5. Normalisation (effectuer la mise à l’échelle en dernier)

Cet ordre est important : par exemple, normaliser avant le codage indicateur produirait des résultats incorrects.

full_rec <- recipe(sale_price ~ ., data = housing_train) |>
  step_impute_median(all_numeric_predictors()) |>
  step_impute_mode(all_nominal_predictors()) |>
  step_log(sale_price, base = 10) |>
  step_other(all_nominal_predictors(), threshold = 0.05) |>
  step_dummy(all_nominal_predictors()) |>
  step_zv(all_predictors()) |>
  step_normalize(all_numeric_predictors())

print(full_rec)

Examiner les résultats de prep

Après l’appel de prep(), vous pouvez examiner ce que chaque étape a fait avec tidy(prepped_rec). Chaque étape possède un identifiant numérique, et vous pouvez l’examiner plus en détail avec tidy(prepped_rec, number = 1) pour voir les paramètres estimés.

prepped_rec <- prep(full_rec)

# View all steps and their status
tidy(prepped_rec)

# Inspect normalization parameters (mean, sd per column)
tidy(prepped_rec, number = 5)  # step_normalize is step 5

Les recettes en pratique

Les recettes sont particulièrement utiles lorsqu’elles sont combinées à des flux de travail. Au lieu d’appeler manuellement prep() et bake(), vous ajoutez la recette à un flux de travail et tidymodels gère automatiquement prep/bake lors de fit() et predict().

Cela élimine une source fréquente d’erreurs : l’application différente du prétraitement pendant l’entraînement et au moment de l’inférence.

library(workflows)

# Recipe + model spec combined in a workflow
wf <- workflow() |>
  add_recipe(full_rec) |>
  add_model(linear_reg() |> set_engine('lm'))

# fit() internally calls prep() + bake() on training data
fitted_wf <- fit(wf, data = housing_train)

# predict() applies bake() to new data automatically
predictions <- predict(fitted_wf, new_data = housing_test)
head(predictions)

Vérification rapide

Que fait l’appel de prep(recipe) dans le cadre des recettes de tidymodels ?

Récapitulatif des recettes

Points essentiels de l’ingénierie des variables avec les recettes :

  • recipe(outcome ~ ., data = train) définit le modèle directeur du prétraitement.
  • step_normalize(), step_dummy(), step_impute_median() et step_zv() sont les étapes les plus utilisées.
  • prep() estime les paramètres uniquement à partir des données d’entraînement, jamais à partir des données de test.
  • bake(prepped, new_data) applique la recette entraînée à n’importe quel jeu de données.
  • L’ordre des étapes compte : imputer → créer → coder → supprimer → mettre à l’échelle.
  • En production, encapsulez la recette dans un workflow() pour automatiser prep/bake pendant fit et predict.
# Full pipeline in 6 lines
rec <- recipe(target ~ ., data = train) |>
  step_impute_median(all_numeric_predictors()) |>
  step_dummy(all_nominal_predictors()) |>
  step_zv(all_predictors()) |>
  step_normalize(all_numeric_predictors())

prepped <- prep(rec)
train_baked <- bake(prepped, new_data = NULL)
test_baked  <- bake(prepped, new_data = test)

Questions Fréquemment Posées

La leçon « Ingénierie des caractéristiques avec recipes » est-elle gratuite ?

Oui — le texte complet de « Ingénierie des caractéristiques avec recipes » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours R Academy, passe à CoddyKit PRO. Le cours R Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Ingénierie des caractéristiques avec recipes » ?

Définissez les étapes de prétraitement pour la normalisation, l’encodage et l’imputation. Tu pratiques R Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer R Academy ?

Aucune expérience préalable n'est requise. R Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 1 sur 4.

Combien de temps prend la leçon « Ingénierie des caractéristiques avec recipes » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon R Academy ?

Oui. Chaque leçon R Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Ingénierie des caractéristiques avec recipes
  2. Spécifications des modèles avec parsnip
  3. Flux de travail : combiner recettes et modèles
  4. Rééchantillonnage et validation croisée avec rsample
← Retour à R Academy