Importância por Permutação

Visão geral

Importância por permutação (permutation importance) é uma técnica agnóstica ao modelo (model-agnostic) para estimar importância global de atributos (global feature importance). A ideia central é simples:

  1. Meça o desempenho de um modelo em um conjunto de dados usando alguma métrica de avaliação (evaluation metric) (por exemplo, acurácia (accuracy), AUC-ROC (ROC AUC), raiz do erro quadrático médio (RMSE), coeficiente de determinação ((R^2))).
  2. Permute (embaralhe) aleatoriamente uma coluna de atributo (feature), quebrando sua relação com o alvo (target) (e com outros atributos).
  3. Meça o desempenho novamente.
  4. A queda de desempenho é tomada como a importância do atributo.

Como esse método trata o modelo como uma caixa-preta (black box) e só precisa de previsões, ele funciona com muitos estimadores (estimators): modelos lineares (linear models), métodos de kernel (kernel methods), ensembles de árvores (tree ensembles) (incluindo Árvores Extra (Extra Trees)), boosting por gradiente (gradient boosting) e mais.

A importância por permutação é especialmente útil em fluxos de trabalho de interpretabilidade em aprendizado de máquina clássico (classical ML), junto com técnicas como Gráficos de Dependência Parcial (Partial Dependence Plots) e (para explicações mais locais) Valores SHAP (SHAP Values).

Por que embaralhar um atributo revela importância

Se um atributo (X_j) é relevante para as previsões, o modelo aprendeu a usar as informações contidas nesse atributo (possivelmente por meio de interações). Quando você permuta (X_j), você destrói a correspondência entre (X_j) e os rótulos verdadeiros (y) para aquele conjunto de dados:

  • Se o atributo é irrelevante, as previsões quase não mudam → a métrica permanece semelhante → baixa importância.
  • Se o atributo é útil, as previsões pioram → a métrica se deteriora → alta importância.

É importante notar que a importância por permutação mede o efeito de quebrar a associação do atributo com o alvo sob a distribuição dos dados (data distribution) em que você avalia. Esse ponto sobre “distribuição” motiva muitas das armadilhas práticas.

Definição formal

Sejam:

  • (f) um modelo treinado
  • (D = {(x_i, y_i)}_{i=1}^n) um conjunto de dados de avaliação (idealmente retido (held out))
  • (M(\cdot)) uma métrica de avaliação (quanto maior, melhor; por exemplo, acurácia, AUC, (R^2))
  • (D^{\pi(j)}) o mesmo conjunto de dados, mas com a coluna (j) permutada por uma permutação aleatória (\pi)

Então:

[ \text{PI}(j) = M(D) - M(D^{\pi(j)}) ]

Se sua métrica é do tipo “quanto menor, melhor” (por exemplo, RMSE, perda logarítmica (log loss)), você pode inverter a subtração:

[ \text{PI}(j) = M(D^{\pi(j)}) - M(D) ]

Muitas bibliotecas padronizam isso retornando sempre “importância = queda de desempenho”, então verifique a convenção de sinal.

Permutações repetidas

Um único embaralhamento pode ser ruidoso, então a importância por permutação costuma ser calculada com (R) repetições:

[ \text{PI}(j) = \frac{1}{R} \sum_{r=1}^R \left( M(D) - M(D^{\pi_r(j)}) \right) ]

Você também pode reportar o desvio-padrão entre as repetições como um indicador de estabilidade.

Como calcular importância por permutação na prática

Fluxo de trabalho recomendado (dados retidos)

A importância por permutação é mais significativa quando calculada em dados retidos — um conjunto de validação (validation set) ou conjunto de teste (test set) — porque:

  • Usar dados de treino pode superestimar a importância devido a sobreajuste (overfitting).
  • A avaliação em dados retidos se alinha com a forma como você realmente se importa com desempenho.

Um fluxo de trabalho típico:

  1. Separe os dados em treino/teste (ou use validação cruzada (cross-validation)).
  2. Treine o modelo no treino.
  3. Calcule a métrica de linha de base no teste.
  4. Para cada atributo:
    • embaralhe esse atributo no teste
    • recalcule a métrica
    • pegue a diferença em relação à linha de base
  5. Repita os embaralhamentos várias vezes e tire a média.

Isso se alinha às boas práticas em Avaliação de Modelos e Divisão Treino-Validação-Teste.

Variante com validação cruzada

Se seu conjunto de dados é pequeno ou você quer estimativas mais robustas:

  • Para cada dobra:
    • treine na dobra de treinamento
    • calcule as importâncias por permutação na dobra de validação
  • Faça a média das importâncias entre as dobras

