Decisão de crédito utilizando machine learning e visão computacional

Lennon Alves Dias
Comunidade XP
4 min readMay 10, 2020

--

Neste projeto abordamos a utilização de APIs e bibliotecas de visão computacional e aprendizado de máquina para criação de um motor de decisão de crédito. As tecnologias que foram utilizadas neste projeto são: Python, Jupyter, IBM Watson, Microsoft Azure Computer Vision, Docker e GitHub Actions.

Identificação da face durante execução do motor de decisão de crédito.

⚙ Setup

A instalação dos requisitos do projeto podem ser feitas utilizando o comando python -m pip install -r requirements.txt. Caso deseje, dentro da pasta envvocê pode acessar o environment (venv) virtual com o comando source ./env/Scripts/activate.

Caso encontre algum problema com a instalação da biblioteca dlib, é possível realizar a instalação através do seguinte comando:

🧐 Visão Geral

Para a demonstração e visão geral do projeto, foi criado um vídeo apresentando o repositório e a execução do motor principal de decisão de crédito:

🧠 Modelo

O arquivo training.pyé responsável por criar e treinar os classificadores e regressores utilizados para os modelos 01 e 02. Nele são definidas as variáveis utilizadas para cada modelo, assim como é apresentada a acurácia atingida.

🌎 API

Utilizando Flask, foi criado o arquivo server.pypara expor os endpoints de predição dos modelos. Dessa forma é possível que o serviço seja utilizado em clientes web, aplicações console, …, ou até mesmo um Jupyter Notebook (como faremos neste projeto), com uma simples requisição REST.

Exemplo de requisição utilizando cURL:

⚖ Decisão de Crédito

O arquivo principal do projeto é o decisor.ipynb. Nele além de algumas funções utilitárias e definições de variáveis, são construídas as funções:

  • validate_person: Utiliza a API de classificação defaultde imagem da IBM, procura-se a identificação da classe personno retorno da chamada.
  • validate_explicit: Utiliza a API de classificação explicitde imagem da IBM, procura-se a identificação da classe explicitno retorno da chamada.
  • facial_recognition: Utiliza a API de reconhecimento facial da Azure, procura-se por faces na foto e, para cada face encontrada, é desenhado um retângulo em sua volta, assim como marcado os pontos fiduciais da foto.

Por definição, um ponto fiducial facial (PFF) — em inglês, facial landmark, ou simplesmente landmark — é aquele localizado em uma posição específica da face humana que garanta sua existência na maioria das observações. Esses pontos normalmente marcam características salientes como: cantos e centros dos olhos, bordas da boca, centro do nariz e sobrancelhas, não se limitando a estes.

KATSIKITIS, M. The human face: measurement and meaning. Kluwer Academic Publishers, 2003

  • predict_model: Utiliza a bilioteca requestspara realizar a requisição que retorna a predição dos modelos.
  • identify_face: Utiliza a biblioteca opencve o classificador haarcascadepara reconhecimento e marcação de uma face.
  • get_fiducial_pointse identify_fiducial_points : Utiliza a biblioteca dlibe o modelo shape_predictor_68 para identificação e marcação dos pontos fiduciais faciais.

O último bloco do arquivo é responsável pela decisão lógica do empréstimo, baseado nas seguintes regras:

  • Validar se a imagem possui uma pessoa (se não, negar).
  • Validar se a imagem possui conteúdo explícito (se sim, negar).
  • Validar a idade da pessoa (se a imagem diferir em 5 anos da cadastrada, negar).
  • Validar o gênero da pessoa (se não for o mesmo do cadastro, negar).
  • Score de predição 01 igual à 0.
  • Score de predição 02 menor ou igual à 0.7.

🚀 Deploy

Foi construída uma esteira automatizada utilizando o GitHub Actions, com pouco esforço temos nossa API e/ou nosso modelo atualizado no servidor pronto para ser utilizado.

Para essa esteira, temos os seguintes passos:

  • Setups do workflow.
  • Setup do Python.
  • Instalação dos requisitos necessários para execução dos scripts.
  • Execução do script de criação e treinamento do modelo.
  • Login do Docker Registry privado utilizando secrets.
  • Build do Dockerfile da API no ambiente do GitHub e criação e tagueamento da imagem para o servidor.
  • Deploy da aplicação atualizando o container no servidor.

--

--

Lennon Alves Dias
Comunidade XP

Computer Scientist, Developer. Computer Science (UTFPR/PG — 2015). Artificial Intelligence & Machine Learning (FIAP/SP — 2020).