Aplicando Previsão Conforme em Modelos de Classificação

Tutorial prático de Previsões Conformes (Conformal Predictions) para quantificar incertezas em modelos de Classificação.

Gustavo Bruschi
Data Hackers
16 min readMay 1, 2023

--

Source: https://foodandstyle.com/cooking-dried-beans/

No tutorial anterior, dei uma breve explicada sobre o que é Previsão Conforme. É um método versátil que pode transformar qualquer incerteza de modelos de Machine Learning em uma ferramenta confiável. E por fim, dei um breve exemplo de Classificação Multiclass com a nossa querida empresa de feijões.

Neste tutorial, pretendo avançar mais no assunto, demonstrando com mais detalhes, como podemos utilizá-las em modelos de Classificação. Demonstro diferentes maneiras de se obter as previsões conformes, através de formas diferentes de calcular a cobertura (“coverage”), e suas vantagens e desvantagens.

(Ainda) Classificando Feijões

Como podemos ver, classificar os feijões pode ser uma tarefa bem complexa (só conheço feijão marrom e pretinho/carioca). Tanto à olho nu, e mesmo para modelos de Machine Learning. Photo by A.Aladdin in Kaggle Notebook

Vamos voltar ao exemplo do artigo anterior, de classificação de tipos de feijões.

Abaixo, seguem os snippets para download e importação dos dados, bem como o treinamento do modelo utilizado pela empresa de feijões. Você pode ver mais sobre o case no artigo anterior.

Download e importação dos dados:

O modelo de classificação dos feijões:

Uma abordagem “ingênua”

Agora, iremos realizar as previsões conformes com diferentes abordagens, e todas disponíveis na lib MAPIE, também mostrada no artigo passado.

A “abordagem ingênua” seria tomar as probabilidades saídas do modelo e assumir que elas estão bem calibradas. Já mostramos anteriormente que isso não é correto.

Portanto, para gerar um conjunto de previsões com pelo menos 1 − 𝛼 de probabilidade, adotamos a “outra abordagem ingênua”: para cada feijão, somamos as “probabilidades” até que a pontuação cumulativa de 1 − 𝛼 seja excedida, começando com a mais alta.

O método “ingênuo” não depende de dados de calibração. Portanto, não faz diferença quais dados você usa em mapie_score.fit(). Mas se você pular esta etapa, receberá um erro do MAPIE.

Como esperado, a cobertura é muito baixa porque as pontuações nos dados de treinamento não são adequadas para encontrar o limite. O modelo é muito confiante e 𝑞, portanto, a cobertura é muito baixa para novos dados.

Método Score

No artigo passado, a cientista realizou uma previsão conforme, e se valeu desse método chamado “score”.

O método “score” segue a receita de Previsão Conforme padrão. Começamos com as etapas de treinamento e calibração:

  1. Divida os dados em treinamento e calibração (tamanho 𝑛𝑐𝑎𝑙)
  2. Treine o modelo nos dados de treinamento
  3. Calcular pontuações de não conformidade

– Calcular previsões 𝑓(𝑥) para os dados de calibração
– Manter apenas as probabilidades para as classes verdadeiras 𝑓(𝑥𝑖)[𝑦𝑖]
– Calcular os scores de não conformidade 𝑠𝑖 = 1 − 𝑓(𝑥 𝑖)[𝑦𝑖]

O nível do quantil é 1 − 𝛼 multiplicado por (𝑛𝑐𝑎𝑙 + 1)/𝑛𝑐𝑎𝑙, que serve como um termo de correção de amostra finita. O termo só é relevante quando o conjunto de dados de calibração é pequeno. A título de exemplo, se 𝛼 = 0,05 e 𝑛𝑐𝑎𝑙 = 50, então 𝑞𝑙𝑒𝑣𝑒𝑙 = 0,97. Se 𝑛𝑐𝑎𝑙 = 1000, então 𝑞𝑙𝑒𝑣𝑒𝑙 = 0,951.

