Coleção modelos

Matriz de confusão

Classe real × classe prevista, com o acerto de cada classe e o geral.

O que o bloco faz

models/confusion conta, para cada classe real, em qual classe o modelo pôs cada caso. A saída é data/table no formato largo: real, uma coluna por classe prevista, total, acertos, taxa_acerto e a linha total com o acerto geral.

Antes de continuar

Termos que esta página usa, em poucas palavras. As definições completas estão no glossário.

Amostra
A parte da população que é de fato observada. Quando é sorteada com probabilidades conhecidas, permite estimar características da população e medir a incerteza dessa estimativa.
Modelo linear generalizado (GLM)
Uma extensão do modelo linear para respostas que não são normais, como contagens (Poisson) e proporções ou sim/não (binomial). Uma função de ligação conecta a média da resposta à parte linear do modelo.
Nível
Cada valor que um fator assume no estudo: as doses 0, 50 e 100 kg/ha são três níveis do fator dose.
Treino e teste
Dividir os dados em uma parte para ajustar o modelo (treino) e outra, guardada, para medir o desempenho (teste). O teste só é honesto se o modelo nunca o viu durante o ajuste.
Matriz de confusão
A tabela que cruza a classe verdadeira com a classe prevista. Dela saem acurácia, sensibilidade, especificidade e precisão, que podem contar histórias diferentes quando as classes têm tamanhos muito diferentes.

Quando usar

Use depois de ajustar um classificador — o GLM binomial, a discriminante ou a logística da coleção multivariada, as árvores de machine learning — para ver quais classes ele confunde.

Pressupostos

  • A medida que interessa é a fora da amostra: com o teste separado (ml/split) em dados, ou pela validação cruzada quando só o modelo está ligado. A resubstituição sai otimista, e mais ainda com muitos preditores e poucos casos. Previsões do treino marcado pelo ml/split são recusadas, salvo permitir_treino (que acrescenta a nota de otimismo); tabelas sem essa marca (divisão feita por fora, treino e teste juntados) são medidas como chegam, e num teste já usado para decidir a medida também sai otimista — isso nenhuma marca detecta.

    Se falhar: Ligue a saída teste do ml/split em dados, ou deixe a validacao em cruzada; se o teste já foi usado para escolher, reporte a medida como otimista.

  • Com classes desequilibradas, a acurácia engana: prever sempre a classe maioritária já a deixa alta. A acurácia balanceada e o macro F1 dão peso igual a cada classe.

    Verificar:Agrupar e resumir

    Se falhar: Conte as linhas por classe no data/group_summarise e leia a balanced_accuracy ou o macro_f1 e a models/confusion, não só a accuracy.

  • Real e previsto usam os mesmos rótulos de classe; um rótulo escrito diferente vira uma classe a mais.

    Se falhar: Padronize os rótulos com o data/mutate antes.

Configuração

As duas entradas são opcionais, mas uma tem de estar ligada. Só modelo: avalia no treino pela Validação (cruzada, padrão, ou resubstituição). modelo e dados: prevê a tabela e compara com a resposta do modelo. Só dados: modo tabela, com Resposta e Previsto (padrão previsto) nomeando as colunas.

Tabela — matriz (padrão) ou métricas: acurácia, acurácia balanceada (a média das revocações; Brodersen et al., 2010), kappa de Cohen (1960) e precisão, revocação e F1 por classe. Classe nunca prevista tem precisão e F1 indefinidos (NA), e não zero.

Permitir avaliar o treino — com dados vindos do ml/split (a tabela leva a marca de treino/teste), previsões das linhas de treino são recusadas (tr_ml_error_train_eval): a medida no treino é otimista. Ligado, avalia assim mesmo e acrescenta a nota de otimismo. Tabela sem a marca é avaliada como chega.

Exemplo

Exemplo de modelos
Modelo linear generalizado
Matriz de confusão
library(trama)

reg <- tr_registry()
tr_use("trama.models", registry = reg)

tr_flow(reg) |>
  tr_add("dados", "models/example", dataset = "mtcars") |>
  tr_add("logit", "models/glm", formula = "am ~ wt", familia = "binomial", from = "dados") |>
  tr_add("cv", "models/confusion", validacao = "cruzada", from = "logit")

Cada carro é classificado como manual ou automático por um modelo ajustado sem ele.

Como interpretar

A diagonal são os acertos. Leia a taxa de cada classe, não só a geral: com classes desbalanceadas, prever sempre a maior já acerta muito. A resubstituição é otimista; a cruzada estima o acerto num caso novo.

Implementação

  • trama.models::tr_models_confusion() versão 0.6.6Cálculo próprio com base::table sobre os níveis da resposta, incluindo as contagens zero; sem dados, as previsões são as da validação cruzada do contrato (tr_models_predict_cv). Métricas (tabela = "métricas") por implementação própria (porte da multi/confusion da main); kappa conferido contra irr::kappa2 e psych::cohen.kappa.

No código O bloco chama trama.models::tr_models_confusion(), em trama.models/R/avaliar.R:153.

A conta é implementada pelo próprio trama, sem um pacote R de referência por trás.

Outras funções de pacotes que o bloco usa (1)

Referências

Teoria

Livro-texto

  • James, G.; Witten, D.; Hastie, T.; Tibshirani, R. (2021). An Introduction to Statistical Learning: with Applications in R. 2. ed. New York: Springer. doi:10.1007/978-1-0716-1418-1

Complementar

  • Brodersen, K. H.; Ong, C. S.; Stephan, K. E.; Buhmann, J. M. (2010). The balanced accuracy and its posterior distribution. 20th International Conference on Pattern Recognition, 3121-3124. doi:10.1109/ICPR.2010.764
  • Sokolova, M.; Lapalme, G. (2009). A systematic analysis of performance measures for classification tasks. Information Processing & Management, 45(4), 427-437. doi:10.1016/j.ipm.2009.03.002

Ver a bibliografia completa do trama