2017-06-26 28 views
1

我正在構建一個時間序列預測模型。我收到的數據有一個變量「金額」,即運輸物料的運費。我有10年的月度數據格式。 這裏面臨的挑戰是,一個月的運費帳單金額不一定反映僅在該月份運輸的材料的金額。有時候,這些材料被運送成碎片並在接下來的2-3個月內被收費,並且這些鈔票意外地高出隨機擾亂時間序列模式。例如,如果我有2017年3月的比爾,那麼它可能在1月和2月有一定的數額。 我嘗試了ARIMA並獲得了40%的MAPE。我嘗試過Croston方法,MAPE在23%-32%之間變化。滾動窗口預測會對此有所幫助嗎?或請任何其他建議。在這種典型情況下預測的最佳方法

編輯1 - 我添加了數據集(2008 - 2016年)。我設法從我的教授處獲得每月收入數據。所以,我嘗試了使用TSLM函數的雙變量模型,它給了我67%的R平方。這比他期望的要低。

yearmon Paid.Amount revenue 
8-Jan 1936599.88 2937700 
8-Feb 1844486.91 3074900 
8-Mar 1735122.05 3690000 
8-Apr 1279519.88 3097700 
8-May 1539967.05 3077100 
8-Jun 1231146.36 3352300 
8-Jul 1162991.84 2400600 
8-Aug 1263879.69 3050000 
8-Sep 1244323  3899200 
8-Oct 1424559.93 3533000 
8-Nov 898217.92 2723400 
8-Dec 1085732.89 4055400 
9-Jan 1029221.93 2486600 
9-Feb 876441.65 2101400 
9-Mar 880441.37 2998400 
9-Apr 722948.96 1996500 
9-May 958005.43 1807400 
9-Jun 610958.71 2332300 
9-Jul 695254.7 2280900 
9-Aug 756439.4 2020500 
9-Sep 926815.65 3231500 
9-Oct 924445.94 2294200 
9-Nov 830403.35 2782700 
9-Dec 925630.38 3246000 
10-Jan 700777.04 2135400 
10-Feb 548469.87 1962800 
10-Mar 696256.42 2641700 
10-Apr 695798.95 2025700 
10-May 704871.44 1996500 
10-Jun 728251.49 2590600 
10-Jul 664962.06 1984500 
10-Aug 727306.82 2421300 
10-Sep 720462.6 3084000 
10-Oct 999328.49 2874300 
10-Nov 950702.54 3069200 
10-Dec 984782.65 3704600 
11-Jan 864608.73 2976800 
11-Feb 711251.25 2981700 
11-Mar 1145917.13 3552500 
11-Apr 844124.97 2684600 
11-May 865543.97 2667900 
11-Jun 883278.98 2707300 
11-Jul 834070.34 2493400 
11-Aug 1116866.09 3023300 
11-Sep 1151143.55 3581100 
11-Oct 1351395.01 3217800 
11-Nov 1118297.76 3239000 
11-Dec 1374179.71 4637800 
12-Jan 989117.07 3313000 
12-Feb 927470.54 2530600 
12-Mar 1069185.01 3496500 
12-Apr 1009312.54 2403000 
12-May 1022559.87 2638500 
12-Jun 961677.71 3246000 
12-Jul 834523.02 2272300 
12-Aug 1081960.39 2886000 
12-Sep 1107927.72 3890100 
12-Oct 1093140.22 2682100 
12-Nov 1310195.61 3292000 
12-Dec 1344106.8 4960100 
13-Jan 1030537.47 3114800 
13-Feb 911014.19 3121300 
13-Mar 930071.08 3490900 
13-Apr 890881.25 2542800 
13-May 876954.67 2354800 
13-Jun 915720.02 3382700 
13-Jul 908514.48 2310000 
13-Aug 1043391.95 3087300 
13-Sep 1093640.35 3869300 
13-Oct 1197865.65 3170800 
13-Nov 1216958.3 3875300 
13-Dec 1461027.39 5801000 
14-Jan 1242969.8 2970300 
14-Feb 1054214.44 3595300 
14-Mar 1171459.28 4012800 
14-Apr 990720.44 2916700 
14-May 891504.63 2794200 
14-Jun 936850.28 3501000 
14-Jul 985009.09 2689100 
14-Aug 1229039.59 3199000 
14-Sep 1272825  4605200 
14-Oct 1274631.05 3649500 
14-Nov 1493390.61 4171600 
14-Dec 1810523.68 6043700 
15-Jan 1225779.44 3526300 
15-Feb 1066156.45 3374900 
15-Mar 1158659.52 4141200 
15-Apr 1085067.52 3058800 
15-May 1243264.14 2932700 
15-Jun 1375846.69 3581800 
15-Jul 1230235.200 
15-Aug 1242221.75 3348200 
15-Sep 1372310.27 4443200 
15-Oct 1489968.27 3254200 
15-Nov 1520498.52 4086200 
15-Dec 1873884.03 7100500 
16-Jan 1225046.91 2922600 
16-Feb 1169703.36 3314600 
16-Mar 1345611.1 4597900 
16-Apr 1182650.19 3057000 
16-May 1368704.21 3599400 
16-Jun 1485036.6 4292300 
16-Jul 1194201.57 3189600 
16-Aug 1378889.12 3289200 
16-Sep 1533056.53 4666700 
16-Oct 1398696.43 3837600 
16-Nov 1742668.73 4234900 
16-Dec 2162712.41 6418700 

