評估非季節性方法的預測準確度
在資料科學中,訓練集(training set)用來發掘可能的關聯,而測試集(test set)則用來驗證這些潛在關聯的強度。當你把資料集分成這兩部分時,通常會把較多資料分配給訓練、較少資料留給測試。
可以用來建立訓練集與測試集的其中一個函式是 subset()。它會回傳時間序列的子集合,其中可選的 start 與 end 參數以索引值指定。
> # x 是數值向量或時間序列
> # 擷取第 101 到 500 筆觀測
> train <- subset(x, start = 101, end = 500, ...)
> # 擷取前 500 筆觀測
> train <- subset(x, end = 500, ...)
正如你在影片中看到的,另一個函式 accuracy() 會在你提供預測值與相對應的實際觀測值時,計算各種預測準確度統計量。若你給它的資料多於實際被預測的部分,它也能自動找出相關的觀測值。
> # f 是類別為 "forecast" 的物件
> # x 是數值向量或時間序列
> accuracy(f, x, ...)
所提供的準確度量包含均方根誤差(RMSE),也就是均方誤差(MSE)的平方根。最小化 RMSE(代表提高準確度)等同於最小化 MSE。
預先載入的時間序列 gold 包含連續 1108 天的黃金日價。這裡你將使用前 1000 天作為訓練集,並對剩下的 108 天進行預測。接著使用簡單的預測函式 naive()(你已在本章前面使用過)與 meanf()(產生等於所有觀測平均值的預測)將這些預測與實際值進行比較。你需要為兩者都指定關鍵字參數 h(你要預測的值的數量)。
本練習屬於課程
R 的時間序列預測
練習說明
- 使用
subset()為gold建立包含前 1000 筆觀測的訓練集,命名為train。 - 使用
naive()對測試集(其餘資料)進行預測,指定適當的h,並指派給naive_fc。 - 以相同的測試集使用
meanf()進行預測,指定適當的h,並指派給mean_fc。 - 使用
accuracy()函式比較兩種方法的預測準確度統計量。 - 根據上述結果,將準確度較高的預測指派給
bestforecasts。
動手互動練習
試著完成這個範例程式碼,體驗一下這個練習。
# Create the training data as train
train <- subset(___, end = ___)
# Compute naive forecasts and save to naive_fc
naive_fc <- naive(___, h = ___)
# Compute mean forecasts and save to mean_fc
mean_fc <- meanf(___, h = ___)
# Use accuracy() to compute RMSE statistics
accuracy(___, gold)
___(___, gold)
# Assign one of the two forecasts as bestforecasts
bestforecasts <- ___