Agora podemos usar esse limite 𝑞 para criar conjuntos de previsão para novos dados:

• Obtenha uma nova amostra 𝑥𝑛𝑒𝑤
• Calcule 𝑠(𝑦, 𝑥𝑛𝑒𝑤) para todas as classes 𝑦
• Escolha todas as classes 𝑦 onde 𝑠(𝑦, 𝑥𝑛𝑒𝑤) ≤ 𝑞

Agora podemos aproveitar nossos conjuntos de previsão com a seguinte garantia de cobertura marginal:

Observe que não há apenas um limite inferior, mas também um limite superior. Quanto maior o conjunto de calibração, mais apertado o limite superior.

Agora vamos aplicar esse método no MAPIE, basta usar o method=‘score’.

A cobertura agora é boa, dado 𝛼 = 0,05, o que implica uma cobertura de 95% para os conjuntos de previsão. O tamanho médio do conjunto também é bem pequeno, o que é bom. Mas nem tudo está bem quando se usa o método de pontuação.

Cobertura Marginal x Cobertura Condicional

Embora todos os métodos de predição conforme garantam cobertura marginal, o método score não é adaptável à dificuldade de cada classificação. Não temos garantia de que a cobertura seja 1 − 𝛼 para cada ponto de dados, nem mesmo para grupos nos dados, como para cada classe.

Por exemplo, talvez um tipo de feijão seja muito mais difícil de classificar do que outro. Então pode ser que a cobertura para uma classe seja maior que 1−𝛼 e para a outra seja menor, mas em média a cobertura é 1 − 𝛼 (cobertura marginal alcançada).

Se você deseja que o previsor conforme também alcance a garantia de cobertura para grupos de dados, ou mesmo para qualquer ponto no espaço de recursos, falamos de cobertura condicional.

  • Cobertura Marginal: significa que, em média, 1−𝛼 das regiões previstas contêm o rótulo verdadeiro para novas amostras de dados. Todos os preditores conformes garantem cobertura marginal. A cobertura marginal pode ser estimada como a porcentagem de conjuntos de previsão que cobrem a verdadeira classe para um novo conjunto de dados (que pode ser trocado com o conjunto de calibração).
  • Cobertura Condicional: significa que a cobertura de 1 − 𝛼 não é apenas verdadeira em média, mas também condicional a algum tipo de agrupamento dos dados. A cobertura condicional perfeita (dividida para cada ponto de dados) não pode ser garantida, apenas tentada. Já obter cobertura condicional para grupos definidos é possível.

A variedade de feijão “Barbunya” tem a menor cobertura com cerca de 92,53%. Em suma, não parece tão ruim, mas é claro que isso pode mudar sempre que um novo modelo for treinado.

Já os feijões “Bombay” tem uma cobertura de 100%, e isso ocorre pois, se olharmos a matriz de confusão no artigo anterior, essa variedade foi a mais fácil de classificar.

Método Conjuntos de Previsão Adaptável (Adaptive Prediction Sets — APS)

Embora todos os métodos de predição conforme garantam cobertura marginal, o método de pontuação não é adaptável à dificuldade de cada classificação. Não temos garantia de que a cobertura seja 1 − 𝛼 para cada ponto de dados, nem mesmo para grupos nos dados, como para cada classe.

O método score é fácil de implementar e entender. Ele fornece limites inferiores e superiores de cobertura e produz os menores conjuntos de previsão média em comparação com outros métodos de classificação conforme. No entanto, o método não é adaptativo: a garantia de cobertura é válida apenas na média. Casos de classificação difícil podem ter conjuntos de previsão muito pequenos e casos fáceis podem ter conjuntos muito grandes.

Primeiro, vamos entender o que é “adaptatividade”, no contexto de Previsão Conforme. Imagine que você tenha dois grupos em seus dados. Metade dos seus dados é fácil de classificar, a outra metade é difícil. Um previsor conforme pode atingir 90% de cobertura por meio do seguinte cenário: a cobertura para os conjuntos de previsão dos pontos de dados fáceis é de 100% e a cobertura para os conjuntos de previsão dos pontos de dados difíceis é de 80%.

