Vertex AI: como criar um modelo de detecção de fraudes com o AutoML

1. Visão geral

Neste laboratório, você vai usar a Vertex AI para treinar e fornecer um modelo com dados tabulares. Esta é a mais nova oferta de produto de IA no Google Cloud e está atualmente em pré-lançamento.

Conteúdo do laboratório

Você vai aprender a:

  • Fazer upload de um conjunto de dados gerenciado para a Vertex AI
  • Treinar um modelo com o AutoML
  • Implantar o modelo de AutoML treinado em um endpoint e usar esse endpoint para fazer previsões

O custo total da execução deste laboratório no Google Cloud é de aproximadamente US$22.

2. Introdução à Vertex AI

Este laboratório usa a mais nova oferta de produtos de IA disponível no Google Cloud. A Vertex AI integra as ofertas de ML do Google Cloud em uma experiência de desenvolvimento intuitiva. Anteriormente, modelos treinados com o AutoML e modelos personalizados eram acessíveis por serviços separados. A nova oferta combina ambos em uma única API, com outros novos produtos. Você também pode migrar projetos existentes para a Vertex AI. Se você tiver algum feedback, consulte a página de suporte.

A Vertex AI inclui vários produtos diferentes para dar suporte a fluxos de trabalho integrais de ML. Este laboratório se concentra nos produtos destacados abaixo: AutoML para dados tabulares, Previsão e Workbench.

Visão geral do produto Vertex

3. Configurar o ambiente

Para executar este codelab, você vai precisar de um projeto do Google Cloud Platform com o faturamento ativado. Para criar um projeto, siga estas instruções.

Etapa 1: ativar a API Compute Engine

Acesse o Compute Engine e selecione Ativar, caso essa opção ainda não esteja ativada. Você vai precisar disso para criar sua instância de notebook.

Etapa 2: ativar a API Vertex AI

Navegue até a seção "Vertex AI" do Console do Cloud e clique em Ativar API Vertex AI.

Painel da Vertex

Etapa 3: criar uma instância do Vertex AI Workbench

Na seção Vertex AI do Console do Cloud, clique em "Workbench":

Menu da Vertex AI

Em Notebooks gerenciados pelo usuário, clique em Novo notebook:

Criar um novo notebook

Em seguida, selecione a versão mais recente do tipo de instância TensorFlow Enterprise (com LTS) sem GPUs:

Instância do TFE

Use as opções padrão e clique em Criar.

Etapa 5: abrir o notebook

Depois que a instância for criada, selecione Abrir JupyterLab:

Abrir Notebook

Os dados que vamos usar para treinar nosso modelo são deste conjunto de dados de detecção de fraudes de cartão de crédito. Usaremos uma versão desse conjunto de dados disponibilizada publicamente no BigQuery.

4. Crie um conjunto de dados gerenciado

Na Vertex AI, é possível criar conjuntos de dados gerenciados para uma variedade de tipos de dados. Você pode gerar estatísticas sobre esses conjuntos de dados e usá-las para treinar modelos com o AutoML ou com seu próprio código de modelo personalizado.

Etapa 1: criar um conjunto de dados

No menu da Vertex no console, selecione Conjuntos de dados:

Selecionar conjuntos de dados

Neste laboratório, criaremos um modelo de detecção de fraudes para determinar se uma transação com cartão de crédito específica deve ou não ser classificada como fraudulenta.

Na página "Conjuntos de dados", dê um nome ao conjunto de dados e selecione Tabular e Regressão/classificação. Em seguida, crie o conjunto de dados:

Criar conjunto de dados

Há algumas opções para importar dados para conjuntos de dados gerenciados na Vertex:

  • Fazer upload de um arquivo local do computador
  • Como selecionar arquivos do Cloud Storage
  • Como selecionar dados do BigQuery

Aqui, vamos fazer o upload de dados de uma tabela pública do BigQuery.

Etapa 2: importar dados do BigQuery

Escolha "Selecionar uma tabela ou visualização do BigQuery" como método de importação e copie o seguinte na caixa Tabela do BigQuery: bigquery-public-data.ml_datasets.ulb_fraud_detection. Em seguida, selecione Continuar:

Importar dados do BQ

Você vai encontrar algo parecido com o seguinte após importar o conjunto de dados:

Dados importados

Se quiser, você pode clicar em Gerar estatísticas para ver mais informações sobre o conjunto de dados, mas isso não é necessário antes de prosseguir para a próxima etapa. Esse conjunto de dados contém transações reais de cartão de crédito. A maioria dos nomes das colunas foi ocultada, por isso são chamados de V1, V2 etc.

5. Treinar um modelo com o AutoML

Depois de fazer upload de um conjunto de dados gerenciado, você já pode treinar um modelo com esses dados. Vamos treinar um modelo de classificação para prever se uma transação específica é fraudulenta ou não. Há duas opções de modelos de treinamento na Vertex AI:

  • AutoML: treine modelos de alta qualidade com esforço mínimo e experiência em ML.
  • Treinamento personalizado: execute seus aplicativos de treinamento personalizados na nuvem usando um dos contêineres pré-criados do Google Cloud ou seus próprios.

