Monitorar recursos

O Vertex AI Feature Store permite programar e executar trabalhos de monitoramento de recursos para monitorar dados de recursos, extrair estatísticas de recursos e detectar desvios de recursos. Só é possível monitorar dados de recursos se você tiver registrado a fonte de dados de recursos no Registro de atributos.

Para monitorar os dados de elementos, crie o recurso FeatureMonitor em um recurso FeatureGroup. Ao criar o recurso FeatureMonitor, você pode configurar a programação de monitoramento para executar periodicamente jobs de monitoramento nos dados do recurso. Como alternativa, é possível executar um job de monitoramento de recurso manualmente para monitorar os dados de recursos fora da programação de monitoramento.

Para cada job de monitoramento executado, a Feature Store da Vertex AI gera um recurso FeatureMonitorJob, que pode ser recuperado para conferir as estatísticas de recursos e informações sobre desvios detectados nos dados de recursos.

Antes de começar

Antes de monitorar recursos usando o Vertex AI Feature Store, conclua os pré-requisitos listados nesta seção.

Registrar a origem de dados do elemento

Registre a fonte de dados de recursos do BigQuery no registro de recursos criando grupos de recursos e recursos. Os recursos FeatureMonitor usados para extrair e monitorar as estatísticas de recursos são associados a grupos de recursos.

Autenticar na Vertex AI

Faça a autenticação na Vertex AI, a menos que já tenha feito isso.

Select the tab for how you plan to use the samples on this page:

Python

Para usar os exemplos Python desta página em um ambiente de desenvolvimento local, instale e inicialize o gcloud CLI e e configure o Application Default Credentials com suas credenciais de usuário.

  1. Install the Google Cloud CLI.
  2. To initialize the gcloud CLI, run the following command:

    gcloud init
  3. If you're using a local shell, then create local authentication credentials for your user account:

    gcloud auth application-default login

    You don't need to do this if you're using Cloud Shell.

Confira mais informações em Set up authentication for a local development environment.

REST

Para usar as amostras da API REST nesta página em um ambiente de desenvolvimento local, use as credenciais fornecidas para gcloud CLI.

    Install the Google Cloud CLI, then initialize it by running the following command:

    gcloud init

Para mais informações, consulte Autenticar para usar REST na documentação de autenticação do Google Cloud.

Criar um monitor de recursos com uma programação de monitoramento

Para extrair e monitorar as estatísticas de recursos, crie um recurso FeatureMonitor especificando a programação para executar periodicamente jobs de monitoramento de recursos e extrair estatísticas de recursos para os recursos registrados no grupo de recursos.

Use os exemplos a seguir para criar um recurso FeatureMonitor. Para configurar várias programações para o mesmo grupo de recursos, é necessário criar vários recursos FeatureMonitor.

REST

Para criar um recurso FeatureMonitor e programar jobs de monitoramento de recursos, envie uma solicitação POST usando o método featureMonitors.create.

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • LOCATION_ID: região em que você quer criar o monitor de recursos, como us-central1.
  • PROJECT_ID: o ID do projeto.
  • FEATUREGROUP_NAME: o nome do grupo de recursos em que você configurou o monitoramento de recursos.
  • FEATURE_MONITOR_NAME: um nome para o novo monitor de recursos que você quer criar.
  • FEATURE_ID_1 e FEATURE_ID_2: os IDs dos recursos que você quer monitorar.
  • DRIFT_THRESHOLD_1 e DRIFT_THRESHOLD_2: limites de deslocamento para cada recurso incluído no monitor de recursos. O limite de deslocamento é usado para detectar anomalias, como o deslocamento de atributos. Insira um valor no intervalo [0, 1). Se você não inserir um valor, o limite será definido como 0.3 por padrão.
    A Vertex AI Feature Store compara os snapshots de execuções consecutivas de jobs de monitoramento de recursos e calcula desvios usando a função ML.TFDV_VALIDATE no BigQuery. Para classificar anomalias, a distância L-infinito é usada para recursos categóricos, e a divergência de Jensen-Shannon é usada para recursos numéricos.
  • CRON: expressão de programação cron que representa a frequência de execução do job de monitoramento do recurso. Para mais informações, consulte cron.

Método HTTP e URL:

POST https://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/featureGroups/FEATUREGROUP_NAME/featureMonitors?feature_monitor_id=FEATURE_MONITOR_NAME

Corpo JSON da solicitação:

{
  "feature_selection_config": {
    "feature_configs": [
      {"feature_id":"FEATURE_ID_1", "drift_threshold": "DRIFT_THRESHOLD_1" },
      {"feature_id":"FEATURE_ID_2", "drift_threshold": "DRIFT_THRESHOLD_2" }
    ],
  },
  "schedule_config": {
    "cron": "CRON"
  }
}

Para enviar a solicitação, escolha uma destas opções:

curl

Salve o corpo da solicitação em um arquivo com o nome request.json e execute o comando a seguir:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/featureGroups/FEATUREGROUP_NAME/featureMonitors?feature_monitor_id=FEATURE_MONITOR_NAME"

PowerShell

Salve o corpo da solicitação em um arquivo com o nome request.json e execute o comando a seguir:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/featureGroups/FEATUREGROUP_NAME/featureMonitors?feature_monitor_id=FEATURE_MONITOR_NAME" | Select-Object -Expand Content

Você receberá uma resposta JSON semelhante a esta:

{
  "name": "projects/PROJECT_NUMBER/locations/LOCATION_ID/featureGroups/FEATUREGROUP_NAME/featureMonitors/FEATURE_MONITOR_NAME/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.aiplatform.v1beta1.CreateFeatureMonitorOperationMetadata",
    "genericMetadata": {
      "createTime": "2024-12-15T19:35:03.975958Z",
      "updateTime": "2024-12-15T19:35:03.975958Z"
    }
  }
}

Python

Antes de testar esse exemplo, siga as instruções de configuração para Python no Guia de início rápido da Vertex AI sobre como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Vertex AI para Python.

Para autenticar na Vertex AI, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.

from google.cloud import aiplatform
from vertexai.resources.preview import feature_store

def create_feature_monitor_sample(
    project: str,
    location: str,
    existing_feature_group_id: str,
    feature_monitor_id: str,
    feature_selection_configs: List[Tuple[str, float]]
    schedule_config: str # Cron string. For example, "0 * * * *" indicates hourly execution.
):
    aiplatform.init(project="PROJECT_ID", location="LOCATION_ID")
    feature_group = feature_store.FeatureGroup("FEATUREGROUP_NAME")
    feature_monitor = feature_group.create_feature_monitor(
        name= "FEATURE_MONITOR_NAME",
        feature_selection_configs=[("FEATURE_ID_1", DRIFT_THRESHOLD_1),("FEATURE_ID_2", DRIFT_THRESHOLD_2)],
        schedule_config="CRON"
        )

Substitua:

  • LOCATION_ID: região em que você quer criar o monitor de recursos, como us-central1.
  • PROJECT_ID: o ID do projeto.
  • FEATUREGROUP_NAME: o nome do grupo de recursos em que você configurou o monitoramento de recursos.
  • FEATURE_MONITOR_NAME: um nome para o novo monitor de recursos que você quer criar.
  • FEATURE_ID_1 e FEATURE_ID_2: os IDs dos recursos que você quer monitorar.
  • DRIFT_THRESHOLD_1 e DRIFT_THRESHOLD_2: limites de deslocamento para cada recurso incluído no monitor de recursos. O limite de deslocamento é usado para detectar deslocamentos de recursos. Insira um valor entre 0 e 1. Se você não inserir um valor, o limite será definido como 0.3 por padrão.
    O Feature Store da Vertex AI compara o snapshot de dados do job de monitoramento de recursos atual com o snapshot de dados durante o job de monitoramento de recursos anterior. Para calcular a variação da distribuição, o Feature Store da Vertex AI usa a função ML.TFDV_VALIDATE no BigQuery.
    Para a métrica usada para comparar estatísticas, a distância L-infinito é usada para recursos categóricos, e a divergência de Jensen-Shannon é usada para recursos numéricos.
  • CRON: expressão de programação cron que representa a frequência de execução do job de monitoramento do recurso. Para mais informações, consulte cron.

Executar um job de monitoramento de recursos manualmente

Você pode pular a espera entre jobs de monitoramento de recursos programados consecutivos e executar manualmente um job de monitoramento de recursos. Isso é útil se você quiser extrair informações de monitoramento e detectar anomalias nos dados de recursos imediatamente, em vez de esperar a execução do próximo job de monitoramento programado.

REST

