PROJETO: Análise e detecção de fraudes em transações imobiliárias

Parte 3

Nesta última parte, vamos aplicar as técnicas de detecção de fraude nos nossos dados, existem diversas técnicas para este tipo de análise e a aplicaremos aqui uma abordagem via aprendizado não supervisionado criando scores (pontuações) de fraude para cada transação imobiliária.

Serão criados 2 scores com técnicas diferentes de Machine Learning e depois vamos unir os scores e apresentar o score final, na primeira vamos utilizar o PCA para redução da dimensionalidade, sem perdermos informações dos dados e aplicamos um cálculo matemático, depois vamos aplicar deep learning com técnica de autoencoder e aplicamos o cálculo matemático.

Por fim uniremos os dois scores e calcularemos o score final, a Engenharia de atributos (Feature Engineering) será parte fundamental do Processo.

Sumário

Parte 1: Análise Exploratória</p>

1. Importando as bibliotecas e carregando os dados
2. Análise Exploratória dos dados
3. Conclusão

Parte 2: Limpeza, transformação e Feature Engineering</p>

1. Importando as bibliotecas e carregando os dados
2. Limpeza e transformação dos dados
2.1 Limpando valores ausentes da variável: ZIP
2.2 Limpando valores ausentes das variáveis: FULLVAL, AVLAND, AVTOT, BLDFRONT, BLDDEPTH, LTFRONT e LTDEPTH
2.3 Limpando valores ausentes da variável: STORIES
3. Engenharia de Atributos
4. Conclusão

Parte 3: Modelagem e calculo do Score de Fraude

  1. Importando as bibliotecas e carregando os dados
  2. Padronização das variáveis
  3. Aplicando PCA
    3.1. Aplicação da Escala Z em componentes PCA Padronizados
    3.2 Calculando o Fraud Score 1
  4. Aplicacando Deep Learning
    4.1 Construção do Modelo
    4.2 Avaliação do modelo
    4.3 Calculando o Fraud Score 2
  5. Calculando o Score Final do Score de Fraude e apresentando os Resultados
  6. Conclusão
  7. Referências

1. Importando as bibliotecas e carregando os dados

2. Padronização das variáveis

Para iniciar nosso trabalho por aqui, vamos padronizar as variáveis que criamos na etapa de Feature Engineering, então selecionamos somente essas variáveis.

Agora vamos utilizar essas variáveis para aplicar a padronização com StandardScaler()

3. Aplicando PCA

Após essa padronização, podemos aplicar o algoritmo PCA

Para o algoritmo do PCA precisamos saber o valor de componentes principais. E para fazer isso devemos verificar a soma cumulativa da variância explicada pelo modelo.

Podemos observar que o modelo foi treinado com nenhum parâmetro, com isso ele irá buscar a maior quantidade possíveis de componentes e é isso que nós queremos nesse momento.

Mas o que significa essa Variância Explicada?
Quer dizer que temos 36 variáveis no nosso modelo, quando aplico o PCA, ele irá buscar fazer um tipo de agrupamento, reduzindo minha dimensionalidade, porém as informações contidas devem ser a mesma do conjunto todo.

Por exemplo, podemos notar no gráfico abaixo, se eu subir uma linha no número 5 até cruzar com a minha curva que o ponto será aproximadamente 0.9 ou 90%, quer dizer que com 5 componentes principais meu modelo explica aproximadamente 90% da variância dos dados, ou seja, 90% das informações contidas nas 36 variáveis.

Mas é o suficiente?
Não exatamente, pois preferimos o máximo de informações. Selecionando 10 componentes, podemos ver que está bem próximo dos 100%, então 10 componentes principais conseguem explicar praticamente todas as informações contidas nas 36 variáveis, pois a perda será mínima e é aceitável.

