MO432 -Metodologia
Há alguns “erros” de procedimento que tornam sua taxa de erro muito menor no laboratorio que na vida real.
contaminação do teste no treino
usar o mesmo conjunto de teste para tomar decisões e para reportar o erro
Se voce usa parte do conjunto de treino como conjunto de teste, seu classificador “ja viu” aqueles dados e portanto “já sabe” parte da resposta. Na vida real os dados novos do classificador não “foram vistos antes” e o desempenho do classificador cai.
No limite, pense num classificador 1-NN. Se voce reusar o treino como teste o classificador acertará 100%
No exercício 1, fizemos o preprocessamento (centralização e PCA) nos dados como um todo. Nesse caso parte da informação do conjunto de teste estava disponível para o treino.
Parte dos valores do conjunto de teste (que não tinhamos definido ainda) entram no calculo da media e desvio padrão, por exemplo.
Isso é um contaminação pequena mas é uma contaminação. O mais correto é definir e aplicar o preprocessamento usando apenas no conjunto de treino e apenas aplica-lo no conjunto de teste. Media e desvio padrão sao computados apenas para o conjunto de treino e aplicados no treino e teste.
Para isso o sklearn e outras ferramentas tem o conceito de pipes. https://scikit-learn.org/stable/modules/compose.html
Em series temporais a parte de treino não pode conter dados do futuro, so dados do passado em relação ao conjunto de teste.
Sklearn tem uma função especial para split de series temporais https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.TimeSeriesSplit.html
Isso é uma contaminação seria
Essa é uma contaminação super séria
No exercício 2 e 3 fizemos varias rodadas com varios algoritmos e valores dos hiperparametros.
Poderíamos ter escolhido o com menor taxa de erro como o algoritmo e o valor dos seus hiperparametros. Isso é OK
Mas não se pode reportar a taxa de erro dessa combinação como a taxa de erro esperada para o futuro.
Voce não pode usar o mesmo(s) conjunto(s) de teste para tomas decisões e para reportar o erro!! O resultado (algoritmo mais as suas decisões) podem estar overfitting o conjunto de teste.
O 100% correto é separar um pedaço dos dados (A) e nunca olhar para eles. Use o restante (B) para experimentar e encontrara combinação de preprocessamento, algoritmo e hiperparametros que dá o melhor resultado.
Treine o classificador com B, e teste no A - copie sem olhar o erro no relatório final!!
triene o classificador com B+A, e entregue para o seu cliente. Esse voce nunca testa - vc não tem dados de teste não contaminados!!
Veja que nesse ultimo exemplo ha 2 validações cruzadas. A de dentro (no B) que é usada para tomar decisões e a de forma (separação de A e B) que é para reportar os resultados.
Isso é chamado de nested cross validation.
Se voce esta definindo um software para um cliente, voce so precisa usar nested-CV para reportar corretamente a taxa de erro do sistema que voce espera para dados do futuro.
Se voce esta escrevendo um paper, onde voce esta querendo mostrar que o seu algoritmo é melhor que outro voce provavelmente precisa usar nested CV
Como comparar 2 algoritmos de classificação.:
se voce esta testando varias alternativas, selecione o que tiver melhor medida de desempenho (seja ela qual for) Custo zero para essa decisão
Mas se ou uma versão ja esta instalada, ou voce esta comparando a sua solução com outra publicada, voce precisa mostrar que as diferenças entre sua solução e a anterior são estatisticamente significativas.
para isso voce precisa de mais de uma medida. So voce so tem um banco de dados, use varias medidas do k-fold. Em particular use 5 repetições de 2-fold http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.37.3325&rep=rep1&type=pdf
se voce tem varios bancos de dados e múltiplos classificadores http://www.jmlr.org/papers/v7/demsar06a.html
Testes estatísticos são necessários para publicação.