Essa é a parte 22 de 24 na série Python + IA: Fundamentos e Projetos Práticos
- Ambiente, Sintaxe Básica e Variáveis em Python — Bootcamp Dia 1
- Como Trabalhar com Listas no Python — Bootcamp Dia 6
- Tuplas e Sets em Python — Estruturas Imutáveis e Conjuntos Inteligentes | Bootcamp Dia 7
- Dicionários em Python: chave e valor, o jeito inteligente de armazenar dados
- Funções em Python: Escreva Menos, Faça Mais
- Tratamento de Erros em Python: programe com segurança
- Leitura e Escrita de Arquivos em Python: salve seus dados no mundo real
- Salvando Dados Estruturados com JSON em Python
- Funções com Múltiplos Retornos em Python: eficiência e organização
- Parâmetros Opcionais e Valores Padrão em Python
- *args e **kwargs em Python: flexibilidade total nas funções
- List Comprehensions em Python: código elegante e eficiente
- Manipulando Arquivos CSV com Python: automatize leitura e escrita de dados
- Começando com Pandas em Python: análise de dados para IA e automações
- Limpeza e Transformação de Dados com Pandas: preparando para IA
- Inteligência Artificial com Python: Fundamentos e Primeira Integração com a OpenAI
- Classificação de Texto com IA: Detectando Temas e Categorias
- Geração de Texto com IA: Criando Respostas Inteligentes com Python
- Chatbot com IA em Python: Construindo um Assistente Inteligente
- Como Detectar Fake News com Python e IA
- Como Criar uma Interface com IA em Python para Detectar Fake News
- Como Avaliar a Qualidade de um Modelo de IA com Python — Além da Acurácia
- Como Balancear Dados e Validar Modelos com Python e IA
- Projeto Final: Criando um Classificador de Fake News com Interface Web em Python (Streamlit)
Hoje você vai aprender a avaliar o desempenho do seu modelo com muito mais profundidade.
Não basta saber que ele acerta 90% — é preciso saber o que ele está acertando, o que está errando, e por que isso importa.
🧠 Por que a acurácia não basta?
Imagine que 90% do seu dataset é composto por notícias reais. Um modelo que simplesmente classifica tudo como REAL vai ter 90% de acurácia — mas não serve pra nada.
É aqui que entram outras métricas fundamentais:
Métrica | Explicação rápida |
---|---|
Precisão | Das previsões positivas, quantas estavam certas? |
Revocação | Das amostras positivas, quantas o modelo encontrou? |
F1-Score | Equilíbrio entre precisão e revocação |
Matriz de confusão | Visual dos acertos e erros por classe |
🧰 O que vamos usar
classification_report
confusion_matrix
seaborn
oumatplotlib
para visualização
📦 Instale os pacotes (se ainda não tiver)
pip install scikit-learn matplotlib seaborn
✍️ Código Python – Avaliação com Métricas Reais
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import classification_report, confusion_matrix
import seaborn as sns
import matplotlib.pyplot as plt
# Carrega o dataset
df = pd.read_csv("fake_news_dataset_v2.csv")
df = df[['text', 'label']].dropna()
# Divide dados
X_train, X_test, y_train, y_test = train_test_split(
df['text'], df['label'], test_size=0.3, random_state=7
)
# Vetoriza texto
vectorizer = TfidfVectorizer(stop_words='english', max_df=0.7)
X_train_vec = vectorizer.fit_transform(X_train)
X_test_vec = vectorizer.transform(X_test)
# Modelo
model = LogisticRegression()
model.fit(X_train_vec, y_train)
y_pred = model.predict(X_test_vec)
# Avaliação textual
print("🔍 Relatório de Classificação:")
print(classification_report(y_test, y_pred))
# Matriz de Confusão
matriz = confusion_matrix(y_test, y_pred, labels=["FAKE", "REAL"])
sns.heatmap(matriz, annot=True, fmt='d', cmap='Blues',
xticklabels=["FAKE", "REAL"],
yticklabels=["FAKE", "REAL"])
plt.title("Matriz de Confusão")
plt.xlabel("Previsto")
plt.ylabel("Real")
plt.show()
✅ O que você aprendeu hoje
- Que acurácia não conta a história toda
- Como usar métricas profissionais para avaliar um modelo
- Como interpretar uma matriz de confusão
- Que cada métrica responde a uma pergunta diferente sobre o desempenho
🎯 Desafio
- Teste com datasets desbalanceados
- Experimente trocar o modelo por
MultinomialNB()
- Crie uma função que imprima as métricas de forma personalizada, mostrando emojis de erro e acerto