Exercícios 7

Aula 7

1) Bagging

Para esse exercício, precisaremos de novos dados, dessa vez das eleições municípais de 2000. A base que usaremos indica qual partido venceu, se PMDB/PSDB/PFL ou outros, e variáveis econômicas e demográficas (não se esqueça de remover IDs e nome dos municípios, como cod_mun_ibge e nome_municipio; se usar Python, também não se esqueça de transformar/remover as variáveis uf e coligacao):1

  • 1 Dica: se usar árvores de decisão, experimente aumentar o número delas.

  • library(tidyverse)
    
    link <- "https://raw.githubusercontent.com/FLS-6497/datasets/main/aula7/eleicoes2000.csv"
    dados <- readr::read_csv2(link) %>%
      select(-cod_mun_ibge, -nome_municipio) %>%
      mutate_if(is.character, as.factor)
    import pandas as pd
    
    link = 'https://raw.githubusercontent.com/FLS-6497/datasets/main/aula7/eleicoes2000.csv'
    dados = pd.read_csv(link, sep=';', decimal=",").drop(['cod_mun_ibge', 'nome_municipio'], axis=1)

    a) Exploração

    Explore rapidamente a base de dados. Para tanto, você pode criar gráficos com as distribuições do target e de algumas features, com cruzamentos das variáveis ou, ainda, usar correlações. Quais variáveis parecem ter mais relação com o target partido?

    b) Criação de pipelines com bagging

    Usando pipelines, crie um bagging ensemble combinando quantos e quais modelos você quiser e outra pipeline usando Naive Bayes. Treine e compare os resultados destas pipelines.

    c) Variações

    Agora, crie outros dois bagging ensembles, um deles fazendo subsample dos dados (no mlr3, isso é controlado pelo argumento frac no po com subsample) e, o outro, utilizando um modelo diferente do que você utilizou na bagg anterior. Treine e compare os resultados destas novas pipelines.

    d) Random forest

    Crie uma pipeline agora usando random forest (fique à vontade para customizar ela como achar melhor) e compare seus resultados com o da melhor pipeline que você encontrou no exercício anterior.

    2) Stacking

    a) Básico

    Adaptando o exemplo dos materiais de aula, crie uma pipeline que use stacking para combinar os resultados de três modelos diferentes. Os modelos de nível 0 podem ter tanto etapas de pré-processamento, modelos ou parâmetros diferentes (e.g., é possível treinar 3 árvores diferentes). Como blender, use um modelo de regressão logística simples (no mlr3, classif.log_ref; no sklearn, LogisticRegression). Treine e veja os resultados desta pipeline.

    b) Ensemble em cima de ensemble

    Ao stack anterior, adapte e adicione agora o melhor bagging ensemble que você encontrou no exercício 1. Treine e veja o resultado dessa nova versão.

    3) Boosting

    Para quem usa R, neste exercício será necessário converter features categóricas para numeric (o XGboost só aceita variáveis numéricas). Podemos criar uma nova base assim com o seguinte código:

    dados2 <- as.data.frame(model.matrix(partido ~ ., dados)) %>%
      janitor::clean_names()
    dados2$partido <- dados$partido
    
    tsk2 <- as_task_classif(partido ~ ., data = dados)

    a) Gradiente

    Treine dois ensembles com boosting, um usando gradient boosting e, o outro, extreme gradient boosting. Compare os resultados.

    b) Número de árvores em boosting

    Usando extreme boosting, crie três pipelines: uma que treine 10 modelos, outra que treine 100 e, por fim, uma que treine 200. O que acontece com os resultados?

    4) Valiação

    Usando o melhor ensemble que você encontrou nessa aula, o valide usando estes dados das eleições de 2004 – que foram um pouco diferentes das de 2000 em termos de desempenho dos partidos (lembre-se de que é preciso treinar do zero o melhor modelo nos dados completos de 2000 antes de fazer a validação).2.

  • 2 Para quem usa R, também é necessário transformas as variáveis categóricas em numéricas, da mesma forma que fizemos com a base principal antes do treino

  • library(tidyverse)
    
    link <- "https://raw.githubusercontent.com/FLS-6497/datasets/main/aula7/eleicoes2004.csv"
    dados <- readr::read_csv2(link) %>%
      select(-cod_mun_ibge, -nome_municipio) %>%
      mutate_if(is.character, as.factor)
    import pandas as pd
    
    link = 'https://raw.githubusercontent.com/FLS-6497/datasets/main/aula7/eleicoes2004.csv'
    dados = pd.read_csv(link, sep=';', decimal=",").drop(['cod_mun_ibge', 'nome_municipio'], axis=1)

    Bônus

    Tente adaptar o uso de algum ensemble que vimos para o Projeto 1 e veja se você consegue melhorar a performance do seu modelo de classificação de discursos presidenciais.