Precisão e Revocação
Parte da seção Aprendizado supervisionado do Journey de Machine Learning da Coddy. Lição 22 de 58.
Duas perguntas avaliam as respostas de um teste de gripe. Dos alarmes de gripe, quantos estavam corretos? Dos casos reais de gripe, quantos ele detectou?
Precisão responde à primeira: 42 de 45 alarmes. Revocação responde à segunda: 42 de 47 casos.
from sklearn.metrics import precision_score, recall_score
print(f"{precision_score(y_test, pred):.3f}")
print(f"{recall_score(y_test, pred):.3f}"):.3f sempre mostra 3 casas decimais, então 0.9 seria exibido como 0.900. Isso exibe:
0.933
0.894Escolha com base no erro mais custoso. Um caso de gripe não detectado se espalha, então este teste precisa de recall. Um filtro de spam que enterra e-mails legítimos precisa de precisão.
Desafio
MédioO filtro de uma loja oculta avaliações que parecem falsas. O código inicial cria duas versões a partir de um modelo, strict_pred e eager_pred, e lê qual erro causa mais prejuízo: missed (uma avaliação falsa continua visível) ou hidden (uma avaliação real desaparece).
- Imprima a precisão e a revocação de cada filtro, com 3 casas decimais.
- Imprima o filtro que comete menos erros desse tipo, como abaixo (para
missed:Fewer fakes missed: ...).
Para outra loja e hidden:
Strict: precision 0.900, recall 0.450
Eager: precision 0.640, recall 0.800
Fewer real reviews hidden: strictExperimente você mesmo
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import precision_score, recall_score
# Qual erro prejudica mais: deixar passar (uma avaliação falsa continua visível) ou ocultar (uma avaliação verdadeira é ocultada)
worse = input()
# Uma linha por avaliação: 1 em fake significa que a avaliação foi escrita sob encomenda
reviews = pd.read_csv("reviews.csv")
features = ["words", "exclamations", "account_days", "user_reviews", "stars", "photo"]
X_train, X_test, y_train, y_test = train_test_split(reviews[features], reviews["fake"], test_size=0.25, random_state=0)
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)
model = LogisticRegression(max_iter=1000)
model.fit(X_train, y_train)
proba = model.predict_proba(X_test)[:, 1]
# Dois filtros do mesmo modelo: strict oculta uma avaliação quando a probabilidade de ser falsa é de 0.7; eager, quando é de 0.3
strict_pred = proba >= 0.7
eager_pred = proba >= 0.3
# Escreva seu código abaixo
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Aprendizado supervisionado
1Seu primeiro modelo
Aprendendo com exemplosConjuntos de treino e testeAjustar e preverAvaliar um modeloRecapitulação: classificador de sementes4Regressão logística
Previsões de sim ou nãoO limiar de decisãoPesos como evidênciasVárias classesRevisão: filtro de spam2Vizinhos Mais Próximos
Como o k-NN DecideEscolhendo kLimites de DecisãoEscalonamento para VizinhosRevisão: Vizinhos do Vinho5Avaliando Classificadores
A Matriz de ConfusãoPrecisão e RevocaçãoA Pontuação F1Classes DesbalanceadasCurvas ROCRecapitulação: Teste de Triagem8Validação Cruzada
Validação K-FoldComparando Modelos de Forma JustaBusca em GradeRevisão: Consertos de Skate11Projeto: Espécies de Pinguins
Conheça os PinguinsPrepare os DadosEscolha um ModeloAjuste o VencedorColoque o Modelo em Produção3Regressão Linear
Prevendo númerosVárias característicasMedindo errosGráficos de resíduosRevisão: aluguel de bicicletas6Árvores de Decisão
Árvores fazem perguntasLendo uma árvoreProfundidade da árvoreImportância das característicasRevisão: decisões de empréstimoPratique por conta própria: Compilador de Python online