Come posso prevedere il traffico in base ai dati delle serie storiche precedenti?


18

Se ho un negozio al dettaglio e ho un modo per misurare quante persone entrano nel mio negozio ogni minuto, e il timestamp di tali dati, come posso prevedere il traffico pedonale futuro?

Ho esaminato gli algoritmi di machine learning, ma non sono sicuro di quale utilizzare. Nei miei dati di test, una tendenza anno su anno è più accurata rispetto ad altre cose che ho provato, come KNN (con quelli che penso siano parametri sensibili e funzione di distanza).

Sembra quasi che potrebbe essere simile alla modellazione finanziaria, in cui si gestiscono i dati delle serie temporali. Qualche idea?


Forse questo white paper potrebbe essere utile. knime.org/files/knime_bigdata_energy_timeseries_whitepaper.pdf Si tratta di modellare serie temporali inclusa la stagionalità. - Rosaria
Rosaria,

Risposte:


17

Il problema con modelli come KNN è che non tengono conto della stagionalità (variazioni di tendenza dipendenti dal tempo). Per tenerne conto, è necessario utilizzare l'analisi delle serie temporali.

Per i dati di conteggio, come i tuoi, è possibile utilizzare modelli di media mobile auto-regressiva lineare generalizzata (GLARMA). Fortunatamente, esiste un pacchetto R che li implementa ( glarma ).

La vignetta è una buona risorsa per la teoria alla base dello strumento.


2
Un altro pacchetto molto utile per la previsione e l'analisi delle serie temporali è previsto dal prof. Rob J. Hyndman.
Def_Os

Sai se questo è già implementato in un'altra lingua? Non sono esattamente un professionista con R. Leggerò sicuramente il documento almeno.
user1132959

Non ne ho familiarità. Se vuoi usare python, puoi usare il pacchetto rpy2 per chiamare la funzione glarma mentre fai la maggior parte del resto della programmazione in python. La maggior parte delle altre lingue ha anche un tale connettore.
Christopher Louden,

10

Penso che le risposte di Christopher sopra siano del tutto sensate. Come approccio alternativo (o forse solo in aggiunta al consiglio che gli è stato dato), potrei iniziare semplicemente visualizzando i dati un po 'per provare ad avere un'idea approssimativa di ciò che sta succedendo.

Se non lo hai già fatto, potresti provare ad aggiungere una data del mese e il giorno della settimana come funzionalità - se finisci per rimanere con KNN, questo aiuterà il modello a raccogliere la stagionalità.

Come modo diverso di affrontarlo, potresti prendere in considerazione l'idea di iniziare con un modello davvero basilare (come OLS) .. questi spesso fanno molto per generare previsioni ragionevoli.

Infine, più sappiamo dei tuoi dati, più facile sarà per noi aiutarci a generare suggerimenti - A che ora stai osservando? Quali sono le funzionalità che stai attualmente utilizzando? eccetera.

Spero che sia di aiuto --


Sì, la visualizzazione è un primo passo essenziale in qualsiasi analisi.
Christopher Louden,

Ho aggiunto mese, giorno del mese, giorno della settimana e anno come funzionalità. Ho anche provato un valore "Recenti" che diminuisce linearmente. Non credo di aver provato OLS. Sto osservando un lasso di tempo che potrebbe variare da un paio di settimane a più anni. Per quanto riguarda la visualizzazione, ho provato a farlo. Il problema è che vogliamo che il software sia in grado di prevedere automaticamente, senza intervento umano, per diversi clienti.
user1132959

3

Potresti provare Neural Network. Puoi trovare 2 grandi spiegazioni su come applicare NN nelle serie storiche qui e qui .

