Back-testing o cross-validation quando il processo di costruzione del modello era interattivo


9

Ho alcuni modelli predittivi di cui vorrei eseguire il back-test delle prestazioni (ovvero, portare il mio set di dati, "riavvolgerlo" a un punto precedente nel tempo e vedere come il modello si sarebbe comportato in modo prospettico).

Il problema è che alcuni dei miei modelli sono stati creati tramite un processo interattivo. Ad esempio, seguendo i consigli nelle Strategie di modellizzazione della regressione di Frank Harrell , in un modello ho usato spline cubiche ristrette per gestire possibili associazioni non lineari tra funzionalità e risposta. Ho assegnato i gradi di libertà di ogni spline sulla base di una combinazione di conoscenza del dominio e misure univariate di forza dell'associazione. Ma i gradi di libertà che desidero consentire al mio modello dipendono ovviamente dalle dimensioni del set di dati, che varia notevolmente durante il backtest. Se non desidero selezionare manualmente i gradi di libertà separatamente per ogni volta in cui il modello viene testato nuovamente, quali sono le altre opzioni?

Per un altro esempio, sto attualmente lavorando al rilevamento anomalo tramite la ricerca di punti con leva elevata. Se fossi felice di farlo a mano, guarderei semplicemente ogni punto di dati ad alta leva, verificherei che i dati fossero puliti e filtrerei o pulirli manualmente. Ma questo si basa su un sacco di conoscenza del dominio, quindi non so come automatizzare il processo.

Gradirei consigli e soluzioni sia (a) al problema generale dell'automazione delle parti interattive del processo di costruzione del modello, sia (b) consigli specifici per questi due casi. Grazie!

Risposte:


4

Cordiali saluti, questo potrebbe essere più appropriato per SE.DataScience, ma per il momento, risponderò qui.

Mi sembra che potresti trovarti in una situazione in cui non avrai altra scelta che scrivere una sceneggiatura che implementerà le tue soluzioni. Non avendo mai lavorato con le spline, la mia conoscenza di queste è strettamente teorica, quindi per favore abbi pazienza e fammi sapere se c'è qualcosa che non vedo.

In linea di massima, sembra che tu abbia un paio di elementi diversi che dovrai risolvere per implementarlo.

1.) Determinazione dei parametri del modello in modo dinamico. In precedenza hai menzionato che hai utilizzato una combinazione di conoscenza del dominio e misure univariate. Mi sembra qualcosa che dovresti essere in grado di gestire euristicamente. Dovrai concordare all'inizio un insieme di regole che il tuo programma implementerà. Questo potrebbe essere o meno un compito banale in quanto dovrai fare qualche riflessione approfondita sulle potenziali implicazioni di tali regole. Ciò potrebbe richiedere di visitare nuovamente ogni fase del processo e catalogare non solo le decisioni, ma anche i motivi alla base di tali decisioni.

2.) Realmente implementando il tuo programma. Al fine di rendere i tuoi test delle prestazioni correttamente dinamici e facili da mantenere e modificare in futuro, dovrai pensare a come strutturarli. Probabilmente vorrai utilizzare una sorta di loop per la stima delle prestazioni predittive del tuo modello principale, preferibilmente con una lunghezza definibile dall'utente per consentire una maggiore flessibilità in futuro. Probabilmente vorrai anche scrivere funzioni separate per ogni azione che vuoi che il tuo programma intraprenda in quanto ciò renderà più semplice testare la funzionalità e mantenere e modificare il tuo programma in futuro. Come minimo, probabilmente avrai bisogno di funzioni per la selezione del set di dati (vale a dire solo i periodi di tempo "passati" al momento del backtest), la pulizia e la convalida (a cui dovresti davvero pensare,

La tua domanda sul rilevamento e la gestione anomali rientra anche in queste due preoccupazioni e mi occuperei di implementare scrivendo loop più piccoli all'interno del tuo ciclo di programma principale che continuerebbero a "ripulire" e rimontare il modello fino a raggiungere un punto in cui ti piacerebbe esso (che di nuovo, dovrai definirti).

Se questo sembra un grosso compito, è perché lo è; le persone hanno scritto intere librerie di software (a volte in modo molto redditizio) per svolgere questo tipo di attività. Oltre a ciò, è difficile offrire consigli più specifici senza conoscere meglio i processi, la struttura dei dati e il linguaggio di programmazione in cui hai svolto il tuo lavoro finora.

Se uno di questi ti è utile e vuoi che io mi dilunghi su uno di questi, commenta, fammi sapere, e sarei più che felice di farlo.


In realtà non ho bisogno di alcun aiuto per scrivere il codice, grazie: la nostra infrastruttura di backtest è già in atto e abbastanza solida. Sono solo interessato a quali procedure statistiche si potrebbero usare. Per quanto riguarda l'automazione euristica della parte interattiva della costruzione di modelli: è stato scritto qualcosa al riguardo? Non ho visto alcuna menzione di questo tipo di processo in letteratura. Citi "le persone hanno scritto intere librerie di software" - hai qualche riferimento?
Ben Kuhn,

