时间序列 - 朴素方法
简介
天真的方法,例如假设时间 '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 方法
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。
Showing 2nd naive 方法
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。 在此数据中可以看出,随着滞后次数的增加和错误的增加。 如果 lag 保持为 1,则它与之前使用的 naïve 方法相同。
注意事项
您可以编写一个非常简单的函数来计算均方根误差。 在这里,我们使用了"sklearn"包中的均方误差函数,然后取其平方根。
在 pandas 中,df['column_name'] 也可以写成 df.column_name,但是对于这个数据集,df.T 与 df['T'] 的工作方式不同,因为 df.T 是转置数据帧的函数。 因此,仅使用 df['T'] 或考虑在使用其他语法之前重命名此列。