丁香五月天婷婷久久婷婷色综合91|国产传媒自偷自拍|久久影院亚洲精品|国产欧美VA天堂国产美女自慰视屏|免费黄色av网站|婷婷丁香五月激情四射|日韩AV一区二区中文字幕在线观看|亚洲欧美日本性爱|日日噜噜噜夜夜噜噜噜|中文Av日韩一区二区

您正在使用IE低版瀏覽器,為了您的雷峰網(wǎng)賬號(hào)安全和更好的產(chǎn)品體驗(yàn),強(qiáng)烈建議使用更快更安全的瀏覽器
此為臨時(shí)鏈接,僅用于文章預(yù)覽,將在時(shí)失效
人工智能開發(fā)者 正文
發(fā)私信給恒亮
發(fā)送

2

ARIMA模型實(shí)例講解:時(shí)間序列預(yù)測(cè)需要多少歷史數(shù)據(jù)?

本文作者: 恒亮 2017-04-01 16:50
導(dǎo)語(yǔ):時(shí)間序列預(yù)測(cè),究竟需要多少歷史數(shù)據(jù)?

ARIMA模型實(shí)例講解:時(shí)間序列預(yù)測(cè)需要多少歷史數(shù)據(jù)?

雷鋒網(wǎng)按:本文源自美國(guó)機(jī)器學(xué)習(xí)專家 Jason Brownlee 的博客,雷鋒網(wǎng)編譯。

時(shí)間序列預(yù)測(cè),究竟需要多少歷史數(shù)據(jù)?

顯然,這個(gè)問(wèn)題并沒(méi)有一個(gè)固定的答案,而是會(huì)根據(jù)特定的問(wèn)題而改變。

在本教程中,我們將基于 Python 語(yǔ)言,對(duì)模型輸入大小不同的歷史數(shù)據(jù),對(duì)時(shí)間序列預(yù)測(cè)問(wèn)題展開討論,探究歷史數(shù)據(jù)對(duì) ARIMA 預(yù)測(cè)模型的性能影響。(雷鋒網(wǎng)注:ARIMA 全程是 Autoregressive Integrated Moving Average Model,即自回歸積分滑動(dòng)平均模型)

具體來(lái)說(shuō),在本教程中,我們將:

● 加載標(biāo)準(zhǔn)數(shù)據(jù)集并輸入 ARIMA 模型;

● 對(duì)歷史數(shù)據(jù)年份進(jìn)行敏感性分析;

● 分析敏感性分析的結(jié)果。

通過(guò)本例提供的模板,大家將可以根據(jù)各自特定的時(shí)間序列預(yù)測(cè)場(chǎng)景,展開類似的針對(duì)歷史數(shù)據(jù)大小的敏感性分析。

加載數(shù)據(jù)集

本例中我們使用來(lái)自澳大利亞氣象局的一份數(shù)據(jù),該數(shù)據(jù)描述了墨爾本市 10 年(1981 - 1990年)內(nèi)的每日最低氣溫,單位為攝氏度,觀測(cè)值共 3650 次。

這里我們將下載好的數(shù)據(jù)集保存在 daily-minimum-temperature.csv 文件中。

這里需要注意的是,下載文件中有一些多余的“?”字符,可以通過(guò)文本編輯器打開并刪除,否則模型無(wú)法處理。此外,文件中的腳注信息也需要?jiǎng)h除。

以下代碼展示了如何加載數(shù)據(jù)庫(kù),并生成 Pandas 庫(kù)中的 Series 對(duì)象。

# line plot of time series

from pandas import Series

from matplotlib import pyplot

# load dataset

series = Series.from_csv('daily-minimum-temperatures.csv', header=0)

# display first few rows

print(series.head(20))

# line plot of dataset

series.plot()

pyplot.show()

運(yùn)行代碼后打印得到的前 20 行數(shù)據(jù)如下所示:

ARIMA模型實(shí)例講解:時(shí)間序列預(yù)測(cè)需要多少歷史數(shù)據(jù)?

根據(jù)載入數(shù)據(jù),可以得到如下圖所示的溫度變化曲線,從圖頭中可以看到明顯的季節(jié)性變化。

ARIMA模型實(shí)例講解:時(shí)間序列預(yù)測(cè)需要多少歷史數(shù)據(jù)?

搭建 ARIMA 預(yù)測(cè)模型

在本節(jié)中,我們將基于以上數(shù)據(jù)搭建一個(gè) ARIMA 預(yù)測(cè)模型。

這里我們不會(huì)調(diào)整模型參數(shù)。而且,為了對(duì)數(shù)據(jù)平穩(wěn)化并適配 ARIMA 模型,必須先刪除數(shù)據(jù)中包含的明顯的季節(jié)性變化趨勢(shì)。

以下代碼中,我們通過(guò)減去前一年數(shù)據(jù)的辦法來(lái)獲得數(shù)據(jù)的季節(jié)性差異。需要說(shuō)明的是,這種方法是很粗糙的,因?yàn)樗](méi)有考慮閏年的因素。而且,這也意味著第一年的數(shù)據(jù)將無(wú)法用于建模,因?yàn)榈谝荒瓴](méi)有更早的數(shù)據(jù)。