O previsor conforme, neste caso, não é adaptativo. Pois, na prática, isso significa que os conjuntos de previsão para os dados fáceis são muito grandes em média e os conjuntos de previsão para os dados difíceis são muito pequenos.

Um algoritmo de previsão conforme é adaptativo se não apenas atingir a cobertura marginal, mas também (aproximadamente) a cobertura condicional.

Agora vamos explicar como o método adaptativo funciona. Aqui, o que muda é forma de calcular o score de não-conformidade.

Vamos ao seguinte exemplo: classificar três classes (gato, leão e cachorro). Imagine que uma instância do modelo sejam as probabilidades gato=0.3, leão=0.6, e cachorro=0.1. E onde classe “gato” é a correta. O score de não-conformidade será 𝑠𝑖 seria 𝑠𝑖 = 1 − 0.3 = 0.7, pois usamos apenas a probabilidade da classe gato.

Já no método adaptativo, vamos somar as probabilidades, começando pela maior, até a verdadeira classe. Portanto, para o exemplo acima, a pontuação seria 0,6 + 0,3 = 0,9. A saída 𝑓(𝑥) é um vetor de comprimento 𝑘, uma probabilidade por classe. Vamos chamar 𝑓(𝑘)(𝑥) de probabilidades ordenadas, de modo que 𝑓(1)(𝑥) seja a maior probabilidade e 𝑓(𝑘)(𝑥) a menor probabilidade. E 𝑧 é o índice da verdadeira classe (no exemplo do gato, 𝑧 = 2)

Então somamos 𝑠 = 𝑓(1)(𝑥) + 𝑓(2)(𝑥) + … 𝑓(𝑧)(𝑥). No caso em que a verdadeira classe realmente obtém a maior probabilidade do modelo, o score seria 𝑠 = 𝑓(𝑥)[𝑦] = 𝑓(1)(𝑥), porque 𝑧 = 1.

A adaptabilidade é construída automaticamente na definição do score de não-conformidade, uma vez que “certas” classificações terão idealmente apenas uma classe de alta probabilidade. E classificações “incertas” terão a probabilidade espalhada pelas classes, resultando em conjuntos maiores.

Assim como método score, a calibração funciona da seguinte forma:

  • Calcule todas as pontuações cumulativas 𝑠𝑖 para os dados de calibração
  • Calcular o nível quantil 𝑞𝑙𝑒𝑣𝑒𝑙 = 1 − 𝑐𝑒𝑖𝑙((𝑛𝑐𝑎𝑙 + 1)𝛼)/𝑛𝑐𝑎𝑙
  • Calcule o quantil 𝑞𝑙𝑒𝑣𝑒𝑙, 𝑞 para os dados de calibração de modo que (aproximadamente) 1 − 𝛼 das pontuações estejam abaixo de 𝑞

A etapa de previsão também segue a receita usual:

  • Calcule todas as probabilidades de classe para um novo ponto de dados 𝑥𝑛𝑒𝑤
  • Ordene as probabilidades de classe em ordem decrescente
  • Incluir classes, começando com a maior probabilidade, até o limite 𝑞
    é atingido

Por fim, o último passo está em aberto. Temos três opções em relação à inclusão no conjunto de previsões: 1) Incluir o rótulo acima do limite, 2) Não incluir o rótulo acima do limite, e 3) Incluir o rótulo aleatoriamente.

Vamos ao MAPIE explorar o método adaptativo com mais detalhes.

Todas as três opções de inclusão são implementadas na biblioteca. Elas começam com o mesmo processo de inicialização e calibração. E na etapa de previsão, temos que decidir se incluímos o último rótulo ou não. Vejamos todas as 3 opções, começando com o padrão de incluir o rótulo que ultrapassa o limite.

