Запаздывающие признаки и авторегрессионные модели

Машинное обучение для данных временных рядов на Python

Chris Holdgraf

Fellow, Berkeley Institute for Data Science

Прошлое полезно

  • Данные временных рядов почти всегда содержат информацию, общую для разных моментов времени
  • Прошлые значения помогают предсказывать будущее
  • Лучшими признаками для прогноза временного ряда зачастую служат его собственные предыдущие значения
Машинное обучение для данных временных рядов на Python

Гладкость и автокорреляция

  • Важный вопрос о временном ряде: насколько гладки данные.
  • Иначе говоря, насколько текущий момент коррелирует с соседними (это называется автокорреляцией).
  • Степень автокорреляции влияет на качество моделей.
Машинное обучение для данных временных рядов на Python

Создание запаздывающих признаков

  • Рассмотрим, как построить модель, использующую прошлые значения в качестве входных признаков.
  • Это позволяет оценить автокорреляцию сигнала (и не только)
Машинное обучение для данных временных рядов на Python

Сдвиг данных во времени с помощью Pandas

print(df)
         df 
    0   0.0
    1   1.0 
    2   2.0 
    3   3.0 
    4   4.0 
# Shift a DataFrame/Series by 3 index values towards the past
print(df.shift(3))
         df
    0   NaN
    1   NaN
    2   NaN
    3   0.0
    4   1.0
Машинное обучение для данных временных рядов на Python

Создание DataFrame с временными сдвигами

# data is a pandas Series containing time series data
data = pd.Series(...)

# Shifts
shifts = [0, 1, 2, 3, 4, 5, 6, 7]

# Create a dictionary of time-shifted data
many_shifts = {'lag_{}'.format(ii): data.shift(ii) for ii in shifts}

# Convert them into a dataframe
many_shifts = pd.DataFrame(many_shifts)
Машинное обучение для данных временных рядов на Python

Обучение модели на запаздывающих признаках

# Fit the model using these input features 
model = Ridge() 
model.fit(many_shifts, data)
Машинное обучение для данных временных рядов на Python

Интерпретация коэффициентов авторегрессионной модели

# Visualize the fit model coefficients
fig, ax = plt.subplots()
ax.bar(many_shifts.columns, model.coef_)
ax.set(xlabel='Coefficient name', ylabel='Coefficient value')

# Set formatting so it looks nice
plt.setp(ax.get_xticklabels(), rotation=45, horizontalalignment='right')
Машинное обучение для данных временных рядов на Python

Коэффициенты для зашумлённого сигнала

Машинное обучение для данных временных рядов на Python

Коэффициенты для гладкого сигнала

Машинное обучение для данных временных рядов на Python

Давайте потренируемся!

Машинное обучение для данных временных рядов на Python

Preparing Video For Download...