Scikit-learn: Реализуйте кросс-валидатор WalkForward для данных временных рядов.

Созданный на 15 июл. 2019  ·  23Комментарии  ·  Источник: scikit-learn/scikit-learn

Описание


Реализуйте переход вперед cv для данных временных рядов с разрывом между набором поездов и набором тестов.

Ожидаемые результаты


image

Расширение
image

Needs Decision New Feature

Самый полезный комментарий

Я думаю, что добавление улучшенной перекрестной проверки временных рядов входит в объем.

Все 23 Комментарий

@saninstein Почему разрыв?

@clstaudt gap - полезная функция для оценки моделей при торговле акциями. В прогнозировании цен очень распространен случай, когда модель очень хорошо работает с данными сразу после обучающего набора и со временем ухудшается. Таким образом, в некоторых случаях может быть полезно пропустить небольшое количество «хороших» данных, которые были получены после обучающего набора.

Я думаю, что наша обычная позиция в отношении функций, связанных с временными рядами, заключается в том, что это выходит за рамки sklearn (по крайней мере, на данный момент). И для меня было бы разумно вернуться к этому вопросу, когда у нас есть образцы свойств, таких как временная метка, прикрепленная к данным.

Я хотел бы получить по крайней мере еще одно мнение от @ scikit-learn / core-devs по этому поводу, но я сейчас голосую за решение "не буду исправлять".

@adrinjalali sklearn уже имеет много хороших моделей для таймсерий,

Какие?

@adrinjalali есть TimeSeriesSplit, который уже реализован в sklearn :)

TimeSeriesSplit является частным случаем предлагаемого WalkForwardCV (может быть достигнуто с помощью gap=0, expanding=True args), на самом деле TimeSeriesSplit можно легко заменить на WalkForwardCV (просто установите аргументы по умолчанию, как я упоминал ранее).

Я являюсь частью команды машинного обучения по торговле акциями, и мы успешно используем различные функции sklearn и совместимые с sklearn библиотеки. Не было подходящего разделителя резюме, и мы решили вернуть его в sklearn, но если это не так, мы будем использовать его для внутренних целей :)

TimeSeriesSplit является частным случаем предлагаемого WalkForwardCV (может быть достигнуто с помощью gap = 0, expanding = True args), на самом деле TimeSeriesSplit можно легко заменить на WalkForwardCV (просто установите аргументы по умолчанию, как я упоминал ранее).

Честно, но тогда я бы, вероятно, попробовал исправить TimeSeriesSplit обратно совместимым способом, чтобы добавить нужную вам функцию. У этого также больше шансов быть принятым сообществом.

Прогнозирование таймсерий - не единственный случай для WalkForwardCV. Это полезно, когда наблюдение за набором данных упорядочено по времени и проверка должна выполняться таким же образом.

Например, одной из наших задач является устранение проблемы с классификацией фильтрации сделок, когда мы пытаемся улучшить существующую торговую стратегию с помощью модели ml, которая «дает разрешение» на торговлю.


Справедливо, но тогда я бы, вероятно, попытался исправить TimeSeriesSplit обратно совместимым способом, чтобы добавить нужную вам функцию. У этого также больше шансов быть принятым сообществом.

Я считаю, что это было бы лучшим решением.

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

Позже я узнал о существовании TimeSeriesSplit и задумался, начал ли я изобретать велосипед. Я бы предпочел внести код проверки в существующий, созданный проект.

Поскольку существует очевидная потребность в такой оценке модели, мне все еще интересно, где она подходит.

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

Однако это выходит за рамки scikit-learn. Было бы полезно
чтобы создать пакет, который последовательно реализует все это. Это
вероятно, наберет обороты.

Было бы полезно создать пакет, который последовательно реализует все это. Вероятно, это наберет обороты.

да. Запишите меня.

Мы были бы счастливы иметь такой пакет на https://github.com/scikit-learn-contrib/

Тогда закрываю это :)

Я думаю, что добавление улучшенной перекрестной проверки временных рядов входит в объем.

также см. # 13666 # 13204 # 6322 # 13761

Что касается области видимости, я согласен с сценарии использования. По сути, мы обычно предполагаем, что в оценочных программах scikit-learn (т.е. пакете sklearn) модель должна быть более или менее инвариантной к порядку выборки и порядку функций. Это исключает оценщики временных рядов. Однако у нас нет этого ограничения в разделителях перекрестной проверки, где мы давно рассматривали порядок выборки, на что следует обратить внимание; В конечном счете, основные предположения, касающиеся машинного обучения, лежат в основе перекрестной проверки.

Но, как отмечает @amueller , на самом деле разговор следует продолжить в существующих запросах на вытягивание, переведя их в приемлемое состояние.

Конечно, но я с осторожностью отношусь к случаям, когда фактическая временная метка данных должна иметь значение в разделении (что IMO должно), а не просто количество строк. Я не думаю, что мы собираемся обрабатывать временные метки в ближайшее время, не так ли?

За 5 лет, прошедших с тех пор, как я впервые предложил это в https://github.com/scikit-learn/scikit-learn/issues/3202 , этот вопрос возникал как минимум 50 раз в беседах, обучающих или применяющих. @saninstein , вы принимали решение о включении сюда или -contrib? Я хотел бы помочь, если вам нужна помощь, чтобы решить эту проблему (где-то).

Я также хотел бы внести свой вклад. Написал в другом выпуске об этом и хотел бы расширить TimeSeriesSplit или сотрудничать в создании другого пакета для этого. Я считаю, что это связано с разделением в области CV и должно быть в sklearn.
Если честно, я совершенно не понимаю, куда идти и что делать сейчас, и я хочу внести свой вклад. Я внимательно отношусь к своему времени, и я хотел бы использовать его правильно для сообщества.

@mjbommar Я думаю, как я и @jnothman выше сказали, мы довольно открыты для продвижения вперед, и есть некоторые интересные PR, в частности # 13761 и # 13204, и отзывы о двух API были бы очень признательны.

Я думаю, что # 13204 выглядит наиболее зрелым, так что, может быть, уйти от него имеет наибольший смысл? Я не уверен, что @kykosic все еще работает над этим, учитывая задержку с нашим ответом?

Хм, хотя # 13204 не реализует WalkForward ... Хотим ли мы сначала объединить # 13204, а потом реализовать WalkForward?
Это должен быть отдельный объект CV?

@amueller Я забыл о # 13204, пока не появился этот пост. Я отвечу на отзывы о нем в течение следующей недели и посмотрю, подходит ли он еще.

@kykosic круто , спасибо!

Интересно, почему этот вопрос был закрыт из-за завершения # 13204. Я думал, что # 13204 был предпосылкой для этого.

13204 добавил gap к TimeSeriesSplit который был функцией, запрошенной этой проблемой.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги