Melhorar as explicações com base em recursos

Ao trabalhar com modelos treinados personalizados, é possível configurar parâmetros específicos para melhorar suas explicações. Neste guia, você verá como inspecionar as explicações recebidas do Vertex Explainable AI em caso de erros e como ajustar a configuração da Vertex Explainable AI para reduzir os erros.

Se você quiser usar o Vertex Explainable AI com um modelo tabular do AutoML, não será necessário realizar nenhuma configuração. O Vertex AI configura automaticamente o modelo para o Vertex Explainable AI. Pule este documento e leia Como receber explicações.

Os métodos de atribuição de recursos da Vertex Explainable AI são baseados em variantes de valores de Shapley. Como os valores de Shapley são computacionalmente caros, a Vertex Explainable AI fornece aproximações em vez dos valores exatos.

É possível reduzir o erro de aproximação e se aproximar dos valores exatos alterando as seguintes entradas:

  • aumentando o número de etapas integrais ou o número de caminhos;
  • alterando a linha de base de entrada que você selecionou;
  • adicionando mais linhas de base de entrada. Com os gradientes integrados e os métodos de XRAI, o uso de linhas de base extras aumenta a latência. Usar linhas de base extras com o método Sampled Shapley não aumenta a latência.

Inspecionar explicações para erros

Depois de solicitar e receber explicações da Vertex Explainable AI, é possível verificar as explicações sobre o erro de aproximação. Se as explicações tiverem um erro de aproximação aproximada, talvez elas não sejam confiáveis. Nesta seção, descrevemos várias maneiras de verificar erros.

Verifique o campo approximationError

Para cada Attribution, a Vertex Explainable AI retorna o erro de aproximação no campo approximationError. Se o erro de aproximação exceder 0,05, ajuste a configuração de Vertex Explainable AI.

Para a técnica de gradientes integrados, calculamos o erro de aproximação ao comparar a soma das atribuições de recursos com a diferença entre os valores previstos para a pontuação de entrada e a pontuação de referência. Para a técnica de gradientes integrados, a atribuição de recursos é uma aproximação do valor total dos gradientes entre o valor de referência e a entrada. Usamos a regra de quadrado gaussiano para aproximar a integral por ser mais precisa do que os métodos de Riemann Sum.

Verificar a diferença entre previsões e a saída básica

Para cada Attribution, a Vertex Explainable AI retornainstanceOutputValue, que representa a parte da saída de previsão relacionada às atribuições de recursos, e um baselineOutputValue, que representa o que seria essa parte da saída de previsão no caso de a previsão ser feita em uma base de entrada em vez de uma instância de entrada real.

Se a diferença entre instanceOutputValue e baselineOutputValue for menor que 0,05 para qualquer atribuição, talvez seja necessário alterar os valores de referência de entrada.

Ajustar a configuração

Nas seções a seguir, descrevemos maneiras de ajustar sua configuração de Vertex Explainable AI para reduzir o erro. Para fazer qualquer uma das alterações a seguir, você deveconfigurar um novo Model com um recursoExplanationSpec oumodificar o ExplanationSpec do seu appModel implantando-o novamente em umEndpoint recurso ou recebendo novas previsões em lote.

Aumentar etapas ou caminhos

Para reduzir o erro de aproximação, aumente:

Ajustar linhas de base

Os valores de referência de entrada representam um recurso que não fornece mais informações. Os valores de referência para modelos tabulares podem ser valores médios, mínimos, máximos ou aleatórios em relação aos dados de treinamento. Da mesma forma, para modelos de imagem, os valores de referência podem ser uma imagem preta, branca ou cinza ou uma imagem com valores de pixel aleatórios.

Ao configurar a Vertex Explainable AI, é possível especificar o campo input_baselines. Caso contrário, a Vertex AI escolhe valores de referência de entrada para você. Se você encontrar os problemas descritos nas seções anteriores deste guia, convém ajustar o input_baselines para cada entrada da sua Model.

Em geral:

  • comece com uma linha de base que representa valores médios;
  • altere essa linha de base para uma representando valores aleatórios;
  • tente duas linhas de base, representando os valores mínimo e máximo;
  • adicione outra linha de base que representa valores aleatórios.

Exemplo de dados tabulares

O código Python a seguir cria uma mensagem ExplanationMetadata para um modelo hipotético do TensorFlow treinado em dados tabulares.

Observe que input_baselines é uma lista na qual é possível especificar várias linhas de base. Este exemplo define apenas uma linha de base. A linha de base é uma lista de valores médios para os dados de treinamento (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 Como configurar explicações para modelos treinados personalizados para mais contexto sobre como usar este ExplanationMetadata

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

Exemplo de dados de imagem

O código Python a seguir cria uma mensagem ExplanationMetadata para um modelo hipotético do TensorFlow treinado em dados de imagem.

Observe que input_baselines é uma lista na qual é possível especificar várias linhas de base. Este exemplo define apenas uma linha de base. A linha de base é uma lista de valores aleatórios. Usar valores aleatórios para uma linha de base de imagem é uma boa abordagem se as imagens em seu conjunto de dados de treinamento tiverem muito preto e branco.

Caso contrário, defina input_baselines como [0, 1] para representar imagens em 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"
        }
    }
}

A seguir