Neste laboratório, vamos usar o AutoML para treinamento.

Etapa 1: iniciar o job de treinamento

Na página de detalhes do conjunto de dados em que você parou na etapa anterior, selecione Treinar novo modelo no canto superior direito. Selecione Classificação como objetivo, deixe AutoML selecionado para o treinamento do modelo e clique em Continuar:

Etapa 1 do treinamento do modelo

Dê um nome ao modelo ou use o padrão. Em Coluna de destino, selecione Classe. Esse número é um número inteiro que indica se uma transação específica foi fraudulenta (0 para não fraude, 1 para fraude).

Em seguida, selecione Continuar:

Etapa 2 do treinamento do modelo

Nesta etapa, role para baixo e clique para expandir Opções avançadas. Como esse conjunto de dados não tem balanceamento (menos de 1% dos dados contém transações fraudulentas), escolha a opção AUC PRC, que maximiza a recuperação de precisão para a classe menos comum:

Opções de treinamento avançado

Selecione Continuar e prossiga para a última etapa (Computação e preços). Insira 1 como o número de horas de uso do nó para seu orçamento e mantenha a parada antecipada ativada. Treinar seu modelo de AutoML por uma hora de computação normalmente é um bom começo para entender se há uma relação entre os atributos e o rótulo que você selecionou. A partir daí, você pode modificar seus atributos e treinar por mais tempo para melhorar o desempenho do modelo. Em seguida, selecione Iniciar treinamento.

Você vai receber um e-mail quando o job de treinamento for concluído. O treinamento levará um pouco mais de uma hora para contabilizar o tempo de ativação e eliminação de recursos.

6. Explore as métricas de avaliação de modelo

Nesta etapa, vamos conferir o desempenho do modelo.

Depois que o job de treinamento do modelo for concluído, acesse a guia Models na Vertex. Clique no modelo que você acabou de treinar e confira a guia Avaliar. Há muitas métricas de avaliação aqui. Vamos nos concentrar em duas: a Matriz de confusão e a Importância do atributo.

Etapa 1: entenda a matriz de confusão

Uma matriz de confusão informa a porcentagem de exemplos de cada classe no conjunto de teste que o modelo previu corretamente. No caso de um conjunto de dados desequilibrado, como o que estamos lidando, essa é uma medida melhor do desempenho do nosso modelo do que a precisão geral.

Lembre-se de que menos de 1% dos exemplos em nosso conjunto de dados foram transações fraudulentas. Portanto, se a precisão do nosso modelo for 99%, há uma boa chance de ele estar adivinhando aleatoriamente a classe não fraudulenta em 99% das vezes. Por esse motivo, observar a precisão do modelo para cada classe é uma métrica melhor.

Ao rolar para baixo na guia Avaliar, você vai encontrar uma matriz de confusão parecida com esta (as porcentagens exatas podem variar):

Matriz de confusão

A matriz de confusão mostra que nosso modelo inicial consegue classificar corretamente 85% dos exemplos fraudulentos no conjunto de teste. Isso é muito bom, especialmente considerando o desequilíbrio significativo do conjunto de dados. Em seguida, podemos tentar treinar o modelo por mais horas de computação para ver se podemos melhorar esses 85%.

Etapa 2: analisar a importância do recurso

Abaixo da matriz de confusão, você verá um gráfico de importância do recurso com esta aparência:

Importância do recurso

Isso mostra os recursos que forneceram o maior sinal para nosso modelo ao fazer previsões. A importância do recurso é um tipo de IA explicável, um campo que inclui diversos métodos para reunir mais informações sobre um modelo de ML que está fazendo previsões. O gráfico de importância do recurso mostrado aqui é calculado como um agregado, observando todas as previsões do modelo no conjunto de teste. Ele mostra os recursos mais importantes em uma série de exemplos.

Este gráfico seria mais legal se a maioria dos recursos no conjunto de dados não fosse obscurecida. Podemos descobrir, por exemplo, que o tipo de transação (transferência, depósito etc.) foi o maior indicador de fraude.

Em um cenário do mundo real, esses valores de importância do atributo podem ser usados para ajudar a melhorar nosso modelo e ter mais confiança nas previsões. Podemos decidir remover os atributos menos importantes na próxima vez que treinarmos um modelo ou combinar dois dos nossos atributos mais significativos em um cruzamento de atributos para ver se isso melhora o desempenho do modelo.

Aqui estamos analisando a importância do recurso em um lote, mas também é possível conferir a importância do recurso para previsões individuais na Vertex AI. Vamos conferir como fazer isso depois de implantar nosso modelo.

7. Implantação do modelo em um endpoint

Agora que temos um modelo treinado, a próxima etapa é criar um endpoint na Vertex. Um recurso de modelo na Vertex pode ter vários endpoints associados a ele, e você pode dividir o tráfego entre os endpoints.

Etapa 1: criar um endpoint

