Estou participando de uma competição no momento. Sei que é meu trabalho fazer isso bem, mas talvez alguém queira discutir meu problema e sua solução aqui, pois isso também pode ser útil para outras pessoas em seu campo.
Treinei um modelo xgboost (um modelo baseado em árvore e um linear e um conjunto dos dois). Como já discutido aqui, o erro médio absoluto (MAE) no conjunto de treinamento (onde eu fiz a validação cruzada) foi pequeno (aprox. 0,3) e, no conjunto de testes, o erro foi de cerca de 2,4. Então a competição começou e o erro foi em torno de 8 (!) E, surpreendentemente, a previsão sempre foi aproximadamente 8-9 acima do valor real !! Veja a região circulada em amarelo na figura:
Devo dizer que o período dos dados de treinamento terminou em outubro de 15 e a competição começou agora (abril de 16 com um período de teste de aproximadamente 2 semanas em março).
Hoje, apenas subtraí os valores constantes de 9 da minha previsão e o erro caiu para 2 e consegui o número 3 na tabela de classificação (neste dia). ;) Esta é a parte direita da linha amarela.
Então, o que eu gostaria de discutir:
- Como o xgboost reage ao adicionar um termo de interceptação à equação do modelo? Isso pode levar a um viés se o sistema mudar muito (como aconteceu no meu caso de 15 de outubro a 16 de abril)?
- Um modelo xgboost sem interceptação poderia ser mais robusto para mudanças paralelas no valor alvo?
Vou continuar subtraindo meu viés de 9 e, se alguém estiver interessado, eu poderia mostrar o resultado. Seria mais interessante obter mais informações aqui.
Respostas:
Vou responder a mim mesmo e informar minhas descobertas caso alguém esteja interessado.
Primeiro o viés: reservei um tempo para coletar todos os dados recentes e formatá-los corretamente, e assim por diante. Eu deveria ter feito isso muito antes. A imagem é a seguinte:
Você vê os dados do final de 2015 e 16 de abril. O nível de preços é totalmente diferente. Um modelo treinado em dados de 2015 não pode de forma alguma receber essa alteração.
Segundo: O ajuste do xgboost. Gostei muito da configuração a seguir. O erro train e test está muito próximo agora e ainda é bom:
Portanto, eu uso muitas árvores e todas elas têm no máximo 3 divisões (como recomendado aqui ). Fazendo isso, o cálculo é rápido (o tamanho da árvore aumenta em um fator de 2 a cada divisão) e o super ajuste parece reduzido.
Meu resumo: use árvores com um pequeno número de folhas, mas muitas delas, e procure dados recentes. Para a competição, isso foi uma má sorte para mim ...
fonte
caret
paramlr
? Para mim, eles parecem comprar bastante sobrepostos, talvez eu esteja perdendo outra coisa.