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:
<- "https://raw.githubusercontent.com/FLS-6497/datasets/main/aula3/PKAP_raw_data.csv"
link <- readr::read_csv(link) dados
import pandas as pd
= 'https://raw.githubusercontent.com/FLS-6497/datasets/main/aula3/PKAP_raw_data.csv'
link = pd.read_csv(link) c
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
<- as_task_classif(race ~ officer_offduty + ..., positive = "Black", data = dados)
tsk <- lrn("classif.log_reg")
learner $train(tsk)
learner
# Avalia predicoes
<- learner$predict(tsk)
pred $confusion
pred<- msr("classif.acc")
measure $score(measure) pred
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
= 'https://raw.githubusercontent.com/FLS-6497/datasets/main/aula3/PKAP_raw_data.csv'
link = pd.read_csv(link, encoding='latin')
c
# Transforma as variaveis (precisam ser float)
= pd.get_dummies(c['race']).Black
Y = pd.get_dummies(c['officer_offduty'])
X
# Treina o modelo
= LogisticRegression()
mod
mod.fit(X, Y)
# Avalia predicoes
= mod.predict(X)
pred
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.