Teste retroativo ou validação cruzada quando o processo de construção do modelo foi interativo

9

Eu tenho alguns modelos preditivos cujo desempenho eu gostaria de testar novamente (ou seja, levar meu conjunto de dados, "rebobinar" para um ponto anterior no tempo e ver como o modelo teria um desempenho prospectivo).

O problema é que alguns dos meus modelos foram criados através de um processo interativo. Por exemplo, seguindo o conselho das Estratégias de modelagem de regressão de Frank Harrell , em um modelo eu usei splines cúbicos restritos para lidar com possíveis associações não lineares entre recursos e a resposta. Aloquei os graus de liberdade de cada spline com base em uma combinação de conhecimento de domínio e medidas univariadas de força de associação. Mas os graus de liberdade que eu quero permitir ao meu modelo obviamente dependem do tamanho do conjunto de dados, que varia drasticamente no teste posterior. Se não desejar escolher graus de liberdade separadamente para cada vez que o modelo for testado novamente, quais são minhas outras opções?

Por outro exemplo, atualmente estou trabalhando na detecção de outlier através da descoberta de pontos com alta alavancagem. Se eu estivesse feliz em fazer isso manualmente, simplesmente analisaria cada ponto de dados de alta alavancagem, verificaria se os dados estavam limpos e os filtraria ou os limparia manualmente. Mas isso depende de um monte de conhecimento de domínio, então não sei como automatizar o processo.

Eu gostaria de receber conselhos e soluções (a) para o problema geral de automatizar partes interativas do processo de construção de modelos ou (b) conselhos específicos para esses dois casos. Obrigado!

Ben Kuhn
fonte

Respostas:

4

Para sua informação, isso pode ser mais apropriado para o SE.DataScience, mas, por enquanto, responderei aqui.

Parece-me que você pode estar em uma situação em que não terá escolha a não ser escrever um script que implementará suas soluções. Como nunca trabalhei com splines, meu conhecimento deles é estritamente teórico; portanto, tenha paciência comigo e me informe se há algo que não esteja vendo.

Em termos gerais, parece que você tem alguns itens diferentes que precisará resolver para implementar isso.

1.) Determinar os parâmetros do modelo de forma dinâmica. Você mencionou anteriormente que usou uma combinação de conhecimento de domínio e medidas univariadas. Isso me parece algo que você deve ser capaz de lidar heuristicamente. Você terá que concordar desde o início com um conjunto de regras que seu programa implementará. Isso pode ou não ser uma tarefa trivial, pois você terá que pensar bastante sobre as possíveis implicações dessas regras. Isso pode exigir que você visite novamente todas as etapas do processo e catalogue não apenas as decisões, mas também os motivos por trás dessas decisões.

