Detecção de Fraudes em Cartões de Crédito

Atualizado: 17 de mar.

Entenda o papel da tecnologia na resolução do problema das fraudes em cartões e crédito. Você já passou por isso? Continue ligado para saber como isso acontece e como evitar!


Uma das principais preocupações das instituições financeiras como bancos e fintechs são as fraudes no cartão de crédito. O Brasil sofreu aumento de 32,7% nas tentativas de fraudes em e-commerce no primeiro semestre de 2021 na comparação com o mesmo período do ano passado, conforme mostra o estudo Mapa da Fraude, da consultoria Clearsale. Foram 2,6 milhões de tentativas observadas pelo estudo nos primeiros seis meses deste ano, considerando cerca de 182 milhões de transações via cartão de crédito. As fraudes envolvendo cartões de crédito são de grande relevância, uma vez que a sua não-detecção acarretará prejuízos consideráveis, tanto para o consumidor quanto para a instituição financeira.


Um outro fator a ser considerado é a quantidade de falsos positivos, ou seja, aquelas vezes em que você tentou fazer uma compra e teve seu cartão bloqueado preventivamente — o que provavelmente gerou estresse e constrangimento.


Por todos esses motivos, o investimento na área de detecção de fraudes por meio de Inteligência Artificial vem crescendo a cada ano, representando uma grande oportunidade em Data Science.


Dispondo de grandes volumes de dados como base histórica, um algoritmo de machine learning apenas um pouco melhor que os anteriores já representa uma economia de milhões de Reais. E esse é o desafio, aprimorar cada vez mais o uso de algoritmos visando inibir ou evitar transações fraudulentas.


Importação dos Dados


Os dados que utilizaremos nesse projeto foram disponibilizados por uma empresa europeia de cartão de crédito. Esse conjunto de dados foi descaracterizados devido a problemas ligados a segurança e privacidade, portanto as variáveis são todas numéricas representadas por V1, V2, V3… V28.


O primeiro passo é importar os pacotes e bibliotecas que iremos utilizar para manipular os dados.


Link da página: Base de Dados


Após a importação dos pacotes e bibliotecas que iremos usar, é necessário verificar as características do dataset. Quantas colunas o arquivo possui? Quantas entradas (Linhas)? Isso nos ajuda a saber o quão grande é a base que estamos manipulando.


No caso do arquivo em questão, ele possui 31 variáveis (Colunas) e 284.807 entradas (Linhas).


O objetivo aqui é usar um modelo de marchine learning para identificar transações fraudulentas, portanto um passo importante é separar o conjunto de dados original em dois. Por quê? Um deles, será usado para treinar o modelo, ou seja, o algoritmo vai olhar para meu conjunto de dados e aprender com ele. O algoritmo irá utilizar o segundo conjunto de dados para prever com dados que ele nunca viu antes. Assim conseguiremos avaliar a performance das previsões futuramente.


Análise Exploratória


Com o conjunto de dados importado, pacotes e bibliotecas prontas, conjunto de teste e validação do jeito adequado, vamos partir para a análise exploratória. Lembrando que, nossa variável alvo é a coluna Class representada como:

  • 0: Transações Normais

  • 1: Transações Fraudulentas

Analisando as primeiras entradas podemos identificar que as variáveis Amount e Time apresentam seus valores originais e foram preservadas.


Ao analisar o resumo estatístico o que me chama mais atenção é a coluna Amount, pois podemos ver que ela possui valores como:

  • Média = 88.61

  • Max = 19656.53

  • Desvio Padrão = 247.65

Isso significa que a maioria das transações é composta por valores menores. Analisar o resumo estatístico do conjunto de dados é importante, pois podemos identificar se ele possui outliers (valores discrepantes) que podem interferir na média e no restante dos dados.



Dados ausentes, assim como outliers, são detalhes importantes que devemos considerar. Para isso é necessário verificar se as variáveis (colunas) do conjunto possuem muitos valores faltantes.

Podemos ver que não será necessário nenhum tratamento relacionado a valores ausentes. O conjunto de dados usado está bem completo.

Outro ponto importante é a distribuição dos dados. Conforme mencionado anteriormente, a variável alvo é Class, portanto podemos ver abaixo que as transações fraudulentas representam apenas 0,17% do todo. E isso fica ainda mais evidente quando plotamos em um gráfico de barras.


Uma outra informação interessante é a visualização das classes por tempo, usando a variável Time. Para verificar a distribuição de ambas (0 e 1). Este tipo de visualização é importante para que possamos verificar algum padrão de frequência.

