Quando vizinhos compartilham um rótulo
Suponha que o rótulo do dia t seja o retorno do fechamento do dia t ao fechamento do dia t+h, com h=5. Então os rótulos do dia t e do dia t+1 compartilham quatro dos seus cinco retornos diários: são quase o mesmo número. Um K-fold que põe o dia t no treino e o dia t+1 no teste deixa o modelo ver a resposta com que é testado. Um modelo flexível, como vizinhos mais próximos, parece então habilidoso só por lembrar. O vazamento tem forma precisa: o rótulo da linha i só é conhecido na linha i+h, então a linha i se sobrepõe a um bloco de teste [t₀,t₁] quando i+h≥t₀ e i≤t₁.
A purga remove toda linha de treino que se sobrepõe ao bloco de teste. O embargo remove mais algumas linhas logo depois do bloco, porque variáveis lentas como um retorno de 20 dias continuam levando informação adiante. Um divisor para o scikit-learn é qualquer objeto com split(X), que produz arrays de índices (train, test), e get_n_splits(); pode então ser passado como cv= a cross_val_score ou GridSearchCV. Com 5.340 dias de SPY, quatro variáveis lentas e um rótulo de cinco dias, um modelo de vizinhos mais próximos tem R quadrado de 0,039 com dobras embaralhadas e de -0,36 com dobras purgadas. O modelo não tem habilidade, e o número embaralhado é o vazamento falando. Um K-fold simples sem embaralhar é bem melhor, mas ainda tem 120 pares sobrepostos nas quatro fronteiras; o divisor purgado não tem nenhum.
- Rótulos sobrepostos põem quase-cópias dos dois lados da divisão; o K-fold embaralhado premia então a memória.
- Purgue as linhas com i+h≥t₀ e i≤t₁; embargo de algumas linhas após t₁.
- Um divisor é só
spliteget_n_splits: qualquer objeto com os dois funciona comocv=.
Lab: o que é avaliado
- Purga e embargo25 pts
- O divisor25 pts
- O avaliador10 pts
- Contar sobreposições15 pts
- O estudo do vazamento25 pts