2.) Realmente implementando seu programa. Para tornar seu teste de desempenho adequadamente dinâmico e fácil de manter e modificar daqui para frente, você terá que pensar em como estruturá-lo. Você provavelmente desejará usar algum tipo de loop para a estimativa de desempenho preditivo do modelo principal, de preferência com um comprimento definido pelo usuário, a fim de permitir maior flexibilidade no futuro. Você provavelmente também desejará escrever funções separadas para cada ação que deseja que seu programa execute, pois isso facilitará o teste da funcionalidade e a manutenção e modificação do programa no futuro. Você provavelmente precisará, no mínimo, de funções para a seleção do conjunto de dados (ou seja, apenas períodos que passaram "no momento do backtesting), limpeza e validação (nas quais você realmente terá que pensar,

Sua pergunta sobre detecção e manipulação de outlier também se enquadra nessas duas preocupações, e eu implementaria escrevendo loops menores no loop principal do programa que continuariam "limpos" e reequipando o modelo até chegar a um ponto em que você ficaria feliz em (que, novamente, você terá que se definir).

Se isso soa como uma grande tarefa, é porque é; as pessoas criaram bibliotecas de software inteiras (às vezes muito lucrativamente) para executar esse tipo de tarefa. Além disso, é difícil oferecer conselhos mais específicos sem saber mais sobre seus processos, estrutura de dados e a linguagem de programação em que você realizou seu trabalho até agora.

Se algo disso for útil para você e você quiser que eu expanda alguma coisa, comente, me avise e ficarei feliz em fazê-lo.

habu
fonte
Não preciso de ajuda para escrever o código, obrigado - nossa infraestrutura de backtesting já está instalada e é bastante forte. Só estou interessado em quais procedimentos estatísticos se pode usar. Com relação à automatização heurística da parte interativa da construção de modelos: algo foi escrito sobre isso? Eu não vi nenhuma menção desse tipo de processo na literatura. Você menciona "as pessoas criaram bibliotecas de software inteiras" - você tem alguma referência?
Ben Kuhn
@BenKuhn - Com base no seu comentário, não estou muito claro sobre as dificuldades exatas que você está tendo; por favor me ajude a ter um pouco mais de clareza. O uso de heurísticas na construção automatizada de modelos é bastante difundido; a aplicação mais básica que consigo pensar agora é a humilde regressão gradual. Sem os detalhes exatos do seu modelo, não posso apontar as peças exatas da literatura que podem ajudá-lo, mas uma pesquisa superficial do Google traz vários artigos que exploram métodos para a seleção automática de parâmetros, principalmente para suavização e splines penalizados. Ver o meu próximo comentário para alguns links
habu
@BenKuhn - o que você quer dizer especificamente quando diz que procedimentos estatísticos podem ser usados? Na minha opinião, o backtest poderia ser tratado de maneira bastante direta, usando amostragem de teste de trem com uma janela rolante ou em expansão da seleção de dados. Todos os dados que você adquiriu até o ponto do backtest seriam o seu conjunto de treinamento, enquanto os dados que você esperaria ver no próximo período de tempo, antes de ter a chance de reajustar seu modelo, seriam o seu conjunto de testes. Todas as medidas usuais de desempenho preditivo e qualidade do ajuste podem ser usadas para realizar a avaliação real.
habu
@BenKuhn - A implementação da parte real do conhecimento de negócios exigiria a codificação e a garantia de que os dados necessários para fazer essas determinações estejam disponíveis quando necessário. Além disso, eu uso o termo "biblioteca de software" como um termo geral que abrange tudo, desde extensões a bibliotecas de modelagem existentes, destinadas a automatizar a criação de modelos para certas aplicações, até sistemas industriais especializados e de suporte a decisões.
habu
3

Em vez de tentar descobrir como automatizar seus esforços de ajuste manual de modelo, eu contornaria esse problema todos juntos, analisando alunos com variações mais baixas que exigem muito menos ajuste, mesmo que isso acarrete algum viés maior no modelo. Você deseja ter confiança nos resultados do backtest, que se resumem em baixa variação de amostragem em suas previsões, e a introdução de algum processo de ajuste automatizado em cima de um aluno que já possui a variação de amostragem está trabalhando contra esse objetivo. Pode parecer que a cauda está abanando o cachorro aqui, mas qualquer coisa que exija muito ajuste cuidadoso (manual ou automatizado) não é um ótimo candidato para um IMO de ambiente de teste verdadeiramente honesto.

andrew
fonte
Por que o ajuste automático (com uma execução de ajuste separada em cada ponto do backtest) não seria um "ambiente de backtest verdadeiramente honesto"?
Ben Kuhn
Infelizmente, reduzir a variação ao eliminar os splines levaria a uma perda inaceitável no poder preditivo. Era isso que você estava pensando quando sugeriu o uso de um aluno com menor variação? Se não, o que você estava pensando?
Ben Kuhn
@BenKuhn - compartilho as preocupações de andrew sobre se um backtest seria um teste verdadeiramente "honesto" do poder preditivo fora da amostra do modelo, por nenhuma outra razão senão o fato de que parece que você desenvolveu seus parâmetros de ajuste no conjunto de dados completo disponível para você; mesmo se você "atrasar o relógio" e reconstruir seu modelo dinamicamente, a metodologia pela qual você fará isso será desenvolvida por referência a todo o conjunto de dados; portanto, existe o risco de que o modelo ainda se ajuste demais, mesmo que seja treinado novamente em um subconjunto dos dados disponíveis.
habu
11
tt
11
E em um domínio tão barulhento quanto financeiro, você quer ter certeza de que, se o histórico tivesse se revelado um pouco diferente (mas ainda assim extraído de alguma distribuição subjacente), você ainda chegaria a um modelo semelhante. Se você está confiante de que seu processo é robusto à variação da amostra, acho que você é bom. Mas, na minha experiência, os procedimentos de ajuste automatizado podem ser muito sensíveis à variação da amostra.
andrew