Engenharia de atributos

Modelagem com tidymodels em R

David Svancer

Data Scientist

Engenharia de atributos com o pacote recipes

Fluxo de engenharia de atributos com recipes

Modelagem com tidymodels em R

Especificando tipos e papéis das variáveis

 

Definir papéis das colunas

  • Atribuir papel de resposta ou preditora a todas as variáveis

Definir tipos de dados das variáveis

  • Dados numéricos
  • Dados categóricos

 

Feito com a função recipe()

 

Especificando uma recipe com a função recipe

Modelagem com tidymodels em R

Etapas de pré-processamento de dados

Adicionar etapas de pré-processamento

  • Imputação de dados ausentes
  • Transformações de dados
    • Centralizar e padronizar variáveis numéricas
  • Criar novas variáveis
    • Calcular razões entre variáveis
  • E muito mais...

Cada etapa é adicionada com uma função step_*() específica

 

Adicionando transformações com funções step

1 https://recipes.tidymodels.org/reference/index.html
Modelagem com tidymodels em R

Treinando as etapas de pré-processamento

Objetos recipe são treinados em uma fonte de dados, tipicamente o conjunto de treino

  • As transformações são estimadas
    • Média e desvio padrão de colunas numéricas para centralizar e padronizar
    • Fórmulas para criar novas colunas são armazenadas para aplicar em novos dados

 

Recipes são treinadas com a função prep()

 

A função prep treina as etapas de engenharia de atributos usando o conjunto de treino

Modelagem com tidymodels em R

Aplicando recipes a novos dados

Aplicar todas as transformações treinadas

  • Ao conjunto de treino e de teste para modelagem
  • A novas fontes de dados para previsões futuras
    • Algoritmos de Machine Learning exigem o mesmo formato de dados usado no treino para prever novos valores

 

Recipes são aplicadas com a função bake()

 

A função bake aplica uma recipe treinada a novas fontes de dados

Modelagem com tidymodels em R

Pipeline simples de engenharia de atributos

Aplicar log em total_time nos dados de lead scoring

  • Transformação comum para valores altos
  • Comprime a faixa de valores e reduz a variabilidade
leads_training
# A tibble: 996 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              5           228            2.5            25        email              southeast  
 3 no              7           481            2.33           21        organic_search     west       
 4 no              4           177            4              37        direct_traffic     west       
 5 no              2          1273            2              26        email              midwest         
# ... with 991 more rows
Modelagem com tidymodels em R

Construindo um objeto recipe

A função recipe()

  • Fórmula do modelo
    • Define os papéis das variáveis
  • Argumento data
    • Determina os tipos de dados das variáveis

 

Passe o objeto recipe para step_log() para adicionar a transformação logarítmica

  • Selecione a variável para transformar, total_time, e especifique a base do log
leads_log_rec <- recipe(purchased ~ ., 
                       data = leads_training) %>% 

step_log(total_time, base = 10)
leads_log_rec
Data Recipe
Inputs:
      role #variables
   outcome          1
 predictor          6

Operations:

Log transformation on total_time
Modelagem com tidymodels em R

Explorar papéis e tipos das variáveis

Passar um objeto recipe para a função summary()

  • Cria um tibble com informações das variáveis
  • Coluna type
    • Captura o tipo de dado da variável
    • 'nominal' representa variáveis categóricas
  • Coluna role
    • Captura os papéis das variáveis na modelagem
    • Definidos pela fórmula do modelo de entrada
leads_log_rec %>% 
  summary()
# A tibble: 7 x 4
  variable        type     role       source  
  <chr>           <chr>    <chr>      <chr>   
1 total_visits    numeric  predictor  original
2 total_time      numeric  predictor  original
3 pages_per_visit numeric  predictor  original
4 total_clicks    numeric  predictor  original
5 lead_source     nominal  predictor  original
6 us_location     nominal  predictor  original
7 purchased       nominal  outcome    original
Modelagem com tidymodels em R

Treinando um objeto recipe

A função prep()

  • Recebe um objeto recipe como primeiro argumento
  • Argumento training
    • Especifica os dados nos quais treinar as etapas de pré-processamento

 

Imprimindo um objeto recipe treinado

  • Etapas treinadas são indicadas por [trained]
leads_log_rec_prep <- leads_log_rec %>% 
  prep(training = leads_training)
leads_log_rec_prep
Data Recipe
Inputs:
      role #variables
   outcome          1
 predictor          6

Training data contained 996 data points and 
no missing data.

Operations:
Log transformation on total_time [trained]
Modelagem com tidymodels em R

Transformando os dados de treino

A função bake()

  • Primeiro argumento é um objeto recipe treinado
  • Argumento new_data
    • Dados nos quais aplicar a recipe treinada
  • Dados de treino
    • leads_training foi usado para treinar a recipe
    • Por padrão, os dados transformados são mantidos por prep()
    • Passe NULL em new_data para extrair
  • Retorna um tibble com os dados transformados
leads_log_rec_prep %>% 
  bake(new_data = NULL)
# A tibble: 996 x 7
  total_visits total_time ... us_location  purchased
    <dbl>       <dbl>     ...   <fct>       <fct>
 1     7        3.06      ...   west         yes
 2     5        2.36      ...   southeast    no
 3     7        2.68      ...   west         no
 4     4        2.25      ...   west         no
 5     2        3.10      ...   midwest      no
# ... with 991 more rows
Modelagem com tidymodels em R

Transformando novos dados

Transformando conjuntos não usados no treino da recipe

  • Passe o conjunto ao argumento new_data
  • A recipe treinada aplicará todas as etapas aos novos dados
leads_log_rec_prep %>% 
  bake(new_data = leads_test)
# A tibble: 332 x 7
 total_visits  total_time ... us_location  purchased
     <dbl>       <dbl>    ...  <fct>       <fct>
 1     8          2       ...  west         no
 2     4          3.13    ...  northeast    yes
 3     3          2.25    ...  west         no
 4     2          1.20    ...  midwest      no
 5     9          3.01    ...  west         yes
# ... with 327 more rows
Modelagem com tidymodels em R

Hora de pôr a mão na massa!

Modelagem com tidymodels em R

Preparing Video For Download...