image

Accede a bootcamps ilimitados y a más de 750 cursos para siempre

70
%OFF
Article image

DS

Davidson Silva16/07/2026 08:54
Compartir

Fraud Sentinel: detecção de fraudes com Machine Learning, Deep Learning e análise de anomalias

  • #Machine Learning
  • #Python
  • #FastAPI

image

Detectar fraudes em cartões de crédito parece, à primeira vista, um problema comum de classificação: receber uma transação e decidir se ela é legítima ou fraudulenta. Na prática, o desafio é muito mais interessante. Quando apenas uma fração mínima dos registros pertence à classe que realmente importa, um modelo pode alcançar mais de 99% de acurácia sem detectar uma única fraude.

Foi a partir desse cenário que desenvolvi o **Fraud Sentinel**, um sistema ponta a ponta para detecção de anomalias e fraudes em transações de cartão de crédito. O projeto combina engenharia de dados, machine learning supervisionado, métodos de detecção de novidade, deep learning, API REST, dashboard interativo e relatórios automáticos.

O código-fonte e toda a documentação estão disponíveis no [repositório do projeto no GitHub](https://github.com/davidsonsilva/desafio-dio-fraudes-cartao-credito).

O problema: encontrar 492 fraudes em quase 285 mil transações

O projeto utiliza o dataset público [Credit Card Fraud Detection](https://www.kaggle.com/datasets/mlg-ulb/creditcardfraud), composto por **284.807 transações**, das quais somente **492 são fraudes**. Isso representa aproximadamente **0,173%** do total.

Esse desbalanceamento muda completamente a forma de desenvolver e avaliar a solução. A acurácia deixa de ser uma métrica confiável, porque a classe majoritária domina o resultado. Por isso, defini como indicadores principais:

- **PR-AUC**, para medir a qualidade do ranking em uma classe positiva rara;

- **recall**, para observar quantas fraudes foram efetivamente detectadas;

- **precisão**, para controlar o volume de falsos alertas;

- **F1**, para equilibrar precisão e recall;

- **matriz de confusão**, para entender o impacto operacional das decisões.

Mais do que treinar um classificador, o objetivo foi construir um processo reproduzível e auditável, capaz de comparar abordagens diferentes sob o mesmo contrato de dados.

Uma arquitetura ponta a ponta

Estruturei o sistema para que treinamento e inferência compartilhassem exatamente as mesmas transformações. O fluxo começa com a validação do dataset, passa pela divisão estratificada entre treino e teste, cria novas variáveis, aplica escalonamento e treina dez modelos.

O melhor modelo é selecionado com base em PR-AUC e F1. Em seguida, o pipeline salva um artefato versionado contendo:

- o modelo vencedor;

- a engenharia de features ajustada;

- o scaler utilizado;

- o limiar de decisão;

- as colunas esperadas na entrada;

- as métricas dos dez modelos;

- informações sobre o dataset e a versão do artefato.

Esse mesmo arquivo é consumido pela linha de comando, pela API FastAPI e pelo dashboard Streamlit. Assim, não existem três implementações diferentes da lógica de previsão.

Engenharia de mais de 100 features

As transações originais possuem `Time`, `Amount` e 28 variáveis anonimizadas resultantes de PCA. A partir dessas entradas, implementei mais de 100 features derivadas.

Entre as principais transformações estão:

- representação cíclica do horário por seno e cosseno;

- identificação do período noturno;

- transformações logarítmica e quadrática do valor;

- análise de centavos e valores arredondados;

- interações entre valor e variáveis PCA;

- módulo e quadrado de `V1` a `V10`;

- interações par a par entre as primeiras variáveis PCA;

- média, desvio-padrão, máximo absoluto e norma L2 das 28 componentes.

Depois da engenharia de features, uso o `RobustScaler`, que é menos sensível a valores extremos do que uma padronização convencional.

Um cuidado importante foi ajustar todas as transformações somente com o conjunto de treino. Dessa forma, informações do teste não vazam para o treinamento.

Dez modelos, três estratégias de desbalanceamento

Em vez de depender de um único algoritmo, construí um catálogo com dez abordagens supervisionadas e não supervisionadas:

1. Regressão Logística;

2. Random Forest;

3. Extra Trees;

4. HistGradientBoosting;

5. XGBoost;

6. rede neural TensorFlow/Keras;

7. Isolation Forest;

8. Local Outlier Factor;

9. One-Class SVM;

10. PCA por erro de reconstrução.

O tratamento do desbalanceamento varia conforme o tipo de estimador.

Os modelos clássicos do scikit-learn utilizam **SMOTE**, aplicado somente ao conjunto de treino. O XGBoost recebe `scale_pos_weight`, calculado a partir da proporção entre classes. A rede neural Keras é treinada com class weights e early stopping. Já os modelos de novidade aprendem apenas com transações normais.

Essa separação evita uma prática problemática: aplicar simultaneamente reamostragem e pesos de classe sem avaliar se as duas correções estão amplificando demais a classe minoritária.

Um threshold adaptado ao problema

Classificadores normalmente utilizam 0,5 como limiar padrão. Em detecção de fraude, esse valor raramente representa o melhor equilíbrio operacional.

No Fraud Sentinel, cada modelo gera um score contínuo. A partir da curva precision-recall, o sistema procura o threshold que maximiza F1 entre os pontos que atendem a um recall mínimo configurável. Quando a restrição não pode ser atingida, o melhor F1 disponível é utilizado.

Com isso, o limiar deixa de ser uma constante arbitrária e passa a fazer parte do processo de calibração.

Da experimentação para uma aplicação utilizável

Quis evitar que o resultado terminasse apenas em um notebook. Por isso, disponibilizei diferentes formas de utilizar o modelo.

Dashboard com Streamlit

O dashboard apresenta o modelo selecionado, a quantidade de features, o limiar e o número de fraudes utilizadas no treinamento. Também permite enviar um CSV, classificar várias transações, ordenar os maiores riscos e exportar os resultados.

Dashboard do Fraud Sentinel após o treinamento demonstrativo

https://raw.githubusercontent.com/davidsonsilva/desafio-dio-fraudes-cartao-credito/main/docs/images/resultado-treinamento-fraud-sentinel.png

Na execução demonstrativa registrada acima, a regressão logística foi selecionada entre os dez modelos, com **111 features** e **50 exemplos fraudulentos sintéticos**. Esses números validam a integração técnica, mas não devem ser interpretados como desempenho final no dataset real.

API REST com FastAPI

A API utiliza Pydantic para validar as 30 variáveis de entrada e oferece endpoints para:

- verificar a saúde do serviço;

- consultar informações do modelo;

- classificar uma transação;

- classificar lotes de até mil transações;

- registrar feedback confirmado.

A documentação OpenAPI é gerada automaticamente e pode ser testada pelo Swagger UI.

Relatórios em PDF

O projeto também gera um relatório dinâmico com a comparação dos modelos, métricas, threshold e informações do treinamento. Além dele, produzi um relatório técnico versionado com a arquitetura e as decisões de desenvolvimento.

Autoaprendizado sem perder rastreabilidade

Um sistema de fraude precisa evoluir quando surgem novos padrões, mas atualizar o modelo silenciosamente após cada feedback seria arriscado.

Por isso, o endpoint de feedback apenas registra transações confirmadas em um arquivo auditável. Esses exemplos são incorporados ao próximo ciclo de treinamento com o dataset real. O modelo ativo continua imutável até que um novo treinamento seja executado e validado.

Essa abordagem é menos automática, mas muito mais segura e explicável.

O que aprendi com o projeto

O principal aprendizado foi que trabalhar com dados desbalanceados exige decisões em várias camadas. Não basta adicionar SMOTE e continuar usando acurácia como critério.

Foi necessário pensar em:

- métricas coerentes com a raridade da classe positiva;

- prevenção de vazamento de dados;

- estratégias específicas para cada família de modelo;

- calibração do limiar;

- custo de falsos positivos e falsos negativos;

- compartilhamento consistente das transformações;

- persistência e versionamento do artefato;

- separação entre feedback coletado e modelo publicado.

Também ficou evidente o valor de transformar um experimento de data science em um produto verificável. A API, o dashboard, os testes e os relatórios tornam o projeto mais fácil de demonstrar, revisar e evoluir.

Limitações e próximos passos

O Fraud Sentinel é um projeto educacional e não uma solução pronta para operar decisões financeiras reais.

Entre as principais limitações estão:

- as variáveis PCA são anonimizadas, o que restringe explicações semânticas;

- a demonstração utiliza uma divisão estratificada aleatória, enquanto produção deveria considerar validação temporal;

- ainda não existe monitoramento automático de data drift e concept drift;

- o feedback precisaria de autenticação, autorização e revisão humana;

- latência, throughput e custo precisariam ser medidos no ambiente de implantação.

Como evolução, pretendo explorar explicabilidade com SHAP, rastreamento de experimentos, validação temporal e monitoramento contínuo da distribuição dos scores.

Tecnologias utilizadas

O projeto foi desenvolvido com:

- Python;

- pandas e NumPy;

- scikit-learn e imbalanced-learn;

- XGBoost;

- TensorFlow/Keras;

- FastAPI e Pydantic;

- Streamlit;

- ReportLab;

- pytest e Ruff.

Conclusão

O Fraud Sentinel mostra como um problema clássico de data science pode ser tratado como um sistema completo. O projeto vai da validação dos dados à inferência, passando por engenharia de features, comparação de modelos, calibração, API, interface e documentação.

Mais do que encontrar o algoritmo com a melhor métrica, o trabalho foi construir uma solução consistente, reproduzível e honesta sobre seus resultados e limitações.

Se quiser conhecer a implementação, executar o modo demonstrativo ou consultar o relatório técnico, acesse o projeto no GitHub:

https://github.com/davidsonsilva/desafio-dio-fraudes-cartao-credito

Compartir
Recomendado para ti
Bootcamp Bradesco - GenAI, Dados & Cyber
Bootcamp Afya - Automação de Dados com IA
Accenture - Python para Análise e Automação de Dados
Comentarios (0)