📜  时间序列-天真的方法

📅  最后修改于: 2020-12-10 06:24:18             🧑  作者: Mango


介绍

单纯的方法(例如,假设在时间“ 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。从该数据可以看出,随着滞后次数的增加和误差的增加。如果将滞后保持为1,它将与之前使用的朴素方法相同。

注意事项

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

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