2017-03-17 54 views
0

我想預測下一個5個訂單和每個訂單中3個產品的數量。預測倍數產品數據

我使用rtimeseries一個初學者,我看到使用arima例子,但他們只適用於衡量一兩件事,而不是多個產品,如在我的例子。

我應該用arima嗎? 我應該怎麼做?

對不起,我的英語不好。先謝謝你。

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 

回答

1

您的問題非常廣泛,所以只能以廣泛的方式回答。此外,這個問題更多地與預測理論相關,而不是R。 我會給你兩個指針,讓你開始...

  1. 看來你有一些預處理做,即:什麼是你的時間間隔?你的基本時間單位是什麼? (周?月?)。您應該根據該時間單位彙總數據。對於這些操作,您可以使用tidyrlubridate包。這是你的數據集後,我安排好了一點的例子:

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

    系列< - data.frame(sale.month =月(dates.seq),sale.year =年(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)) 
    

它應該是這樣的:

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

看到,2個月和4個你沒有數據(最初),因此他們APPEA r爲0。 請注意,預處理不應掉以輕心,我使用了幾個月作爲基本單位,但這可能不是真實的或與您的目標相關。在您繼續之後,您甚至可能會對此進行修改,並嘗試查看不同的聚合是否會提供更好的結果

  1. 只有在預處理後,您才能轉向預測。如果三種產品是獨立的,它們可以獨立預測(例如,使用Arima/Holt-Winters /任何其他型號*三次)。然而,事實上,你有三個可能相互關聯的產品,將我們引導到分層時間序列(包hts)。當各種產品之間存在統計關係時,此軟件包中的功能hts()能夠最好地擬合預測模型。例如,某種產品與另一種產品(補充產品)一起購買時,或者當您缺貨並導致產品(替代產品)不同時。

由於這是遠遠自成一體這一廣泛的專題,爲你的下一個最好的舉措就是要看看下面的在線圖書:

Forecasting: principles and practice

通過海德門和Athanasopoulos。我從時間系列開始閱讀。這是一本很好的書。具體而言,多個時間序列,你應該包括章:

9.4 Forecasting hierarchical or grouped time series

確保你也看過那本書第七章(前移至9.4)。

+0

非常感謝你我真的很感謝你的幫助只是一個問題,當我嘗試執行dates.seq < - seq(complete.dates [1],complete.dates [2],= =「月」)我得到這個錯誤我搜索如何修復它,但沒有發現:錯誤在seq.int(r1 $ mon,12 *(to0 $ year - r1 $ year)+ to0 $ mon,by): 'from'不能是NA,NaN或無限 – user3010971

+0

我需要這個錯誤的可重現的例子,因爲與前面的例子我的代碼工作沒有錯誤。從外觀上看,你可能在'seq'命令中使用的日期格式有問題。 –

+0

非常感謝。問題解決了我剛剛有一個日期31/09/2012這從來沒有真正存在,所以我改變了它 – user3010971