Вопрос или проблема
Могут ли лаговые признаки быть применены к тестовым данным без меток? Я об этом задумывался. Я пытался построить модель случайного леса, используя набор данных: обучающие данные (с меткой Y) и тестовые данные (без метки Y). Набор данных содержит столбец datetime. Метка Y является числовой и содержит значение дохода для каждой даты, района, типа.
Я пытаюсь выполнить инженеринг признаков, добавляя лаговые признаки, используя PyTimeTK, следующим образом:
import pandas as pd
import numpy as np
import pytimetk as tk
df_dates = df.augment_timeseries_signature(date_column = 'date')
df_test_dates = df_test.augment_timeseries_signature(date_column = 'date')
df_with_lags = df_dates.augment_lags(
date_column = 'date',
value_column = 'Y',
lags = [5,6,7,8,9]
)
lag_columns = [col for col in df_with_lags.columns if 'lag' in col]
Я завершил обучение модели Random Forest Regressor. Тем не менее, сейчас я столкнулся с проблемой применения лаговых признаков к тестовым данным, так как у них нет соответствующих меток ‘Y’. Кроме того, попытка предсказать тестовые данные без включения лаговых признаков приводит к ошибке из-за несоответствия в размерностях признаков.
FEATURES = [
'district'
, 'type'
, 'date_year'
, 'date_month'
, 'date_yweek'
, 'date_mweek'
, 'Y_lag_5'
, 'Y_lag_6'
, 'Y_lag_7'
, 'Y_lag_8'
]
TARGET = 'Y'
X_train = train[FEATURES]
y_train = train[TARGET]
from sklearn.ensemble import RandomForestRegressor
rf = RandomForestRegressor(random_state=123)
rf.fit(X_train, y_train)
df_test['Y'] = rf.predict(X_test)
Если лаговые значения недоступны для тестовых данных, вы можете использовать предсказания модели итеративно, чтобы создать оценочные лаговые значения и использовать их в качестве входных данных и получить результаты. Просто убедитесь, что вы понимаете, что, используя этот подход, вы не генерируете предсказания модели таким же образом, как это делали при обучении, и оценка ошибки может значительно увеличиться, потому что вы используете входные данные, которые уже содержат определенную ошибку.
При обучении: $\hat{y}_t = f(y_{t-1}, y_{t-2}, …, y_{t-k})$
- Получите ошибку на 1 шаг вперед.
При тестировании: $\hat{y}_t = f(\hat{y}_{t-1}, \hat{y}_{t-2}, …, \hat{y}_{t-k})$
- Получите ошибку на k шагов вперед, так как вы просто используете информацию до последней точки обучающих данных.
Ответ или решение
Применение временных лагов к тестовым данным без меток: Решение проблемы
Когда речь идет о построении моделей машинного обучения для временных рядов, использование временных лагов, то есть значений целевой переменной на предыдущих временных отрезках, является распространенной техникой. В вашей ситуации, когда у вас есть обучающая выборка с метками, но тестовая выборка без них, возникает логичный вопрос: можно ли применить функции лагов к тестовым данным, используя только доступную информацию?
1. Что такое лаг-функции?
Лаг-функции позволяют модели учитывать зависимости между текущими значениями целевой переменной и ее прошлыми значениями. В вашем случае, вы строите модель регрессии, используя значения «Y» (выручка) в контексте дат, районов и типов.
2. Сложности с тестовой выборкой
Основная проблема заключается в том, что для создания лаг-функций требуется наличие целевой переменной «Y». Без меток в тестовых данных невозможно создать лаг-знаки, так как они зависят от предшествующих значений «Y».
Ваш код, использующий библиотеку PyTimeTK, демонстрирует этот подход:
df_with_lags = df_dates.augment_lags(
date_column='date',
value_column='Y',
lags=[5, 6, 7, 8, 9]
)
Этот код работает, когда у вас есть доступ к полному набору данных, включая метки, но не будет работать на тестовой выборке с отсутствующими метками.
3. Возможные решения проблемы
Есть несколько способов, чтобы обойти эту проблему:
А. Использование предсказаний для создания лагов:
-
Итеративное предсказание: Вы можете использовать модель для создания предсказаний для тестовых данных, начиная с первого значения, и затем использовать эти предсказания для формирования лаг-функций. Например, вы можете предсказать Y для первой записи тестового набора, затем использовать это предсказание в качестве Y_lag_1 для следующей записи и так далее.
Определите норму, по которой вы будете предсказывать:
- На этапе тестирования: (\hat{y}t = f(\hat{y}{t-1}, \hat{y}{t-2}, …, \hat{y}{t-k}))
-
Учет ошибок: Обратите внимание, что данный подход несет в себе риск увеличения ошибки, поскольку каждое предсказание зависит от предыдущего, и ошибка может накапливаться.
Б. Использование более простых методов:
Если итеративное предсказание представляется слишком сложным, рассмотрите использование более простых подходов, таких как:
-
Модели без лагов: Если лаг-функции не могут быть созданы, попробуйте проводить анализ без них. Однако, это может потребовать пересмотра подхода к предсказаниям или использованием других фичей, основанных на вашей временной метке.
-
Смена модели: Используйте модели, которые могут работать без лаг-функций, такие как LSTM (долгосрочная память с краткосрочной памятью), которые могут учитывать временные зависимости, не полагаясь строго на лагированные значения.
4. Заключение
Применение лаг-функций к тестовым данным без меток — это задача с определенными сложностями, однако, с использованием моделирования на основе предыдущих предсказаний возможно обойти эту проблему. Старайтесь понимать риски, связанные с этими подходами, и потратьте время на анализ ошибок, чтобы обеспечить точность ваших предсказаний на тестовых данных.
С учетом вышеизложенного, вы сможете стратегически обрабатывать тестовые наборы данных, сохраняя качество и целостность ваших моделей.