Com isso reduzimos a dimensionalidade do modelo sem perder informação (ou uma perda bem pequena), então podemos observar no gráfico que acima de 10 componentes, o valor da variância se mantém praticamente constante, então se eu escolher quanquer quantidade de componentes, acima disso, não fará tanta diferença, além de poder estar induzindo o algoritmo à aprender demais, levando à overfitting e ter desperdício de recursos computacionais.

Como vimos, vamos ficar com 10 componentes, pois vimos que é o suficiente para nossa aplicação, treinaremos o modelo novamente com esses 10 componentes e aplicamos ao nosso conjunto de dados.

Cada coluna dessa explica uma parte do conjunto de dados e o total disso explica aproximadamente 98% de todas as informações contidas no conjunto original, que é a % de variância vista no gráfico acima.

Então vamos inserir esse resultado em um dataframe e em seguida vamos normalizar, pois podemos observar que os dados do algoritmo estão despadronizados.

3.1. Aplicação da Escala Z em componentes PCA Padronizados

Essa aplicação é com base em uma técnica usada já estabelecida e desenvolvida e que as pessoas já conhecem para análise e detecção de fraudes.

Na prática aplicamos a padronização duas vezes, uma antes de aplicar o PCA e agora, em cima do resultado do PCA, para então aplicarmos outro cálculo para termos nosso score de fraude.

3.2 Calculando o Fraud Score 1

Vamos agora calcular o Score de Fraude para o nosso modelo e a forma de encontrarmos o PCA antes é porque em vários livros de análises de fraudes é recomendável que use o resultado do PCA para encontrar um número, índice ou score que pode ser usado para explicar a variância nos dados.

O PCA é recomendado por carregar uma informação consolidada, ele cria componentes que resume a variância explicada nas variáveis do nosso conjunto de dados.

Agora vamos aplicar mais um cálculo que é elevar cada um dos valores do PCA ao quadrado.

Após calcular os scores de cada componente, vamos calcular o score final com uma soma e extraindo a raiz quadrada.

Esse é o primeiro score calculado, vamos gravar no dataframe final.

4. Aplicacando Deep Learning

Vamos criar agora um modelo AutoEncoder, essa abordagem é de aprendizado não supervisionado.

Após importar os pacotes, vamos iniciar nosso trabalho colocando em um dataframe os 10 componentes principais encontrados.

Então vou utiliza-los como entrada para o autoencoder, mas por que isso?

Isso é porque meus dados já estão compactos no PCA, como já mencionado anteriormente, então será usado para alimentar o modelo de deep learning para termos a saída.

Vamos agora dividir o conjunto em duas partes, um para treino e outra para teste do modelo do Autoencoder.

4.1 Construção do Modelo

Vamos então definir nosso modelo com a seguinte sequencia: Hiperparâmetros, input_layer, encoder e decoder.

Vamos trabalhar com 50 epocas e com batch size para caber na memória do computador, compilar o modelo com otimizador "adam", metrica de calculo do erro do modelo será "mean_squared_error" e métrica "acurácia".

Depois salvaremos o modelo em disco, vamos definir algums parametros para ir acompanhando o treinamento na tela e por fim o treinamos o modelo.

Podemos observar que a acurácia não está tão boa, pois quanto maior melhor enquanto que o erro do modelo (val_loss) está baixo e isso é muito bom, pois mesmo com essa acurácia baixa ele é um modelo que não erra tanto, portanto vamos utilizar dessa forma.

Não temos como saber com exatidão quando o modelo realmente está bom porque é um modelo não-supervisionado, ou seja, não há saída para comprovar os acertos.

4.2 Avaliação do modelo

Agora, vamos dar uma olhada com base no treino e teste como se comporta a curva do erro do modelo, plotando o seguinte gráfico.

Basicamente, treinamos o modelo nos dados de treino e aplicamos nos dados de teste e comparamos as performances e podemos observar que a diferença do resultado entre treino e o teste é pequena, isso mostra que o modelo está performando bem, se caso a diferença fosse grande, poderia ser que o modelo estaria com overfitting ou underfitting.