Para executar um job de monitoramento de recursos manualmente criando um recurso FeatureMonitorJob , envie uma solicitação POST usando o método featureMonitorJobs.create.

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • LOCATION_ID: região em que você quer executar o job de monitoramento de recursos, como us-central1.
  • FEATUREGROUP_NAME: o nome do grupo de elementos que contém o recurso FeatureMonitor.
  • PROJECT_ID: o ID do projeto.
  • FEATURE_MONITOR_NAME: o nome do recurso FeatureMonitor para o qual você quer executar o job de monitoramento de recursos.

Método HTTP e URL:

POST https://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/featureGroups/FEATUREGROUP_NAME/featureMonitors/FEATURE_MONITOR_ID/featureMonitorJobs

Para enviar a solicitação, escolha uma destas opções:

curl

execute o seguinte comando:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d "" \
"https://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/featureGroups/FEATUREGROUP_NAME/featureMonitors/FEATURE_MONITOR_ID/featureMonitorJobs"

PowerShell

execute o seguinte comando:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-Uri "https://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/featureGroups/FEATUREGROUP_NAME/featureMonitors/FEATURE_MONITOR_ID/featureMonitorJobs" | Select-Object -Expand Content

Você receberá uma resposta JSON semelhante a esta:

{
  "name": "projects/PROJECT_NUMBER/locations/LOCATION_ID/featureGroups/FEATUREGROUP_NAME/featureMonitors/FEATURE_MONITOR_NAME/featureMonitorJobs/FEATURE_MONITOR_JOB_ID"
}

Python

Antes de testar esse exemplo, siga as instruções de configuração para Python no Guia de início rápido da Vertex AI sobre como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Vertex AI para Python.

Para autenticar na Vertex AI, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.

from google.cloud import aiplatform
from vertexai.resources.preview import feature_store

aiplatofrm.init(project="PROJECT_ID", location="LOCATION_ID")

feature_group = FeatureGroup.get("FEATUREGROUP_NAME}")
feature_monitor = feature_group.get_feature_monitor(FEATURE_MONITOR_NAME)
feature_monitor_job = feature_monitor.create_feature_monitor_job()

Substitua:

  • LOCATION_ID: região em que você quer executar o job de monitoramento de recursos, como us-central1.
  • PROJECT_ID: o ID do projeto.
  • FEATUREGROUP_NAME: o nome do grupo de elementos que contém o recurso FeatureMonitor.
  • FEATURE_MONITOR_NAME: o nome do recurso FeatureMonitor para o qual você quer executar o job de monitoramento de recursos.

Extrair estatísticas de recursos de um job de monitoramento

É possível extrair estatísticas de recursos para todos os recursos em um job de monitoramento de recursos extraindo o recurso FeatureMonitorJob usando o ID do job de monitoramento de recursos gerado durante a execução do job de monitoramento de recursos. Também é possível extrair estatísticas de recursos de um recurso específico para o job de monitoramento mais recente.

Listar jobs de monitoramento de recursos

Os exemplos a seguir mostram como recuperar uma lista de todos os recursos FeatureMonitorJob criados para um determinado recurso FeatureMonitor.

REST

Para recuperar uma lista de recursos FeatureMonitorJob de um recurso FeatureMonitor especificado, envie uma solicitação GET usando o método featureMonitorJobs.list.

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • LOCATION_ID: região em que o recurso Feature está localizado, como us-central1.
  • PROJECT_ID: o ID do projeto.
  • FEATUREGROUP_NAME: o nome do grupo de elementos que contém o recurso FeatureMonitor.
  • FEATURE_MONITOR_NAME: o nome do recurso FeatureMonitor para o qual você quer listar os jobs de monitoramento de recursos.

Método HTTP e URL:

GET https://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/featureGroups/FEATUREGROUP_NAME/featureMonitors/FEATURE_MONITOR_NAME/featureMonitorJobs

Para enviar a solicitação, escolha uma destas opções:

curl

execute o seguinte comando:

curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/featureGroups/FEATUREGROUP_NAME/featureMonitors/FEATURE_MONITOR_NAME/featureMonitorJobs"

PowerShell

execute o seguinte comando:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/featureGroups/FEATUREGROUP_NAME/featureMonitors/FEATURE_MONITOR_NAME/featureMonitorJobs" | Select-Object -Expand Content

Você receberá uma resposta JSON semelhante a esta:

{
  "featureMonitorJobs": [
    {
      "name": "projects/PROJECT_NUMBER/locations/LOCATION_ID/featureGroups/FEATUREGROUP_NAME/featureMonitors/FEATURE_MONITOR_NAME/featureMonitorJobs/FEATURE_MONITOR_JOB_ID_1",
      "createTime": "2024-12-18T19:18:18.077161Z",
      "finalStatus": {},
      "featureSelectionConfig": {
        "featureConfigs": [
          {
            "featureId": "feature_name_1",
            "driftThreshold": 0.2
          },
          {
            "featureId": "feature_name_2",
            "driftThreshold": 0.2
          }
        ]
      }
    },
    {
      "name": "projects/PROJECT_NUMBER/locations/LOCATION_ID/featureGroups/FEATUREGROUP_NAME/featureMonitors/FEATURE_MONITOR_NAME/featureMonitorJobs/FEATURE_MONITOR_JOB_ID_2",
      "createTime": "2024-12-19T19:18:30.859921Z",
      "finalStatus": {},
      "featureSelectionConfig": {
        "featureConfigs": [
          {
            "featureId": "feature_name_1",
            "driftThreshold": 0.2
          },
          {
            "featureId": "feature_name_2",
            "driftThreshold": 0.2
          }
        ]
      }
    }
  ]
}

Python

Antes de testar esse exemplo, siga as instruções de configuração para Python no Guia de início rápido da Vertex AI sobre como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Vertex AI para Python.

Para autenticar na Vertex AI, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.

from google.cloud import aiplatform
from vertexai.resources.preview import feature_store

aiplatofrm.init(project="PROJECT_ID", location="LOCATION_ID")

feature_group = FeatureGroup.get("FEATUREGROUP_NAME")
feature_monitor = feature_group.get_feature_monitor(FEATURE_MONITOR_NAME)
feature_monitor_jobs = feature_monitor.list_feature_monitor_jobs()

Substitua:

  • LOCATION_ID: região em que o recurso Feature está localizado, como us-central1.
  • PROJECT_ID: o ID do projeto.
  • FEATUREGROUP_NAME: o nome do grupo de elementos que contém o recurso FeatureMonitor.
  • FEATURE_MONITOR_NAME: o nome do recurso FeatureMonitor para o qual você quer listar os jobs de monitoramento de recursos.

Conferir as estatísticas de recursos de um job de monitoramento

Os exemplos a seguir mostram como conferir as estatísticas de todos os recursos em um job de monitoramento de recursos. Para cada atributo, as estatísticas e as anomalias são exibidas no formato FeatureNameStatistics.

REST

Para conferir as estatísticas de um job de monitoramento recuperando um recurso FeatureMonitorJob, envie uma solicitação GET usando o método featureMonitorJobs.get.

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • LOCATION_ID: região em que o job de monitoramento de recursos foi executado, como us-central1.
  • PROJECT_ID: o ID do projeto.
  • FEATUREGROUP_NAME: o nome do grupo de elementos que contém o recurso FeatureMonitor.
  • FEATURE_MONITOR_NAME: o nome do recurso FeatureMonitor para o qual o job de monitoramento de recursos foi executado.
  • FEATURE_MONITOR_JOB_ID: o ID do recurso FeatureMonitorJob que você quer recuperar.

Método HTTP e URL:

GET https://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/featureGroups/FEATUREGROUP_NAME/featureMonitors/FEATURE_MONITOR_NAME/featureMonitorJobs/FEATURE_MONITOR_JOB_ID

Para enviar a solicitação, escolha uma destas opções:

curl

execute o seguinte comando:

curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/featureGroups/FEATUREGROUP_NAME/featureMonitors/FEATURE_MONITOR_NAME/featureMonitorJobs/FEATURE_MONITOR_JOB_ID"

PowerShell

execute o seguinte comando:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/featureGroups/FEATUREGROUP_NAME/featureMonitors/FEATURE_MONITOR_NAME/featureMonitorJobs/FEATURE_MONITOR_JOB_ID" | Select-Object -Expand Content

Você receberá uma resposta JSON semelhante a esta:

{
  "name": "projects/PROJECT_NUMBER/locations/LOCATION_ID/featureGroups/FEATUREGROUP_NAME/featureMonitors/FEATURE_MONITOR_NAME/featureMonitorJobs/FEATURE_MONITOR_JOB_ID",
  "createTime": "2024-12-19T19:18:18.077161Z",
  "finalStatus": {},
  "jobSummary": {
    "featureStatsAndAnomalies": [
      {
        "featureId": "feature_id_1",
        "featureStats": {
          "name": "feature_name_1",
          "type": "STRING",
          "stringStats": {
            "commonStats": {
              "numNonMissing": "6",
              "minNumValues": "1",
              "maxNumValues": "1",
              "avgNumValues": 1,
              "numValuesHistogram": {
                "buckets": [
                  {
                    "lowValue": 1,
                    "highValue": 1,
                    "sampleCount": 0.6
                  },
                  {
                    "lowValue": 1,
                    "highValue": 1,
                    "sampleCount": 0.6
                  }
                ],
                "type": "QUANTILES"
              },
              "totNumValues": "6"
            },
            "unique": "2",
            "topValues": [
              {
                "value": "59",
                "frequency": 2
              },
              {
                "value": "19",
                "frequency": 1
              }
            ],
            "avgLength": 2,
            "rankHistogram": {
              "buckets": [
                {
                  "label": "59",
                  "sampleCount": 2
                },
                {
                  "lowRank": "1",
                  "highRank": "1",
                  "label": "19",
                  "sampleCount": 1
                }
              ]
            }
          }
        },
        "statsTime": "2024-12-19T19:18:18.077161Z",
        "featureMonitorJobId": "FEATURE_MONITOR_JOB_ID",
        "featureMonitorId": "FEATURE_MONITOR_NAME"
      },
      {
        "featureId": "feature_id_2",
        "featureStats": {
          "name": "feature_name_1",
          "type": "STRING",
          "stringStats": {
            "commonStats": {
              "numNonMissing": "6",
              "minNumValues": "1",
              "maxNumValues": "1",
              "avgNumValues": 1,
              "numValuesHistogram": {
                "buckets": [
                  {
                    "lowValue": 1,
                    "highValue": 1,
                    "sampleCount": 0.6
                  },
                  {
                    "lowValue": 1,
                    "highValue": 1,
                    "sampleCount": 0.6
                  }
                ],
                "type": "QUANTILES"
              },
              "totNumValues": "6"
            },
            "unique": "2",
            "topValues": [
              {
                "value": "59",
                "frequency": 2
              },
              {
                "value": "19",
                "frequency": 1
              }
            ],
            "avgLength": 2,
            "rankHistogram": {
              "buckets": [
                {
                  "label": "59",
                  "sampleCount": 2
                },
                {
                  "lowRank": "1",
                  "highRank": "1",
                  "label": "19",
                  "sampleCount": 1
                }
              ]
            }
          }
        },
        "statsTime": "2024-12-19T19:18:18.077161Z",
        "featureMonitorJobId": "FEATURE_MONITOR_JOB_ID",
        "featureMonitorId": "FEATURE_MONITOR_NAME"
      }
    ]
  },
  "driftBaseFeatureMonitorJobId": "2250003330000300000",
  "driftBaseSnapshotTime": "2024-12-12T16:00:01.211686Z",
  "featureSelectionConfig": {
    "featureConfigs": [
      {
        "featureId": "feature_id_1",
        "driftThreshold": 0.2
      },
      {
        "featureId": "feature_id_2",
        "driftThreshold": 0.2
      }
    ]
  },
  "triggerType": "FEATURE_MONITOR_JOB_TRIGGER_ON_DEMAND"
}

Python

Antes de testar esse exemplo, siga as instruções de configuração para Python no Guia de início rápido da Vertex AI sobre como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Vertex AI para Python.

Para autenticar na Vertex AI, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.

from google.cloud import aiplatform
from vertexai.resources.preview import feature_store

aiplatofrm.init(project="PROJECT_ID", location="LOCATION_ID")
feature_group = FeatureGroup.get("FEATUREGROUP_NAME"})

feature_monitor = feature_group.get_feature_monitor("FEATURE_MONITOR_NAME")
feature_monitor_job = feature_monitor.get_feature_monitor_job("FEATURE_MONITOR_JOB_ID)")

# Retrieve feature stats and anomalies
feature_stats_and_anomalies = feature_monitor_job.feature_stats_and_anomalies
print(feature_stats_and_anomalies)