Si noti che è consigliabile:

  • Deseasonalize / detrend i dati di input (in modo che l'NN non apprenda la stagionalità).
  • Ridimensiona / Normalizza i dati di input.

Poiché ciò che stai cercando è un problema di regressione, le funzioni di attivazione dovrebbero essere o linearmeno sigmoide tanhe miri a minimizzare sum-of-squares error(come opposizione alla massimizzazione del negative log-likelihoodproblema in una classificazione).


Stavo esaminando le reti neurali come opzione, ma non sapevo che tipo di parametri avrei usato. Dovrò provarci.
user1132959

Sigmoid e Tanh stanno bene, si vuole che la non linearità apprenda interazioni più complesse e che i pesi li mapperanno a qualsiasi intervallo ritenuto necessario dalla rete
Jan van der Vegt,

3

Come menzionato sopra @Christopher Lauden, l'analisi delle serie temporali è la più appropriata per questo genere di cose. Se, tuttavia, desideri fare un "approccio di apprendimento automatico" più tradizionale, qualcosa che ho fatto in passato è bloccare i tuoi dati in finestre temporali sovrapposte come funzionalità, quindi utilizzarle per prevedere i prossimi giorni (o settimane) ) traffico.

La matrice delle caratteristiche sarebbe simile a:

t1 | t2 | ... | tN
t2 | t3 | ... | tN+1
t3 | t4 | ... | tN+2
...
tW | tW+1 | ... |tN+W

dov'è tIil traffico di giorno I. La funzione che prevedi sarà il traffico del giorno successivo all'ultima colonna. In sostanza, utilizzare una finestra di traffico per prevedere il traffico del giorno successivo.

Qualsiasi tipo di modello ML funzionerebbe per questo.

modificare

In risposta alla domanda "puoi approfondire come usi questa matrice di caratteristiche":

La matrice delle caratteristiche ha valori che indicano il traffico passato per un periodo di tempo (ad esempio, il traffico orario nell'arco di 1 settimana) e lo utilizziamo per prevedere il traffico per un determinato periodo di tempo in futuro. Prendiamo i nostri dati storici e costruiamo una matrice di caratteristiche del traffico storico e le etichettiamo con il traffico in un certo periodo futuro (ad es. 2 giorni dopo la finestra nella funzione). Utilizzando una sorta di modello di apprendimento automatico della regressione, possiamo prendere dati storici sul traffico e provare a costruire un modello in grado di prevedere come il traffico si è spostato nel nostro set di dati storico. La presunzione è che il traffico futuro sarà simile al traffico passato.


Potresti approfondire come utilizzeresti questa matrice di caratteristiche? Stai cercando di apprendere in base al cambiamento del traffico tra giorni?
user1132959

Ho modificato la risposta per spero di dare più chiarezza.
Gallamina,

2

Bene, in primo luogo, non userei nemmeno cose come l'apprendimento automatico senza avere una conoscenza approfondita. Le cose semplicistiche che farei se avessi questa serie temporale sono:

  1. Scrivi query sql per capire quale delle volte hai il traffico più occupato, medio e basso.
  2. Quindi prova a visualizzare l'intera serie temporale e potresti utilizzare algoritmi di corrispondenza dei modelli di base per raccogliere i modelli.

Queste due cose ti aiuteranno a capire cosa ti dice il tuo set di dati. Quindi, con quello in mano, probabilmente sarai in uno stato migliore per utilizzare gli algoritmi di apprendimento automatico.

Inoltre, attualmente sto lavorando alla costruzione di qualcosa su serie temporali e l'utilizzo dell'analisi delle serie temporali ti aiuterà molto di più rispetto all'apprendimento automatico. Ad esempio, esistono algoritmi di riconoscimento dei modelli che è possibile utilizzare che utilizzano i dati di tutti i giorni per mostrare i modelli e quelli che utilizzano fino a 3-6 mesi di dati per catturare un modello.


0

Vorrei sconsigliare l'uso di una rete neurale o equivalente in quanto, suppongo, hai avuto un buon precedente in base alla tua esperienza con il negozio (cioè che probabilmente ci sono tendenze quotidiane / stagionali e un certo livello di scorrevolezza) e Immagino una quantità relativamente piccola di dati. Un'opzione migliore IMO sarebbe quella di optare per un metodo del kernel come un processo gaussiano o SVM.


0

Riporta in vita questo thread, poiché potrebbe essere utile per gli altri che arrivano qui con domande simili.

Facebook ha recentemente rilasciato e open source uno dei loro strumenti di previsione interna chiamato Prophet https://facebookincubator.github.io/prophet/

È disponibile in entrambi i pacchetti R & Python e si rivela una soluzione interessante per qualcuno con pochi background di Machine Learning. Tuttavia, alcune conoscenze ML aggiuntive consentono di ottimizzare e ottimizzare i modelli prodotti.

Consiglio di provare Prophet come primo passo. La rapida vittoria di questa soluzione è la facilità e la velocità di costruzione e test del modello: puoi letteralmente ottenere una proiezione di discesa in pochi minuti. Si comporta molto bene nelle serie storiche, cogliendo "naturalmente" la stagionalità dei dati.

Sotto il cofano, è simile a un modello di additivo generalizzato (GAM) - maggiori dettagli sul documento dedicato: https://facebookincubator.github.io/prophet/static/prophet_paper_20170113.pdf

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.