Perdita di datiCiao
Ho letto diversi post sulla fuga di dati tra i gruppi di test e di formazione. I suggerimenti comuni per evitare perdite:
1 Suddividere il database in training e set di test prima di qualsiasi normalizzazione, standardizzazione e assegnazione di valori mancanti
2 in caso di serie temporali evitare la divisione casuale. Decidi un punto di interruzione del tempo e usalo per separare la formazione e il set di test.
Qualche commento, suggerimento, letture utili?
Felice
AnalyticsRi: fuga di datiI miei 2 centesimi:
Se disponi di dati di serie temporali, tendo a pensare che il tuo elemento 2 sia il problema più grande a meno che tu non stia facendo molte interpolazioni.Considera le fonti di rumore nei tuoi dati, se qualcuna di queste si verifica su più righe o se le righe sono in qualche modo collegate alle righe prima e dopo (monitoraggio del livello di un serbatoio nel tempo, quando ci vuole più di una riga per raggiungere il serbatoio un nuovo stato stazionario, ad esempio), non è possibile suddividere i dati per riga e aspettarsi che i set di convalida o di test siano indipendenti dall'addestramento.
Potresti invece considerare di suddividere i dati in test e convalida in blocchi più grandi, ad esempio:
- Identificare nuovi periodi in cui il processo apporta qualche cambiamento 'significativo' e mantenere la durata delle corse allo stato stazionario nello stesso gruppo (più difficile ma migliore), o
- Usa periodi abbastanza lunghi da essere sicuro che rappresentino condizioni di esecuzione diverse, ma abbastanza brevi da non consistere in più di 1 condizione di esecuzione e mantieni tutte le righe in quel periodo nello stesso gruppo di convalida (più facile, potenzialmente ancora esposto allo stesso rischio )
- Utilizzando i periodi identificati sopra, riassumi ciascuna di quelle corse in una singola riga, magari utilizzando medie o deviazioni standard di variabili, o l'esploratore di dati funzionali di altre. (migliore)
In entrambi i casi potresti considerare di escludere periodi di transizione tra i gruppi.
La mia esperienza personale: da quando ho iniziato a utilizzare almeno uno di questi metodi, la convalida e il test delle statistiche di gruppo rappresentano aspettative molto più ragionevoli per il potere predittivo dei modelli.
Ri: fuga di datiEcco la mia esperienza limitata.
La modellazione è piuttosto complessa (giusta scelta del modello, preparazione dei dati, suddivisione dei dati, ottimizzazione dei metadati ...).
Un buon modello robost è indipendente dalla suddivisione, dai metadati, dal tipo di modello ...
Sia la formazione che il set di test devono essere rappresentativi del processo, ma il set di test non deve essere altrettanto completo. Training / Test è necessario per giudicare il risultato, come @ih già accennato.
Per la divisione, è possibile utilizzare l'opzione di stratificazione per controllare la divisione. Ma per entrambi, modellazione e divisione, è necessario che il processo sappia come farlo al meglio.
Per i modelli complessi e quando il risultato è critico, ho provato a testare diversi modelli, diversi metadati e diverse colonne di convalida. Quando non ci sono differenze importanti, non ci sono problemi. E questo è abbastanza facile da fare in JMP (Pro).
Alla fine, solo questo test ti dà la risposta, se non ci sono perdite. Ma onestamente, non mi dispiacerebbe perdite, quando posso essere sicuro di avere un buon modello.
Ri: fuga di datiMi chiedo se stiamo confondendo due cose: perdite e overfitting.Penso che siano abbastanza diversi.L'overfitting è sempre un potenziale problema con la modellazione predittiva e il modo usuale per prevenirlo è avere la convalida e, se si hanno dati sufficienti, anche un set di dati di test separato.Dalla mia esperienza, l'overfitting è un problema minore con JMP di quanto potrebbe essere altrimenti, poiché anche una serie di altri parametri di ottimizzazione aiutano a prevenirlo.Ad esempio, con gli alberi decisionali, l'impostazione di una dimensione minima di divisione relativamente alta aiuterà a evitare l'overfitting.È comunque una buona idea disporre di dati di test separati per valutare se il modello è in grado di produrre previsioni realistiche su nuovi dati.Penso che questo sia particolarmente importante per i dati delle serie temporali.
La perdita è una questione completamente diversa, a mio avviso.La perdita è un modello specificato male.Stai utilizzando fattori che sarebbero noti solo contemporaneamente a ciò che stai cercando di prevedere.Ad esempio, se stai cercando di prevedere la fidelizzazione dei clienti e uno dei tuoi fattori sono gli acquisti di quest'anno, avrai solo i dati per i clienti fidelizzati e mancheranno per quelli che non conservi.In tal caso, il fattore degli acquisti di quest'anno predice perfettamente la fidelizzazione dei clienti, ma questo non è un modello utile.Questo è ciò che credo sia la perdita.
Non credo che la perdita venga prevenuta o rilevata avendo diversi set di dati di addestramento / convalida / test.È possibile rilevare una perdita in uno qualsiasi di questi 3: un modello perfetto (o quasi) sui dati di addestramento sarebbe sufficiente per sospettare che potrebbe esserci una perdita.Penso che la migliore prevenzione delle perdite sia un'attenta considerazione dei fattori e la comprensione di come e quando vengono misurati.Se un modello sembra troppo bello per essere vero, potrebbe essere dovuto a una perdita (o potrebbe essere solo un modello molto buono).Ma non credo che sia una domanda a cui rispondono dispositivi tecnici.
Mi interessa sapere cosa hanno da dire gli altri al riguardo.
Ri: fuga di daticaro @dale_lehman , sì hai ragione, ho confuso, almeno formalmente, visto che pensavo proprio all'obiettivo generale, avere un modello buono e robusto. Evitare perdite è definito come un obiettivo, non aver già visto i dati nel set di test. Ho trovato qualche spiegazione aggiuntiva qui:
Perdita di dati nell'apprendimento automatico. Come prevenire problemi che riducono il… | di Devin Soni:crown:| Verso la scienza dei dati
Ma come farlo intenzionalmente, quando di solito dividiamo i set di allenamento e di test in modo casuale? Penso più che in una categoria di modelli di processo, la formazione e il set di test provengano entrambi dallo stesso processo. Quando si pensa alle previsioni, potrebbe essere diverso.
Ri: fuga di datiL'articolo a cui ti colleghi è molto confuso sulla fuga di dati.Sta mescolando l'idea di prestazioni differenziali sui dati di addestramento e di convalida / test (che è overfitting) con la mancanza di un confine chiaro tra i dati di addestramento e di prova (che è un modo per pensare alla perdita).I due concetti sono, credo, distinti.Quando il tuo modello si adatta ai dati di addestramento e non ai dati di test, questo è un esempio di overfitting.La perdita non ne tenere conto - infatti, se c'è una perdita, apparirebbe anche nei dati di addestramento.Inoltre, se i dati del test vengono selezionati in modo casuale, dovrebbe verificarsi una perdita nei dati di addestramento ogni volta che si trova nei dati del test (e viceversa).Risulta dall'avere caratteristiche informative nei dati che vengono utilizzati per prevedere una risposta, ma che non possono essere conosciuti quando viene effettuata la previsione.
Le cose sono un po 'meno chiare con i dati delle serie temporali, poiché i dati del test non sarebbero una selezione casuale dell'intero set di dati (potrebbe essere un tempo casuale periodo ).La maggior parte dei modelli di serie temporali utilizzerà i dati passati per prevedere il futuro: la perdita sarebbe se si utilizzassero dati successivi per prevedere i dati precedenti.L'overfitting consiste nell'usare un periodo di tempo per prevedere un sottoinsieme del periodo di tempo utilizzato per costruire il modello, ovvero non tenere separati i periodi di tempo.Anche se si evitano overfitting e perdite in un modello di serie temporale, si presume che il periodo di tempo utilizzato per costruire il modello sia sufficientemente simile al periodo che si sta tentando di prevedere.Se i periodi non sono simili (ad esempio, se le forze cambiano che rendono il modello non più rilevante), allora direi che il modello non è molto buono, ma non lo chiamerei perdita e probabilmente non lo chiamerei neanche overfitting.
Ri: fuga di datiCiao @ FR60 ,
I miei pensieri sui punti specifici che sollevi:
1. Se hai intenzione di standardizzare e / o normalizzare i dati, penso che sarebbe meglio farlo prima di suddividere il set di dati. Per quanto riguarda l'imputazione del valore mancante, dovrai stare attento a questo. A volte i dati mancanti sono informativi e talvolta no. Inoltre, il modo in cui JMP assegna i valori potrebbe non essere appropriato per i dati specifici. Potrebbe imputare i dati mancanti in modo errato e introdurre un comportamento artificiale nei dati che influenzerà il modello in modo errato.
2. Per le serie temporali, se stai davvero utilizzando una serie temporale per prevedere e prevedere eventi futuri nel tempo, non credo che suddivideresti il set di dati, almeno non con le piattaforme delle serie temporali in JMP , non hanno una colonna di convalida in quelle piattaforme. Tuttavia, se si desidera disporre di un set di dati indipendente per confrontare diversi modelli di previsione per vedere quale si adatta meglio ai dati futuri e non utilizzati, allora sì, ad un certo punto dividerei il set di dati e lo userei per generare modelli di previsione e salvare quelle formule nella tabella dei dati e vedere quanto bene prevedono i dati inutilizzati. Potresti forse usare un semplice Fit Y per X e guardare il valore R ^ 2 per vedere quale modello predice meglio il risultato, oppure guardare i residui tra i dati effettivi e quelli modellati per vedere quale ha la somma più piccola di residui o qualcosa del genere .
In generale, però, quello che faccio è dividere la tabella dati 80/20 in set di dati di addestramento e test. Quindi separo i dati del test in una tabella dati completamente diversa in modo che i modelli che creo non abbiano alcuna possibilità di utilizzare i dati del test. Questo è più che semplicemente "nascondere" ed "escludere" i dati ed elimina ogni possibilità che un algoritmo utilizzi accidentalmente i dati del test. Con la tabella dei dati dell'insieme di "addestramento", creo quindi una colonna di convalida o utilizzo semplicemente l'opzione della parte di convalida di una piattaforma, suddividendola nuovamente 80/20 in formazione / convalida per ridurre l'overfitting. Dopo aver generato più modelli diversi con piattaforme diverse, utilizzo il set di dati di test per vedere quale modello prevede meglio i dati inutilizzati / non visualizzati.
Spero che sia di aiuto,
DS
Ri: fuga di datiHo trovato questo tutorial in Kaggle molto interessante.
Si sottolinea ancora una volta di evitare di applicare qualsiasi normalizzazione e imputazione di valori mancanti ai dati prima di dividerli in set di addestramento e test.
https://www.kaggle.com/alexisbcook/data-leakage
Ciao Felice