Essa é a parte 23 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)
Estamos chegando ao penúltimo dia da jornada Python + IA: Fundamentos e Projetos Práticos. Hoje vamos abordar um dos aspectos mais importantes, mas frequentemente ignorados, no aprendizado de máquina.
🧠 O que você vai aprender hoje:
- Por que dados desbalanceados prejudicam modelos
- Como usar validação cruzada para avaliações mais confiáveis
- Estratégias para balancear datasets e melhorar a performance real
🚨 O problema: modelo “viciado”
Imagine um dataset com:
- 95% de notícias REAL
- 5% de notícias FAKE
Um modelo que classifica tudo como REAL vai ter 95% de acurácia — mas é inútil!
🛠️ O que vamos usar:
train_test_split(..., stratify=y)
para manter a proporção FAKE/REALStratifiedKFold
para validação cruzada- Técnicas de balanceamento:
- Oversampling com
RandomOverSampler
- Undersampling com
RandomUnderSampler
imblearn
(biblioteca complementar)
- Oversampling com
📦 Instale o pacote extra (se necessário)
pip install imbalanced-learn
✍️ Código: Validação com balanceamento
import pandas as pd
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import cross_val_score, StratifiedKFold
from imblearn.over_sampling import RandomOverSampler
from sklearn.pipeline import make_pipeline
# Carrega os dados
df = pd.read_csv("fake_news_dataset_v2.csv")
df = df[['text', 'label']].dropna()
# Vetoriza os textos
vectorizer = TfidfVectorizer(stop_words='english', max_df=0.7)
X = vectorizer.fit_transform(df['text'])
y = df['label']
# Aplica oversampling (aumenta a classe minoritária)
ros = RandomOverSampler()
X_bal, y_bal = ros.fit_resample(X, y)
# Modelo + Validação cruzada
model = LogisticRegression()
kfold = StratifiedKFold(n_splits=5, shuffle=True, random_state=42)
scores = cross_val_score(model, X_bal, y_bal, cv=kfold, scoring='accuracy')
print(f"📊 Acurácia por divisão: {scores}")
print(f"🔁 Média da acurácia: {round(scores.mean()*100, 2)}%")
✅ Aprendizado do Dia
- Entendeu como dados desbalanceados podem enganar
- Aprendeu a usar oversampling para nivelar classes
- Aplicou validação cruzada para ter múltiplos testes mais realistas
🎯 Desafio do Dia
- Substitua
LogisticRegression
porPassiveAggressiveClassifier
ouMultinomialNB
- Faça uma função que imprime acurácia, precisão e f1-score para cada rodada do k-fold
- Experimente com
undersampling
e compare os resultados