Как разделить набор данных для прогнозирования временных рядов?


22

У меня есть исторические данные о продажах из пекарни (ежедневно, более 3 лет). Теперь я хочу построить модель для прогнозирования будущих продаж (используя такие функции, как день недели, переменные погоды и т. Д.).

Как я должен разделить набор данных для подбора и оценки моделей?

  1. Должен ли он быть хронологическим составом / валидацией / тестовым разделением?
  2. Буду ли я тогда выполнять настройку гиперпараметра с помощью набора поездов и проверки?
  3. Является ли (вложенная) перекрестная проверка плохой стратегией для проблемы временных рядов?


РЕДАКТИРОВАТЬ

Вот некоторые ссылки, с которыми я столкнулся после перехода по URL, предложенному @ ene100:

  • Роб Хиндман, описывающий «происхождение скользящего прогнозирования» в теории и на практике (с помощью R-кода)
  • другие термины для начала скользящего прогнозирования - это «оптимизация шага вперед» ( здесь или здесь ), «скользящий горизонт» или «движущийся источник»
  • Похоже, что эти методы не будут интегрированы в scikit-learn в ближайшем будущем, потому что «потребность в этих методах и их неясность неясны» (указано здесь ).

И это еще одно предложение для перекрестной проверки временных рядов.

Ответы:


8

Эта ссылка из блога Роба Хиндмана содержит некоторую информацию, которая может оказаться полезной: http://robjhyndman.com/hyndsight/crossvalidation/

По моему опыту, разделение данных на хронологические наборы (год 1, год 2 и т. Д.) И проверка стабильности параметров во времени очень полезны для создания чего-то надежного. Кроме того, если ваши данные являются сезонными или имеют другой очевидный способ разделения на группы (например, географические регионы), то проверка стабильности параметров в этих подгруппах также может помочь определить, насколько надежной будет модель и имеет ли смысл ее подгонять отдельные модели для отдельных категорий данных.

Я думаю, что статистические тесты могут быть полезны, но конечный результат также должен пройти «тест на запах».


3

1) Технически говоря, вам не нужно проверять выборку, если вы используете AIC и аналогичные критерии, потому что они помогают избежать переоснащения.

3) Я не понимаю, как вы можете сделать стандартное резюме, потому что оно подразумевает обучение модели временных рядов с некоторыми пропущенными значениями. Вместо этого попробуйте использовать скользящее окно для обучения и предсказать ответ в одной или нескольких точках, следующих за окном.


3
AIC во временных рядах часто основывается на ошибке прогноза на один период вперед. Это не говорит о динамическом прогнозировании на n периодов. Следовательно, этого абсолютно недостаточно.
Аксакал

Не могли бы вы предоставить ссылку?
Джеймс

1

Я часто подхожу к проблемам с байесовской точки зрения. В этом случае, я бы рассмотрел использование оверимпутации в качестве стратегии. Это означает настройку вероятности для ваших данных, но опустите некоторые из ваших результатов. Считайте эти значения пропущенными и смоделируйте эти пропущенные результаты, используя соответствующие им ковариаты. Затем поверните, через который данные опущены. Вы можете сделать это, например, в 10-кратной процедуре CV.

При реализации внутри программы выборки это означает, что на каждом шаге вы рисуете значение кандидата из вашего пропущенного значения данных (вместе с вашими параметрами) и оцениваете его вероятность в сравнении с предложенной вами моделью. После достижения стационарности у вас есть контр-фактические выборочные значения с учетом вашей модели, которые вы можете использовать для оценки ошибки прогнозирования: эти выборки отвечают на вопрос "как бы выглядела моя модель в отсутствие этих значений?" Обратите внимание, что эти прогнозы также унаследуют неопределенность от неопределенности, присутствующей в оценках коэффициентов, поэтому, когда вы соберете все свои прогнозируемые значения, например, 1 марта 2010 г., вы получите распределение прогнозов на эту дату.

Тот факт, что эти значения являются выборочными, означает, что вы все равно можете использовать термины ошибок, которые зависят от наличия полного ряда данных (например, скользящего среднего), поскольку у вас есть выборочное значение результата, доступное на каждом шаге.


1

В вашем случае у вас не так много вариантов. Кажется, у вас есть только одна пекарня. Таким образом, для запуска теста вне выборки единственным вариантом является временное разделение, то есть обучающая выборка будет с начала до некоторого недавнего момента времени, а удержание будет с этой точки до сегодняшнего дня.

YTзнак равное(T)+εTе(T)Ys<T


Звучит многообещающе. Что такое индекс "s" в y_s <= t?
tobip

TYss<T

Я предполагаю, что мои продажи пекарни скорее зависят от внешних факторов. Я не думаю, что это строго динамическая модель временных рядов, как, например, цены на акции. По моим данным, средняя средняя ошибка с обычным 5-кратным CV только немного больше, чем у 5-кратного CV временных рядов, который сохраняет хронологический порядок сгибов, как описано здесь (например, 30,7 против 33,8 для ExtraTreesRegressor) , Не уверен, что это правильный способ эмпирического тестирования динамической модели?
tobip

Что-то вроде ARIMA было бы динамичной моделью. Продажи, как правило, постоянны, то есть сегодняшние продажи похожи на вчерашние.
Аксакал

0

Отказ от ответственности: метод, описанный здесь, не основан на тщательном чтении литературы. Это моя лучшая попытка импровизировать K-кратный метод CV для многомерного анализа временных рядов с относительно короткой длиной входного окна (при условии отсутствия / низкой зависимости в течение более длинных промежутков времени), где была проблема с неоднородным присутствием источников данных в течение период сбора данных.

Сначала серия наблюдений преобразуется в серию окон истории наблюдений длины window_length и с шагом 1 между окнами (без шага). Тогда принцип состоит в том, чтобы разбить набор данных окна на «осколки» во много раз длиннее, чем window_length (но намного больше, чем количество экземпляров модели), и раздать осколки (например, игральные карты) в качестве данных проверки для разделения экземпляров модели. Чтобы модели были более четко разделены, окно карантина window_length в начале каждого сегмента не используется во всех тренировках.

Модели обучаются на всех осколках, кроме их собственных, и проверка выполняется на их собственных осколках. Валидация коллекции / ансамбля моделей выполняется путем суммирования ошибки валидации для всех шардов, где каждый шард обрабатывается соответствующей подмоделью. Тестирование на невидимых данных может быть выполнено с использованием среднего (или другой подходящей комбинации) выходов всех обученных моделей.

Этот метод предназначен для уменьшения зависимости от системы (и источников данных), которая остается неизменной на протяжении всего периода сбора данных. Также предполагается, что каждая грубая часть данных оказывает одинаковое влияние на модель. Обратите внимание, что для того, чтобы не допустить, чтобы окна карантина наносили вред обучению, важно, чтобы длина сегмента не слишком хорошо совпадала с периодами, которые (как ожидается) появятся в данных, такими как (обычно) ежедневные, еженедельные и годовые циклы.

Ансамблевая модель может плохо обрабатывать совершенно новые данные. (Пока не знаю.)

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.