O blog da AWS

Usando o SQL com o Amazon Redshift ML para criar modelos de cálculo de risco de crédito no Amazon Redshift

Por Luisa Vesga, Arquiteta de Soluções para Startups de AWS

O Amazon Redshift ML facilita para analistas de dados e desenvolvedores criar, treinar e aplicar modelos de aprendizado de máquina usando comandos SQL familiares no Amazon Redshift. Você pode aproveitar os recursos do Amazon Sagemaker (serviço de aprendizado de máquina totalmente gerenciado) usando o Amazon Redshift ML, sem precisar aprender novas ferramentas ou novos idiomas. Com consultas SQL simples, você pode criar e treinar um modelo de aprendizado de máquina usando os dados no Redshift e, em seguida, usar os modelos para fazer previsões. O Redshift ML disponibiliza o modelo de Machine Learning como um recurso SQL no Redshift Data Warehouse, para que você possa aplicá-lo diretamente a consultas e relatórios.

Como a análise preditiva funciona no Amazon Redshift com o Amazon SageMaker

Com o Redshift ML, você pode incorporar previsões como detecção de fraudes, pontuação de risco e previsão de desistência diretamente em consultas e relatórios. A função SQL permite que você aplique o modelo de ML aos dados em consultas e relatórios. Por exemplo, você pode executar o recurso SQL “risco de crédito do cliente” em novos dados de clientes em seu data warehouse regularmente para prever clientes de alto risco e enviar essas informações às equipes de negócios para ação preventiva.

Resumo da solução

Inicialmente, para essa demonstração, treinaremos um modelo para prever quem são clientes potencialmente de alto risco em uma instituição financeira. O dataset utilizado na demonstração foi retirado deste Blog Post e foi publicado no repositório Machine Learning da UCI (University of california, Irvine). Link para baixar o dataset

Pelos padrões atuais, o dataset que será utilizado é bem pequeno, com apenas 1.001 registros, onde cada registro possui 14 atributos para descrever o perfil do cliente de uma instituição financeira. Os atributos são:

existingcheking – Status da conta corrente existente

    duration – Duração em meses de atividade com a entidade

    creditamount – Indica a quantia de crédito solicitada

    savings – economia atual do cliente

    employmentsince – Indica se é um funcionário e a duração do emprego

    sex — Indica o sexo do cliente

    status — Estado civil do cliente

    age — Idade do cliente

    housing Tipo de moradia do cliente

    existingcredits – Indica o número de créditos que o cliente tem atualmente

    job — Indica se o cliente está empregado ou não

    jobtype — Tipo de emprego do cliente

    dependents Número de dependentes do cliente

    risk – Indica se o cliente representa risco ou não

O atributo Risk é conhecido como atributo target (label), que é o atributo que o modelo preverá. Como o atributo alvo é binário, o modelo fará uma previsão binária, mais conhecida como classificação binária.

Nota: Esta é uma demonstração com um conjunto de dados relativamente pequeno.  Em um cenário real, você provavelmente precisará de um conjunto de dados maior para melhorar a precisão do modelo. 

O Redshift ML lida com todas as interações entre o Amazon Redshift, o S3 e o Amazon SageMaker, incluindo todas as etapas envolvidas no treinamento e na compilação. Quando o modelo é treinado, o Redshift ML usa o Amazon SageMaker Neo para otimizar o modelo para implantação e disponibilizá-lo como uma função SQL.

Criando os recursos necessários (pré-requisitos)

1. Para começar, você precisa criar uma função (role) do IAM com permissões de acesso do Amazon S3.

2. É necessário criar um bucket do S3 e salvar o conjunto de dados de treinamento e inferência.

3. Além disso, é necessário ter um cluster do Redshift provisionado. Você pode criar o cluster por meio do console ou fazer isso por meio de um modelo do Cloud Formation.

Criando o cluster a partir do console

  1. Acesse o AWS Management Console e abra o console do Amazon Redshift https://console.aws.amazon.com/redshift/