# seasonal difference

differenced = series.diff(365)

# trim off the first year of empty data

differenced = series[365:]

接下來(lái),我們將數(shù)據(jù)導(dǎo)入 ARIMA(7,0,0) 模型,并打印輸出匯總信息。

# fit model

model = ARIMA(differenced, order=(7,0,0))

model_fit = model.fit(trend='nc', disp=0)

print(model_fit.summary())

打印輸出的匯總信息如下:

ARIMA模型實(shí)例講解:時(shí)間序列預(yù)測(cè)需要多少歷史數(shù)據(jù)?

歷史數(shù)據(jù)的敏感性分析

這一節(jié)我們將討論歷史數(shù)據(jù)大小對(duì)模型預(yù)測(cè)性能的影響。

上文提到,我們?cè)居?10 年的原始數(shù)據(jù),但是由于季節(jié)性差異處理,因此只有 9 年的實(shí)際數(shù)據(jù)可用。為了進(jìn)行歷史數(shù)據(jù)大小的敏感性分析,這里我們將最后一年的數(shù)據(jù)作為測(cè)試樣本,依次選擇1年、2年一直到8年的剩余數(shù)據(jù)為訓(xùn)練樣本,步進(jìn)地進(jìn)行測(cè)試,并逐日記錄測(cè)試情況。根據(jù)記錄數(shù)據(jù),我們還計(jì)算了均方根誤差(RMSE)來(lái)明確反應(yīng)模型的性能表現(xiàn)。

下面這行代碼將經(jīng)過(guò)季節(jié)性調(diào)整的數(shù)據(jù)分為訓(xùn)練數(shù)據(jù)和測(cè)試數(shù)據(jù)。

train, test = differenced[differenced.index < '1990'], differenced['1990']

需要注意的是,這里根據(jù)自己的問(wèn)題預(yù)測(cè)規(guī)模,選擇合適的間隔很重要。本例中我們未來(lái)對(duì)歷史數(shù)據(jù)量進(jìn)行敏感性分析進(jìn)行了步進(jìn)操作。另外,鑒于數(shù)據(jù)的季節(jié)性,本例中一年是數(shù)據(jù)集的最好的時(shí)間間隔。但感興趣的朋友根據(jù)問(wèn)題域的變化也可以選擇其他間隔,例如閱讀或者多年時(shí)間間隔。

以下是具體代碼:

# split

train, test = differenced[differenced.index < '1990'], differenced['1990']

years = ['1989', '1988', '1987', '1986', '1985', '1984', '1983', '1982']

for year in years:

# select data from 'year' cumulative to 1989

dataset = train[train.index >= year]

定好了數(shù)據(jù)之后,下一步是評(píng)估 ARIMA 模型。

具體的步進(jìn)評(píng)估方法是:首先選取一個(gè)時(shí)間段的數(shù)據(jù),并根據(jù)選定數(shù)據(jù)建模,訓(xùn)練,然后對(duì)下一段數(shù)據(jù)進(jìn)行預(yù)測(cè),預(yù)測(cè)后記錄數(shù)據(jù)并計(jì)算正確率。接著,將真實(shí)的觀察數(shù)據(jù)加入建模數(shù)據(jù),建立新的模型并展開訓(xùn)練,對(duì)再下一段數(shù)據(jù)進(jìn)行預(yù)測(cè),并記錄結(jié)果。依次進(jìn)行,知道數(shù)據(jù)用完。

最終,預(yù)測(cè)結(jié)果將被集合在一起,與真實(shí)觀察數(shù)據(jù)中的最后一年比較,計(jì)算出錯(cuò)誤情況。在這種情況下,RMSE 將被用作預(yù)測(cè)得分,并將與觀察結(jié)果的數(shù)量級(jí)等同。

具體代碼如下:

# walk forward over time steps in test

values = dataset.values

history = [values[i] for i in range(len(values))]

predictions = list()

test_values = test.values

for t in range(len(test_values)):

# fit model

model = ARIMA(history, order=(7,0,0))

model_fit = model.fit(trend='nc', disp=0)

# make prediction

yhat = model_fit.forecast()[0]

predictions.append(yhat)

history.append(test_values[t])

rmse = sqrt(mean_squared_error(test_values, predictions))

print('%s-%s (%d values) RMSE: %.3f' % (years[0], year, len(values), rmse))

運(yùn)行代碼后的打印輸出結(jié)果如下。需要注意的是,因?yàn)榇a在每個(gè)歷史訓(xùn)練數(shù)據(jù)間隔都創(chuàng)建了 356 個(gè) ARIMA 模型,因此可能需要一些時(shí)間。

1989-1989 (365 values) RMSE: 2.336

1989-1988 (730 values) RMSE: 2.333

1989-1987 (1095 values) RMSE: 2.326

1989-1986 (1460 values) RMSE: 2.321

1989-1985 (1825 values) RMSE: 2.320

1989-1984 (2190 values) RMSE: 2.320

1989-1983 (2555 values) RMSE: 2.318

