Time Series 简明教程

Time Series - Naive Methods

Introduction

朴素方法(如假设时间“t”处的预测值是时间“t-1”处变量的实际值或序列的移动平均)用于衡量统计模型和机器学习模型的执行情况,并强调其必要性。

让我们尝试在本教程中在时间序列数据的一个特性中使用这些模型。

首先,我们将查看我们数据的“温度”特性的平均值及其周围的偏差。了解最大值和最小值也很有用。我们可以在此使用 numpy 库的功能。

Showing statistics

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) 以量化此方法的性能。

Showing 1st naïve method

In [136]:

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

[137] 中:

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

[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。

Showing 2nd naive method

[139] 中:

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

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

RMSE for Naive Method 2: 14.957633272839242

在此处,您还可以尝试各种前面时间段(也称为“滞后”)的数量,您想要考虑这些数量,此处保留为 3。在该数据中,您可以看到随着滞后数的增加,误差也会增加。如果滞后保持为 1,它将成为与之前使用的质朴方法相同。

Points to Note

  1. 您可以编写一个非常简单的函数来计算均方根误差。在此处,我们已使用软件包 “sklearn” 中的均方误差函数,然后对其进行平方根计算。

  2. 在 pandas 中,df[“column_name”] 还可以写成 df.column_name,但是对于此数据集,df.T 与 df[“T”] 的工作方式不相同,因为 df.T 是用于转置数据框的函数。因此,仅使用 df[“T”] 或在使用其他语法之前考虑重命名该列。