Come addestrare il modello per prevedere gli eventi 30 minuti prima, da una serie temporale multidimensionale


9

Gli esperti nel mio campo sono in grado di prevedere la probabilità che un evento (picco binario in giallo) 30 minuti prima che si verifichi . La frequenza qui è di 1 secondo, questa vista rappresenta alcune ore di dati, ho cerchiato in nero dove dovrebbe essere il modello "malizioso" . Esistono interazioni tra le dimensioni, quindi le dimensioni non possono essere studiate singolarmente (o possono?)

inserisci qui la descrizione dell'immagine

Sto cercando di costruire un modello ML supervisionato usando Scikit Learn che impara un ritmo normale e rileva quando i sintomi possono portare a un picco . Mi sono perso per quale direzione prendere. Ho provato il rilevamento Anomaly, ma funziona solo per il rilevamento in loco, non prima.

Come potrei rilevare modelli "dannosi" prima di quegli eventi (prendendoli come variabili target)?

Accolgo con favore qualsiasi consiglio su quali algoritmi o pipeline di elaborazione dei dati potrebbero aiutare, grazie :)


Queste sono onde cerebrali?
JahKnows,

Risposte:


9

Questo è un problema divertente Questa è una serie storica e da questa serie storica si desidera identificare il trigger di un determinato evento. Quindi è un problema di classificazione binaria. Sulla base delle informazioni dalla finestra specificata si verificherà un picco? Si o no.

Il primo passo è configurare il tuo database. Quello che avrai è una serie di istanze (che possono avere alcune sovrapposizioni ma per evitare distorsioni è meglio che siano disegnate in modo indipendente) e quindi per ogni istanza un essere umano deve etichettare se c'era un picco o se non c'era un Spike.

Quindi è necessario identificare la finestra temporale che si desidera utilizzare per l'analisi delle serie temporali. Hai fatto questo e deciso che 30 minuti sono un buon inizio.

Ora, hai 6 forme d'onda in una finestra di 30 minuti da cui puoi estrarre i dati per ottenere informazioni sulla tua classificazione. È possibile utilizzare gli esempi di dati non elaborati come funzionalità, ma questo è TROPPO molte funzionalità e porterà a scarsi risultati. Pertanto sono necessarie alcune funzioni di estrazione , riduzione della dimensionalità , tecniche.

Esistono milioni di modi in cui è possibile estrarre dati da queste forme d'onda. Innanzitutto, chiediti, come essere umano, quali sono i segni rivelatori che dovrebbero avere queste altre forme d'onda, il che significherebbe che sorgerebbe un picco. Ad esempio, nei dati sismici, se vedi l'agitazione in una forma d'onda di una città vicina, dovresti aspettarti di vedere presto l'agitazione nella tua città.

In generale, mi piace estrarre tutte le statistiche di base dalle mie forme d'onda. Ottieni la media, la deviazione standard, l'indice di fluttuazione, ecc. Ottieni qualsiasi cosa pensi possa aiutare. Controlla come queste statistiche sono correlate alle tue etichette. Maggiore è la correlazione, meglio potrebbero essere. Quindi ci sono alcune ottime tecniche per estrarre informazioni su tempo e frequenza dalle tue serie storiche. Guarda in decomposizione in modalità inviluppo e decomposizione in modalità empirica . Ho usato con successo la decomposizione in modalità empirica su alcuni dati di serie temporali e ho ottenuto risultati molto migliori di quanto mi aspettassi.

Ora, anche se hai lo spazio ridotto delle funzionalità, puoi fare di meglio! È possibile applicare alcune tecniche di riduzione della dimensionalità come PCA o LDA per ottenere uno spazio dimensionale inferiore che potrebbe rappresentare meglio i propri dati. Questo potrebbe aiutare, nessuna garanzia.

Ora hai un piccolo set di dati con istanze che sono un intruglio di Frankenstein che rappresenta le tue 6 forme d'onda attraverso la finestra di 30 minuti. Ora sei pronto per selezionare il tuo classificatore. Avrai bisogno di un algoritmo di classificazione binaria, per fortuna è il più comune. Ce ne sono molti tra cui scegliere. Come scegliere?


Quanti casi hai?

#instances>100#features?

Allora sei pronto a utilizzare una tecnica di apprendimento profondo, come le reti neurali , 1D reti neurali convoluzionali , autoencodders impilati , ecc ...

Meno di quello !!!! Dovresti seguire metodi poco profondi. Dai un'occhiata alle macchine vettoriali di supporto del kernel , foreste casuali , k-vicini più vicini ecc.


Malinteso comune: un metodo superficiale PUO ' e SARANNO performanti meglio di una tecnica di apprendimento profondo se hai selezionato correttamente le tue caratteristiche. l'estrazione delle caratteristiche è l'aspetto più importante di un'architettura di apprendimento automatico.


Voglio usare il rilevamento delle anomalie!

Funzionerebbe anche questo e ci sono alcune buone tecniche per farlo. Tuttavia, la natura del rilevamento delle anomalie è di apprendere la distribuzione del caso nominale. Quindi alimenteresti il ​​tuo algoritmo con tutte le istanze nel tuo set di dati che non hanno provocato un picco. Quindi da questo il tuo algoritmo sarebbe in grado di identificare quando una nuova istanza è significativamente diversa da questa distribuzione nominale e la segnalerà come un'anomalia. Ciò significherebbe che si verificherà un picco nel tuo contesto.

Check-out:

Set di volumi minimi di apprendimento http://www.stat.rice.edu/~cscott/pubs/minvol06jmlr.pdf

Rilevamento di anomalie con funzioni di punteggio basate sui grafici dei vicini più vicini https://arxiv.org/abs/0910.5461

Nuova statistica nella stima del valore P per il rilevamento di anomalie http://ieeexplore.ieee.org/document/6319713/

Puoi anche utilizzare tecniche di rilevamento delle anomalie più rudimentali come un test del rapporto di verosimiglianza generalizzato. Ma questa è una specie di vecchia scuola.


Ottima soluzione, grazie per il tuo livello di dettaglio. Le serie temporali mostrate qui sono già una selezione delle caratteristiche originali e rese "visualizzabili" per l'occhio umano usando ad esempio la media mobile. Il feed di dati "non elaborati" è costituito da circa 50 funzionalità e circa un milione di istanze. Immagino che questo mi porti a tecniche di apprendimento profondo! Mi sto immergendo nell'estrazione di feature e pubblicherò sicuramente i risultati del mio viaggio qui :)
William D

Sì, sarebbe grandioso tenerci aggiornati. Se hai 50 funzionalità e 1 milione di istanze. Scegli prima la rete neurale, è la più semplice da codificare poiché esistono già tanti pacchetti (ad es. Keras in Python). Prova anche PCA e LDA per trasformare lo spazio delle tue funzionalità in uno più rappresentativo.
JahKnows

0

È necessario eseguire l'estrazione o l'ingegnerizzazione delle funzionalità per creare variabili nei dati di allenamento che "catturino" i modelli in cui sono stati inseriti i box e quindi disporre di una variabile target che dice "malizia trovata" o "malizia trovata non trovata"

Facciamo un esempio molto semplice: prevedere se sta per piovere. Potresti trovare un predittore di pioggia ragionevolmente buono nei prossimi 30 minuti che controlla ogni 30 minuti se 1. diventa improvvisamente nuvoloso e 2. la pressione barometrica diminuisce.

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.