时间序列 - 朴素方法


介绍

朴素方法(例如假设时间“t”的预测值是时间“t-1”变量的实际值或序列的滚动平均值)用于衡量统计模型和机器学习模型的执行效果并强调他们的需要。

在本章中,让我们在时间序列数据的一个特征上尝试这些模型。

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

显示统计数据

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

显示第一种简单方法

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

显示第二种简单方法

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

朴素方法 2 的 RMSE:14.957633272839242

在这里,您可以尝试不同数量的先前时间段(也称为您想要考虑的“滞后”),此处保留为 3。在此数据中可以看出,随着滞后数量的增加,误差也会增加。如果 lag 保持为 1,则与之前使用的 naïve 方法相同。

注意事项

  • 您可以编写一个非常简单的函数来计算均方根误差。在这里,我们使用了“sklearn”包中的均方误差函数,然后取其平方根。

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