R Academy · Aula

Engenharia de atributos com recipes

Defina etapas de pré-processamento para normalização, codificação e imputação.

Aula 1 de 413 etapas

Engenharia de atributos com recipes é uma aula grátis de R Academy no CoddyKit. Esta é a aula 1 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de R Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de R Academy inclui 4 aulas no total.

O que é uma receita?

Em tidymodels, uma receita é um esquema para o pré-processamento dos seus dados. Ela registra as etapas necessárias para transformar dados brutos em características prontas para o modelo — sem aplicá-las imediatamente.

A função principal é recipe(outcome ~ ., data = train), que define a fórmula e o conjunto de dados de referência usado para estimar as estatísticas necessárias durante o pré-processamento.

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()) centraliza cada preditor numérico para média 0 e o escala para desvio-padrão 1. Isso é essencial para algoritmos sensíveis à escala das características, como regressão logística, SVM ou redes neurais.

A média e o SD são calculados a partir do conjunto de treinamento e aplicados de forma consistente aos dados de teste por meio de 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()) converte variáveis categóricas (fator/caractere) em colunas numéricas fictícias (codificadas em one-hot). Por padrão, cria k-1 colunas para um fator com k níveis, evitando a multicolinearidade perfeita.

Use one_hot = TRUE para modelos baseados em árvores que se beneficiam da codificação one-hot completa.

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()

Valores ausentes farão a maioria dos mecanismos de modelo falhar. step_impute_median(all_numeric_predictors()) substitui valores NA pela mediana calculada a partir do conjunto de treinamento. Em comparação com a imputação pela média, a mediana é resistente a valores atípicos.

Para variáveis categóricas, use step_impute_mode() para preencher com o valor mais frequente.

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

print(rec)

step_zv() — Remover variância zero

step_zv(all_predictors()) remove qualquer preditor que tenha apenas um valor exclusivo (variância zero). Essas colunas não contêm informação e podem causar erros em alguns mecanismos de modelo.

Para variância próxima de zero, use step_nzv(all_predictors()), que também remove colunas nas quais um valor predomina amplamente.

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() — Treinar a receita

prep(recipe) estima todos os parâmetros exigidos pelas etapas — por exemplo, a média/SD para normalização e as medianas para imputação — usando os dados de treinamento. O resultado é uma receita preparada que conhece todos os parâmetros de transformação.

Sempre execute a preparação apenas nos dados de treinamento para evitar vazamento de dados do conjunto de teste.

# 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() — Aplicar a novos dados

bake(prepped_recipe, new_data = test_data) aplica todas as etapas de pré-processamento, usando os parâmetros já estimados, a qualquer conjunto de dados. Isso garante que as transformações sejam consistentes entre o treinamento e o teste.

Passe new_data = NULL para aplicar as transformações aos dados de treinamento usados durante 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() — Extrair dados de treinamento processados

juice(prepped_recipe) é uma função de conveniência equivalente a bake(prepped_recipe, new_data = NULL). Ela retorna a versão pré-processada dos dados de treinamento usados durante prep().

Observação: juice() está ligeiramente obsoleta em favor de bake(prep, new_data = NULL), mas você a verá em códigos tidymodels mais antigos.

# 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

Combinando várias etapas

As etapas são aplicadas na ordem em que são adicionadas. Uma receita de produção típica segue esta ordem:

  1. Imputação (corrigir os NAs primeiro)
  2. Criação de características (interações, polinômios)
  3. Codificação fictícia (converter fatores)
  4. Remoção da variância zero
  5. Normalização (escalar no final)

Essa ordem é importante — por exemplo, normalizar antes da codificação fictícia produziria resultados incorretos.

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)

Inspecionando os resultados de prep

Depois de chamar prep(), você pode inspecionar o que cada etapa fez usando tidy(prepped_rec). Cada etapa tem um identificador numérico, e você pode examiná-la em detalhe com tidy(prepped_rec, number = 1) para ver os parâmetros estimados.

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

Receitas na prática

As receitas mostram todo o seu potencial quando combinadas com fluxos de trabalho. Em vez de chamar manualmente prep() e bake(), você adiciona a receita a um fluxo de trabalho, e o tidymodels gerencia prep/bake automaticamente durante fit() e predict().

Isso elimina uma fonte comum de erros: aplicar o pré-processamento de forma diferente durante o treinamento e no momento da inferência.

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)

Verificação rápida

O que chamar prep(recipe) faz na estrutura de receitas do tidymodels?

Recapitulação das receitas

Principais conclusões sobre engenharia de características com receitas:

  • recipe(outcome ~ ., data = train) define o esquema de pré-processamento.
  • step_normalize(), step_dummy(), step_impute_median() e step_zv() são as etapas mais usadas.
  • prep() estima parâmetros apenas a partir dos dados de treinamento — nunca dos dados de teste.
  • bake(prepped, new_data) aplica a receita treinada a qualquer conjunto de dados.
  • A ordem das etapas é importante: imputar → criar → codificar → remover → escalar.
  • Em produção, envolva a receita em um workflow() para automatizar prep/bake durante fit e 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)
Grátis para começar

Aprenda R com um tutor de IA — grátis

Escreva e execute código real no seu navegador, obtenha ajuda instantânea de um tutor de IA 24/7 e continue de onde parou na web ou no app.

Cursos
43
Aulas
159

Perguntas Frequentes

A aula “Engenharia de atributos com recipes” é grátis?

Sim — o texto completo de “Engenharia de atributos com recipes” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de R Academy, atualize para CoddyKit PRO. O curso de R Academy inclui 4 aulas no total.

O que vou aprender em “Engenharia de atributos com recipes”?

Defina etapas de pré-processamento para normalização, codificação e imputação. Você pratica R Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar R Academy?

Nenhuma experiência prévia é necessária. R Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 4.

Quanto tempo leva a aula “Engenharia de atributos com recipes”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de R Academy?

Sim. Cada aula de R Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Engenharia de atributos com recipes
  2. Especificações de modelos com parsnip
  3. Fluxos de trabalho: combinando receitas e modelos
  4. Reamostragem e validação cruzada com rsample
← Voltar para R Academy