Detecção de fraudes em cartão de crédito com Machine Learning
Criação de modelo preditivo em Python — Data Science.
Intro
Hoje vamos desenvolver um modelo de ML (Machine Learning) para detecção de transações fraudulentas. Existem ‘n’ maneiras de fazer validações para encontrar esses tipos de transações.
Vamos usar a base de dados disponibilizada pelo Kaggle neste link para trainar e testar o nosso modelo.
Adendo: é bem difícil de encontrar esse tipo de dataset, entendo que seja devido ao nível de segurança das informações.
Mãos a obra!
Importando as bibliotecas necessárias para o projeto.
Importando dataset com as transações financeiras de cartão de crédito.
Explorando os dados
Exibindo as colunas do dateset. As colunas foram anonimizadas através do PCA para preservar as informações iniciais. Os únicos dados que estão de forma ‘original’ é a coluna Time (Tempo entre a primeira transação do dateset e próxima), Amout (Valor da transação) e Class (Flag para definir o que é fraude)
Index(['Time', 'V1', 'V2', 'V3', 'V4', 'V5', 'V6', 'V7', 'V8', 'V9', 'V10',
'V11', 'V12', 'V13', 'V14', 'V15', 'V16', 'V17', 'V18', 'V19', 'V20',
'V21', 'V22', 'V23', 'V24', 'V25', 'V26', 'V27', 'V28', 'Amount',
'Class'],
dtype='object')
O processo da análise exploratória de dados (EDA — Exploratory Data Analysis) consiste em desenvolver vários testes e informações inicias para suportar o processo.
Um desses passos é criar um mapa de calor das features disponíveis e encontrar as mais relevantes para o modelo de ML.
Para quem não conhece esse recurso, é muito simples. Quanto maior o valor da correlação entre cada variável (N a N) o gráfico fica mais claro.
Vamos manter em mente essas variáveis que possuem maior nível de correlação.
Dica: Não confunda correlação com causa e consequência, nem sempre isso está totalmente correlacionado.
Checando os valores nulls.
Geralmente é bem difícil encontrar um dataset que não possua valores ‘missing’. Nesse caso iremos poupar tempo de data cleaning e ajustes no dataset.
Análise das features em “V” em gráficos boxplot.
Mesmo o esse dataset ter sido disponibilizado com dados aparentemente padronizados temos uma grande quantidade de outliers conforme imagens acima. Nesse primeiro momento não vamos fazer nenhum tipo de alteração no dataset para balancear feature por feature.
Plotando a distribuição da feature “Class”.
Como temos um dateset muito desbalanceado (imagem acima) é necessário balancear os dados para criar o modelo de Machine Learning.
A base possui cerca de 492 casos de fraudes, dessa forma vamos selecionar essa mesma quantidade de linhas de transações normais e criar um dataset balanceado (ou retirar uma amostragem).
Separando o dateset entre base para treinamento (X) e target (y).
Separando o data para treino e teste colocando usando o shuffle para ‘embaralhar’ os dados.
Criar o modelo de regressão usando o algoritmo RandomForest do Sklearn. Treinar o modelo para ser preditivo.
Treinando e testando o modelo
Vamos usar dois métodos para verificar a efetividade do nosso modelo. O ACCURRACY SCORE e o ROC AUC SCORE.
Conclusão
Apesar que o dataset omitir as informações na sua forma bruta, isso não é um impeditivo para criarmos o modelo preditivo. Esse dataset já vem de uma forma muito amigável para trabalhar com os dados, o que deixa um pouco do trabalha de um cientista de dados bem mais fácil.
Para um bom aprendizado nessa área eu sugiro fortemente você testar vários datasets de formatos e situações diferentes.
O código fonte do notebook usado no artigo está disponibilizado no Kaggle.
Referências e Links úteis
Github
https://github.com/wesleykaoru
https://www.linkedin.com/in/wesleywatanabe
Kaggle notebook
https://www.kaggle.com/wesleywatanabe/credit-fraud-random-forest-classifier