Isso reduz a sensibilidade a uma divisão específica (veja Validação Cruzada).

Variante fora da bolsa (out-of-bag, OOB) para ensembles com ensacamento

Para métodos de ensacamento (bagging) como Florestas Aleatórias (Random Forests) e Árvores Extra, você pode estimar o desempenho em amostras fora da bolsa (out-of-bag, OOB) por árvore e calcular a importância por permutação usando previsões OOB. Isso pode poupar um conjunto de validação dedicado, mas os detalhes de implementação importam (nem todas as bibliotecas expõem previsões OOB para todos os tipos de ensemble).

Escolhendo a métrica de avaliação

A importância por permutação mede “quanto a métrica cai quando o atributo é destruído”, então a métrica define a noção de importância.

Escolhas comuns:

  • Regressão: (R^2), erro absoluto médio (MAE), RMSE
  • Classificação: acurácia, F1 (F1), AUC-ROC, precisão média (average precision)
  • Ranqueamento/sistemas de recomendação (recsys): ganho cumulativo descontado normalizado (NDCG), precisão média (MAP)

Diretrizes:

  • Use a métrica que você de fato otimiza no ambiente de produção.
  • Prefira métricas que sejam estáveis sob pequenas perturbações; algumas métricas (por exemplo, acurácia em dados desbalanceados) podem ser pouco sensíveis.

Exemplo (scikit-learn): regressão com um pipeline

Abaixo está um exemplo prático usando sklearn.inspection.permutation_importance. O ponto-chave: execute a importância por permutação em dados retidos, e, se você tiver pré-processamento, mantenha-o dentro de um Pipeline para que as transformações sejam aplicadas de forma consistente.

import numpy as np
from sklearn.datasets import fetch_california_housing
from sklearn.model_selection import train_test_split
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.ensemble import ExtraTreesRegressor
from sklearn.inspection import permutation_importance
from sklearn.metrics import r2_score

# Data
X, y = fetch_california_housing(return_X_y=True, as_frame=True)
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.25, random_state=42
)

# Model (Extra Trees often doesn't need scaling, but included to show pipelines)
model = Pipeline([
    ("scaler", StandardScaler()),
    ("etr", ExtraTreesRegressor(
        n_estimators=300,
        random_state=42,
        n_jobs=-1
    ))
])

model.fit(X_train, y_train)

baseline = r2_score(y_test, model.predict(X_test))
print("Baseline R^2:", baseline)

result = permutation_importance(
    model,
    X_test, y_test,
    n_repeats=10,
    random_state=42,
    scoring="r2",
    n_jobs=-1
)

importances = result.importances_mean
std = result.importances_std

ranking = np.argsort(importances)[::-1]
for idx in ranking:
    print(f"{X.columns[idx]:>12s}  importance={importances[idx]:.4f} ± {std[idx]:.4f}")

Interpretação:

  • Uma importância de 0.05 em (R^2) significa: “Se destruirmos esse atributo, (R^2) cai em ~0,05 em média.”
  • Um desvio-padrão grande sugere instabilidade (mais sobre isso abaixo).

Interpretando a importância por permutação (o que ela significa e o que não significa)

Ela é uma medida **global**

A importância por permutação resume a contribuição do atributo ao longo do conjunto de dados em que você avalia. Ela não diz:

Ela captura efeitos principais e interações (mas não consegue separá-los)

Se um atributo só é útil por meio de uma interação (por exemplo, “idade importa apenas quando medicação=sim”), permutar esse atributo ainda pode prejudicar o desempenho, então ele pode apresentar alta importância. Porém, a importância por permutação não diz se a importância vem de um efeito principal ou de uma interação.

Importância negativa pode acontecer

Às vezes, embaralhar um atributo melhora ligeiramente a métrica, gerando importância negativa. Razões comuns:

  • ruído aleatório por amostras finitas / poucas repetições
  • o modelo sobreajustou padrões espúrios nesse atributo
  • problemas de vazamento de dados em que o embaralhamento interrompe artefatos de vazamento (raro, mas possível)

Trate valores negativos pequenos como “aproximadamente zero”, a menos que o efeito seja consistente e grande.

Importância por permutação para ensembles de árvores (por exemplo, Árvores Extra)