1989-1982 (2920 values) RMSE: 2.316

從結(jié)果可以看到,隨著可用歷史數(shù)據(jù)的增多,模型的誤差總體呈下降趨勢(shì)。

但同時(shí)也應(yīng)該看到,在 4-5 年的時(shí)間段,不斷增長(zhǎng)歷史數(shù)據(jù)的效果收益率實(shí)際上是遞減的。也就是說(shuō),在歷史數(shù)據(jù)不足或模型訓(xùn)練時(shí)間無(wú)法滿足要求時(shí),也可以根據(jù)實(shí)際需求,利用相對(duì)較少的歷史數(shù)據(jù),得到一個(gè)性價(jià)比最高的結(jié)果。

以下代碼是根據(jù)測(cè)試數(shù)據(jù)繪制曲線圖的過(guò)程。

from matplotlib import pyplot

x = [365, 730, 1095, 1460, 1825, 2190, 2555, 2920]

y = [2.336, 2.333, 2.326, 2.321, 2.320, 2.320, 2.318, 2.316]

pyplot.plot(x, y)

pyplot.show()

運(yùn)行后得到的曲線如圖所示。

ARIMA模型實(shí)例講解:時(shí)間序列預(yù)測(cè)需要多少歷史數(shù)據(jù)?

從曲線圖可以更清晰地看到總體上歷史數(shù)據(jù)越多,預(yù)測(cè)結(jié)果就更精確這一變化趨勢(shì)。因?yàn)闅v史數(shù)據(jù)越多,就意味著系數(shù)的優(yōu)化越精確,符合數(shù)據(jù)變化的內(nèi)在規(guī)律的可能性就越高。

但同時(shí)也可以從上圖中看到另一個(gè)現(xiàn)象:大多數(shù)時(shí)候人們覺(jué)得歷史數(shù)據(jù)越多,模型的表現(xiàn)就越好。但實(shí)際上,連續(xù)兩年或三年的數(shù)據(jù)之間并沒(méi)有什么根本性的差別,因此靈活選擇時(shí)間跨度也至關(guān)重要。

局限性和擴(kuò)展

我們通過(guò)本次教程為大家演示了如何設(shè)計(jì)、執(zhí)行和分析基于時(shí)間序列預(yù)測(cè)的歷史數(shù)據(jù)敏感性分析。現(xiàn)針對(duì)樣例中的一些局限和可能的擴(kuò)展項(xiàng)目整理如下:

1. 模型參數(shù)未調(diào)試。本例中我們使用的 ARIMA 模型并未針對(duì)問(wèn)題域進(jìn)行過(guò)任何的參數(shù)調(diào)節(jié)。在理想狀態(tài)下,一個(gè)針對(duì)歷史數(shù)據(jù)量的敏感性分析應(yīng)該基于一個(gè)經(jīng)過(guò)參數(shù)調(diào)節(jié)的 ARIMA 模型。

2. 統(tǒng)計(jì)學(xué)意義。上文中提到的,針對(duì)不同的歷史數(shù)據(jù),模型的不同預(yù)測(cè)表現(xiàn)是否具有統(tǒng)計(jì)學(xué)意義,目前尚不清楚。但 Pairwise 統(tǒng)計(jì)學(xué)顯著性檢驗(yàn)可用于評(píng)估 RMSE 的差異是否有意義。

3. 其他模型。本例中我們使用了 ARIMA 模型來(lái)進(jìn)行歷史數(shù)據(jù)的系數(shù)擬合。感興趣的朋友可以換用其他模型進(jìn)行類似的研究,各個(gè)模型對(duì)歷史數(shù)據(jù)的敏感性和處理方式也各不相同。

4. 其他時(shí)間間隔。本例中我們以一年為時(shí)間間隔,但實(shí)際上也可以選擇其他間隔。例如幾個(gè)星期、幾個(gè)月或者幾年,要根據(jù)不同的問(wèn)題域靈活選擇。另外,如上文所述,還要考慮相鄰時(shí)間段之間數(shù)據(jù)的相似性,這也是一個(gè)很重要的影響因素。

來(lái)源:machinelearningmastery,雷鋒網(wǎng)編譯

雷峰網(wǎng)版權(quán)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知

ARIMA模型實(shí)例講解:時(shí)間序列預(yù)測(cè)需要多少歷史數(shù)據(jù)?

分享:
相關(guān)文章

編輯

歡迎交流,微信:whl123465
當(dāng)月熱門文章
最新文章
請(qǐng)?zhí)顚懮暾?qǐng)人資料
姓名
電話
郵箱
微信號(hào)
作品鏈接
個(gè)人簡(jiǎn)介
為了您的賬戶安全,請(qǐng)驗(yàn)證郵箱
您的郵箱還未驗(yàn)證,完成可獲20積分喲!
請(qǐng)驗(yàn)證您的郵箱
立即驗(yàn)證
完善賬號(hào)信息
您的賬號(hào)已經(jīng)綁定,現(xiàn)在您可以設(shè)置密碼以方便用郵箱登錄
立即設(shè)置 以后再說(shuō)