Importante: Se as credenciais do IAM estiverem sendo usadas, verifique se você tem as permissões necessárias para executar operações no cluster.  Para obter mais informações, consulteguia de administração do Amazon Redshift.

  1. No canto superior direito, escolha a região da AWS na qual você deseja criar o cluster. Para esta demonstração, será utilizado us-west-2 (Oregon).
  2. No painel de navegação, selecione “Cluster” e escolha criar um cluster. A página para criar o cluster é exibida.
  3. Escolha large para o tipo de nó na seção computação otimizada. Em seguida, defina 2 para o número de nós.
  4. Na seção Detalhes do cluster, especifique valores para o identificador do cluster, a porta do banco de dados, o usuário mestre e a senha do usuário mestre.
  5. Na seção de permissões, escolha uma função do IAM disponível (essa função deve ter acesso ao Amazon S3). Em seguida, escolha adicionar função do IAM e adicioná-la à lista de funções do IAM para o cluster.
  6. Escolha, crie cluster.

Criando o cluster a partir de um modelo do Cloud Formation.

  1. Para criar esse cluster e configurar componentes de segurança e rede automaticamente usando o Cloud Formation, use o seguinte link: Modelo do Cloud Formation e siga as etapas.

Preparando os dados

Informações do dataset: O conjunto de dados contém 1.001 registros, em que cada registro usa 14 atributos para descrever o perfil do cliente de uma instituição financeira. O objetivo da classificação é prever, com base em atributos, se o cliente representa um alto risco para a entidade ou não.

Atributos/variáveis de entrada:

  1. existingcheking
  2. duration
  3. creditamount
  4. savings
  5. employmentsince
  6. sex
  7. status
  8. age
  9. housing
  10. existingcredits
  11. job
  12. jobtype
  13. dependents
  14. risk

Variáveis objetivo/saída:

  1. risk

Definição: O cliente representa um alto risco para a entidade? (Binário: “Sim”, “Não”)

  1. Usaremos o Redshift Query Editor:

a. No console do Redshift, clicar em “Editor” no painel esquerdo.

b. Clicar no botão “Conectar ao banco de dados” ->” criar nova conexão”

Nota: Se você estiver usando um usuário/função que tenha privilégios “redshift:getClusterCredentials”

c. No cluster, o nome do banco de dados e usuário do banco de dados devem ser preenchidos. Clique em “conectar”.

d. Assim que for criada a conexão com o banco de dados, criar a tabela e carregar os dados de treinamento:

CREATE TABLE risk_prediction_training(
   existingchecking varchar,
   duration numeric,
   creditamount numeric,
   savings varchar,
   employmentsince varchar,
   sex varchar,
   status varchar,
   age numeric,
   housing varchar,
   existingcredits numeric,
   job varchar,
   jobtype varchar,
   dependents numeric,
   risk boolean );


COPY risk_prediction_training from '<REEMPLAZAR CON EL URI DEL OBJETO EN S3>' REGION 'us-west-2' IAM_ROLE '<REEMPLAZAR CON EL ARN DEL ROL>' CSV IGNOREHEADER 1 delimiter ',';

e. Criar a tabela de inferência e carregar os dados para testar o modelo:

CREATE TABLE risk_prediction_inference(
existingchecking varchar,
duration numeric,
creditamount numeric,
savings varchar,
employmentsince varchar,
sex varchar,
status varchar,
age numeric,
housing varchar,
existingcredits numeric,
job varchar,
jobtype varchar,
dependents numeric,
risk boolean );

COPY risk_prediction_inference from '<REEMPLAZAR CON EL URI DEL OBJETO EN S3>' REGION 'us-west-2' IAM_ROLE '<REEMPLAZAR CON EL ARN DEL ROL>' CSV IGNOREHEADER 1 delimiter ',';

f. Verificar se as tabelas foram criadas, no painel lateral (esquerdo).

Crie o modelo

O modelo pode levar aproximadamente 60 minutos para ser treinado (dependendo do tempo de execução definido).

O Amazon Sagemaker Autopilot escolherá o melhor modelo a ser aplicado ao nosso problema de classificação binária com base nos dados de entrada.

  1. Use o comando a seguir para excluir um modelo que foi criado anteriormente para não entrar em conflito com a criação do novo modelo.