Ensembles de árvores como Árvores Extra e florestas aleatórias têm uma importância de atributos embutida baseada em redução de impureza (impurity reduction) (frequentemente chamada de “importância de Gini (Gini importance)” para classificação). A importância por permutação costuma ser preferida porque:

  • A importância baseada em impureza é enviesada a favor de atributos com muitos possíveis pontos de corte (por exemplo, variáveis contínuas ou categóricas com alta cardinalidade).
  • A importância baseada em impureza reflete como o modelo dividiu durante o treino, não necessariamente o quanto cada atributo afeta o desempenho preditivo em novos dados.

A importância por permutação, por outro lado:

  • mede diretamente o impacto no desempenho em um conjunto de dados escolhido
  • é dependente da métrica (o que frequentemente é exatamente o que você quer)

Interpretação prática com Árvores Extra

Árvores Extra introduzem mais aleatoriedade nas divisões do que florestas aleatórias padrão. Isso frequentemente resulta em:

  • boa generalização com variância reduzida
  • uso de atributos distribuído entre preditores correlacionados

Com importância por permutação em Árvores Extra, padrões comuns incluem:

  • Alguns poucos atributos dominantes exibem grande importância (grande queda de desempenho quando permutados).
  • Atributos correlacionados exibem cada um importância modesta, porque o modelo pode substituir um pelo outro.

Comparando importância por impureza vs importância por permutação

Se a importância por impureza coloca o atributo A no topo, mas a importância por permutação o coloca baixo, isso pode indicar:

  • A foi frequentemente usado em divisões, mas é em grande parte redundante com outros atributos.
  • A cria muitas divisões “baratas” (muitos valores únicos), mas não melhora a generalização.
  • A métrica de avaliação ou a distribuição do conjunto de dados difere dos incentivos de divisão no momento do treino.

Em fluxos de trabalho de interpretabilidade, é comum calcular ambos e investigar discrepâncias.

Armadilhas comuns (e como lidar com elas)

1) Atributos correlacionados (ou redundantes)

Problema: Se dois atributos forem fortemente correlacionados (por exemplo, height_cm e height_in), permutar um deles pode não prejudicar muito o desempenho porque o modelo pode se apoiar no outro. Isso faz com que a importância por permutação subestime a importância de atributos redundantes, mas informativos, frequentemente distribuindo a importância pelo conjunto correlacionado.

Sintomas:

  • Muitos atributos correlacionados parecem fracos.
  • Remover todos eles prejudicaria o desempenho, mas permutar qualquer um individualmente quase não altera a métrica.

Mitigações:

  • Permutação em grupo (group permutation): permute atributos correlacionados juntos (embaralhe um bloco de colunas de uma vez) para medir sua importância combinada.
  • Agrupamento (clustering) de atributos (feature clustering): agrupe atributos por correlação e reporte a importância por grupo.
  • Considere importância por remoção de coluna (drop-column importance) (retreinar sem o atributo), que pode refletir melhor a redundância, mas é muito mais custosa.

Conceito relacionado: Multicolinearidade.

2) Vazamento de dados (incluindo vazamento do alvo e vazamento no pré-processamento)

Problema: Se um atributo codifica informação que não estaria disponível no momento da previsão (por exemplo, “número de dias desde que a reivindicação foi encerrada” ao prever se uma reivindicação será encerrada), o modelo parecerá depender fortemente disso, e a importância por permutação o classificará como extremamente importante.

A importância por permutação não “corrige” vazamento — ela pode até evidenciá-lo ao mostrar uma importância incomumente alta.

Fontes comuns de vazamento:

  • Atributos pós-desfecho incluídos nos dados de treino
  • Agregações calculadas usando o conjunto de dados completo (incluindo teste), em vez de apenas treino
  • Vazamento temporal em séries temporais (informação do futuro no passado)

Mitigações:

3) Instabilidade devido a ruído amostral e aleatoriedade

Problema: A importância por permutação pode variar dependendo de:

  • quais pontos de teste você tem
  • a semente aleatória da permutação
  • treinamento estocástico do modelo (especialmente com ensembles)

Mitigações:

  • Aumente n_repeats (por exemplo, 10–50)
  • Use um conjunto retido maior (ou média por validação cruzada)
  • Reporte incerteza (desvio-padrão entre repetições; ou intervalos de confiança por bootstrap (bootstrap confidence intervals))
  • Fixe random_state para reprodutibilidade

Uma regra prática: se as importâncias de dois atributos se sobrepõem fortemente dentro da incerteza, não superinterprete a ordem do ranking.

4) Efeitos fora da distribuição ao permutar

