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 atualmente está em pré-lançamento.

Conteúdo do laboratório

Você vai aprender a:

  • Fazer upload de um conjunto de dados gerenciado na Vertex AI
  • Treinar um modelo com o AutoML
  • Implantar seu modelo treinado do AutoML em um endpoint e usá-lo para receber 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. Os produtos destacados abaixo são o foco deste laboratório: 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 novo notebook

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

Instância TFE

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

Etapa 5: abrir seu 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 Vertex do 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 a opção "Selecionar uma tabela ou visualização do BigQuery" como seu método de importação. Em seguida, 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ê verá algo parecido com o seguinte depois de importar seu 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 de coluna 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, estamos prontos para treinar um modelo com esses dados. Vamos treinar um modelo de classificação para prever se uma transação específica é fraudulenta. 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 de onde você parou na etapa anterior, selecione Treinar novo modelo no canto superior direito. Selecione Classificação como objetivo, deixe o AutoML selecionado para o treinamento do modelo e clique em Continuar:

Etapa 1 do treinamento de 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 de modelo

Nesta etapa, role para baixo e clique para expandir Opções avançadas. Como esse conjunto de dados está muito desequilibrado (menos de 1% dos dados contêm transações fraudulentas), escolha a opção AUC PRC, que vai maximizar o recall 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 deixe a parada antecipada ativada. Treinar seu modelo do 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ê 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 nosso modelo.

Depois que o job de treinamento do modelo for concluído, acesse a guia Modelos na Vertex. Clique no modelo que você acabou de treinar e confira a guia Avaliar. Existem 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: entender a matriz de confusão

Uma matriz de confusão informa a porcentagem de exemplos de cada classe em nosso 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 acurácia 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 isso, observar a acurácia do modelo para cada classe é uma métrica melhor aqui.

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 é capaz de classificar corretamente 85% dos exemplos fraudulentos no conjunto de teste. Isso é muito bom, especialmente considerando nosso desequilíbrio significativo de 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 atributo

Abaixo da matriz de confusão, é mostrado um gráfico de importância de atributos semelhante a este:

Importância do recurso

Isso mostra quais atributos forneceram o maior indicador para o modelo ao fazer previsões. A importância do atributo é um tipo de Explainable AI, um campo que inclui vários métodos para conseguir mais insights sobre um modelo de ML é fazer previsões. O gráfico de importância do atributo mostrado aqui é calculado como um agregado, analisando todas as previsões do modelo no conjunto de teste. Ele mostra os atributos mais importantes em uma série de exemplos.

Este gráfico seria mais empolgante se a maioria dos atributos do nosso conjunto de dados não fosse ocultada. 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 real, esses valores de importância do atributo podem ser usados para melhorar o 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 de nossos atributos mais significativos em um cruzamento de atributos para ver se isso melhora o desempenho do modelo.

Estamos analisando a importância do atributo em um lote aqui, mas também podemos conferir a importância do atributo para previsões individuais na Vertex AI. Vamos aprender a fazer isso depois de implantar o 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 seu 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, defina o acesso 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 este endpoint. Portanto, deixe essa opção desmarcada e clique em Implantar. Seu endpoint vai levar alguns minutos para ser implantado. Quando terminar, você verá uma marca de seleção verde 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 podemos usar 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, a porcentagem prevista do seu modelo para cada classe é exibida. 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 maneira de garantir que o endpoint implantado esteja funcionando conforme o esperado, mas é provável que você queira receber previsões dinamicamente por uma chamada da 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 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ê vai precisar substituir dois valores na string endpoint_name acima pelo endpoint e número do projeto. O valor do Número do projeto pode ser encontrado no painel.

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

Encontre 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ê verá uma previsão em torno de .67 para a classe 0, o que significa que o modelo acredita que há 67% de chance de essa transação não ser 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 IU do Workbench no Console do Cloud, selecione o notebook e, em seguida, clique em Parar.

Se quiser excluir o notebook completamente, basta clicar no botão Excluir no canto superior direito.

Para excluir o endpoint implantado, acesse a seção Endpoints do console da Vertex AI e remova a implantação do 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