A subamostragem do conjunto de trens pode não ser a melhor solução!
As diferenças entre o conjunto de teste / execução e a distribuição / recursos do conjunto de treinamento são muito comuns nas tarefas de aprendizado supervisionado (esse é um dos motivos pelos quais competições como o Kaggle são desafiadoras). É por isso que dizemos que o desempenho passado pode (apenas) ser usado como um guia para estimar o desempenho futuro, mas não o indica / garante . Portanto, os modelos generalizáveis sempre foram preferidos aos modelos ajustados, que podem ter um desempenho muito bom no (sub) conjunto de trens, mas apresentam um desempenho ruim em dados não vistos.
Embora essa diferença seja normal, a diferença muito grande entre a amostra passada e futura pode ser referida como exemplos de desvio de conceito, que é um campo de pesquisa ativo por si só. Dada a sua pergunta, não posso julgar que o seu caso é normal ou que o conceito está realmente acontecendo.
Estas são as minhas sugestões:
Treine vários modelos com alta capacidade de generalização. Usando inicialização amostragem do conjunto de dados de trem, você pode facilmente calcular viés e variância componentes de erros. Lembre-se de que você está procurando um modelo de baixa variação (em que as alterações nos dados teriam um efeito marginal no desempenho), em vez de modelos de baixa polarização, mas de alta variação (que podem se adequar ao seu (sub) conjunto de treinamento). Agora, você pode selecionar os melhores algoritmos e avaliá-los em relação ao conjunto de testes. Observe que no tempo de treinamento não deveríamos olhar para o conjunto de testes!
Em vez de várias amostragens aleatórias, procure padronização / normalização e seleção / engenharia de recursos. Essas técnicas podem ser práticas no aprendizado de modelos mais gerais. Por exemplo, às vezes o alcance do domínio do recurso pode mudar ao longo do tempo, enquanto a forma da distribuição (seja ela qual for) permanece quase a mesma (por exemplo, a mesma distribuição que é deslocada para a esquerda ou direita). Nesse caso, uma padronização simples (ou seja, mapeamento do trem e amostras de teste para um espaço predefinido, como [0,1] usando diferentes funções de mapeamento) pode reduzir os sintomas.
A redução da amostragem sistemática pode ser apenas uma solução apropriada se você fizer isso com base em algum conhecimento sobre o problema (não apenas com o objetivo de obter uma melhor precisão no conjunto de dados de teste). Por exemplo, você pode saber que alguns dos registros nos dados de trem são amostrados há muito tempo, de campo distante, ou afetados por fatores específicos que nenhum deles acontecerá no futuro (na coleta de dados de teste). Nesse caso, você pode remover as amostras que podem ser irrelevantes, pois está confiante de que não verá esses padrões no futuro (quero dizer, você deve ter uma lógica por trás da seleção do subconjunto de treinamento, em vez de examinar o conjunto de testes que na realidade, você não tem acesso a ele). Nesse caso, eu chamo de remoção externa em vez de reduzir a amostragem.