Problema: Permutar uma coluna de forma independente pode criar combinações irreais (por exemplo, permutar “CEP” independentemente de “estado”, ou permutar “idade” independentemente de “série escolar”). A degradação de desempenho do modelo então reflete tanto:

  • perda de sinal no atributo
  • comportamento do modelo em pontos de dados irreais

Isso é uma limitação fundamental: a permutação quebra a distribuição conjunta.

Mitigações:

  • Permute dentro de grupos (por exemplo, embaralhe dentro de cada estado, dentro de cada período de tempo, ou dentro de cada segmento de clientes) para preservar parte da estrutura.
  • Use métodos de importância por permutação condicional (conditional permutation importance) (mais complexos; estimam embaralhamentos condicionados a atributos correlacionados).
  • Considere métodos complementares como Gráficos de Dependência Parcial, que mantêm entradas no manifold (on-manifold) (embora eles tenham suas próprias suposições de independência (independence assumptions)).

5) Permutar após engenharia de atributos (e codificação one-hot)

Problema: Se um atributo categórico for transformado por codificação one-hot (one-hot encoding) em várias colunas, permutar apenas uma coluna dummy mede uma “destruição parcial” estranha do atributo.

Mitigações:

  • Use permutação em grupo: permute juntas todas as colunas one-hot correspondentes ao atributo categórico original.
  • Se estiver usando um pipeline com ColumnTransformer, acompanhe quais colunas transformadas pertencem a qual atributo bruto.

6) Dados com estrutura de dependência (séries temporais, observações agrupadas)

Problema: Se as observações não forem i.i.d. (independentes e identicamente distribuídas, i.i.d.) (por exemplo, múltiplas linhas por usuário, pontos sequenciais no tempo), uma permutação ingênua entre linhas quebra a estrutura e pode induzir a erro.

Mitigações:

  • Para dados agrupados: embaralhe dentro do grupo ou avalie no nível do grupo.
  • Para séries temporais: embaralhe dentro de blocos de tempo apropriados ou use interpretabilidade sensível ao tempo.

Orientações práticas e checklist de “boas práticas”

  • Calcule em dados retidos (validação/teste), não no treino.
  • Escolha uma métrica alinhada ao objetivo de negócio.
  • Use repetições suficientes e reporte a variabilidade.
  • Fique atento a atributos correlacionados; considere importâncias em grupo.
  • Use Pipelines adequados para evitar vazamento no pré-processamento.
  • Trate pequenas diferenças nos rankings de importância como ruído, a menos que estejam claramente separadas.
  • Se os resultados orientarão decisões, confirme com um segundo método:
    • importância por remoção de coluna baseada em retreinamento (mais fiel, mais cara)
    • métodos de explicação local como Valores SHAP
    • verificações de sanidade (sanity checks): remover atributos suspeitos de vazamento e reavaliar

Relação com outros métodos de importância

Importância de atributos baseada em impureza (específica para árvores)

  • Rápida, embutida, mas pode ser enviesada e centrada no treino.
  • A importância por permutação costuma ser uma visão melhor de “impacto no desempenho”, especialmente para Árvores Extra e florestas aleatórias.

Importância por remoção de coluna (baseada em retreinamento)

  • Remova um atributo, retreine o modelo, meça a queda de desempenho.
  • Prós: lida melhor com redundância e questões de distribuição.
  • Contras: computacionalmente cara (retreina (p) vezes) e sensível à aleatoriedade do retreinamento.

SHAP e métodos de explicação aditiva relacionados

  • Tipicamente fornecem explicações locais que podem ser agregadas para o global.
  • Mais informativos sobre direcionalidade e contribuições por amostra, mas podem ser mais complexos e mais pesados computacionalmente dependendo do modelo.

Resumo

A importância por permutação estima a importância global de atributos medindo o quanto a métrica escolhida do modelo se deteriora quando um atributo é permutado aleatoriamente em um conjunto de dados de avaliação. Ela é agnóstica ao modelo, fácil de implementar e frequentemente mais alinhada ao valor preditivo real do que importâncias por impureza de árvores — especialmente para ensembles como Árvores Extra.

Suas principais ressalvas são igualmente importantes: atributos correlacionados podem mascarar a importância, vazamento de dados pode produzir importâncias enganosamente altas, e os resultados podem ser instáveis ou distorcidos por permutações fora da distribuição (out-of-distribution). Com um desenho cuidadoso de avaliação (dados retidos, permutações repetidas, estratégias de agrupamento e prevenção de vazamento), a importância por permutação é uma base forte e prática para interpretabilidade em aprendizado de máquina clássico.