#machine-learning #python #data-science #scikit-learn

Detectando Fraudes Financeiras com Machine Learning

Como construir um modelo de detecção de fraudes usando Python, Scikit-learn e técnicas de balanceamento de classes.

BS Breno Salomão ·

Detecção de fraudes é um dos problemas clássicos de machine learning com impacto real e imediato. Neste artigo, vou mostrar como construir um pipeline completo — da exploração dos dados até a avaliação do modelo em produção.

O Problema

Datasets de fraude são naturalmente desbalanceados: transações fraudulentas representam menos de 1% do total. Isso cria um desafio: um modelo que prevê “não fraude” para tudo acerta 99% das vezes, mas é completamente inútil.

Dataset

Usaremos o Credit Card Fraud Detection do Kaggle — 284.807 transações, com apenas 492 fraudes (0,17%).

Pipeline

import pandas as pd
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import StratifiedKFold
from sklearn.metrics import classification_report, roc_auc_score
from imblearn.over_sampling import SMOTE

df = pd.read_csv('creditcard.csv')

X = df.drop('Class', axis=1)
y = df['Class']

# Balanceamento com SMOTE
smote = SMOTE(random_state=42)
X_res, y_res = smote.fit_resample(X, y)

# Treinamento
model = RandomForestClassifier(n_estimators=100, random_state=42, n_jobs=-1)
model.fit(X_res, y_res)

Métricas que Importam

Para problemas desbalanceados, acurácia é enganosa. Prefira:

  • Precision / Recall: quantas fraudes detectadas são realmente fraude? Quantas fraudes você perdeu?
  • F1-Score: média harmônica entre precision e recall
  • AUC-ROC: capacidade geral de discriminação do modelo
from sklearn.metrics import classification_report

print(classification_report(y_test, y_pred, target_names=['Legítima', 'Fraude']))

Técnicas de Balanceamento

TécnicaQuando usar
SMOTEOversampling sintético — bom ponto de partida
ADASYNFoca nos exemplos mais difíceis
UndersamplingDados abundantes, risco de perder padrões
Pesos de classeSimples, direto, sem gerar dados sintéticos

Resultados

Com Random Forest + SMOTE, conseguimos:

  • Precision (Fraude): 94%
  • Recall (Fraude): 91%
  • AUC-ROC: 0.987

Próximos Passos

Para produção, considere:

  1. Monitoramento de drift — o comportamento de fraudes muda com o tempo
  2. Threshold tuning — ajuste o ponto de corte conforme o custo de cada tipo de erro
  3. Explicabilidade — use SHAP para entender por que o modelo marcou uma transação como fraude

O código completo está disponível no meu GitHub. Qualquer dúvida, manda mensagem!