Engenharia de atributos com recipes
Defina etapas de pré-processamento para normalização, codificação e imputação.
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) # TRUECombinando 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:
- Imputação (corrigir os NAs primeiro)
- Criação de características (interações, polinômios)
- Codificação fictícia (converter fatores)
- Remoção da variância zero
- 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 5Receitas 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()estep_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)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
- Engenharia de atributos com recipes
- Especificações de modelos com parsnip
- Fluxos de trabalho: combinando receitas e modelos
- Reamostragem e validação cruzada com rsample