2017-03-17 3 views
0

Je voudrais prédire les 5 prochaines commandes et la quantité des 3 produits dans chaque commande.prévoir plusieurs produits données

Je suis un débutant en utilisant r et timeseries et j'ai vu des exemples en utilisant arima mais ils sont appliqués que pour mesurer une chose et non plusieurs produits comme dans mon exemple.

Devrais-je utiliser arima? Que dois-je faire exactement?

Désolé pour mon mauvais anglais. Merci d'avance.

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 

Répondre

1

Votre question est très vaste, elle ne peut donc être résolue que de manière large. En outre, la question a plus à voir avec la théorie de la prévision qu'avec R. Je vais vous donner deux conseils pour vous aider à démarrer ...

  1. Il semble que vous avez un pré-traitement à faire, i.e. .: quelles sont vos intervalles de temps? Quelle est votre unité de temps de base? (semaine mois?). Vous devez agréger les données en fonction de cette unité de temps. Pour ce type d'opérations, vous pouvez utiliser les packages tidyr et lubridate. Voici un exemple de vos données, une fois je me suis arrangé un peu:

    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") 
    

    série < - data.frame (sale.month = mois (dates.seq), sale.year = année (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)) 
    

Il ressemblerait à ceci:

 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... 

Voir que pendant des mois 2 et 4 vous avez eu aucune donnée (à l'origine), par conséquent, ils APPEA r comme 0s. Notez que le pré-traitement ne doit pas être pris à la légère, j'ai utilisé des mois comme unité de base, mais cela pourrait ne pas être vrai ou pertinent pour vos objectifs. Vous pourriez même réviser ceci après que vous continuiez et essayer de voir si l'agrégation différente donne de meilleurs résultats.

  1. Seulement après le prétraitement, vous pouvez passer à la prévision. Si les trois produits sont indépendants, ils peuvent être prédits indépendamment (par exemple, utiliser Arima/Holt-Winters/tout autre modèle * trois fois). Cependant, le fait que vous ayez trois produits qui pourraient être corrélés les uns aux autres, nous dirige vers des séries temporelles hiérarchiques (paquet hts). La fonction hts() de ce package est la mieux adaptée aux modèles de prévision lorsqu'il existe une relation statistique entre les différents produits. Par exemple, lorsqu'un certain produit est acheté avec un autre (produits complémentaires) ou lorsque vous êtes en rupture de stock et que cela conduit à un produit différent (produit alternatif).

Depuis ce qui est loin d'être autonome pour un sujet aussi vaste, la meilleure chose pour vous est de consulter le livre en ligne suivant:

Forecasting: principles and practice

par Hyndman et Athanasopoulos. Je l'ai lu quand j'ai commencé avec des séries chronologiques. C'est un très bon livre.Plus précisément, pour les séries chronologiques multiples, vous devez couvrir le chapitre:

9.4 Forecasting hierarchical or grouped time series

Assurez-vous également lire le chapitre 7 à ce livre (avant de passer à 9.4).

+0

merci beaucoup, je vous remercie de votre aide juste une question lorsque je tente d'exécuter dates.seq <- suivants (complete.dates [1], complete.dates [2], par = "mois") i obtenir ce erreur que je searche sur la façon de le corriger, mais rien trouvé: erreur dans seq.int (r1 $ mon 12 * (G0 année $ - r1 année $) + G0 mon $, par): 'de' ne peut pas être NA, NaN ou infini – user3010971

+0

J'ai besoin d'un exemple reproductible pour cette erreur, car avec l'exemple précédent, mon code fonctionne sans erreur. D'après son apparence, vous avez probablement un problème avec le format de date que vous avez utilisé dans la commande 'seq'. –

+0

merci beaucoup. Problème résolu je viens d'avoir une date 31/09/2012 qui n'a jamais existé en vrai donc je l'ai changé – user3010971