Substitua:

  • LOCATION_ID: região em que o job de monitoramento de recursos foi executado, como us-central1.
  • PROJECT_ID: o ID do projeto.
  • FEATUREGROUP_NAME: o nome do grupo de elementos que contém o recurso FeatureMonitor.
  • FEATURE_MONITOR_NAME: o nome do recurso FeatureMonitor para o qual o job de monitoramento de recursos foi executado.
  • FEATURE_MONITOR_JOB_ID: o ID do recurso FeatureMonitorJob que você quer recuperar.

Conferir as estatísticas de um recurso

É possível extrair as estatísticas de um recurso específico dos jobs de monitoramento de recursos mais recentes executados. Para isso, extraia os detalhes do recurso e especifique o número de jobs de monitoramento de onde você quer extrair as estatísticas. As estatísticas e as anomalias são exibidas no formato FeatureNameStatistics.

Os exemplos a seguir mostram como conferir as estatísticas de um recurso específico de um número especificado de jobs de monitoramento de recursos recentes.

REST

Para conferir as estatísticas de um recurso específico em um recurso Feature, envie uma solicitação GET usando o método features.get e especifique o número de jobs de monitoramento para extrair as estatísticas.

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • LOCATION_ID: região em que o job de monitoramento de recursos foi executado, como us-central1.
  • PROJECT_ID: o ID do projeto.
  • FEATUREGROUP_NAME: o nome do grupo de recursos que contém o recurso.
  • FEATURE_NAME: o nome do recurso Feature para o qual você quer extrair as estatísticas do recurso.
  • LATEST_STATS_COUNT: o número dos jobs de monitoramento mais recentes para extrair as estatísticas do recurso.

Método HTTP e URL:

GET https://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/featureGroups/FEATUREGROUP_NAME/features/FEATURE_NAME?feature_stats_and_anomaly_spec.latest_stats_count=LATEST_STATS_COUNT

Para enviar a solicitação, escolha uma destas opções:

curl

execute o seguinte comando:

curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/featureGroups/FEATUREGROUP_NAME/features/FEATURE_NAME?feature_stats_and_anomaly_spec.latest_stats_count=LATEST_STATS_COUNT"

PowerShell

execute o seguinte comando:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/featureGroups/FEATUREGROUP_NAME/features/FEATURE_NAME?feature_stats_and_anomaly_spec.latest_stats_count=LATEST_STATS_COUNT" | Select-Object -Expand Content

Você receberá uma resposta JSON semelhante a esta:

{
  "name": "projects/PROJECT_NUMBER/locations/LOCATION_ID/featureGroups/FEATUREGROUP_NAME/features/FEATURE_NAME",
  "createTime": "2024-12-19T21:17:23.373559Z",
  "updateTime": "2024-12-19T21:17:23.373559Z",
  "etag": "sample_etag",
  "featureStatsAndAnomaly": [
    {
      "featureStats": {
        "name": "FEATURE_NAME",
        "type": "STRING",
        "stringStats": {
          "commonStats": {
            "numNonMissing": "4",
            "minNumValues": "1",
            "maxNumValues": "1",
            "avgNumValues": 1,
            "numValuesHistogram": {
              "buckets": [
                {
                  "lowValue": 1,
                  "highValue": 1,
                  "sampleCount": 0.4
                },
                {
                  "lowValue": 1,
                  "highValue": 1,
                  "sampleCount": 0.4
                },
                {
                  "lowValue": 1,
                  "highValue": 1,
                  "sampleCount": 0.4
                },
                {
                  "lowValue": 1,
                  "highValue": 1,
                  "sampleCount": 0.4
                }
              ],
              "type": "QUANTILES"
            },
            "totNumValues": "4"
          },
          "unique": "4",
          "topValues": [
            {
              "value": "feature_value_1",
              "frequency": 1
            },
            {
              "value": "feature_value_2",
              "frequency": 1
            },
            {
              "value": "feature_value_3",
              "frequency": 1
            },
            {
              "value": "feature_value_4",
              "frequency": 1
            }
          ],
          "avgLength": 4,
          "rankHistogram": {
            "buckets": [
              {
                "label": "label_1",
                "sampleCount": 1
              },
              {
                "lowRank": "1",
                "highRank": "1",
                "label": "label_2",
                "sampleCount": 1
              },
              {
                "lowRank": "2",
                "highRank": "2",
                "label": "label_3",
                "sampleCount": 1
              },
              {
                "lowRank": "3",
                "highRank": "3",
                "label": "label_4",
                "sampleCount": 1
              }
            ]
          }
        }
      },
      "driftDetectionThreshold": 0.1,
      "statsTime": "2024-12-19T22:00:02.734796Z",
      "featureMonitorJobId": "feature_monitor_job_id_1",
      "featureMonitorId": "feature_monitor_name_1"
    }
  ],
  "versionColumnName": "version_column_name"
}

