классификация временных рядов машинное обучение
Sktime: унифицированная библиотека Python для машинного обучения и работы с временными рядами
Всем привет. В преддверии старта базового и продвинутого курсов «Математика для Data Science», мы подготовили перевод еще одного интересного материала.
Решение задач из области data science на Python – это непросто
Почему? Существующие инструменты плохо подходят для решения задач, связанных с временными рядами и эти инструменты сложно интегрировать друг с другом. Методы пакета scikit-learn предполагают, что данные структурированы в табличном формате и каждый столбец состоит из независимых и одинаково распределенных случайных величин – предположений, которые не имеют ничего общего с данными временных рядов. Пакеты, в которых есть модули для машинного обучения и работы с временными рядами, такие как statsmodels, не особо хорошо дружат между собой. Более того, множество важных операций с временными рядами, такие как разбиение данных на обучающий и тестовый наборы по временным промежуткам, в существующих пакетах недоступны.
Для решения подобных задач и была создана sktime.
Логотип библиотеки sktime на GitHub
Sktime – это инструментарий для машинного обучения на Python с открытым исходным кодом, разработанный специально для работы с временными рядами. Этот проект разрабатывается сообществом и финансируется Британским Советом по экономическим и социальным исследованиям, центром Consumer Data Research и Институтом Алана Тьюринга.
Sktime расширяет API scikit-learn для решения задач временных рядов. В нем собраны все необходимые алгоритмы и инструменты преобразования для эффективного решения задач регрессии временных рядов, прогнозирования и классификации. Библиотека включает в себя специальные алгоритмы машинного обучения и методы преобразования для временных рядов, которых нет в других популярных библиотеках.
Sktime был разработан для работы с scikit-learn, легкой адаптации алгоритмов для взаимосвязанных задач временных рядов и построения сложных моделей. Как это работает? Многие задачи временных рядов так или иначе связаны друг с другом. Алгоритм, который можно применить для решения одной задачи, очень часто можно применить и для решения другой, связанной с ней. Эта идея называется редукцией. Например, модель для регрессии временных рядов (которая использует ряд для прогнозирования выходного значения) может быть переиспользована для задачи прогнозирования временных рядов (которая предсказывает выходное значение – значение, которое будет получено в будущем).
Основная идея проекта: «sktime предлагает понятное и интегрируемое машинное обучение с использованием временных рядов. Он располагает алгоритмами, которые совместимы с scikit-learn и инструментами совместного использования моделей, поддерживаемые четкой таксономией задач обучения, с понятной документацией и дружелюбным сообществом.»
В этой статье я выделю некоторые уникальные особенности sktime.
Корректная модель данных для временных рядов
Sktime использует вложенную структуру данных для временных рядов в виде датафреймов pandas.
Каждая строчка в типичном датафрейме содержит независимые и одинаково распределенные случайные величины – наблюдения, а столбцы – различные переменные. Для методов sktime каждая ячейка датафрейма Pandas теперь может содержать целый временной ряд. Такой формат является гибким для многомерных, панельных и гетерогенных данных и позволяет повторно использовать методы как в Pandas, так и в scikit-learn.
В таблице ниже каждая строка – это наблюдение, содержащее массив временных рядов, в столбце Х и значение класса в столбце Y. Оценщики и трансформаторы sktime умеют работать с такими временными рядами.
Нативная структура данных для временных рядов, совместимая с sktime.
В следующей таблице каждый элемент ряда Х был вынесен в отдельный столбец, как того требуют методы scikit-learn. Размерность довольно высокая – 251 столбец! Помимо этого, упорядоченность столбцов по времени игнорируется алгоритмами обучения, которые работают с табличными величинами (однако используется алгоритмами классификации и регрессии временных рядов).
Структура данных временных рядов, требуемая scikit-learn.
Для задач моделирования нескольких совместных рядов нативная структура данных временных рядов, которая совместима с sktime, подходит идеально. Модели, обученные на табличных данных, ожидаемых scikit-learn, завязнут в большом количестве признаков.
Что умеет sktime?
Согласно странице на GitHub, sktime в настоящее время предоставляет следующие возможности:
API sktime
Для классов оценщиков (или же моделей) sktime предоставляет метод fit для обучения модели и метод predict для генерации новых прогнозов.
Оценщики в sktime расширяют регрессоры и классификаторы scikit-learn, предоставляя аналоги этих методов, которые умеют работать с временными рядами.
Для классов трансформаторов sktime предоставляет методы fit и transform для преобразования данных рядов. Есть несколько типов доступных преобразований:
Примеры кода
Прогнозирование временных рядов
Следующий пример – это адаптация руководства по прогнозированию с GitHub. Ряд в данном примере (набор данных авиакомпании Box-Jenkins) показывает количество международных пассажиров самолетов в месяц с 1949 по 1960 год.
Перед созданием сложных прогнозов полезно сравнить свой прогноз со значениями полученным по наивным баейсовским алгоритмам. Хорошая модель должна превзойти эти значения. В sktime есть метод NaiveForecaster с различными стратегиями для создания базовых прогнозов.
Чтобы глубже погрузиться в функционал прогнозирования sktime, ознакомьтесь с руководством по ссылке.
Классификация временных рядов
Также sktime можно использовать для классификации временных рядов на различные группы.
В примере кода ниже классификация одиночных временных рядов делается также просто, как и классификация в scikit-learn. Единственное отличие – это вложенная структура данных временных рядов, о которой мы говорили выше.
Данные, переданные в TimeSeriesForestClassifier
Чтобы узнать больше о классификации рядов, посмотрите руководства по одномерной и многомерной классификации в sktime.
Дополнительные ресурсы по sktime
Чтобы узнать больше о Sktime, посмотрите следующие ссылки с документацией и примерами.
Внимание к прогнозированию и классификации временных рядов
Дата публикации Apr 10, 2019
* Обратите внимание, что эта статья была опубликована 18.10.199. Я понятия не имею, почему Medium говорит, что она написана 9.09.199. Статья содержит самые последние и актуальные результаты, в том числе статьи, которые появятся на Neurips 2019, и препринты, вышедшие только в августе этого года.
Внимание к данным временного ряда: обзор
Необходимость в точном прогнозировании и классификации данных временных рядов распространяется практически на все отрасли и уже давно предшествует машинному обучению. Например, в больницах вы можете сортировать пациентов с самой высокой смертностью на ранних стадиях и прогнозировать продолжительность пребывания пациента; в рознице вы можете прогнозировать спрос и прогнозировать продажи; коммунальные предприятия хотят прогнозировать энергопотребление и т. д.
Несмотря на успехи глубокого обучения в отношении компьютерного зрения, многие модели временных рядов все еще невелики. В частности, в отрасли многие исследователи данных все еще используют простые авторегрессионные модели вместо глубокого обучения. В некоторых случаях они могут даже использовать такие модели, как XGBoost, снабженные временными интервалами, изготовленными вручную. Обычно общими причинами выбора этих методов остаются интерпретируемость, ограниченность данных, простота использования и стоимость обучения. Хотя не существует единого решения для решения всех этих проблем, глубокие модели с вниманием представляют собой убедительный аргумент. Во многих случаях они предлагают общее улучшение производительности (другие ванильные LSTM / RNN) с преимуществом интерпретируемости в форме тепловых карт внимания. Кроме того, во многих случаях они быстрее, чем при использовании RNN / LSTM (особенно с некоторыми из методов, которые мы обсудим).
Несколько работ были изучены с использованием основных и модифицированных механизмов внимания для данных временных рядов.LSTNetЭто одна из первых статей, в которой предлагается использовать механизм внимания LSTM + для временных рядов многомерного прогнозирования.Временная картина внимания для многомерного прогнозирования временных рядовShun-Yao Shih et al. сосредоточено на применении внимания, специально настроенного для многомерных данных. Этот механизм был нацелен на решение проблем, включая шумовые переменные в многомерном временном ряду, и внедрение лучшего метода, чем простое среднее. В частности,
Веса внимания на строках выбирают те переменные, которые полезны для прогнозирования. Поскольку контекстный вектор vt теперь представляет собой взвешенную сумму векторов строк, содержащих информацию на нескольких временных шагах, он захватывает временную информацию.
Проще говоря, это нацелено на выбор полезной информации по данным временных рядов различных признаков для прогнозирования целевых временных рядов. Во-первых, они используют 2dConvolution для векторов строк скрытых состояний RNN. Затем следует функция подсчета очков. Наконец, они используют сигмовидную активацию вместо softmax, поскольку они ожидают, что несколько переменных будут релевантными для прогнозирования. Остальное следует довольно стандартной практике внимания.
С точки зрения результатов, модель превосходит (используя относительную абсолютную погрешность) другие методы, включая стандартную авторегрессивную модель и LSTNet по прогнозированию спроса на солнечную энергию и электроэнергию, трафика и обменного курса.
Несмотря на то, что в этой статье не используется самоконтроль, я думаю, что это действительно интересное и продуманное использование внимания. Многие исследования временных рядов, кажется, сосредоточены на одномерных данных временных рядов. Кроме того, те, которые действительно изучают многомерный временной ряд, часто только расширяют измерения механизма внимания, а не применяют его горизонтально во временном ряду объекта. Возможно, имеет смысл посмотреть, сможет ли измененный механизм самовосприятия выбрать соответствующие исходные данные временного ряда для прогнозирования цели.Полный код этого документа общедоступен на GitHub.
Что на самом деле происходит с вниманием к себе?
Давайте сначала кратко рассмотрим пару особенностей самовосприятия, прежде чем углубляться в часть временного ряда. Для более подробного изучения, пожалуйста, посмотрите этостатья по математике вниманияилиИллюстрированный Transformeр. Для внимательности напомним, что у нас обычно есть векторы запроса, ключа и значения, которые формируются путем простого умножения матрицы вложения на матрицу весов. Многие пояснительные статьи не упоминают о том, чтозапрос, ключ и значение часто могут поступать из разных источников в зависимости от задачии изменяются в зависимости от того, является ли это кодером или уровнем декодера. Так, например, если задачей является машинный перевод, запрос, векторы ключа и значения в кодере будут исходить из исходного языка, а векторы запроса, ключа и значения в декодере будут исходить из целевого языка. Однако в случае моделирования с неконтролируемым языком все они обычно формируются из исходной последовательности. Позже мы увидим, что многие модели временных рядов для самосознания изменяют способ формирования этих значений.
Во-вторых, самообслуживание обычно требует позиционного кодирования, поскольку оно не знает порядка последовательности. Обычно она включает в себя эту информацию о положении путем добавления вложения слова или временного шага, а не конкатенации. Это несколько странно, так как можно предположить, что добавление позиционных кодировок непосредственно к встраиванию слова повредит. Однако в соответствии с этимReddit ответиз-за высокой размерности вложения слов в позиционные кодировки вы получаете приблизительную ортогональность (то есть позиционные кодировки и вложения слов уже занимают разные пространства). Более того, автор утверждает, что синус и косинус помогают придать близкому слову схожие позиционные вложения.
Но, в конце концов, это все еще оставляет вопрос: не будет ли прямая конкатенация работать лучше в этом отношении? На данный момент у меня нет прямого ответа. Однако есть несколько хороших недавних работ по созданию лучших позиционных вложений. Transformer-XL (основа для XLNet) имеет свои специфические реляционные вложения. Также в документе NIPs 2019, «Само-внимание с обучением по представлению функционального времени», рассматривается создание более эффективных позиционных представлений с помощью карты функциональных объектов (хотя в настоящий момент документ не находится на arxiv).
Ряд недавних исследований проанализировал, что на самом деле происходит в таких моделях, как BERT. Хотя эти исследования направлены исключительно на НЛП, они могут помочь нам понять, как эффективно использовать эти архитектуры для данных временных рядов, а также предвидеть возможные проблемы.
В «На что смотрит BERT? Анализ внимания BERTАвторы анализируют внимание BERT и исследуют языковые отношения. Эта статья является отличной иллюстрацией того, как само-внимание (или любой тип внимания на самом деле) естественным образом поддается интерпретируемости. Как мы можем использовать вес внимания, чтобы визуализировать соответствующие части фокуса.
Также интересно то, что авторы находят следующее:
Мы обнаруживаем, что большинство руководителей уделяют мало внимания текущему токену. Однако есть главы, которые специализируются на интенсивном обслуживании на следующем или предыдущем токене, особенно на более ранних уровнях сети
Очевидно, что в данных временных рядов внимание руководителей, «обращающихся к следующему токену», проблематично. Следовательно, при работе с временными рядами нам придется применять какую-то маску. Во-вторых, трудно сказать, является ли это исключительно продуктом языковых данных, на которых обучался BERT, или это, скорее всего, произойдет с многогранным вниманием в более широком смысле. Для формирования языковых представлений сосредоточение на ближайшем слове имеет большой смысл. Тем не менее, это гораздо более изменчиво с данными временных рядов, в некоторых временных рядах причинность может происходить из шагов намного дальше назад (например, для некоторых рек может потребоваться более 24 часов для проливного дождя, чтобы поднять реку).
В этой статье авторы обнаружили, что обрезка нескольких головок внимания оказала ограниченное влияние на производительность. Как правило, производительность значительно снижалась только тогда, когда было сокращено более 20% голов внимания. Это особенно актуально для данных временных рядов, так как часто мы имеем дело с длинными зависимостями Особенно только удаление одной головы внимания, кажется, почти не влияет на оценку, а в некоторых случаях приводит к лучшей производительности.
Эта статья исследует геометрические структуры, найденные в модели BERT. Они заключают, что BERT, кажется, имеет геометрические представления деревьев разбора внутри. Они также обнаруживают семантически значимые подпространства в пределах большего пространства встраивания. Хотя этот зонд явно лингвистически сфокусирован, основной вопрос, который он поднимает, заключается в том, что если BERT изучит эти лингвистически значимые паттерны, то изучит ли он аналогичные по времени паттерны. Например, если бы мы в больших масштабах обучили временные ряды трансформатора, что бы мы обнаружили в пространстве внедрения? Например, если бы мы увидели похожие траектории пациентов, сгруппированные вместе, или если бы мы обучались на многих различных потоках для прогнозирования наводнений, сгруппировала ли бы она потоки, питаемые плотиной, с аналогичными циклами выброса и т. Д.… Крупномасштабное обучение трансформатора на тысячах различных временных рядов могло бы оказаться проницательным и улучшить наше понимание данных, а также. Авторы включают две классные страницы GitHub с интерактивными визуализациями, которые можно использовать для дальнейшего изучения.
Еще одна увлекательная исследовательская работа, которая вышла из ICLR 2019, былаМеньше внимания уделяйте легким и динамическим сверткам, Эта работа исследует и то, почему само-внимание работает и предлагает динамические свертки в качестве альтернативы. Основным преимуществом динамических сверток является то, что они вычислительно проще и более распараллеливаемы, чем самообслуживание. Авторы считают, что эти динамические извилины преформ примерно эквивалентны самосовершенствованию. Авторы также используют распределение веса, что еще больше снижает требуемые параметры в целом. Интересно, что, несмотря на потенциальные улучшения скорости, я не видел, чтобы в исследованиях по прогнозированию временных рядов применялась эта методология (по крайней мере, пока).
Само-внимание для временных рядов
Посещать и диагностироватьиспользует собственное внимание к медицинским данным временных рядов. Данные временных рядов являются многомерными и содержат такую информацию, как частота сердечных сокращений пациента, уровень SO2, артериальное давление и т. Д.
Их архитектура начинается с 1-D свертки для каждого клинического фактора, который они используют для достижения предварительных вложений. Напомним, что 1D Conv будет использовать ядро определенной длины и обрабатывать его определенное количество раз. Важно отметить, что здесь 1-D свертка не применяется на этапах временного ряда, как это обычно бывает. Поэтому, если начальный временной ряд содержит 100 шагов, он все равно будет содержать 100 шагов. Вместо этого он применяется для создания многомерного представления каждого временного шага. Дополнительную информацию об одномерных сверточных данных для данных временных рядов см. В этомотличная статья.После 1-D этапа свертки авторы затем используют позиционные кодировки:
Кодирование выполняется путем отображения временного шага t в одну и ту же рандомизированную таблицу поиска во время как обучения, так и прогнозирования.
Далее идет операция самоконтроля. Это в основном то же самое, что и стандартный тип многоголового внимания, однако имеет несколько тонких отличий. Во-первых, как упомянуто выше, так как это данные временного ряда, механизм самовосприятия не может включать всю последовательность. Он может включать только временные шаги до рассматриваемого временного шага. Для этого авторы, похоже, используют механизм маскирования, который также маскирует временные метки слишком далеко в прошлом. К сожалению, авторы очень не конкретизируют фактическую формулу для этого, однако, если бы я должен был догадаться, я бы предположил, что это примерно аналогично операции маскирования, показанной авторами при преодолении узкого места трансформатора.
После всестороннего внимания, теперь преобразованные вложения все еще должны иметь дополнительные шаги, прежде чем они будут полезны. Обычно при стандартном внимании к себе у нас есть компонент добавления и нормализации слоя. Нормализация слоя нормализует вывод самоконтроля и оригинального встраивания (см. здесь для получения дополнительной информации об этом), однако, авторы вместо этого выбирают плотную интерполяцию. Это означает, что вложения, выводимые из модуля многогранного внимания, берутся и используются таким образом, который полезен для сбора синтаксической и структурной информации.
После алгоритма плотной интерполяции существует линейный слой, за которым следует слой softmax, сигмоид или релю (в зависимости от задачи). Сама модель является многозадачной, поэтому она предназначена для прогнозирования продолжительности пребывания, кода диагностики, риска декомпенсации, продолжительности пребывания и уровня смертности.
В целом, я думал, что эта статья была хорошей демонстрацией использования внимания к многомерным данным временных рядов. На момент выпуска результаты были самыми современными, теперь они превзошли TimeNet. Тем не менее, это в первую очередь связано с эффективностью предварительной подготовки на основе трансферного обучения, а не с архитектурой. Если бы мне пришлось угадывать, что подобное предварительное обучение с SAND приведет к лучшей производительности.
Мой основной критицизм этой статьи в первую очередь с точки зрения воспроизводимости, так как код не предоставлен, а различные гиперпараметры, такие как размер ядра, либо не включены, либо на них неясно намекают. Другие понятия не обсуждаются достаточно ясно, такие как маскирующий механизм. В настоящее время я работаю над попыткой переопределения в PyTorch и опубликую код здесь, когда буду более уверен в его реалистичности.
Другая недавняя статья, которая довольно интересна:CDSA: многомерное самообслуживание для многовариантного вменения временных рядов с геотегами»Jiawei Ma et al. Эта статья посвящена вменению (оценке) пропущенных значений временного ряда. Эффективное вложение данных важно для многих реальных приложений, поскольку датчики часто имеют периоды, когда они работают со сбоями, что приводит к отсутствию данных. Это создает проблемы при попытке прогнозировать или классифицировать данные, поскольку отсутствующие или нулевые значения влияют на прогноз. Авторы настраивают свою модель для использования механизма перекрестного внимания, который работает, используя данные в разных измерениях, таких как местоположение во времени и измерение.
Авторы оценивают свои результаты по нескольким наборам прогнозирования трафика и качества воздуха. Они оценивают как в отношении прогнозирования, так и вменения. Для проверки вменения они отбрасывают определенный процент значений и пытаются вменять их, используя модель. Они сравнивают их с фактическими значениями. Их модель превосходит другие RNN и статистические методы вменения на всех пропущенных скоростях передачи данных. С точки зрения прогнозирования, модель также достигает наилучшей производительности.
Это недавняя статья, которая появится в NIPS в 2019 году. В ней рассматриваются некоторые проблемы, связанные с применением трансформатора к данным временных рядов. Авторы в основном утверждают, что классическое внимание к себе полностью использует контекстные данные. Они утверждают, что это, в частности, вызывает проблемы с данными динамического временного ряда, которые зависят от сезонности (например, прогнозирование продаж в праздничные дни по сравнению с остальной частью года или прогнозирование экстремальных погодных условий). Чтобы исправить это, они вводят новый метод генерации векторов запроса и значения.
Мы предлагаемсверточногомеханизм самосовершенствования, используя причинные свертки для создания запросов и ключей в слое самососредоточения. Соответствие ключа запроса известно локальному контексту, например, формы, может помочь модели достичь более низкой ошибки обучения и еще больше повысить точность прогноза.
Вторая часть статьи посвящена решениям, связанным с использованием памяти модели трансформатора. Само-внимание очень интенсивно использует память, особенно в отношении очень длинных последовательностей (в частности, это O (L²)). Авторы предлагают новый механизм внимания, который O (L (log L) ²). Благодаря такому механизму самоконтроля клетки могут обслуживать только предыдущие клетки с экспоненциальным размером шага. Например, пятая ячейка будет обслуживать четвертую и вторую. Они также вводят две разновидности этого внимания журнала: локальное внимание и внимание перезапуска. Смотрите их схему ниже для получения дополнительной информации
Авторы оценивают свой подход к нескольким различным наборам данных, включая потребление электроэнергии (записанное с 15-минутными интервалами), трафик в Сан-Франциско (20-минутные интервалы), ежечасное получение данных о солнечной энергии (из 137 различных электростанций) и данные о ветре (ежедневные оценки Потенциал ветра в 28 странах в процентах от общего производства электроэнергии). Их выбор ρ-квантильных потерь в качестве метрики оценки немного странный, поскольку обычно я ожидаю MAE, MAP, RMSE или что-то подобное для задачи прогнозирования временных рядов.
Я все еще пытаюсь понять, что именно представляет эта метрика, однако, по крайней мере, по результатам выясняется, что чем меньше балл, тем лучше. Используя этот показатель, их сверточный преобразователь самосохранения превосходит DeepAR, DeepState, ARIMA и другие модели. Они также проводят исследование абляции, где они учитывают влияние размера ядра при вычислении семидневного прогноза. Они обнаружили, что размер ядра 5 или 6 обычно дает лучший результат.
Я думаю, что это хорошая исследовательская статья, в которой рассматриваются некоторые недостатки трансформатора применительно к данным временных рядов. Я особенно думаю, что использование сверточного ядра (размером больше единицы) действительно полезно в задачах временных рядов, где вы хотите захватить окружающий контекст для ключа и векторов запросов. В настоящее время нет никакого кода, но NeurIPs еще больше чем через месяц, так что, надеюсь, авторы выпускают его между тем и сейчас.
Вывод и будущие направления
В заключение следует отметить, что внимание к себе и связанные с ним архитектуры привели к улучшениям в нескольких сценариях использования для прогнозирования временных рядов, однако в целом они не получили широкой адаптации. Скорее всего, это связано с несколькими факторами, такими как узкое место в памяти, сложность кодирования позиционной информации, сосредоточенность на точечных значениях и отсутствие исследований по обработке многомерных последовательностей. Кроме того, за пределами НЛП многие исследователи, вероятно, не знакомы с вниманием к себе и его потенциалом. Хотя простые модели, такие как ARIMA, во многих случаях имеют смысл для отраслевых проблем, я считаю, что трансформаторы также могут многое предложить.
Надеемся, что подходы, изложенные в этой статье, проливают некоторый свет на эффективное применение трансформаторов для задач временных рядов. В следующей статье я планирую дать практический пошаговый пример прогнозирования и классификации данных временных рядов с помощью преобразователя в PyTorch. Любые отзывы и / или критика приветствуются в комментариях. Пожалуйста, дайте мне знать, если я получил что-то неправильное (что вполне возможно, учитывая сложность темы), и я обновлю статью.