Na função de previsão, precisamos especificar o que fazer com o último label que cruza o limite. No código a seguir, nós o incluímos no conjunto de previsões. O padrão é incluí-lo, então poderíamos ter omitido a opção “include_last_label”. Vamos verificar a cobertura, definir tamanhos e coberturas por classe:

A cobertura fica um pouco acima de 95%, o que é de se esperar, pois ao incluir sempre o rótulo acima do limiar, obtemos uma cobertura maior. O tamanho médio do conjunto também é maior do que para o método score, o que também é esperado, pois o método de pontuação produz os menores conjuntos em média.

Para a cobertura por classe, temos que entrar em detalhes:

  • As coberturas são ligeiramente melhores do que para o método score, especialmente quando se olha para os limites inferiores
  • Algumas coberturas são bem superiores a 95%, pois algumas classes são superfáceis de classificar e sempre tem uma pontuação alta para a verdadeira classe

Agora, vamos ver o que acontece quando excluímos a label.

Os tamanhos dos conjuntos são bastante pequenos, mas isso tem um preço: a cobertura é muito menor do que a meta de 95%, resultado da exclusão da label que ultrapassaria o limite. Na verdade, isso significa que o APS com último rótulo excluído não é realmente um preditor conforme, pois não pode garantir nada.

Vamos tentar a última opção e incluir o último label aleatoriamente:

Agora a cobertura está novamente próxima dos 95% desejados. De fato, das três opções de inclusão, a opção “randomizada” é a única que tem a seguinte garantia:

Esta cobertura não se aplica às outras duas opções “include_last_label=True/False”. A opção “include_last_label=True” pode pelo menos garantir uma cobertura acima de 1 − 𝛼. E claro, seria de se esperar que a cobertura da label verdadeira fosse menor para “include_last_label=False”.

Em teoria, isso está correto. Mas, na prática, isso nem sempre acontece. Ao definir include_last_label como “True” ou “False”, MAPIE não produzirá conjuntos de previsão vazios. Mas a estratégia “randomized” pode produzir conjuntos vazios. Isso pode levar a uma situação em que ambas as opções têm uma cobertura superior à nominal de 1 − 𝛼 e, portanto, superior à opção “randomized”.

Para concluir, é importante notar como essa estratégia pode gerar conjuntos adaptativos. Se a opção de randomização for usada, pode-se esperar uma cobertura marginal exata. Quando muitas labels estão envolvidos, o APS pode produzir grandes conjuntos de previsão e o RAPS pode ser uma opção melhor.

Método top-k para conjuntos de tamanho fixo

Uma alternativa simples é o método Top-k.

O método segue mesma receita de classificação conforme dos métodos score e adaptativo, mas usa um score de não-conformidade diferente.

Top-k usa apenas a classificação da classe verdadeira em vez do resultado da probabilidade. Quanto mais alta a classificação da verdadeira classe, menos certa era a classificação do modelo.

Como de costume, na etapa de calibração encontramos o limite 𝑞 para a pontuação, neste caso a classificação. Mudando o “method” para “top_k”, conseguimos executá-lo.

O limite neste caso é de 3 classes. Como o método top-k só pode cortar em pontos distintos, a cobertura não será exatamente 1−𝛼. Seria se repetíssemos o experimento muitas vezes, porque às vezes também pode cortar em 4 ou 2 e, em média, pode atingir 1−𝛼 de cobertura.

Mas há um problema: por que alguns tamanhos de conjunto são maiores que 3 ? A resposta é “laços” em probabilidades. Se um feijão tem as seguintes probabilidades ordenadas: [0.80, 0.17, 0.01, 0.01, 0.01, 0.0], então 5 classes são incluídas no conjunto em vez de 3, porque três classes estão empatadas no terceiro lugar.

Como podemos ver, o Top-k é ainda mais simples que os métodos apresentados anteriormente. Isso pode ser útil se você precisar produzir o mesmo tamanho de conjunto para todos os pontos de dados. Top-k tem a pior adaptabilidade, pois produz literalmente conjuntos de previsão do mesmo tamanho, não importa o quão complicada seja a classificação.