如果有人能提出更好的方法來預測Paid.Amount,我將不勝感激。

謝謝。

+0

我喜歡Hyndman的預測包。它能夠很好地處理數據並提供一套預測選項和相應的圖表。 –

+0

發佈你的數據集 –

+0

@TomReilly - 我已經更新了問題並設置了數據集。期待根據數據集提出的建議。 –

回答

0

SANKET,

您可以下載所有的結果here的。 Details.htm是對所建模型的審計。該模型在收入變量中使用滯後變量來支持這一點,表明其對Y(已付)的影響有所延遲。從第一階段開始下降,第十九階段開始的另一個時間趨勢不是由收入來解釋,而是因爲省略了因果關係。你有解釋嗎?如果是這樣,那麼確定並添加該因素作爲因果關係。

季節性差,但Autobox發現某些月份顯示重要性(即8,10和11均高於平均水平)。

具有滯後1和2的AR2也將在延遲4時使用更多滯後的收入。(請參閱rhside.txt,其中顯示純右手方程,並將所有因子表示爲純迴歸。

離羣被認定爲週期17和89的水平位移體積增大(同樣沒有收入,所以也許另一個省略因果解釋)。

Equation

您沒有提供收入的預測,所以我們允許Autobox(我是其中的一個軟件)構建模型並預測未來的價值。一個可能的增強可以提供更好的收入預測,因爲這也是一個模型/預測!收入變量並沒有停留在模型中,然後我們對其進行了約束,並且隨着模型演變爲包含一些確定性變量和AR因素,它變得非常重要。

收入和支付的雙變量歸一化圖表顯示出強烈的正面關係,但只是知道你正在尋找同時期的關係,他們可能在滯後時也會產生影響。

Bivariate Normalized Scatter Plot

的二元線圖支持該滯後x和y之間的關係與在y中的凸塊幾個週期後。

Bivariate Normalized Line plot

這裏是預測enter image description here

+2

謝謝,湯姆,詳細分析。我可以看到R-squared達到了90%,這非常好。我非常感謝你的努力,但我無法理解這個建模背後的過程。我看到你已經使用你的軟件來做預測,但我不知道如何在R中實現這個目標。如果你有什麼功能和方法可以在R中使用以獲得好的結果,我將不勝感激。感謝您的時間。 –

+0

R平方不是一個好的燈塔....你放在更高的變量越多。我們在R中有一個版本的軟件,所以你很好。爲了重現我們的結果,您需要爲列出的兩個趨勢(即0,0,0,0,0,1,2,3)創建虛擬變量。您需要考慮ARIMA組件。你需要考慮水平轉移(即0,0,0,0,0,1,1,1,1,1等)。你需要考慮季節性脈衝(即0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0等)。你需要創造因果關係的滯後。你需要考慮異常值(即0,0,0,0,0,1,0,0,0等)。 –

0

下面是我一直使用相對簡單的1個領先一步月度預報的初步做法。隨後可能花更多的時間來試圖解決這個問題的一些難題。

在這種情況下,我做了以下內容:

  1. 刪除第一個兩年的數據。有一個明確的政權
    更改或至少改變趨勢,似乎不可能 近期預測。
  2. 我使用對數正態變換來轉換數據。只是一個 快速眼球的數據建議我可能會有一些 非線性增長髮生。
  3. 將數據分解爲初始擬合,驗證和 測試部分(在這種情況下,我沒有爲測試預留數據)。
  4. 準備一組您想要評估的模型。 I 選擇評估它們的標準是MSE提前1步預測。
  5. 爲這些模型執行交叉驗證程序。以下兩個鏈接的 解釋了對於 時間序列可以很好地工作的過程。 Time-Series Cross Validation - 1Time-Series Cross Validation - 2
  6. 我選擇了具有最低交叉驗證錯誤的模型。 如果我保存了一個測試數據集,我會試着預測它到 ,確認其性能與 交叉驗證期間的性能一樣好或幾乎一樣好。
  7. 在最佳模型的驗證期間,rsqr爲83.4%。 MAE是86,478美元。 MAPE是6.9%。

從我測試的各種季節ARIMA模型的最佳模型,最終被: [0,0,1] [1,1,1] 12 所以MA = 1,SAR = 1,那麼sdiff = 1 ,並且SMA = 1,其中季節是12.

Cross Validation Results

相關問題