Mesmo tendo essa performance, poderiamos criar outras versões e comparar e também alterar os hiperparâmetros para ver se temos uma performance melhor.

Então, vamos fazer as previsões para o nosso modelo.

4.3 Calculando o Fraud Score 2

Como não temos uma saída, o modelo autoencoder compacta a entrada com os dados do pca, que foram os dados de entrada, o modelo então descompacta e essa descompactação é a saída gerada, que deveria ser o mesmo da entrada, mas geralmente não é, pois os modelos em geral tem uma taxa de erro e como analisamos esse, no gráfico acima, o erro é aceitável.

Vamos colocar as previsões no dataframe.

Então vamos criar um dataframe de zeros que em seguida receberá a diferença entre os valores das previsões e o pca normalizado na escala z, que é o valor real, ou seja, o erro da previsão e isso elevado ao quadrado.

O cálculo para o score 2 será definido tirando a raiz quadrada da soma dos valores do PCA desse novo dataframe.

Colocamos o Score 2 no dataframe original.

Observamos que em algumas situações os scores 1 e 2 são próximos e em outros casos não, e isso é devido ao erro aceitável do nosso modelo, que poderíamos tentar melhorar se desejássemos.

Mas como saber se o nosso modelo está correto, ou seja, como saber se realmente esses valores do score representam, de fato, uma fraude?

Quem deveria nos ajudar com isso são os tomadores de decisão ou conhecedores do negócio, checar se a transação com os valores mais altos são uma fraude na realidade ou ainda usar como uma referência, uma idéia geral podendo até aumentar eventualmente os valores, seja de seguro ou outra coisa, pelo risco ser alto de fraude, por exemplo.

5. Calculando o Score Final do Score de Fraude e apresentando os Resultados

Chegando ao final deste projeto, calcularemos então o Score Final, pois já calculamos dois scores e poderíamos inclusive calcular outros scores com outros algoritmos, mas isso irá acarretar em aumento do tempo de projeto e muitas das vezes vai depender da equipe de negócios.

Antes vamos calcular o RANK, com um método do pacote pandas, ele basicamente encontra o padrão linear de uma matriz para depois calcularmos o score final.

Primeiro será calculado o rank do score 1 e na sequencia o rank do score 2.

Então vamos organizar os dados, ordenando pela coluna do rank score 1.

Finalamente calculando o Score Final e salvando em disco.

6. Conclusão

O entregável desse projeto é entregar ao tomador de decisão o Score Final que indica uma possível fraude na transação, nesse caso imobiliária, podendo ter sido de compra ou venda de imóvel, passado uma titularidade de um proprietário para outro, entre outras.

Cada registro possui uma pontuação que poderá ser usado para uma análise, investigação e eventualmente um aumento do seguro, há inúmeras possibilidades.

Nosso próximo passo será criar um relatório em Power BI para deixar uma forma mais apresentável para os tomadores de decisão.

Um ponto importante à ressaltar é que o objetivo não é realizar previsões futuras e sim olhar para o histórico de transações e ajudar a empresa com uma possível fraude em algumas das transações, sendo possível ser usado pela Receita Federal ou algum Órgão Público, por exemplos, interessado em detectar eventuais problemas no setor imobiliário (neste caso).

7. Referências

Mini-projeto de estudo do curso de Business Analytics
https://www.datascienceacademy.com.br/

Soluções em detecção de fraudes
https://www.kdnuggets.com/solutions/fraud-detection.html

The Cutting Edge: Network Analytics for Financial Fraud Detection and Mitigation
http://www.analyticbridge.com/profiles/blogs/the-cutting-edge-network-analytics-for-financial-fraud-detection

Conceito da matrix-rank
https://www.mathsisfun.com/algebra/matrix-rank.html

Documentação da método rank do pandas
https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.rank.html