Método Conjuntos de Previsão Adaptável Regularizado (Regularized Adaptive Prediction Sets — RAPS)

A RAPS introduz um termo de regularização que penaliza a inclusão de muitas classes. A regularização é baseada em dois novos parâmetros, 𝜆 e 𝑘𝑟𝑒𝑔. Não entraremos em detalhes de como o algoritmo funciona, apenas a intuição por trás dele. Você pode encontrar esses detalhes descritos no artigo que gerou o método.

  • Primeiro, as probabilidades de classe são classificadas em ordem decrescente.
  • Todas as classes com classificação superior a 𝑘𝑟𝑒𝑔 recebem um termo de penalidade.
  • Esta penalidade depende de 𝜆 e de quantas classes o rótulo verdadeiro está de 𝑘𝑟𝑒𝑔
  • A penalidade é adicionada à probabilidade da classe

No MAPIE, a regularização é adicionada simplesmente definindo “raps” para o “method”. Por default, 20% dos dados de calibração são utilizados para a regularização.

Neste caso, este método não reduziu o tamanho médio do conjunto de previsão. O RAPS é mais útil em casos com muitas classes, como um ImageNet.

O RAPS produz conjuntos menores que o APS, sendo um “meio-termo” entre Top-k (regularização extrema) e APS (sem regularização). A regularização requer sacrificar alguns dos dados de calibração para ajustar os parâmetros de regularização. O RAPS é útil quando você tem muitas classes.

Método Previsão Conforme Balanceada por Grupo

Embora métodos como APS e RAPS possam aproximá-lo um pouco mais da cobertura condicional, eles não garantem de forma alguma que a cobertura será válida para cada instância ou subgrupo de instâncias. Mas e se você tiver grupos específicos nos dados para os quais deseja garantir a cobertura? Suponha que você queira que a garantia de cobertura para classificação de imagens seja válida tanto para animais quanto para animais fantasiados?

Felizmente, a Previsão Conforme Balanceada por Grupo vem com coberturas garantidas por grupo. Basta dividir os dados em grupos e realizar a previsão conforme separadamente para cada grupo. Isso requer que você conheça o grupo no momento da previsão, portanto, este método não funcionará se dividirmos por classe.

Obter a cobertura por cada grupo parece incrível, mas há um preço à se pagar: para previsão conforme por grupo, temos que dividir os dados de calibração por grupos.

Se você tiver 1.000 pontos de dados no conjunto de calibração e 10 grupos de tamanho igual, terá apenas cerca de 100 pontos de dados restantes para calibração por grupo. À medida que você aumenta o número de grupos e também se tiver grupos desbalanceados, seus dados de calibração por grupo rapidamente se tornarão pequenos. Conjuntos de dados de calibração menores significam estimativas de limite menos confiáveis. Embora não prejudique a garantia de cobertura (em média), aumentará mais a variação.

Vamos tentar isso com o feijão. Como todos as features de feijão são numéricas, usamos a Area para definir um grupo de pequenos grãos.

Aplicando o método para o grupo de feijões pequenos, temos:

Na etapa de previsão, precisamos aplicar a mesma definição de grupo novamente para obter um subconjunto dos dados e, em seguida, aplicar o previsor conforme como de costume.

A predição conformada balanceada por grupo garante cobertura de 1−𝛼 para agrupamentos arbitrários dos dados. No entanto, quanto mais grupos houver, menos pontos de dados serão deixados no conjunto de calibração por grupo e a qualidade da calibração será prejudicada. E a variável de grupo também deve estar disponível para novos dados.

Método APS Condicional de Classe (CCAPS) para Cobertura por Classe

Pensando no caso dos feijões, já discutido no artigo anterior, o agrupamento desejado seria por variedade de feijões. Mas a variedade é o resultado a ser previsto pelo modelo de classificação, portanto, não temos acesso a ela no momento da previsão. Se o fizéssemos, não precisaríamos do nosso modelo de ML.