Agora iremos plotar um gráfico de boxplot para verificar se há alguma diferença no padrão das transações, utilizando a variável Amount. Abaixo podemos ver claramente a diferença na distribuição entre as duas classes. As informações estatísticas para Fraude mostram que a sua média exata está em 123.70 e a mediana em 11.40.


Como ler o boxplot do nosso projeto:




Além de conseguir ver no boxplot, podemos também gerar com mais detalhes as estatísticas na variável Amount para “Fraudes”.

Conclusão da Análise Exploratória


  • Foi possível identificar que os dados estão muito desbalanceados, pois as transações fraudulentas representam apenas 0.17%.

  • O conjunto de dados não possui valores ausentes

  • As colunas Time e Amount não estão normalizadas

Preparação de Dados


Nesta etapa iremos preparar os dados para que possamos usar o modelo de regressão logística.

  • Padronizar as features Amount e Time

  • Balancear os dados para evitar uma baixa performance

  • Dividir entre dados de treino e teste

Após a padronização dos dados, iremos dividi-los em treino e teste.

Usando a biblioteca imblearn é possível aplicar facilmente técnicas de balanceamento de dados. No caso, a opção neste projeto foi usar Under-sampling, preservando a classe minoritária.


É fácil ver que não há mais aquela discrepância inicial (gráfico de barras no início deste notebook).

Agora com os dados balanceados podemos plotar uma matriz de correlação para saber quais variáveis estão mais relacionadas.


Observe abaixo que antes do balanceamento a matriz de correlação não mostra absolutamente nada.



Modelo de Machine Learning


Com todos os dados preparados e após uma análise exploratória completa, irei construir um classificador usando a Regressão Logística.


Após instanciar o modelo, ele será treinado em cima dos dados em X_rus e y_rus. Na sequência, serão realizadas as previsões sobre os dados de teste.

Com o modelo treinado e as previsões feitas, vamos partir para a parte de avaliar o desempenho. Precisamos saber se o modelo está tendo uma assertividade plausível ou não.


Neste tipo de problema, originalmente desbalanceado, a acurácia não é uma métrica adequada, pois ele pode ter uma acurácia de 99% e detectar menos de 60% das fraudes.


Uma métrica interessante para avaliar a eficácia é a AUC ROC.

ROC (Receiver Operating Characteristic):


A curva ROC mostra a capacidade de um modelo criado de distinguir entre uma coisa e outra (Pode ser 1 e 0 ou positivo e negativo).


O ROC possui dois parâmetros:

  • Taxa de verdadeiro positivo (True Positive Rate), que é dado por true positives (true positives + false negatives).

  • Taxa de falso positivo (False Positive Rate), que é dado por false positives / (false positives + true negatives).

AUC (Area Under the ROC Curve):


O valor de AUC varia entre 0,0 e 1,0. Acima de 0,5 o algoritmo classifica em uma classe e abaixo desse valor o algoritmo classifica em outra. Quanto maior o AUC melhor!


OBS: AUC nada mais é do que um resumo da curva ROC.


No caso do nosso modelo de regressão logística, tem-se 96% de AUC.


Fazendo Previsões com Dados de Teste


No começo deste projeto dividimos os dados em treino, validação e teste. É nesta fase que iremos utilizar o modelo com os dados de teste, pois anteriormente instanciamos o modelo e fizemos previsão com o conjunto de validação.


Para esta etapa será necessário padronizar as colunas Time e Amount. Um ponto importante é que nesta fase não iremos balancear os dados pois pode haver perdas.



Conclusão


O que podemos concluir com o último resultado da avaliação do modelo:

  • O modelo teve uma acurácia de 0.96, o que significa que a cada 100 transações, 96 são identificados pelo modelo.

  • AUC de 0.95, o que significa que de 100 transações fraudulentas o modelo acertou 95, classificando-as como fraude, e as outras 5 fraudulentas ele classificou como transações normais (Precisão de 95%).

Obviamente, apesar do bom resultado, há espaço para testar o desempenho com outros algoritmos de classificação, além de otimizar seus parâmetros.


Trazendo nossa conclusão para uma visão mais estratégica, voltado para o negócio, podemos ver a importância da ciência de dados no dia a dia de uma empresa de cartão de crédito, que pode perder milhões em alguns segundos.



O que achou deste conteúdo? Agora você sabe que melhor que corrigir os erros, é prevenir os prejuízos com a ciência de dados. Curta, comente e compartilhe para que mais pessoas possam se livrar das fraudes!💜🦾


Link para o código do projeto: gabrielreversi/AnalisesExploratorias (github.com)