machinelearningmastery.ru

Машинное обучение, нейронные сети, искусственный интеллект
Header decor

Home

Дробное дробное дифференцирование для минимизации потери памяти при сохранении временного ряда

Дата публикации Oct 3, 2019

Резюме

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

Обычно мы пытаемся достичь некоторой формы стационарности посредством преобразования нашего временного ряда с помощью общих методов, включая целочисленное различие. Однако целочисленное различие излишне удаляет слишком много памяти для достижения стационарности. Альтернативная дробная разность позволяет нам достичь стационарности при сохранении максимального объема памяти по сравнению с целочисленной разницей. В то время как существующие реализации на основе ЦП неэффективны для выполнения дробных разностей во многих крупномасштабных временных рядах, наша реализация на основе графических процессоров обеспечивает быстрое дробное различие.

В этом посте вы познакомитесь с нашей (ensemblecap.ai и Национальным университетом Сингапура) интуитивно понятной реализацией GPU дробного дифференцирования (GFD), используяРапидсcuDFэто обеспечивает более чем 100-кратное ускорение по сравнению с реализацией процессора.

Следующая ссылка приводит к блокноту для воспроизведения всех результатов (графики, таблицы и код) в этом посте:https://github.com/ritchieng/fractional_differencing_gpu/blob/master/notebooks/gpu_fractional_differencing.ipynb

Необходимость дробного дифференцирования

Прежде чем мы поймем, почему дробное различие является критическим, давайте нарисуем простой временной ряд, S & P 500, извлеченный из базы данных ФРС. Без проведения каких-либо тестов мы можем четко наблюдать нестационарные временные ряды здесь.

Традиционно мы обычно можем различать наш временной ряд на один день (дневной доход) или больше, чтобы достичь какой-либо формы стационарности с помощью таких тестов, как расширенный критерий Дики-Фуллера (ADF), критерий Квятковского-Филлипса-Шмидта-Шина (KPSS), Филлипса-Перрона тест и многое другое. На следующем графике показаны стационарные временные ряды после разницы в 1 день.

Однако эти формы целочисленных различий приводят к потере большего количества информации, чем необходимо. Дробное дифференцирование позволяет нам достичь стационарности при сохранении максимального объема памяти по сравнению с целочисленным дифференцированием.

Это было первоначально введено в 1981 году в егобумага«Дробное дифференцирование» Дж. Р. М. Хоскинга и последующая работа других сосредоточены на быстрых и эффективных реализациях дробного дифференцирования для непрерывных случайных процессов. Недавно для финансовых временных рядов было введено дробное дифференцирование с помощью дробного дифференцирования с фиксированным окном вместо метода расширяющегося окна Маркоса Лопеса де Прадо.

Дробное дифференцирование

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

Чтобы суммировать это в простом уравнении: целочисленное разностное значение в лаге 0 = 1 * сырое значение в лаге 0 + (-1) * сырое значение в лаге 1

И вы можете видеть, что для дробного дифференцирования вы просто имеете меньшие веса от lag и далее, чтобы инкапсулировать больше информации из прошлого и разницы с этими необработанными значениями. По сути, вы можете наблюдать, как вы медленно уменьшаете кумулятивные веса для меньших значений d для дробного дифференцирования. Ключ заключается в том, чтобы найти хорошее значение в диапазоне от 0 до 1,0, чтобы дробное различие имело стационарный временной ряд при минимизации потерь информации.

Пример дробного дифференцирования

Предположим, что необработанные временные ряды имеют значения 100, 99, 98, 97, 96, 95, 94 от лаг k = 0 до k = 6.

Для d = 0 (без разности)

diffced_value = 100 * 1 + 99 * 0 + 98 * 0 + 97 * 0 + 96 * 0 + 95 * 0 + 94 * 0 = 100

Для d = 0,4 (дробное дифференцирование)

diffced_value = 100 * 1 + 99 * -0.400000 + 98 * -0.120000 + 97 * -0.064000 + 96 * -0.041600 = 30.576

Для d = 1 (целочисленная разность)

diffced_value = 100 * 1 + 99 * -1 + 98 * 0 + 97 * 0 + 96 * 0 + 95 * 0 + 94 * 0 = 1

Фиксированное дифференцирование окон

Для эффективности вычислений мы хотим прекратить вычисление весов, когда веса слишком малы (ниже определенного небольшого заранее определенного малого значения). Представьте, что у нас есть временной ряд с 1 000 000 точек данных, мы не хотим вычислять веса с задержкой до 1 м для нашей последней точки данных! Мы можем просто вычислить веса, пока они не станут слишком маленькими, что и делает эта функция. Это называется фиксированной разницей в фиксированных окнах.

На следующем графике мы показываем веса, связанные с d = 0,5, и минимальное значение веса (пол) 5e-5 для функции дробного дифференцирования фиксированного окна. Вы можете увидеть, как веса меньше, чем 5e-5 игнорируются

Когда мы запустим функцию дробного дифференцирования с фиксированным окном для нашего временного ряда S & P 500, мы получим стационарный временной ряд.

Запустив тест Аугментированного Дики-Фуллера (ADF), мы получим следующие результаты. Вы можете видеть, как мы можем иметь стационарные временные ряды с дробным дифференцированием, не требуя целочисленного дифференцирования.

Дробное дифференцирование фиксированного окна в графическом процессоре

В записной книжке мы представили реализации дробного дифференцирования фиксированных окон как для CPU, так и для GPU. И вы можете увидеть более чем 100–400-кратное ускорение по сравнению с реализациями ЦП для точек данных 10–100 м.

Внедрение GPU осуществляется через RAPIDS cuDF.

этоблокнотиллюстрирует, как вы можете легко переносить код на основе CPU и numpy и / или pandas с возможностями GPU через cuDF. Для более продвинутых пользователей NVIDIA недавно выпустилапрототипсравнивая наш метод с их, который использует наNumbaа такжеgQuantэто имеет еще 100-кратное ускорение. Блог об этом скоро появится. Хотя их реализация немного сложнее, и вам следует начать с этой вводной записной книжки, прежде чем углубляться в более сложный код.

Резюме

В этом посте мы рассмотрели дробное дифференцирование, в частности вариант дробного дифференцирования с фиксированным окном, в котором мы можем достичь стационарности в наших временных рядах при минимальной потере информации. Для временных рядов с миллионами точек данных дробное различие может быть вычислительно дорогостоящим, препятствуя быстрому эксперименту или развертыванию в реальном времени. Мы показываем, что с помощью RAPIDS cuDF и numba мы можем достичь ускорения от 100x до 10000x в зависимости от ссылок на различные реализации от простого (ускорение в 100 раз) до более сложного (ускорение в 10000 раз).

Чтобы узнать больше о дробном дифференцировании и выводе уравнений, вы можете обратиться к оригиналу Хоскинабумагаили Прадокнига,

Не стесняйтесь поднимать вопрос в официальном репозитории Github, предлагая улучшения, сообщать об ошибках или просто присоединяйтесь к беседе с комментарием ниже!

Оригинальная статья

Footer decor

© machinelearningmastery.ru | Ссылки на оригиналы и авторов сохранены. | map