No entanto, ainda há uma maneira de garantir a cobertura em termos de classe: Previsão Conforme Condicional de Classe. A APS Condicional de Classe (CCAPS) é uma abordagem para garantir 1 − 𝛼 cobertura de conjuntos de previsão por classe. Em muitos casos de uso, essa é uma propriedade útil, pois torna o preditor conformal muito mais adaptativo e dá igual atenção a cada classe.

A etapa de calibração é a mesma da predição conformada balanceada por grupo e usamos a classe como a variável de agrupamento. Como a classe é conhecida pelo conjunto de calibração, podemos simplesmente dividir nossos dados por classe e aplicar a previsão conforme normalmente, mas por classe. Para o exemplo dos feijões, teríamos 7 preditores conformes.

O “problema” ocorre na etapa de previsão: não conhecemos as classes verdadeiras para os novos dados. Uma solução para isso está bem descrita nesse artigo. Aplicamos todos os preditores conformes resultantes, e o conjunto de previsões é a união de todas as classes conformes.

Digamos que você tenha 𝑘 = 3 classes, você escolhe 𝛼 = 0.1 e os respectivos limites 𝑘𝑞 são 0.95, 0.80 e 0.99. Então CCAPS escolhe 𝑞 = 0.99. Esta escolha garante para todas as classes que tenhamos uma cobertura de ≥ 1 − 𝛼, no nosso caso 10%. No entanto, isso também significa que, para algumas classes, a cobertura pode ser muito maior que 1−𝛼 e, portanto, produzir grandes conjuntos de previsões. Desta forma, para pelo menos uma classe a cobertura esperada é aproximadamente 1 − 𝛼 e as outras serão automaticamente maiores, algo entre 1 e 1 − 𝛼. Em nosso caso fictício, eles poderiam ser 92% para a classe 1, 98% para a classe 2 e 90% para a classe 3.

O CCAPS garante cobertura ≥ 1−𝛼 por classe. Como o CP em grupo, ele reduz o desempenho da calibração ao dividir os dados de calibração em várias classes. Além disso, pode produzir conjuntos de predição bastante grandes, uma vez que deve garantir a cobertura para a classe mais difícil.

Guia para escolher um método de classificação conforme

Descrição teórica dos métodos de Previsão Conforme para Classificação. Disponível na documentação do MAPIE.

Bem, foram apresentados várias formas diferentes de obter predições conformes.

Mas qual eu devo utilizar ?

Isso depende principalmente de quanto você se preocupa com a cobertura condicional. Se priorizarmos a escolha dos métodos, ficaríamos com a seguinte lista:

  • 1) Você precisa de conjuntos de previsão de tamanho fixo --> Método Top-k
  • 2) Você não se importa com a cobertura condicional --> Método Score
  • 3) Você não se importa com a cobertura condicional, desde que a cobertura por grupo seja garantida

- Se você tiver dados suficientes por grupo --> Previsão Conforme Balanceada por Grupo

- Se você não tiver dados suficientes --> APS ou RAPS

- Você não se importa com a cobertura condicional, desde que cada classe tenha cobertura garantida --> CCAPS

  • 4) Você se preocupa com a cobertura condicional em geral

- Poucas classes --> APS

- Você quer conjuntos de predição extra pequenos e pode sacrificar alguns dos dados de calibração, ou você tem não apenas um punhado, mas centenas ou milhares de classes --> RAPS

Considerações Finais:

Ao longo desse artigo, mostramos diferentes maneiras de aplicar a Previsão Conforme para gerar medidas de incerteza em modelos de Classificação.

Esse tipo de técnica pode ser aplicado em diferentes situações que envolvem Machine Learning além de Classificação, como Regressão e Séries Temporais. Portanto, fiquem atentos para os próximos artigos.

Notas:

Quaisquer erros são de minha autoria. Fiquem à vontade para dar feedbacks e críticas construtivas.

Referências:

https://cs229.stanford.edu/proj2021spr/report2/82008216.pdf

--

--