Python

Antes de testar esse exemplo, siga as instruções de configuração para Python no Guia de início rápido da Vertex AI sobre como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Vertex AI para Python.

Para autenticar na Vertex AI, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.

from google.cloud import aiplatform
from vertexai.resources.preview import feature_store

aiplatofrm.init(project="PROJECT_ID", location="LOCATION_ID")

feature_group = FeatureGroup.get("FEATUREGROUP_NAME"})
feature_stats_and_anomalies = feature_group.get_feature("FEATURE_NAME", latest_stats_count=LATEST_STATS_COUNT)
print(feature_stats_and_anomalies)

Substitua:

  • LOCATION_ID: região em que o job de monitoramento de recursos foi executado, como us-central1.
  • PROJECT_ID: o ID do projeto.
  • FEATUREGROUP_NAME: o nome do grupo de elementos que contém o recurso FeatureMonitor.
  • FEATURE_NAME: o nome do recurso para o qual você quer extrair as estatísticas.
  • LATEST_STATS_COUNT: o número de jobs de monitoramento mais recentes para extrair as estatísticas do recurso.

Exemplo de caso de uso: usar o monitoramento de recursos para detectar desvios

Você pode usar o monitoramento de recursos para detectar uma anomalia nos dados de recursos chamada de deslocamento de recursos. O deslocamento é uma mudança significativa e imprevista nos dados de recursos no BigQuery ao longo do tempo. O Feature Store da Vertex AI ajuda você a identificar o desvio de recursos comparando o snapshot no momento em que o job de monitoramento é executado com o snapshot de dados durante a execução do job de monitoramento anterior.

Para qualquer recurso incluído no monitor de recursos, se a diferença entre os dois snapshots exceder o limite especificado no parâmetro drift_threshold, a Vertex AI Feature Store vai identificar um desvio de recurso e retornar as seguintes informações no recurso FeatureMonitorJob:

  • O parâmetro driftDetected está definido como true.

  • A variação da distribuição entre os dois snapshots. Para atributos numéricos, o Feature Store da Vertex AI calcula esse valor usando a divergência de Jensen-Shannon. Para recursos categóricos, o Feature Store da Vertex AI calcula esse valor usando a distância L-infinito.

  • O limite que foi excedido pelo desvio de distribuição.

Os exemplos a seguir mostram como recuperar um recurso FeatureMonitorJob e verificar se uma deriva foi detectada.

REST

Para recuperar um recurso FeatureMonitorJob , envie uma solicitação GET usando o método featureMonitorJobs.get.

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • LOCATION_ID: região em que o job de monitoramento de recursos foi executado, como us-central1.
  • PROJECT_ID: o ID do projeto.
  • FEATUREGROUP_NAME: o nome do grupo de elementos que contém o recurso FeatureMonitor.
  • FEATURE_MONITOR_NAME: o nome do recurso FeatureMonitor para o qual o job de monitoramento de recursos foi executado.
  • FEATURE_MONITOR_JOB_ID: o ID do recurso FeatureMonitorJob que você quer recuperar.

Método HTTP e URL:

GET https://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/featureGroups/FEATUREGROUP_NAME/featureMonitors/FEATURE_MONITOR_NAME/featureMonitorJobs/FEATURE_MONITOR_JOB_ID

Para enviar a solicitação, escolha uma destas opções:

curl

execute o seguinte comando:

curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/featureGroups/FEATUREGROUP_NAME/featureMonitors/FEATURE_MONITOR_NAME/featureMonitorJobs/FEATURE_MONITOR_JOB_ID"

PowerShell

execute o seguinte comando:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/featureGroups/FEATUREGROUP_NAME/featureMonitors/FEATURE_MONITOR_NAME/featureMonitorJobs/FEATURE_MONITOR_JOB_ID" | Select-Object -Expand Content

Você receberá uma resposta JSON semelhante a esta:

{
  "name": "projects/PROJECT_NUMBER/locations/LOCATION_ID/featureGroups/FEATUREGROUP_NAME/featureMonitors/FEATURE_MONITOR_NAME/featureMonitorJobs/FEATURE_MONITOR_JOB_ID",
  "createTime": "2024-12-14T19:45:30.026522Z",
  "finalStatus": {},
  "jobSummary": {
    "featureStatsAndAnomalies": [
      {
        "featureId": "feature_id_1",
        "featureStats": {
          "name": "feature_name_1",
          "type": "STRING",
          "stringStats": {
            "commonStats": {
              "numNonMissing": "3",
              "minNumValues": "1",
              "maxNumValues": "1",
              "avgNumValues": 1,
              "numValuesHistogram": {
                "buckets": [
                  {
                    "lowValue": 1,
                    "highValue": 1,
                    "sampleCount": 0.9
                  },
                  {
                    "lowValue": 1,
                    "highValue": 1,
                    "sampleCount": 0.9
                  },
                  {
                    "lowValue": 1,
                    "highValue": 1,
                    "sampleCount": 0.9
                  }
                ],
                "type": "QUANTILES"
              },
              "totNumValues": "3"
            },
            "unique": "3",
            "topValues": [
              {
                "value": "sample_value_1",
                "frequency": 1
              },
              {
                "value": "sample_value_2",
                "frequency": 1
              },
              {
                "value": "sample_value_3",
                "frequency": 1
              }
            ],
            "avgLength": 3,
            "rankHistogram": {
              "buckets": [
                {
                  "label": "sample_label_1",
                  "sampleCount": 1
                },
                {
                  "lowRank": "1",
                  "highRank": "1",
                  "label": "sample_label_2",
                  "sampleCount": 1
                },
                {
                  "lowRank": "2",
                  "highRank": "3",
                  "label": "sample_label_3",
                  "sampleCount": 1
                }
              ]
            }
          }
        },
        "distributionDeviation": 0.1388880008888000,
        "driftDetectionThreshold": 0.1,
        "driftDetected": true,
        "statsTime": "2024-12-15T19:45:37.026522Z",
        "featureMonitorJobId": "FEATURE_MONITOR_JOB_ID",
        "featureMonitorId": "FEATURE_MONITOR_NAME"
      }
    ]
  },
  "driftBaseFeatureMonitorJobId": "2250003330000300000",
  "driftBaseSnapshotTime": "2024-12-12T18:18:18.077161Z",
  "description": "sample_feature_monitor_job_description",
  "featureSelectionConfig": {
    "featureConfigs": [
      {
        "featureId": "feature_name",
        "driftThreshold": 0.1
      }
    ]
  },
  "triggerType": "FEATURE_MONITOR_JOB_TRIGGER_ON_DEMAND"
}

Python

Antes de testar esse exemplo, siga as instruções de configuração para Python no Guia de início rápido da Vertex AI sobre como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Vertex AI para Python.

Para autenticar na Vertex AI, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.

from google.cloud import aiplatform
from vertexai.resources.preview import feature_store

aiplatofrm.init(project="PROJECT_ID", location="LOCATION_ID")
feature_group = FeatureGroup.get("FEATUREGROUP_NAME"})
feature_monitor = feature_group.get_feature_monitor("FEATURE_MONITOR_NAME")
feature_monitor_job = feature_monitor.get_feature_monitor_job("FEATURE_MONITOR_JOB_ID)")

# Retrieve feature stats and anomalies
feature_stats_and_anomalies = feature_monitor_job.feature_stats_and_anomalies
print(feature_stats_and_anomalies)

# Check whether drifts are detected
for feature_stats_and_anomalies in feature_monitor_job.feature_stats_and_anomalies:
    print("feature: ", feature_stats_and_anomalies.feature_id)
    print("distribution deviation: ", feature_stats_and_anomalies.distribution_deviation)
    print("drift detected: ", feature_stats_and_anomalies.drift_detected)

Substitua:

  • LOCATION_ID: região em que o job de monitoramento de recursos foi executado, como us-central1.
  • PROJECT_ID: o ID do projeto.
  • FEATUREGROUP_NAME: o nome do grupo de elementos que contém o recurso FeatureMonitor.
  • FEATURE_MONITOR_NAME: o nome do recurso FeatureMonitor para o qual o job de monitoramento de recursos foi executado.
  • FEATURE_MONITOR_JOB_ID: o ID do recurso FeatureMonitorJob que você quer recuperar.