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 set di training e test prima di qualsiasi normalizzazione, standardizzazione e imputazione di valori mancanti
2 in caso di serie storiche evitare la suddivisione casuale. Decidere un punto temporale e utilizzarlo per separare il set di training e quello di test.
Qualche commento, suggerimento, lettura utile?
Felice
Combinazione e pulizia dei datiRi: Perdita di datiCIAO @FR60 ,
Sfortunatamente, non posso confermare che JMP faccia lo stesso per ogni piattaforma o in ogni circostanza.
So che in diverse piattaforme di modellazione in JMP, quando si ottiene il rapporto sulle stime, spesso ce n'è uno per le stime in scala. Puoi vederlo anche nella piattaforma Fit Y by X. Lì, se si adatta una linea, un polinomio o qualsiasi altra funzione ai dati, JMP restituisce una formula in cui centra la funzione di adattamento. Pertanto, se l'adattamento è y=a*x+b*x^2 +c, la funzione restituita da JMP è in realtà y=a*(x-x0)+b*(x-x1)^2+c, dove x0 e x1 sono costanti. Lo fa a meno che tu non gli dica esplicitamente di non farlo.
A quanto mi risulta, JMP funziona in questo modo perché le stime per a, b e c sono più accurate quando si centrano i dati rispetto a quando non si centrano. Non sarei sorpreso se JMP lo facesse per ogni piattaforma, ma non lo so. Codificano tutti i dati durante la generazione di un DOE, quindi anche se inserisci i tuoi valori reali, nel back-end del programma, utilizza valori codificati come -1, 0, 1 per le impostazioni basse, medie e alte nel DOE . In realtà non utilizza i numeri reali che potresti inserire.
Per ottenere una conferma completa sull'argomento, scriverei direttamente a una persona dello staff JMP o parlerei con il Systems Engineer che supporta la tua zona. Sarebbe bello sapere se si tratta di una cosa dipendente dalla piattaforma o eseguita in modo trasversale con JMP.
Grazie!,
DS
Ri: Perdita di datiCiao Dierich
grazie mille per il tuo commento
Per quanto riguarda la perdita del test di addestramento, il suggerimento riportato in diversi blog è di dividere i dati prima di eseguire qualsiasi preelaborazione dei dati. Ad esempio, se vogliamo normalizzare tutti i predittori compresi tra 0 e 1, dovremmo prima dividere i dati e quindi calcolare il minimo/massimo utilizzando solo i dati di training e quindi normalizzare con tali valori anche i dati di validazione e test. Stessa storia per altri tipi simili di gestione dei dati come la standardizzazione z o l'imputazione di valori mancanti. Naturalmente se si utilizza la convalida incrociata è necessario implementare un calcolo più complicato seguendo la stessa metodologia sopra riportata.
Ora passiamo alla domanda. Nella tua mail hai scritto:
" Ora capisco perché potrebbe essere importante standardizzare/normalizzare i dati dopo la divisione, ha senso. Mi risulta che JMP in genere lo fa comunque dietro le quinte durante i calcoli e poi lo ridimensiona semplicemente per quando viene trasformato in un report "
Ciò significa che utilizzando JMP non dobbiamo preoccuparci della perdita di training-test perché questa viene evitata internamente dagli algoritmi di jmp?
Se è così, per me è fantastico.
Per favore, puoi confermare?
Grazie Felice
Ri: Perdita di datiCIAO @FR60 ,
Posso vedere dove potrebbe essere nata un po' di confusione riguardo a questo. Ci sono due tipi di scissioni e fughe di notizie a cui ti riferisci, come quando hai fatto riferimento all'articolo su Kaggle, e anche @dale_lehman ha commentato anche questo.
Una suddivisione è assicurarsi che i dati utilizzati per addestrare il modello non includano anche dati noti solo al risultato. Questo sarebbe il “target leak” di cui parla Kaggle. L'altro è la "contaminazione del test del treno", in cui si desidera assicurarsi che i dati del test non trovino la loro strada nei set di addestramento o di convalida. Il secondo era quello a cui mi riferivo maggiormente: i miei set di dati in genere non contengono colonne note dopo le variabili predittive, quindi non è comune per me preoccuparmi della "perdita di target", mentre il "train-test contaminazione" è
Per JMP, forse è più semplice pensare alle suddivisioni dei dati come una suddivisione per riga == "contaminazione del test del treno" rispetto a una suddivisione per colonna == "perdita target". A seconda della struttura dei dati, potresti eseguirne solo uno o entrambi.
Ora capisco perché potrebbe essere importante standardizzare/normalizzare i dati dopo la divisione, ha senso. Mi risulta che JMP in genere lo fa comunque dietro le quinte durante i calcoli e poi lo ridimensiona semplicemente per quando viene inserito in un report.
Tornando al tuo post originale, immagino che dipenda da come i tuoi dati devono essere suddivisi e da come sono strutturati: se sono strutturati verticalmente nel tempo o orizzontalmente. Ciò potrebbe determinare se si esegue una suddivisione per riga o per colonna per i dati temporali. Ma applicherei tipi simili di logica per decidere quando tagliare le serie temporali. Se c'è un momento nel tempo in cui i risultati dei risultati potrebbero essere inseriti nel modello come predittori, allora è assolutamente necessario tagliare prima di allora. Non sono sicuro di come lo faresti nel modo giusto per il problema della "contaminazione del test del treno". Se stai cercando di eseguire previsioni o analisi di serie temporali, JMP funziona piuttosto bene utilizzando tutti i dati necessari. Puoi decidere quanti periodi prevedere in futuro in base ai dati temporali storici e l'output ha intervalli di confidenza e così via.
Buona discussione!,
DS
Ri: Perdita di datiUn altro post sulla perdita di dati durante la pre-elaborazione dei dati.
https://machinelearningmastery.com/data-preparation-without-data-leakage/
Ri: Perdita di datiHo trovato questo tutorial in Kaggle molto interessante.
Ancora una volta si sottolinea di evitare di applicare qualsiasi normalizzazione e imputazione di valori mancanti ai dati prima di suddividerli in training e test set.
https://www.kaggle.com/alexisbcook/data-leakage
Ciao Felice
Ri: Perdita di datiCIAO @FR60 ,
I miei pensieri sui punti specifici che sollevi:
1. Se hai intenzione di standardizzare e/o normalizzare i dati, penso che farlo prima di dividere il set di dati sarebbe la soluzione migliore. Per quanto riguarda l'imputazione dei valori mancanti, dovrai stare attento. A volte i dati mancanti sono informativi, a volte no. Inoltre, il modo in cui JMP imputa 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 realmente utilizzando una serie temporale per prevedere e prevedere eventi futuri nel tempo, non penso che divideresti il set di dati, almeno non con le piattaforme di serie temporali in JMP , non hanno una colonna Convalida in quelle piattaforme. Ma, se volessi avere 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ì, a 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 adattamento Y per X e guardare il valore R ^ 2 per vedere quale modello prevede meglio il risultato, o 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 training e di 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 è molto più che semplicemente "nascondere" ed "escludere" i dati ed elimina ogni possibilità che un algoritmo utilizzi accidentalmente i dati di test. Con la tabella dei dati impostati di "addestramento", creo quindi una colonna di convalida o utilizzo semplicemente l'opzione della porzione 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 non utilizzati/non visualizzati.
Spero che questo ti aiuti,
DS
Ri: Perdita di datiL'articolo a cui ti colleghi è molto confuso riguardo alla fuga di dati.Si tratta di confondere l'idea di prestazioni differenziali sui dati di addestramento e di convalida/test (che è un adattamento eccessivo) con la mancanza di un confine chiaro tra dati di addestramento e di test (che è un modo di pensare alla perdita).I due concetti sono, credo, distinti.Quando il modello si adatta ai dati di addestramento e non ai dati di test, si tratta di un esempio di adattamento eccessivo.Le perdite non ne terrebbero conto: in effetti, se ci fossero perdite, apparirebbero anche nei dati di addestramento.Inoltre, se i dati di test vengono selezionati in modo casuale, dovrebbero verificarsi perdite nei dati di addestramento ogni volta che si trovano nei dati di test (e viceversa).Deriva dalla presenza di caratteristiche informative nei dati che vengono utilizzati per prevedere una risposta, ma che non possono essere conosciute 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 (potrebbero essere un dato temporale casuale periodo ).La maggior parte dei modelli di serie temporali utilizzerà i dati passati per prevedere il futuro: si verificherebbero perdite se si utilizzassero dati successivi per prevedere dati precedenti.L'overfitting utilizzerebbe un periodo di tempo per prevedere un sottoinsieme del periodo di tempo utilizzato per costruire il modello, ovvero non mantenendo i periodi di tempo separati.Anche se si evitano overfitting e leak in un modello di serie temporali, si presuppone 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 cambiano le forze che rendono il modello non più rilevante), allora direi che il modello non è molto buono, ma non lo definirei perdita e probabilmente non lo definirei nemmeno overfitting.
Ri: Perdita di datiCaro @dale_lehman , sì, hai ragione, ho confuso le cose, almeno formalmente, poiché pensavo solo all'obiettivo generale, quello di 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 i problemi che riducono il… | di Devin Soni :corona: | Verso la scienza dei dati
Ma come farlo intenzionalmente, quando di solito dividiamo i set di training e 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: Perdita di datiMi chiedo se non stiamo confondendo due cose: perdita e overfitting.Penso che siano abbastanza diversi.L'adattamento eccessivo è sempre un potenziale problema con la modellazione predittiva e il modo consueto per prevenirlo è disporre della convalida e, se si dispone di dati sufficienti, anche di un set di dati di test separato.In base alla mia esperienza, l'overfitting è un problema meno grave con JMP di quanto potrebbe essere altrimenti, poiché anche numerosi altri parametri di ottimizzazione aiutano a prevenirlo.Ad esempio, con gli alberi decisionali, l'impostazione di una dimensione di suddivisione minima relativamente elevata aiuterà a evitare un adattamento eccessivo.È comunque una buona idea disporre di dati di test separati per valutare se il modello è in grado di produrre previsioni realistiche sui nuovi dati.Penso che questo sia particolarmente importante per i dati delle serie temporali.
A mio avviso, le perdite sono una questione completamente diversa.La perdita è un modello specificato in modo errato.Stai utilizzando fattori che sarebbero noti solo nello stesso momento di 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 fidelizzerai.In tal caso, il fattore degli acquisti di quest'anno sarà in grado di prevedere perfettamente la fidelizzazione dei clienti, ma questo non è un modello utile.Questo è ciò che credo sia la perdita.
Non penso che le perdite vengano prevenute o rilevate disponendo di set di dati di formazione/convalida/test diversi.Potresti rilevare perdite in uno qualsiasi di questi 3: un modello perfetto (o quasi) sui dati di addestramento sarebbe sufficiente per sospettare che potrebbero esserci perdite.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 perdite (o potrebbe semplicemente essere un modello molto buono).Ma non penso che sia una domanda a cui si può rispondere con qualche dispositivo tecnico.
Sono interessato a sentire cosa hanno da dire gli altri a riguardo.
Ri: Perdita di datiEcco la mia esperienza limitata.
La modellazione è piuttosto complessa (scelta giusta del modello, preparazione dei dati, suddivisione dei dati, ottimizzazione dei metadati ...).
Un buon modello robotico è 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. La formazione/test è necessaria per giudicare il risultato, come @ih già menzionato.
Per la suddivisione, è possibile utilizzare l'opzione di stratificazione per controllare la suddivisione. Ma per entrambi, la modellazione e la suddivisione, è necessario che il processo sappia come eseguirlo al meglio.
Per modelli complessi e quando il risultato è fondamentale, ho provato a testare modelli diversi, metadati diversi e colonne di convalida diverse. Quando non vi è alcuna differenza sostanziale, non vi è alcun problema. E questo è abbastanza semplice da fare in JMP (Pro).
Alla fine, solo questo test ti dà la risposta se non ci sono perdite. Ma onestamente non mi dispiacerebbe perdere qualcosa, quando posso essere sicuro di avere un buon modello.
Ri: Perdita di datiI miei 2 centesimi:
Se disponi di dati di serie temporali, tendo a pensare che il tuo articolo 2 sia il problema più grande a meno che tu non stia facendo molta interpolazione.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 è necessaria più di 1 riga affinché il serbatoio raggiunga un nuovo stato stazionario, ad esempio), non è possibile dividere i dati per riga e aspettarsi che i set di convalida o di test siano indipendenti dall'addestramento.
Potresti invece prendere in considerazione la suddivisione dei dati in test e convalida in blocchi più grandi, ad esempio:
- Identificare nuovi periodi in cui il processo apporta cambiamenti "significativi" e mantenere la durata delle corse allo stato stazionario nello stesso gruppo (più difficile ma migliore), oppure
- Utilizza periodi abbastanza lunghi da essere sicuro che rappresentino condizioni di esecuzione diverse, ma abbastanza brevi da non consistere in più di una condizione di esecuzione e mantieni tutte le righe in quel periodo nello stesso gruppo di convalida (più semplice, potenzialmente ancora esposto allo stesso rischio )
- Utilizzando i periodi identificati sopra, riassumi ciascuna di queste serie in un'unica riga, magari utilizzando le medie o le deviazioni standard delle variabili o l'esploratore di dati funzionali di altri. (migliore)
In entrambi i casi potresti considerare di escludere i 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.