Coleção modelos

Avaliar previsões

Erro de previsão (regressão) ou acerto, kappa e F1 (classificação), numa tabela de métricas.

O que o bloco faz

models/evaluate mede a previsão numa tabela metrica, valor, n. Regressão: mae, rmse e r2 de previsão. Classificação: accuracy, balanced_accuracy, macro_f1, kappa e, com duas classes, sensitivity e specificity da classe positiva.

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.
Resíduo
A diferença entre o valor observado e o valor que o modelo ajustado prevê para aquela observação. É nos resíduos que se conferem os pressupostos do modelo: eles devem parecer ruído, sem padrão.
Coeficiente de determinação (R²)
A fração da variação da resposta que o modelo explica, entre 0 e 1. Nunca diminui quando se acrescentam variáveis, por isso não serve sozinho para escolher entre modelos.
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 para saber quanto o modelo erra num caso novo. models/fit_stats descreve o ajuste no treino; este bloco mede a previsão, por validação cruzada ou em dados que o modelo não viu.

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.

  • Na regressão, o R² compara com a média do próprio conjunto avaliado; no teste pode ser negativo (pior que prever a média) e é indefinido com resposta constante.

    Verificar:Analisar resíduos

    Se falhar: Leia RMSE e MAE, na unidade da resposta, junto do gráfico de resíduos.

  • O kappa desconta a concordância esperada pelas marginais, mas depende da prevalência: com uma classe muito rara ele cai mesmo com boa acurácia, e não há escala universal do que é “bom”.

    Se falhar: Leia o kappa junto da acurácia balanceada e das métricas por classe.

  • Precisão, revocação e F1 por classe tratam cada classe contra as demais; com poucas linhas de uma classe (coluna n), os valores dela variam muito. Uma classe nunca prevista tem precisão indefinida (0/0): sai NA e fica fora das médias macro e ponderada, como zero_division = np.nan do scikit-learn — o padrão do scikit-learn põe 0 e puxa a média para baixo, então compare com cuidado.

    Verificar:Matriz de confusão

    Se falhar: Confira as contagens na models/confusion antes de interpretar a classe.

Configuração

Mesmas entradas opcionais da matriz de confusão. No modo tabela, resposta ou previsto categóricos fazem classificação; dois números, regressão. Linhas sem real ou previsto ficam fora, e n diz quantas contaram.

Precisão de classe nunca prevista é indefinida (0/0): sai NA e fica fora das médias macro e ponderada, como zero_division = np.nan do scikit-learn.

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
Regressão linear
Avaliar previsões
library(trama)

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

tr_flow(reg) |>
  tr_add("dados", "models/example", dataset = "mtcars") |>
  tr_add("reg", "models/lm", formula = "mpg ~ wt + hp", from = "dados") |>
  tr_add("cv", "models/evaluate", validacao = "cruzada", from = "reg")

Como interpretar

rmse está na unidade da resposta. O r2 de previsão pode ser negativo: o modelo prevê pior que a média. O kappa desconta o acerto que o acaso daria com as mesmas proporções.

Implementação

  • trama.models::tr_models_evaluate() versão 0.6.6Cálculo próprio: MAE, RMSE e R² = 1 − SQE/SQT; na classificação, por classe (um contra todos) precisão, revocação e F1, com médias macro sobre as classes observadas e ponderadas pelo suporte; acurácia balanceada = média das revocações; kappa = (po − pe)/(1 − pe) com pe das marginais; na binária, sensibilidade e especificidade da positiva.

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

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

  • Cohen, J. (1960). A Coefficient of Agreement for Nominal Scales. Educational and Psychological Measurement, 20(1), 37-46. doi:10.1177/001316446002000104

Livro-texto

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 (ICPR), 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