Uma maneira de garantir isso é certificar-se de que você codificou todas as coisas que faz para se ajustar ao modelo, até mesmo "mexer". Dessa forma, quando você executa o processo repetidamente, digamos, através da validação cruzada, mantém as coisas consistentes entre as execuções. Isso garante que todas as fontes potenciais de variação sejam capturadas pelo processo de validação cruzada.
A outra coisa de vital importância é garantir que você tenha uma amostra representativa nos dois conjuntos de dados. Se o seu conjunto de dados não é representativo do tipo de dados que você espera usar para prever, não há muito o que fazer. Toda modelagem se baseia na suposição de que "indução" funciona - as coisas que não observamos se comportam como as que observamos.
Como regra geral, fique longe de procedimentos complexos de ajuste de modelo, a menos que (i) você saiba o que está fazendo e (ii) tenha tentado os métodos mais simples e constatado que eles não funcionam, e como o método complexo corrige o problema. problemas com o método simples. "Simples" e "complexo" são significados no sentido de "simples" ou "complexo" para a pessoa que faz o ajuste. A razão pela qual isso é tão importante é que permite aplicar o que eu gosto de chamar de "teste de detecção" nos resultados. O resultado parece certo? Você não pode "cheirar" os resultados de um procedimento que não entende.
NOTA: a próxima parte bastante longa da minha resposta é baseada na minha experiência, que está na área , com possivelmente grande. Estou quase certo de que o que segue abaixo não seria aplicável ao ou casosN>>p p N≈p N<p
Quando você tem uma amostra grande, a diferença entre usar e não usar uma determinada observação é muito pequena, desde que sua modelagem não seja muito "local". Isso ocorre porque a influência de um determinado ponto de dados geralmente é da ordem de . Portanto, em grandes conjuntos de dados, os resíduos obtidos ao "reter" o conjunto de dados de teste são basicamente os mesmos que você obtém ao usá-los no conjunto de dados de treinamento. Você pode mostrar isso usando mínimos quadrados comuns. O resíduo obtido com a exclusão da ésima observação (ou seja, qual seria o erro do conjunto de testes se colocarmos a observação no conjunto de testes) é , onde é o resíduo do treinamento e1Nietesti=(1−hii)−1etrainietrainihiié a alavanca do th ponto de dados. Agora temos que , onde é o número de variáveis na regressão. Agora, se , é extremamente difícil para qualquer ser grande o suficiente para fazer uma diferença apreciável entre os erros do conjunto de testes e do conjunto de treinamento. Podemos tomar um exemplo simplificado, suponha que (intercepto e variável), a matriz de projeto seja (ambos os conjuntos de treinamento e teste) e a alavancagemi∑ihii=ppN>>phiip=21N×pX
hii=xTi(XTX)−1xi=1Ns2x(1xi)(x2¯¯¯¯¯−x¯¯¯−x¯¯¯1)(1xi)=1+x~2iN
Onde , e . Por fim, é a variável preditora padronizada e mede quantos desvios padrão estão da média. Portanto, sabemos desde o início que o erro do conjunto de testes será muito maior que o erro do conjunto de treinamento para observações "na borda" do conjunto de treinamento. Mas é basicamente essa questão representativa novamente - as observações "no limite" são menos representativas do que as observações "no meio". Além disso, é necessário solicitar . Então, se você tiver observações, mesmo quex¯¯¯=N−1∑ixix2¯¯¯¯¯=N−1∑ix2is2x=x2¯¯¯¯¯−x¯¯¯2x~i=xi−x¯¯¯sxxi1N100x~i=5 (um outlier no espaço x pela maioria das definições), isso significa , e o erro de teste é subestimado por um fator de apenas . Se você tiver um conjunto de dados grande, digamos , é ainda menor, , que é menor que . De fato, para observações, seria necessário uma observação de para fazer uma subestimação de do erro do conjunto de testes, usando o erro do conjunto de treinamento.hii=261001−26100=74100100001−26100001%10000x~=5025%
Portanto, para grandes conjuntos de dados, o uso de um conjunto de testes não é apenas ineficiente, mas também desnecessário, desde que . Isso se aplica ao OLS e também se aplica aproximadamente aos GLMs (os detalhes são diferentes para o GLM, mas a conclusão geral é a mesma). Em mais de dimensões, os "outliers" são definidos pelas observações com grandes pontuações no "componente principal". Isso pode ser mostrado escrevendo Onde é a matriz de vetor próprio (ortogonal) para , com matriz de valor próprio . Nós temos queN>>p2hii=xTiEET(XTX)−1EETxiEXTXΛhii=zTiΛ−1zi=∑pj=1z2jiΛjjzi=ETxié a principal pontuação do componente para .xi
Se o seu conjunto de testes tiver observações, você obterá uma versão matricial , em que e são as linhas da matriz de design no conjunto de testes. Portanto, para a regressão OLS, você já sabe quais seriam os erros do "conjunto de testes" para todas as divisões possíveis dos dados em conjuntos de treinamento e teste. Nesse caso ( ), não há necessidade de dividir os dados. Você pode relatar erros de "melhor ou pior caso" de conjunto de teste de quase qualquer tamanho sem precisar dividir os dados. Isso pode economizar muito tempo e recursos do PC.ketest{k}=(Ik−H{k})−1etrain{k}H{k}=X{k}(XTX)−1XT{k}X{k}N>>p
Basicamente, tudo isso se reduz ao uso de um termo de penalidade, para explicar a diferença entre erros de treinamento e teste, como BIC ou AIC. Isso efetivamente alcança o mesmo resultado que o uso de um conjunto de testes, no entanto, você não é obrigado a jogar fora informações potencialmente úteis. Com o BIC, você está aproximando a evidência do modelo, que se parece matematicamente com:
p(D|MiI)=p(y1y2…yN|MiI)
Observe que, neste procedimento, não podemos estimar nenhum parâmetro interno - cada modelo deve ser totalmente especificado ou ter seus parâmetros internos integrados. No entanto, podemos fazer com que isso pareça validação cruzada (usando uma função de perda específica) usando repetidamente a regra do produto e, em seguida, registrando o resultado:Mi
p(D|MiI)=p(y1|MiI)p(y2…yN|y1MiI)
=p(y1|MiI)p(y2|y1MiI)p(y3…yN|y1y2MiI)
=⋯=∏i=1Np(yi|y1…yi−1MiI)
⟹log[p(D|MiI)]=∑i=1Nlog[p(yi|y1…yi−1MiI)]
Isso sugere uma forma de validação cruzada, mas onde o conjunto de treinamento está sendo atualizado constantemente, uma observação de cada vez do conjunto de testes - semelhante ao Kalman Filter. Prevemos a próxima observação do conjunto de testes usando o conjunto de treinamento atual, medimos o desvio do valor observado usando a probabilidade condicional de log e, em seguida, atualizamos o conjunto de treinamento para incluir a nova observação. Mas observe que este procedimento digere completamente todos os dados disponíveis, enquanto ao mesmo tempo garante que todas as observações sejam testadas como um caso "fora da amostra". Também é invariável, pois não importa o que você chama de "observação 1" ou "observação 10"; o resultado é o mesmo (os cálculos podem ser mais fáceis para algumas permutações do que outras). A função de perda também é "adaptativa", pois se definirmosLi=log[p(yi|y1…yi−1MiI)] , então a nitidez de depende de , porque a função de perda está sendo constantemente atualizada com novos dados.Lii
Eu sugeriria que avaliar modelos preditivos dessa maneira funcionaria muito bem.