Melhore as explicações baseadas em funcionalidades

Quando trabalha com modelos personalizados, pode configurar parâmetros específicos para melhorar as suas explicações. Este guia descreve como inspecionar as explicações que recebe da Vertex Explainable AI para encontrar erros e como ajustar a configuração da Vertex Explainable AI para mitigar erros.

Se quiser usar o Vertex Explainable AI com um modelo tabular do AutoML, não precisa de fazer nenhuma configuração. O Vertex AI configura automaticamente o modelo para o Vertex Explainable AI. Ignorar este documento e ler o artigo Receber explicações.

Os métodos de atribuição de funcionalidades do Vertex Explainable AI baseiam-se todos em variantes dos valores de Shapley. Uma vez que os valores de Shapley são computacionalmente muito dispendiosos, o Vertex Explainable AI fornece aproximações em vez dos valores exatos.

Pode reduzir o erro de aproximação e aproximar-se dos valores exatos alterando as seguintes entradas:

  • Aumentar o número de passos integrais ou o número de caminhos.
  • Alterar as bases de referência de entrada que selecionar.
  • Adicionar mais referências de entrada. Com os gradientes integrados e os métodos XRAI, a utilização de linhas de base adicionais aumenta a latência. A utilização de linhas de base adicionais com o método Shapley de amostragem não aumenta a latência.

Inspecione as explicações do erro

Depois de pedir e receber explicações do Vertex Explainable AI, pode verificar as explicações relativas ao erro de aproximação. Se as explicações tiverem um erro de aproximação elevado, as explicações podem não ser fiáveis. Esta secção descreve várias formas de verificar se existem erros.

Verifique o campo approximationError

Para cada Attribution, o Vertex Explainable AI devolve o erro de aproximação no campo approximationError. Se o erro de aproximação exceder 0,05, pondere ajustar a configuração do Vertex Explainable AI.

Para a técnica de gradientes integrados, calculamos o erro de aproximação comparando a soma das atribuições de funcionalidades com a diferença entre os valores previstos para a pontuação de entrada e a pontuação de base. Para a técnica de gradientes integrados, a atribuição de funcionalidades é uma aproximação da integral dos valores de gradiente entre a base e a entrada. Usamos a regra da quadratura gaussiana para aproximar a integral porque é mais precisa do que os métodos de soma de Riemann.

Verifique a diferença entre as inferências e o resultado de base

Para cada Attribution, o Vertex AI Explainable AI devolve um instanceOutputValue, que representa a parte da saída de inferência para a qual existem atribuições de caraterísticas, e um baselineOutputValue, que representa o que esta parte da saída de inferência seria se a inferência fosse realizada numa base de referência de entrada em vez da instância de entrada real.

Se a diferença entre instanceOutputValue e baselineOutputValue for inferior a 0,05 para quaisquer atribuições, pode ter de alterar as bases de referência de entrada.

Ajuste a configuração

As secções seguintes descrevem formas de ajustar a configuração do Vertex Explainable AI para reduzir os erros. Para fazer qualquer uma das seguintes alterações, tem de configurar um novo Model recurso com um ExplanationSpec atualizado ou substituir o ExplanationSpec do seu Model existente ao implementá-lo novamente num recurso Endpoint ou obtendo novas inferências em lote.

Aumente os passos ou os caminhos

Para reduzir o erro de aproximação, pode aumentar:

Ajuste as linhas de base

As bases de referência de entrada representam uma funcionalidade que não fornece informações adicionais. As linhas de base para modelos tabulares podem ser valores médios, mínimos, máximos ou aleatórios em relação aos seus dados de preparação. Da mesma forma, para modelos de imagens, as suas referências podem ser uma imagem preta, uma imagem branca, uma imagem cinzenta ou uma imagem com valores de píxeis aleatórios.

Quando configura o Vertex Explainable AI, pode especificar opcionalmente o campo input_baselines. Caso contrário, o Vertex AI escolhe as bases de referência de entrada por si. Se estiver a ter os problemas descritos nas secções anteriores deste guia, recomendamos que ajuste o input_baselines para cada entrada do seu Model.

Em geral:

  • Comece com uma base que represente os valores medianos.
  • Altere esta base para uma que represente valores aleatórios.
  • Experimente duas linhas de base, que representam os valores mínimo e máximo.
  • Adicione outra base de referência que represente valores aleatórios.

Exemplo para dados tabulares

O seguinte código Python cria uma ExplanationMetadata mensagem para um hipotético modelo do TensorFlow preparado com dados tabulares.

Tenha em atenção que input_baselines é uma lista onde pode especificar várias referências. Este exemplo define apenas uma base. A base é uma lista de valores medianos para os dados de preparação (train_data neste exemplo).

explanation_metadata = {
    "inputs": {
        "FEATURE_NAME": {
            "input_tensor_name": "INPUT_TENSOR_NAME",
            "input_baselines": [train_data.median().values.tolist()],
            "encoding": "bag_of_features",
            "index_feature_mapping": train_data.columns.tolist()
        }
    },
    "outputs": {
        "OUTPUT_NAME": {
            "output_tensor_name": "OUTPUT_TENSOR_NAME"
        }
    }
}

Consulte o artigo Configurar explicações para modelos personalizados para ver mais contexto sobre como usar esta ExplanationMetadata

Para definir duas linhas de base que representam os valores mínimo e máximo, defina input_baselines da seguinte forma: [train_data.min().values.tolist(), train_data.max().values.tolist()]

Exemplo para dados de imagens

O seguinte código Python cria uma ExplanationMetadata mensagem para um hipotético modelo do TensorFlow preparado com dados de imagens.

Tenha em atenção que input_baselines é uma lista onde pode especificar várias referências. Este exemplo define apenas uma base. A base é uma lista de valores aleatórios. Usar valores aleatórios para uma base de referência de imagens é uma boa abordagem se as imagens no seu conjunto de dados de preparação contiverem muito preto e branco.

Caso contrário, defina input_baselines como [0, 1] para representar imagens a preto e branco.

random_baseline = np.random.rand(192,192,3)

explanation_metadata = {
    "inputs": {
        "FEATURE_NAME": {
            "input_tensor_name": "INPUT_TENSOR_NAME",
            "modality": "image",
            "input_baselines": [random_baseline.tolist()]
        }
    },
    "outputs": {
        "OUTPUT_NAME": {
            "output_tensor_name": "OUTPUT_TENSOR_NAME"
        }
    }
}

O que se segue?

  • Siga o guia para configurar explicações para implementar quaisquer alterações de configuração descritas nesta página.