Exercícios 3
Aula 3
1) Dados
Para esse exercício, será necessário carregar alguns dados sobre violência policial letal nos Estados Unidos:
link <- "https://raw.githubusercontent.com/FLS-6497/datasets/main/aula3/PKAP_raw_data.csv"
dados <- readr::read_csv(link)import pandas as pd
link = 'https://raw.githubusercontent.com/FLS-6497/datasets/main/aula3/PKAP_raw_data.csv'
c = pd.read_csv(link)Para quem usa R, também será importante instalar algumas bibliotecas previamente:
install.packages(c("mlr3verse", "mlr3measures"))a) Exploração de features
Faça gráficos de barras com a frequência da variável race por cada uma das variáveis officer_ na base de dados. O resultado deve indicar quantas vítimas de mortes por violência letal policial de diferentes raças (whites e blacks) ocorreram em diferentes categorias (e.g., office_offduty). Dica: algumas variáveis precisam ser recategorizadas porque possuem muitas categorias com poucas ocorrências.
b) Nova base
Crie uma nova base de dados que inclua apenas as variáveis mencionadas na Tabela 1 do paper de Streeter. Dica: será necessário criar novas variáveis e descartar outras existentes na base. Para quem usa Python, também é importante recodificar variáveis para o formato de one hot encoding (em R, a maioria das funções de regressão já faz essa conversão por baixo dos panos).
2) Classificador logístico
Usando um framework (mlr3 ou sci-kit), treine um modelo logístico para predizer mortes de blacks (crie uma dummy indicando 1 para essa ocorrência) usando as variáveis anteriores.
O código base será mais ou menos o seguinte:
library(mlr3learners)
library(mlr3)
# Treina o modelo
tsk <- as_task_classif(race ~ officer_offduty + ..., positive = "Black", data = dados)
learner <- lrn("classif.log_reg")
learner$train(tsk)
# Avalia predicoes
pred <- learner$predict(tsk)
pred$confusion
measure <- msr("classif.acc")
pred$score(measure)import pandas as pd
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import classification_report
from sklearn.metrics import confusion_matrix
# Carrega os dados
link = 'https://raw.githubusercontent.com/FLS-6497/datasets/main/aula3/PKAP_raw_data.csv'
c = pd.read_csv(link, encoding='latin')
# Transforma as variaveis (precisam ser float)
Y = pd.get_dummies(c['race']).Black
X = pd.get_dummies(c['officer_offduty'])
# Treina o modelo
mod = LogisticRegression()
mod.fit(X, Y)
# Avalia predicoes
pred = mod.predict(X)
classification_report(Y, pred)
confusion_matrix(Y, pred)Dica: consulte (de verdade!) a documentação de referência de cada framework; é a melhor maneira de aprender a se virar.
3) Treino e teste
a) Criar função
Crie uma função para sortear da base uma amostra de treino e, outra, de teste. Para isso, a função pode retornar uma lista com as duas amostras. Crie também um argumento na função que permita selecionar o percentual de observações na amostra de treino (o default precisará ser 0.7).
b) Modelo com treino e teste
Com a função anterior, retreine seu modelo anterior na amostra de treino e, depois, aplique as predições na amostra de teste.
c) Tamanho das amostras de treino
Com a função anterior, retreine seu modelo usando diferentes tamanhos de amostra de treino, de 0.3 a 0.9 com intervalos de 0.05. Crie um gráfico para reportar alguma métrica de validação (pode ser acurácia ou precisão, ou ainda F1) e, no eixo X, inclua a informação sobre o percentual usado
4) Validação
a) Nova função
Modifique a função criada anteriormente para que ela já separe a amostra em treino e teste, rode um modelo logístico e retorne alguma métrica de validação.
b) Cross-validation
Use a função criada anteriormente para rodar 500 modelos logísticos em diferentes amostras de treino e de teste. Reporte os resultados desse exercício com um histograma dos valores de validação de alguma métrica.
5) Comparação de modelos
Adapte a função criada anteriormente para rodar um outro modelo de classificação binário, como naive bayes ou K-Nearest Neighbors (explore a documentação dos frameworks para descobrir outras opções e saber mais). Com esse novo modelo, rode 500 vezes e compare os resultados com o do modelo logístico criado anteriormente.