Можно ли применять лаг-функции к тестовым данным без меток?

Вопрос или проблема

Могут ли лаговые признаки быть применены к тестовым данным без меток? Я об этом задумывался. Я пытался построить модель случайного леса, используя набор данных: обучающие данные (с меткой 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. Возможные решения проблемы

Есть несколько способов, чтобы обойти эту проблему:

А. Использование предсказаний для создания лагов:

  1. Итеративное предсказание: Вы можете использовать модель для создания предсказаний для тестовых данных, начиная с первого значения, и затем использовать эти предсказания для формирования лаг-функций. Например, вы можете предсказать Y для первой записи тестового набора, затем использовать это предсказание в качестве Y_lag_1 для следующей записи и так далее.

    Определите норму, по которой вы будете предсказывать:

    • На этапе тестирования: (\hat{y}t = f(\hat{y}{t-1}, \hat{y}{t-2}, …, \hat{y}{t-k}))
  2. Учет ошибок: Обратите внимание, что данный подход несет в себе риск увеличения ошибки, поскольку каждое предсказание зависит от предыдущего, и ошибка может накапливаться.

Б. Использование более простых методов:

Если итеративное предсказание представляется слишком сложным, рассмотрите использование более простых подходов, таких как:

  • Модели без лагов: Если лаг-функции не могут быть созданы, попробуйте проводить анализ без них. Однако, это может потребовать пересмотра подхода к предсказаниям или использованием других фичей, основанных на вашей временной метке.

  • Смена модели: Используйте модели, которые могут работать без лаг-функций, такие как LSTM (долгосрочная память с краткосрочной памятью), которые могут учитывать временные зависимости, не полагаясь строго на лагированные значения.

4. Заключение

Применение лаг-функций к тестовым данным без меток — это задача с определенными сложностями, однако, с использованием моделирования на основе предыдущих предсказаний возможно обойти эту проблему. Старайтесь понимать риски, связанные с этими подходами, и потратьте время на анализ ошибок, чтобы обеспечить точность ваших предсказаний на тестовых данных.

С учетом вышеизложенного, вы сможете стратегически обрабатывать тестовые наборы данных, сохраняя качество и целостность ваших моделей.

Оцените материал
Добавить комментарий

Капча загружается...