Вопрос: Я хочу быть уверенным в чем-то, является ли использование перекрестной проверки в k-кратном порядке с временными рядами простым или нужно обратить особое внимание перед использованием?
Предыстория: я моделирую временной ряд 6 лет (с цепью полумарков) с выборкой данных каждые 5 минут. Чтобы сравнить несколько моделей, я использую 6-кратную перекрестную проверку, разделяя данные за 6 лет, поэтому мои тренировочные наборы (для расчета параметров) имеют длину 5 лет, а тестовые наборы имеют длину 1 год. Я не принимаю во внимание порядок времени, поэтому мои различные наборы:
- сгиб 1: тренировка [1 2 3 4 5], тест [6]
- сгиб 2: тренировка [1 2 3 4 6], тест [5]
- сгиб 3: тренировка [1 2 3 5 6], тест [4]
- сгиб 4: тренировка [1 2 4 5 6], тест [3]
- сгиб 5: тренировка [1 3 4 5 6], тест [2]
- сгиб 6: тренировка [2 3 4 5 6], тест [1].
Я выдвигаю гипотезу о том, что каждый год независимы друг от друга. Как я могу это проверить? Есть ли какая-либо ссылка, показывающая применимость перекрестной проверки в k-кратном порядке с временными рядами.
источник
Ответы:
Временные ряды (или другие внутренне упорядоченные данные) могут быть проблематичными для перекрестной проверки. Если какой-то шаблон появляется в 3-м году и остается в течение 4-6 лет, то ваша модель может его использовать, даже если он не был частью 1 и 2 лет.
Подход, который иногда более принципиален для временных рядов, - это прямая цепочка, где ваша процедура будет выглядеть примерно так:
Это более точно моделирует ситуацию, которую вы увидите во время прогнозирования, где вы будете моделировать прошлые данные и прогнозировать прогнозные данные. Это также даст вам ощущение зависимости вашего моделирования от размера данных.
источник
Метод, который я использую для перекрестной проверки моей модели временных рядов, является перекрестной проверкой на скользящей основе. Начните с небольшого подмножества данных для целей обучения, сделайте прогноз для последующих точек данных и затем проверьте точность для прогнозируемых точек данных. Те же самые прогнозируемые точки данных затем включаются как часть следующего набора обучающих данных, и последующие точки данных прогнозируются.
Чтобы сделать вещи интуитивно понятными, вот изображение для того же:
Эквивалентный код R будет:
источник
«Канонический» способ перекрестной проверки временных рядов (по крайней мере, как описано в @Rob Hyndman) - это «пролистать» набор данных.
то есть:
По сути, ваш тренировочный набор не должен содержать информацию, которая появляется после тестового набора.
источник
В большинстве случаев нет ничего плохого в использовании блоков «будущих» данных для перекрестной проверки временных рядов. В большинстве случаев я ссылаюсь на модели для стационарных данных, которые мы обычно используем. Например, когда вы подгоняете с к ряду, вы берете разностей ряда и подгоняете модель для стационарных данных к остаткам.d > 0 dARIMA(p,d,q) d>0 d
Чтобы перекрестная проверка работала в качестве инструмента выбора модели, вам необходима приблизительная независимость между данными обучения и испытаний. Проблема с данными временных рядов заключается в том, что смежные точки данных часто сильно зависят, поэтому стандартная перекрестная проверка не удастся. Для этого необходимо оставить зазор между тестовым образцом и тренировочными образцами по обе стороны от тестового образца . Причина, по которой вам также необходимо пропустить пробел перед тестовым образцом, заключается в том, что зависимость является симметричной, когда вы движетесь вперед или назад во времени (подумайте о корреляции).
Этот подход называется перекрестной проверкой (оставьте out, удалите наблюдений с обеих сторон тестового образца) и описан в этой статье. В вашем примере это будет выглядеть так:v hhv v h
Где h указывает, что h наблюдений обучающей выборки удаляются на этой стороне.
источник
Как прокомментировал @thebigdog, «Об использовании перекрестной проверки для оценки предиктора временных рядов» Bergmeir et al. обсуждает перекрестную проверку в контексте стационарных временных рядов и определяет прямую цепочку (предложенную другими ответчиками) как бесполезную. Обратите внимание, что прямая цепочка называется оценкой последнего блока в этой статье:
« Оценка моделей прогнозирования временных рядов: эмпирическое исследование методов оценки эффективности », Cerqueira et al. согласен с этой оценкой. Однако для нестационарных временных рядов они рекомендуют вместо этого использовать вариант Hold-Out, называемый Rep-Holdout. В Rep-Holdout точка
a
выбирается во временном ряду,Y
чтобы отметить начало данных тестирования. Точкаa
определяется как находящаяся в окне. Это показано на рисунке ниже:Эта вышеупомянутая статья является длинной и исчерпывающей проверкой практически всех других методов, упомянутых в ответах на этот вопрос, с помощью общедоступного кода . Это включает в себя заявление @Matthias Schmidtblaicher о включении пробелов до и после данных тестирования. Кроме того, я только суммировал статью. Фактическое заключение статьи включает в себя дерево решений для оценки моделей временных рядов!
источник