Как стать автором
Обновить

Открытый курс машинного обучения. Тема 9. Анализ временных рядов с помощью Python

Время на прочтение 27 мин
Количество просмотров 339K
Всего голосов 55: ↑53 и ↓2 +51
Комментарии 19

Комментарии 19

Ва-ха-ха, ва-ха-ха, вАхАхА! Считаю необходимым добавить часть, где описывается как на глазок подбирать временные ряды чтобы по ним получались вот такие статьи, где работают все описанные методы.
Дедлайн по домашнему заданию – 23.59 (UTC +3) 15 мая.

Объясните пожалуйста, что это значит? После этого курса какие-то сертификаты выдаются? Я пропустил первые темы. Перезапуск будет в будущем? Благодарю!

Это открытый курс машинного обучения, с домашками, соревнованиями и рейтингом. Всю информацию можно найти в блоге ODS, например, в первой статье серии.

Я прочитал, спасибо. Неделя на задания — это конечно маловато :) А перезапуск курса будет?

Пока той же командой (мной и коллегами) не планируется. Если найдутся новые энтузиасты – подумаем.

Участникам курса


Уточнения по 8 домашке:


  • n_iter – это число полных проходов по всей выборке (как одноименный аргумент в SGD-алгоритмах sklearn и как аргумент passes в VW), не надо запускать тысячи проходов
  • при первом обучении SGDRegressor 10 проходов по выборке из 17500 объектов, то есть 175 тыс. обновлений весов (итераций стохастического градиентного спуска)
  • в реализации SGD-алгоритмов вектор весов и ошибки записывайте при каждом обновлении весов. для вычисления ошибок пользуйтесь встроенной mean_squared_error
  • не забывайте про масштабирование данных, но в части 1.3. с фильмами отдельно говорится, что оно не нужно
  • во втором вопросе много вопросов вызвала “формула Воронцова“, которая якобы не совпадает ни с одним из вариантов. смотрите внимательней. sigma(-z) = 1 — sigma(z)
  • в вопросе 1.3. еще раз сравните длины вектора весов и признаков
  • во второй части если у вас получилось не 4389054 строк, а на 4 больше – это никак не повлияет на долю правильных ответов на такой большой выборке

Участникам курса


Дедлайн по 8 домашнему заданию переносится на 2 мая 23.59 UTC+3.

Участникам курса


Новая версия соревнования по Хабру.


Отличия:


  • больше данных
  • нет ответов в самих данных
  • тестовая выборка поделена на 2, будет честный приватный рейтинг

В остальном все то же самое, только данные по каждой статье лежат в отдельном JSON-файле, нужно самому выборку подготовить. Признаки, которые вы успели построить, должны работать – задача в точности та же.


Причины перезапуска:


  • устранение недостатков прошлого контеста, где можно было переобучиться под тестовую выборку
  • воронка: в новом соревновании не будет мимокрокодилов

Правила соревнования остаются такими же: дополнительные данные нельзя использовать, выборку размечать вручную не советуются – все решения, побившие все бенчмарки, будут проверяться. Новые бенчамрки могут появляться вплоть до 15 мая.

Участникам курса


По соревнованиям Kaggle Inclass (идентификация взломщика и прогнозирование популярности статьи на Хабре):
– открыты до 22 мая 23.59
– макс. число посылок в день – 5 шт, соревнования индивидуальные (т.е. команды макс. 1 чел, объединения команд запрещены)
– ближе к концу от Kaggle придет письмо с просьбой выбрать 2 посылки, которые вы у себя считаете лучшими
– если вы претендуете на баллы, то перед окончанием соревнования надо переименовать свою команду (из 1 человека) в полном соответствии с ФИО в рейтинге курса (для соревнования по Хабру это можно сделать уже сейчас)
– баллы за соревнования, которые пойдут в рейтинг, считаются по формуле 40*(1 — (p-1)/N), где p – место участника в приватном LB (LeaderBoard), N – число участников, побивших все бенчмарки в приватном LB, приславших в срок свои решения и не нарушивших правила соревнования
– вплоть до 15 мая могут появиться более сильные бенчмарки, а баллы начисляются только тем, кто побьет все бенчмарки на приватном LB (AUC строго >, MSE строго < чем у всех бенчмарков)
– естественно, если вы переобучились и на приватном LB сильно опустились, не надо претензий – баллы считаются по приватному LB
– после окончания в срок до 23:59 23 мая те, кто побили все бенчмарки по итогам соревнования, должны прислать свои воспроизводимые решения (предпочтительный вариант – ipynb с комментариями). Ссылки для загрузки решений – Элис и Хабр
– итоги соревнований и финальный рейтинг курса будут опубликованы до 25 мая
– Топ-100 по финальному рейтингу будут приглашены на митап 27 мая в московском офисе Mail.ru Group

