2017-03-17 4 views
0

Ich möchte die nächsten 5 Bestellungen und die Menge der 3 Produkte in jeder Bestellung vorhersagen.Prognose multiples Produkte Daten

Ich bin ein Anfänger mit r und timeseries und ich Beispiele sah mit arima aber sie sind nur eine Sache angewendet zu messen und nicht mehrere Produkte wie in meinem Beispiel.

Sollte ich Arima verwenden? Was soll ich genau machen?

Sorry für mein schlechtes Englisch. Vielen Dank im Voraus.

dateordrer,product1,product2,product3 
12/01/2012,2565,3254,635 
25/01/2012,2270,3254,670 
01/03/2012,2000,785,0 
05/05/2012,300,3254,750 
26/06/2012,3340,0,540 
30/06/2012,0,3254,0 
21/06/2012,3360,3356,830 
01/07/2012,2470,3456,884 
03/07/2012,3680,3554,944 
05/07/2012,2817,3854,0 
09/07/2012,4210,4254,32 
09/08/2012,0,3254,1108 
13/09/2012,4560,5210,952 
25/09/2012,4452,4256,1143 
31/09/2012,5090,5469,199 
25/11/2012,5100,5569,0 
10/12/2012,5440,5789,1323 
11/12/2012,5528,5426,1350 

Antwort

1

Ihre Frage ist sehr breit, so dass es nur in einer breiten Art und Weise beantwortet werden kann. Außerdem hat die Frage mehr mit der Prognosetheorie zu tun als mit R. Ich gebe Ihnen zwei Zeiger für den Anfang ...

  1. Es scheint, Sie haben einige Vorverarbeitung zu tun, d.h .: Was sind Ihre Zeitintervalle? Was ist deine grundlegende Zeiteinheit? (Woche Monat?). Sie sollten die Daten gemäß dieser Zeiteinheit aggregieren. Für diese Art von Operationen können Sie die Pakete tidyr und lubridate verwenden. Hier ist ein Beispiel der Daten festgelegt, nachdem ich es ein wenig angeordnet:

    data.raw <- read_csv("data1.csv") %>% 
          mutate(date.re = as.POSIXct(dateordrer, format = "%d/%m/%Y")) 
    complete.dates <- range(data.raw$date.re) 
    dates.seq <- seq(complete.dates[1], complete.dates[2], by = "month") 
    

    Serie < - data.frame (sale.month = Monat (dates.seq), sale.year = Jahr (dates.seq))

    data.post <- data.raw %>% 
          mutate(sale.month = month(date.re), sale.year = year(date.re)) %>% 
          select(product1:product3, sale.month, sale.year) %>% 
          group_by(sale.month, sale.year) %>% 
          summarize_all(funs(sum(.))) %>% 
          right_join(series) %>% 
          replace_na(list(product1 = 0, product2 = 0, product3 = 0)) 
    

Es würde wie folgt aussehen:

 sale.month sale.year product1 product2 product3 
     1   2012  4835  6508  1305 
     2   2012  0   0   0 
     3   2012  2000  785   0 
     4   2012  0   0   0 
     etc... 

sehen Sie, dass für Monate 2 und 4 Sie keine Daten hatten (ursprünglich), deshalb sie appea r als 0s. Beachten Sie, dass Vorverarbeitung nicht auf die leichte Schulter genommen werden muss, ich habe Monate als Basiseinheit verwendet, aber das ist möglicherweise nicht wahr oder relevant für Ihre Ziele. Sie können dies sogar nach dem Fortfahren überarbeiten und versuchen zu sehen, ob eine andere Aggregation bessere Ergebnisse liefert.

  1. Nur nach der Vorverarbeitung können Sie zur Prognose wechseln. Wenn die drei Produkte unabhängig sind, können sie unabhängig voneinander vorhergesagt werden (z.B. Arima/Holt-Winters/jedes andere Modell * dreimal verwenden). Die Tatsache, dass Sie drei Produkte haben, die miteinander korreliert sein können, führt uns jedoch zu hierarchischen Zeitreihen (Paket hts). Die Funktion hts() innerhalb dieses Pakets ist in der Lage, Vorhersagemodelle am besten anzupassen, wenn eine statistische Beziehung zwischen den verschiedenen Produkten besteht. Zum Beispiel, wenn ein bestimmtes Produkt mit einem anderen gekauft wird (ergänzende Produkte) oder wenn Sie nicht mehr auf Lager sind und dies zu einem anderen Produkt (alternatives Produkt) führt.

Da dies weit davon entfernt ist, ist in sich geschlossen für ein solches breites Thema, die nächste beste Schritt für Sie ist das folgende Online-Buch zu überprüfen:

Forecasting: principles and practice

von Hyndman und Athanasopoulos. Ich habe es gelesen, als ich mit Zeitreihen angefangen habe. Es ist ein sehr gutes Buch.Insbesondere für mehrere Zeitreihen sollten Sie Kapitel umfassen:

9.4 Forecasting hierarchical or grouped time series

Stellen Sie sicher, auch Kapitel 7 in diesem Buch lesen (vor 9,4 bewegt).

+0

danke soviel ich schätze Ihre Hilfe nur eine Frage wirklich, wenn ich versuche dates.seq user3010971

+0

Ich brauche ein reproduzierbares Beispiel für diesen Fehler, denn mit dem vorherigen Beispiel funktioniert mein Code ohne Fehler. Wie es aussieht, haben Sie wahrscheinlich ein Problem mit dem Datumsformat, das Sie im Befehl 'seq' verwendet haben. –

+0

vielen Dank. Problem gelöst Ich hatte gerade ein Datum 31/09/2012, das nie real existierte, also änderte ich es – user3010971