Curso Machine Learning Abril

Oi galera,

Tenho algumas dúvidas da ultima aula do curso e que são as seguintes:

1.Na ultima aula do curso ML Athos, vc falou da colinearidade. Mas e como vc sugere ver isso entre variaveis categorica-categorica e numerica-categorica? há alguma matriz de correlaçao igual como ha para numericas?

2.Não entendi o step_other. Em categorias raras, step_other junta todas as categorias com pouca frequência numa só? Mas e se eu tenho pouca frequência em escolaridade pre escolar e em outra categoria que é escolaridade ensino superior.Aí ele junta essas duas? Mas faz sentido, numa perspetiva de explicação do modelo? [eu sei que analise preditiva não tem esse objetivo, mas queria saber]

3.O near_z só se aplica a variáveis numericas ou também categoricas?

4.E quando as variaveis explicativas são todas binarias ou categoricas, que cuidados de pre processamento são necessarios?

Obrigado!

Joana!

  1. Multicolinearidade em categóricas é um desafio msm!

categórica vs categórica: Uma vez que se transforma as categóricas em dummies, daria para as tratar como contínuas e avaliar se elas são correlacionadas da mesma maneira que faríamos com as contínuas. No código abaixo eu fiz a dummificação e depois tirei as colineares.

library(tidyverse)
library(tidymodels)
dados <- tibble(
  cat1 = c("A", "A", "B", "B"),
  cat2 = c("C", "C", "D", "D"),
  y = as.numeric(factor(cat1)) + rnorm(n = 4)
)

receita <- recipe(y ~ cat1 + cat2, dados) %>%
  step_dummy(all_predictors()) %>%
  step_lincomb(all_predictors())

dados_prep <- as.data.frame(juice(prep(receita)))
dados_prep

Mas não há maneira fácil de avaliar isso no recipes. Existem medidas de associação entre variáveis categóricas como o Chi quadrado (de Pearson) e o Cramer’s V (que é quase Pearson =P).

Peguei um exemplo na internet que mostra um código enxuto pra visualizar isso:

library(DescTools)
library(corrplot)

df <- data.frame(x1 = sample(letters[1:5], 20, replace = TRUE), 
                 x2 = sample(letters[1:5], 20, replace = TRUE), 
                 x3 = sample(letters[1:5], 20, replace = TRUE))

corrplot(PairApply(df, CramerV))

categóricas vs numéricas: acho que esse caso é mais difícil de ocorrer. Se ocorrer é porque a variável numérica era pra ser categórica na vdd, e daí o categ vs categ se aplicaria aqui novamente.

Mas ó, a multicolinearidade atrapalha duas coisas: 1) interpretação do modelo; e 2) as contas pra ajustar modelos lineares. Se vc não tiver interesse em nenhum desses dois itens, não se preocupe muito com isso! =)

  1. O step_other comete todos esses problemas que você citou. No caso de variáveis que tem uma ordem natural como escolaridade o tratamento deveria ser feito respeitando essa ordem!
receita(y ~ ., dados) %>%
  step_mutate(
    escolaridade = case_when(
      escolaridade %in% c("pre escola", "fundamental") ~ "pre escola ou fundamental",
      escolaridade %in% c("medio", "superior") ~"medio ou superior",
      escolaridade %in% c("mestrado", "doutorado", "pos graduacao") ~ "pos graduacao"
    )
  )

Também tem um tal de step_ordinalscore(), mas nunca usei. Aliás, também tem a estratégia de transformar as variáveis ordinais em numéricas, mas daí é outra conversa haha (ver o pacote embed para mais steps_*() sobre isso!).

  1. O step_zv() e o step_nzv() funcionam para categóricas tbm!

  2. Acho que o principal é o step_dummy() pq alguns modelos (xgboost e glmnet por exemplo) precisam da matriz toda numérica. Então eles vao reclamar se vc não fizer essa transformação antes.
    Outros problemas pra se ver: Tomar cuidado com categorias novas (step_novel), categorias raras (step_other e relacionadas) e NAs (step_unknown, etc). De resto, eu acho que a vida é muito mais fácil qdo se tem apenas variáveis explicativas categóricas, em geral.

A resposta pode não estar completa, existem muitos problemas específicos que certamente deixei passar na discussão, vamos discutindo! Modelagem é um problema em aberto ainda rsrs.

1 curtida

Oi Athos! Valeu mesmo! Estou super esclarecida. Me ajudou demais!