Какие материалы вы считаете полезными для анализа финансовых временных рядов?
Что если у временного ряда несколько сезонных периодов, скажем 7 дней и год, как задать это в модель SARIMAX (теоретически и в питоне)?
Из курса про АРИМУ от МФТИ:
Решить эту проблему можно в рамках регрессионного подхода. Для модели ARIMA можно оставить самый
короткий из имеющихся сезонных периодов. Все остальные периоды будут учитываться с помощью регрессии
на специально построенные признаки. В качестве признаков будут выступать фурье-гармоники с периодами,
пропорциональными длине сезонных периодов (например, 365.25, 365.25/2, 365.25/3 и т.д.). Какое-то количе-
ство таких гармоник необходимо подставить как регрессионную компоненту в регрессионную ARIMA.
cv = xgb.cv(params, dtrain, metrics = ('rmse'), verbose_eval=False, nfold=10, show_stdv=False, num_boost_round=trees)

А почему тут для xgboost вы используете случайное разбиение на фолды? Хотя в начале говорили, что для временных рядов лучше делать CV на скользящем окне.
Понядобилось замоделировать TS и наткнулся на ваш пост.
А кажется что у вас тут лик:
data["lag_{}".format(i)] = data.y.shift(i)

Значит, что на каждом отсчете, считая со второго, в тестовом сете вы используете данные которых у вас не должно быть на этапе предсказания.

Ну то есть, допустим, вам надо предсказать на день вперед, у вас есть данные с часовой гранулярностью доступные до полуночи включительно. Вы предсказываете на 1 час ночи и пытаетесь сделать предсказание для 2 часов. По идее тут вы должны предсказывать базируясь на предсказанных данных в час ночи. А у вас вместо этого — действительные данные, которые утекли через shift(1)

Действительно, если бы я предсказывал для 2 часов ночи — пришлось бы брать утекшие данные для 1 часа (или подставить предсказанные для него значения), но здесь всё зависит от того, для чего нужен прогноз и на какой период.


Если нужно, например, ежечасно отслеживать аномалии и каждый час можно добавлять в модель новые данные — то в долгосрочном прогнозе нет необходимости. Для прогноза на бОльший период придётся сдвигать начальный лаг модели вглубь, например, если мы хотим уметь прогнозировать на 12 часов вперёд, то и последнее доступное значение для модели должно быть смещено во времени на тот же период, чтобы избежать лика.

Новый запуск курса – 5 февраля 2018 г. Регистрация не требуется, но чтобы мы о вас знали, заполните форму. Главные новости будут в группе ВКонтакте, а жизнь во время курса будет теплиться в Slack OpenDataScience (вступить) в канале #mlcourse_open.

Новый запуск – 1 октября 2018 г., на английском. Подробности – тут.

Теперь курс можно проходить и самостоятельно – появились демо-версии заданий с решениями. Они описываются в конце каждой статьи, но есть и общий cписок. Решения доступны после отправки соотв. веб-формы.

Почему при расчете SARIMA мы делаем вывод о том, что получили стационарный ряд, вычислив Users_box_season_diff, но модель обучаем на Users_box?
Зарегистрируйтесь на Хабре , чтобы оставить комментарий