@BenKuhn - Sulla base del tuo commento, sono un po 'poco chiaro sulle difficoltà esatte che stai avendo; per favore aiutami a ottenere un po 'più di chiarezza. L'uso dell'euristica nella costruzione di modelli automatizzati è piuttosto diffuso; l'applicazione più basilare a cui riesco a pensare in questo momento è l'umile regressione graduale. Mancando i dettagli esatti del tuo modello, non posso indicare gli esatti pezzi di letteratura che potrebbero esserti utili, ma una rapida ricerca su Google fa apparire diversi articoli che esplorano metodi per la selezione automatica dei parametri, in particolare per levigare e spline penalizzate. Vedi il mio prossimo commento per alcuni link
habu


@BenKuhn - cosa intendi specificamente quando dici procedure statistiche che potresti usare? A mio avviso, il backtest potrebbe essere gestito in modo abbastanza semplice utilizzando il campionamento dei test di treno con una finestra di selezione dei dati a rotazione o espandibile. Tutti i dati che hai acquisito fino al punto del backtest sarebbero il tuo set di allenamento, mentre i dati che ti aspetteresti di vedere nel prossimo periodo di tempo, prima che tu abbia la possibilità di riaggiustare il tuo modello, sarebbero il tuo set di test. Tutte le solite misure di prestazioni predittive e bontà di adattamento potrebbero essere utilizzate per eseguire la valutazione effettiva.
habu,

@BenKuhn - L'implementazione dell'attuale porzione di conoscenza aziendale richiederebbe di codificarla e garantire che i dati necessari per effettuare tali determinazioni siano disponibili quando necessario. Inoltre, uso il termine "libreria software" come termine generale che copre tutto, dalle estensioni alle librerie di modellazione esistenti che hanno lo scopo di automatizzare la costruzione di modelli per determinate applicazioni, fino a sistemi proprietari, esperti proprietari e sistemi di supporto alle decisioni.
habu,

3

Piuttosto che cercare di capire come automatizzare i tuoi sforzi manuali di ottimizzazione del modello, eluderei questo problema tutti insieme esaminando gli studenti con varianza più bassa che richiedono molta meno ottimizzazione, anche se ciò è a un costo di una maggiore propensione al modello. Volete avere fiducia nei risultati dei test retrospettivi che si riducono in gran parte alla bassa varianza di campionamento nelle vostre previsioni e l'introduzione di un processo di ottimizzazione automatizzato su uno studente che ha già la varianza di campionamento sta lavorando contro tale obiettivo. Potrebbe sembrare che la coda scuoti il ​​cane qui, ma tutto ciò che richiede molta attenta messa a punto (manuale o automatizzata) non è un ottimo candidato per un ambiente di backtest davvero onesto IMO.


Perché la sintonizzazione automatica (con una corsa di accordatura separata in ciascun punto temporale del backtest) non sarebbe un "ambiente di backtest veramente onesto"?
Ben Kuhn,

Ridurre la varianza facendo cadere le spline porterebbe, purtroppo, a una perdita inaccettabile del potere predittivo. È quello che stavi pensando quando hai suggerito di usare uno studente con una varianza inferiore? In caso contrario, a cosa stavi pensando?
Ben Kuhn,

@BenKuhn - Condivido le preoccupazioni di Andrew sul fatto che un backtest sarebbe un test veramente "onesto" del potere predittivo fuori campione del modello, se non altro per il fatto che sembra che tu abbia sviluppato i tuoi parametri di ottimizzazione sul intero set di dati a tua disposizione; anche se "riavvolgi l'orologio" e ricostruisci il tuo modello in modo dinamico, la metodologia con cui lo farai sarà stata sviluppata facendo riferimento all'intero set di dati, quindi esiste il rischio che il modello continui a sovrautilizzare, anche se lo è riqualificato su un sottoinsieme dei dati disponibili.
habu,

1
Per chiarire, l'ottimizzazione automatizzata renderebbe onesto, nel senso che le previsioni al momento non dipendono dai dati da un tempo maggiore di . Al punto di @habu, ci sarà sempre una quantità irriducibile di bias nel campione che risulta dal miglioramento iterativo del modello basato sulle prestazioni del backtest, e non vedo davvero un modo per aggirare questo (suppongo che questo sia un domanda di finanziamento). Il punto che stavo sollevando era che l'intervallo di confidenza con i risultati del backtest è correlato alla varianza di campionamento del predittore e al processo di ottimizzazione. tt
Andrew

1
E in un dominio rumoroso come quello finanziario, devi assicurarti che se la storia si fosse svolta in modo leggermente diverso (ma ancora attinto da una distribuzione sottostante), arriveresti comunque a un modello simile. Se sei sicuro che il tuo processo sia robusto rispetto alla varianza di campionamento di quanto penso tu stia bene. Ma nella mia esperienza le procedure di ottimizzazione automatizzata possono essere molto sensibili alla varianza del campionamento.
Andrew
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.