時間序列 - 樸素方法



簡介

樸素方法,例如假設 t 時刻的預測值為 t-1 時刻變數的實際值,或時間序列的滾動平均值,用於衡量統計模型和機器學習模型的效能,並強調其必要性。

在本節中,讓我們嘗試將這些模型應用於時間序列資料的一個特徵。

首先,我們將檢視資料中“溫度”特徵的平均值及其偏差。檢視最高和最低溫度值也很有用。我們在這裡可以使用 numpy 庫的功能。

顯示統計資料

In [135]

import numpy
print (
   'Mean: ',numpy.mean(df['T']), '; 
   Standard Deviation: ',numpy.std(df['T']),'; 
   \nMaximum Temperature: ',max(df['T']),'; 
   Minimum Temperature: ',min(df['T'])
)

我們獲得了跨等間距時間線的全部 9357 個觀測值的統計資料,這些資料有助於我們理解資料。

現在我們將嘗試第一個樸素方法,將當前時間的預測值設定為前一時間段的實際值,並計算其均方根誤差 (RMSE) 以量化該方法的效能。

顯示第一個樸素方法

In [136]

df['T']
df['T_t-1'] = df['T'].shift(1)

In [137]

df_naive = df[['T','T_t-1']][1:]

In [138]

from sklearn import metrics
from math import sqrt

true = df_naive['T']
prediction = df_naive['T_t-1']
error = sqrt(metrics.mean_squared_error(true,prediction))
print ('RMSE for Naive Method 1: ', error)

樸素方法 1 的 RMSE:12.901140576492974

讓我們看看下一個樸素方法,其中當前時間的預測值等於其前面時間段的平均值。我們也將計算此方法的 RMSE。

顯示第二個樸素方法

In [139]

df['T_rm'] = df['T'].rolling(3).mean().shift(1)
df_naive = df[['T','T_rm']].dropna()

In [140]

true = df_naive['T']
prediction = df_naive['T_rm']
error = sqrt(metrics.mean_squared_error(true,prediction))
print ('RMSE for Naive Method 2: ', error)

樸素方法 2 的 RMSE:14.957633272839242

在這裡,您可以嘗試使用各種數量的前一時間段,也稱為“滯後”(此處設定為 3)。在這個資料集中可以看出,隨著滯後數量的增加,誤差也會增加。如果滯後設定為 1,則它與前面使用的樸素方法相同。

注意事項

  • 您可以編寫一個非常簡單的函式來計算均方根誤差。在這裡,我們使用了 “sklearn” 包中的均方誤差函式,然後取其平方根。

  • 在 pandas 中,df[‘column_name’] 也可以寫成 df.column_name,但是對於這個資料集,df.T 的作用與 df[‘T’] 不同,因為 df.T 是用於轉置資料框的函式。因此,只使用 df[‘T’] 或考慮在使用其他語法之前重新命名此列。

廣告
© . All rights reserved.