Na página do modelo, navegue até a guia Implantar e testar e clique em Implantar no endpoint:

Implantar e testar

Dê um nome ao endpoint, como fraud_v1, deixe o acesso definido como Padrão e clique em Continuar.

Deixe a divisão de tráfego e o tipo de máquina como as configurações padrão, clique em Concluído e em Continuar.

Não vamos usar o monitoramento de modelos para esse endpoint. Portanto, você pode deixar essa opção desmarcada e clicar em Implantar. Seu endpoint vai levar alguns minutos para ser implantado. Quando estiver concluído, uma marca de seleção verde vai aparecer ao lado dele:

Endpoint implantado

Você está chegando perto! Agora você está pronto para receber previsões em seu modelo implantado.

8. Receba previsões no modelo implantado

Há algumas opções para coletar previsões de modelo:

  • IU da Vertex AI
  • API Vertex AI

Mostraremos os dois aqui.

Etapa 1: receber previsões do modelo na interface

Na página do modelo em que o endpoint é mostrado (de onde paramos na última etapa), role para baixo até a seção Testar o modelo:

Testar modelo

Aqui, a Vertex AI escolheu valores aleatórios para cada um dos atributos do nosso modelo que podem ser usados para receber uma previsão de teste. Se quiser, você pode alterar esses valores. Role até a parte de baixo da página e selecione Prever.

Na seção Resultado da previsão da página, você vai encontrar a porcentagem prevista do modelo para cada classe. Uma pontuação de confiança de 0.99 para a classe 0, por exemplo, significa que seu modelo acha que o exemplo tem 99% de não ser fraudulento.

Etapa 2: receber previsões de modelo com a API Vertex AI

A interface é uma ótima forma de garantir que o endpoint implantado está funcionando conforme o esperado, mas é provável que você queira receber as previsões dinamicamente por uma chamada de API REST. Para mostrar como fazer previsões de modelo aqui, vamos usar a instância do Vertex Workbench que você criou no início do laboratório.

Em seguida, abra a instância de notebook que você criou e abra um notebook Python 3 na tela de início:

Abrir notebook

No notebook, execute o seguinte em uma célula para instalar o SDK do Vertex:

!pip3 install google-cloud-aiplatform --upgrade --user

Depois adicione uma célula no seu notebook para importar o SDK e criar uma referência ao endpoint que você acabou de implantar:

from google.cloud import aiplatform

endpoint = aiplatform.Endpoint(
    endpoint_name="projects/YOUR-PROJECT-NUMBER/locations/us-central1/endpoints/YOUR-ENDPOINT-ID"
)

Você terá que substituir dois valores na string endpoint_name acima pelo endpoint e número do seu projeto. Para encontrar o número do projeto, acesse o painel do projeto e confira o valor do Número do projeto.

O ID do endpoint pode ser encontrado na seção de endpoints do console:

Encontrar o ID do endpoint

Por último, faça uma previsão para seu endpoint copiando e executando o código a seguir em uma célula nova:

test_instance={
    'Time': 80422,
    'Amount': 17.99,
    'V1': -0.24,
    'V2': -0.027,
    'V3': 0.064,
    'V4': -0.16,
    'V5': -0.152,
    'V6': -0.3,
    'V7': -0.03,
    'V8': -0.01,
    'V9': -0.13,
    'V10': -0.18,
    'V11': -0.16,
    'V12': 0.06,
    'V13': -0.11,
    'V14': 2.1,
    'V15': -0.07,
    'V16': -0.033,
    'V17': -0.14,
    'V18': -0.08,
    'V19': -0.062,
    'V20': -0.08,
    'V21': -0.06,
    'V22': -0.088,
    'V23': -0.03,
    'V24': 0.01,
    'V25': -0.04,
    'V26': -0.99,
    'V27': -0.13,
    'V28': 0.003
}

response = endpoint.predict([test_instance])

print('API response: ', response)

Você vai encontrar uma previsão em torno de .67 para a classe 0, o que significa que o modelo acha que há 67% de chance de que essa transação não seja fraudulenta.

Parabéns! 🎉

Você aprendeu a usar a Vertex AI para:

  • Fazer upload de um conjunto de dados gerenciado
  • Treinar e avaliar um modelo em dados tabulares usando o AutoML
  • implante o modelo em um endpoint
  • Receba previsões em um endpoint de modelo usando o SDK para Vertex

Para saber mais sobre partes diferentes da Vertex AI, acesse a documentação.

9. Limpeza

Se você quiser continuar usando o notebook que criou neste laboratório, é recomendado que você o desligue quando não estiver usando. Na interface do Workbench no Console do Cloud, selecione o notebook e clique em Parar.

Se quiser excluir o notebook totalmente, clique no botão "Excluir" no canto superior direito.

Para excluir o endpoint implantado, acesse a seção Endpoints do console da Vertex AI e desimplante o modelo do endpoint:

Excluir endpoint

Para excluir o bucket do Storage, use o menu de navegação do console do Cloud, acesse o Storage, selecione o bucket e clique em "Excluir":

Excluir armazenamento