Учебники

Временной ряд — наивные методы

Наивные методы, такие как предположение, что прогнозируемое значение в момент времени «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) для него, чтобы количественно оценить эффективность этого метода.

Показ 1- го наивного метода

В [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: 12,901140576492974

Давайте посмотрим на следующий наивный метод, где прогнозируемое значение в настоящее время приравнивается к среднему значению периодов времени, предшествующих ему. Мы рассчитаем RMSE для этого метода тоже.

Показ 2- го наивного метода

В [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: 14.957633272839242

Здесь вы можете поэкспериментировать с различным количеством предыдущих периодов времени, которые также называются «лагами», которые вы хотите учесть, и здесь они равны 3. По этим данным видно, что по мере увеличения количества лагов и ошибок увеличивается. Если задержка сохраняется равной 1, она становится такой же, как ранее использовавшийся наивный метод.

Указывает на заметку

Вы можете написать очень простую функцию для вычисления среднеквадратичной ошибки. Здесь мы использовали функцию среднего квадрата ошибки из пакета ‘sklearn’, а затем взяли ее квадратный корень.

В pandas df [‘column_name’] также может быть записано как df.column_name, однако для этого набора данных df.T не будет работать так же, как df [‘T’], потому что df.T — это функция для транспонирования кадра данных. Поэтому используйте только df [‘T’] или рассмотрите возможность переименования этого столбца перед использованием другого синтаксиса.