DROP MODEL risk_prediction_model;

  1. Executar os seguintes comandos para criar o modelo:
CREATE MODEL risk_prediction_model
FROM (
SELECT   
   existingchecking,
   duration,
   creditamount,
   savings,
   employmentsince,
   sex,
   status,
   age,
   housing,
   existingcredits,
   job,
   jobtype,
   dependents,
   risk
FROM
    risk_prediction_training )
    TARGET risk
FUNCTION func_churn_prediction_model
IAM_ROLE '<REEMPLAZAR CON EL ARN DEL ROL>'
SETTINGS (
  S3_BUCKET '<REEMPLAZAR CON EL NOMBRE DEL BUCKET>',
  MAX_RUNTIME 3600
  )
;

NOTA: Pode ocorrer um erro na execução da criação do modelo porque o Sagemaker não pode assumir a função.  Certifique-se de que a função tenha a “relação de confiança”, na qual ela permite que a entidade sagemaker.amazonaws.com assuma a função. 

Valide o modelo

  1. Executar o seguinte comando para obter alguns dados do modelo, onde também é possível visualizar o estado do modelo, neste caso, ele está no estágio de treinamento

mostrar modelo risk_prediction_model;

  1. Quando o modelo estiver pronto, o status deve ser alterado para “PRONTO”. Devemos prestar atenção à métrica de validação: f1 Score, que pode estar entre 0 e 1 e determina o quão bom é o modelo. Quanto mais próximo de 1, melhor o modelo.

  1. Primeiro, verificar a precisão do modelo.
--Inferencia nos dados de teste
WITH infer_data
 AS (
    SELECT risk as actual,
func_risk_prediction_model(existingchecking,duration,creditamount,savings,employmentsince,sex,status,age,housing,existingcredits,job,jobtype,dependents)AS predicted,
     CASE WHEN actual = predicted THEN 1::INT
         ELSE 0::INT END AS correct
    FROM risk_prediction_inference
    ),
 aggr_data AS (
     SELECT SUM(correct) as num_correct, COUNT(*) as total FROM infer_data
 )
 SELECT (num_correct::float/total::float) AS accuracy FROM aggr_data;

  1. Em seguida, será utilizada a função criada pelo modelo escolhido pelo Autopilot para inferência contra o conjunto de dados da tabela risk_prediction_inference
--Preveja quantos clientes representam um alto risco
WITH term_data AS ( SELECT func_risk_prediction_model (existingchecking,duration,creditamount,savings,employmentsince,sex,status,age,housing,existingcredits,job,jobtype,dependents) AS predicted
FROM risk_prediction_inference)
SELECT
CASE WHEN predicted = 'Y'  THEN 'Riesgo alto'
     ELSE 'Riesgo bajo'
     END as risk_prediction,
COUNT(1) AS count
from term_data GROUP BY 1;

 

Conclusão

Nesta publicação, analisamos e usamos brevemente, um caso de uso de ML relevante para o setor financeiro. Introduzimos o Redshift ML e descrevemos como ele permite que os usuários de SQL criem, treinem, implantem e usem ML com comandos SQL simples sem aprender ferramentas externas.

O Redshift ML também permite que especialistas em ML, como cientistas de dados, criem rapidamente modelos de ML para simplificar seu desenvolvimento, gerenciamento e eliminar a necessidade de exportar dados do Amazon Redshift.

Este artigo foi traduzido do Blog da AWS em Espanhol.

 

 


Sobre o autor

Luisa Vesga é arquiteta de soluções da equipe de Startups da Amazon Web Services. Em sua função, ela ajuda as startups a superar os desafios de negócios utilizando a plataforma da AWS. Ela tem mais de 10 anos de experiência no campo de tecnologia.

 

 

 

 

Sobre o tradutor

Evandro Franco é um arquiteto de soluções do time de Startups na Amazon Web Services. Em sua função, ele ajuda as Startups a superar os desafios de negócio utilizando a plataforma da AWS. Ele tem mais de 15 anos de experiência na área de tecnologia. Em seu tempo livre, gosta de correr e passar tempo com sua família.