Integrazione di una stima iniziale (euristica) in un modello predittivo (apprendimento automatico)Sto cercando di sviluppare uno strumento che chiamo Blend Search. Funziona discretamente, ma ho in mente un miglioramento che non so ancora come implementare tecnicamente.
Cosa fa Blend Search:
>> input è una raccolta di componenti con le loro proprietà
>> generazione di una matrice di composizione
>> applicazione di euristiche (modelli semplici) per calcolare le proprietà delle miscele
>> applicazione di un modello più complesso, attualmente un Boosted Tree. I suoi predittori sono le proprietà delle miscele stimate tramite euristiche, e il suo output è anch'esso una proprietà della miscela
Ho creato una visualizzazione Boosted Tree (vedi video allegato).
Uno dei predittori (Predittore 3) fornisce già una stima iniziale della mia proprietà target (Prevista). Nella mia idea iniziale, gli altri due predittori erano destinati a perfezionare questa prima stima. Oggi, il modello fornisce previsioni coerenti; raramente ci discostiamo dall'intervallo previsto.
In realtà, però, non sto correggendo la mia stima iniziale; sto correggendo la media dei valori Y nel set di addestramento (l'intercetta predefinita del Boosted Tree). Se volessi scalare il mio Blend Search, questo approccio non sarebbe più sufficientemente robusto.
Vorrei poter fare delle previsioni correggendo la mia stima iniziale. Ad esempio, mi piacerebbe molto avere un tipo di intercetta variabile per il mio Boosted Tree. Non riesco a immaginare la soluzione giusta, ma sono abbastanza sicuro che esistano già delle tecniche. Se avete qualche idea, sarei molto felice di ascoltarla.
Modellazione predittiva e apprendimento automaticoOggetto: Integrazione di una stima iniziale (euristica) in un modello predittivo (apprendimento automatico)Ciao @RikkiTikkiTavi ,
Non sono sicuro di aver compreso appieno la catena di modellazione algoritmica, ma potrei avere un'idea per te. Sono possibili due approcci per migliorare le previsioni: un approccio di boosting (per ridurre la distorsione della previsione) e un approccio di bagging/media dei modelli (per ridurre la varianza della previsione).
- Approccio Boosting: Se l'obiettivo è migliorare le previsioni della proprietà target correggendo un bias (risposta media prevista rispetto alla risposta media misurata), è possibile addestrare un modello di machine learning per prevedere i residui di questa proprietà target dai dati grezzi e/o stimati, nonché dalle previsioni della proprietà target (al fine di modellare gli errori in base alle variabili e alle previsioni originali). Questo fornirebbe un modello che prevede gli errori nell'albero potenziato e funge da livello di correzione per l'albero potenziato (aggiungendo/sottraendo le previsioni dei residui dalle previsioni dell'albero potenziato).
Ho utilizzato questo approccio diverse volte e i miglioramenti delle prestazioni possono essere piuttosto significativi. Potrebbe essere utile utilizzare un tipo di modello diverso per la modellazione degli errori rispetto a quello utilizzato per le previsioni (ad esempio, qualcosa di diverso da Boosted Tree nel tuo caso). Inoltre, assicurati di validare accuratamente questo nuovo modello, evitando l'overfitting, con un'appropriata strategia di validazione (per il confronto con il solo modello Boosted Tree) e una strategia di test (per valutare le prestazioni in condizioni reali). Evita qualsiasi rischio di data leakage utilizzando solo i dati disponibili al momento della previsione degli errori: predittori più previsioni della proprietà target.
- Approccio di bagging/media dei modelli: un'altra opzione per ridurre la varianza delle previsioni è addestrare un insieme di modelli in parallelo (oltre al modello Boosted Tree) e calcolare la media o la mediana delle loro previsioni. Con questo approccio, tuttavia, è fondamentale implementare un'adeguata strategia di validazione e test.
La scelta tra queste opzioni dipende dalle prestazioni del modello Boosted Tree iniziale e dal rumore presente nei dati: se il Boosted Tree tende all'overfitting o se i dati utilizzati sono rumorosi, si consiglia un approccio di bagging. Se il Boosted Tree ha prestazioni inferiori alle aspettative e presenta un bias elevato (il che sembra piuttosto improbabile dato il comportamento del modello, a meno che non vengano utilizzati parametri specifici), l'approccio di Boosting sarà più efficace. Potrei dare priorità al test dell'approccio ensemble di tipo bagging, poiché il modello predittivo utilizzato (Boosted Tree) impiega già un approccio di tipo Boosting.
Spero che queste opzioni ti siano d'ispirazione,
Oggetto: Integrazione di una stima iniziale (euristica) in un modello predittivo (apprendimento automatico)Ciao @Victor_G ,
Avevo già provato a prevedere i residui (la differenza tra il valore effettivo della mia proprietà target e la sua stima iniziale). Ho ottenuto un leggero miglioramento sul set di addestramento, ma non ha funzionato sul set di test (l'RMSE è raddoppiato). Il mio set di test rappresenta l'ampliamento di scala a cui punto; si tratta di un sottogruppo di composizioni molto diverse, ma le proprietà di queste miscele sono quasi nello stesso intervallo di quelle del set di addestramento. Il mio attuale Boosted Tree prevede abbastanza bene sul set di test.
L'idea di mediare i modelli è interessante. Devo trovare modelli che commettano errori sufficientemente diversi per testare l'approccio? Penso che proverò prima con il bagging. So che i miei dati sono rumorosi e immagino che questo tipo di modello sarà anche più facile da integrare nel mio strumento Blend Search rispetto a un insieme di 2, 3, 4... modelli diversi.
Grazie mille per i vostri suggerimenti;
Oggetto: Integrazione di una stima iniziale (euristica) in un modello predittivo (apprendimento automatico)Ciao @RikkiTikkiTavi ,
Sì, la difficoltà di questo approccio sta nell'individuare la giusta strategia di validazione per evitare l'overfitting (miglioramento sul set di addestramento, ma prestazioni stabili o addirittura in peggioramento sul set di validazione).
Sono un po' preoccupato che, in base alla descrizione dei dati di test, si possa verificare un cambiamento di dominio : si rischia di avere relazioni diverse tra input e output appresi dal modello durante l'addestramento rispetto a quelle esistenti per il test. Sarebbe possibile mescolare/ stratificare i dati di addestramento/validazione/test per evitare questo cambiamento (e avere solo dati di scale-up nel test)? Ciò consentirebbe al modello di avere informazioni anche sullo scale-up, magari indicandolo in una nuova variabile utilizzata durante l'addestramento (ad esempio, experiment_type: R&D / scale-up / Prod; dipenderebbe dal fatto che le diverse fasi abbiano intercette diverse e quindi richiedano questa variabile).
Per quanto riguarda il resto del processo, ecco alcune osservazioni/idee:
- Iniziate impostando la strategia di training/validazione/test , possibilmente effettuando una suddivisione stratificata rispetto alle variabili per garantire che l'intero spazio sperimentale sia esplorato in ciascuno dei set (per assicurare un training pertinente e una buona generalizzazione delle prestazioni).
- Prima di addestrare il Boosted Tree (o altro modello), è necessario impostare dei modelli di confronto: un modello di riferimento (consiglio il Foresta casuale ) per ottenere prestazioni migliori in fase di validazione rispetto agli altri modelli, e un modello per valutare i limiti inferiori delle prestazioni del/dei modello/i testato/i: ad esempio, un modello ingenuo che "preveda" solo la risposta media del set di addestramento su tutti gli altri set (validazione e test). Se gli altri modelli risultano peggiori o equivalenti a questo modello (ad esempio, con un RMSE vicino o superiore a quello del modello ingenuo), ciò potrebbe indicare un rumore eccessivo nei dati rispetto al segnale, una mancanza di informazioni dai fattori e/o una variabilità insufficiente nella risposta.
- Consiglierei inoltre di testare diversi modelli, ad esempio con la piattaforma Selezione dei modelli , eseguendo la convalida incrociata solo sul set di addestramento. In questo modo, è possibile selezionare i modelli più promettenti e procedere.
- A seconda delle prestazioni dei modelli, è possibile riaddestrarli sul set di training, consentendo così di confrontarne le prestazioni sul set di validazione per selezionare il modello più performante. Parallelamente, è possibile utilizzare i modelli selezionati, già addestrati con la precedente convalida incrociata, per eseguire una media dei modelli tramite la piattaforma di confronto modelli . L'aspetto interessante della media dei modelli consiste nel combinare modelli con diverse "tipologie di costruzione" (bias induttivi) – come ad esempio modelli basati su alberi quali Boosted Tree, Random Forest o XGBoost – con altri modelli come regressione multivariata, SVM, processi gaussiani o piccole reti neurali, a seconda delle loro prestazioni. Questi modelli dovrebbero avere buone prestazioni individuali (devono aver catturato il segnale nei dati) e, idealmente, tassi di errore leggermente diversi (alcuni sovrastimano determinate osservazioni, mentre altri le sottostimano). Il confronto di questo macro-modello con i singoli modelli riaddestrati sul set di training può quindi essere effettuato utilizzando la stessa piattaforma di confronto modelli, confrontando i risultati delle prestazioni sul set di validazione.
- Una volta selezionata l'opzione migliore (macromodello o modello individuale), le prestazioni vengono stimate sul set di test per valutare il comportamento del modello una volta implementato.
È inoltre possibile utilizzare il bootstrap su modelli di apprendimento automatico diversi dal bagging naturale della Random Forest, per migliorare la robustezza dei modelli durante l'addestramento.
Spero che questi suggerimenti ti siano d'aiuto.