Exercícios 9
Aula 9
1) Cross-validation
Para esse exercício, usaremos uma base de dados das candidaturas à Câmara dos Deputados em 2014 que contém, entre outros, variáveis como o sexo, a raça, a escolaridade e o status de reeleição das candidaturas, bem como uma dummy (resultado
) que indica se a candidatura foi (\(1\)) ou não (\(0\)) eleita (Machado, Campos, e Recch 2020).
<- "https://raw.githubusercontent.com/FLS-6497/datasets/main/aula9/camara_2014.csv"
link <- readr::read_csv2(link) %>%
dados mutate_if(is.character, as.factor)
import pandas as pd
= 'https://raw.githubusercontent.com/FLS-6497/datasets/main/aula9/camara_2014.csv'
link = pd.read_csv(link, sep=';', decimal=",") dados
a) Básico
Crie uma pipeline para estandardizar variáveis numéricas (ou transformar variáveis categóricas em dummies) com algum modelo de classificação da sua escolha e o valide usando K-fold com \(K = 5\) e, depois, com \(K = 10\).
b) LOO
Sorteie apenas algumas observações do banco completo (50, por exemplo) e, em vez de usar K-fold, desta vez use LOO como estratégia de validação (no mlr3
, a função chama-se loo
; no sklearn
, LeaveOneOut
).1
1 No R
talvez seja necessário usar como métrica de validação a classif.ce
.
c) Mantendo balanço
Na base de dados, há muito menos candidaturas eleitas do que não-eleitas. Para evitar que amostras de treino e de teste percam esse balanço original, use K-fold estratificado (no mlr3
, basta declarar stratum = variavel
na task; no sklearn
, use StratifiedKFold
).
d) Repetindo o processo
Finalmente, use repeated k-fold para minimizar a variação decorrente do sorteio no particionamento das amostras (no mlr3
, com repeated_cv
; no sklearn
, com RepeatedKFold
ou com RepeatedStratifiedKFold
).
Workflow de validação
Para este exercício, precisaremos separar a nossa amostra de uma forma mais próxima daquela usada em projetos reais: treino, teste e validação. Para tanto:
a) Holdout
Faça um holdout inicial da base, separando 90% dela para treino e teste e 10% para validação.
b) Cross-validation
Com os 90% restanted da base, treine e valide um modelo usando alguma estratégia de cross-validation. Ao final, quando encontrar o melhor modelo, treine ele em todos os 90% das observações e o valide na base de validação com 10% de observações.
Usando mais dados
Neste exercício, vamos voltar à base de dados climático de São Bernardo do Campo e, com o que aprendemos nas últimas aulas, vamos tentar melhorar nosso desempenho na tarefa de predizer temperatura máxima diária. Carregue a base com:
<- "https://raw.githubusercontent.com/jacobwright32/Web_Scraper_AI_Core_Project/bb4865ae568e23ab8fadb6ea58cf117df2164ef3/web%20scraping/Cleaned%20Data/Brazil_Sao%20Bernardo%20Do%20Campo_Cleaned.csv"
link <- readr::read_csv(link) dados
import pandas as pd
= 'https://raw.githubusercontent.com/jacobwright32/Web_Scraper_AI_Core_Project/bb4865ae568e23ab8fadb6ea58cf117df2164ef3/web%20scraping/Cleaned%20Data/Brazil_Sao%20Bernardo%20Do%20Campo_Cleaned.csv'
link = pd.read_csv(link) dados
a) Novo workflow
Monte um workflow para melhorar o desempenho na tarefa de predizer maximum_temprature
. Em particular, considere o seguinte:
- Pré-processar variáveis contínuas (minmax ou estandardização);
- Reduzir dimensionalidade (PCA ou kernelpca);
- Considerar combinações não-lineares (criando polinômios ou usando MARS)
- Usar ensemble, inclusive com stacking
- Usar uma estratégia de validação que deixe mais dados para treino (K-fold com um \(K=10\) ou \(K=20\))
- Considerar a estrutura temporal dos dados (é possível criar uma variável lag de
maximum_temprature
, o transformar o problema em um de série temporal e usar walk-forward validation)