Дробное дифференцирование временных рядов

Материал из MachineLearning.

Перейти к: навигация, поиск
Статья написана с использованием LLM Gemini 3.1 Pro Preview и проверена участником Polina Khadralinova


Промпт приводится полностью в Обсуждение:Дробное дифференцирование временных рядов

Дробное дифференцирование временных рядов (от англ. Fractional differentiation) — это метод математической трансформации и предварительной обработки последовательных данных, позволяющий достичь их стационарности без полной потери информации о долгосрочной памяти (паттернах прошлого). В контексте финансового машинного обучения этот метод был фундаментально переосмыслен и популяризован профессором Маркосом Лопесом де Прадо в качестве решения проблемы потери ценовых уровней при обучении предсказательных моделей.

Содержание

Дилемма «Стационарность против Памяти»

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

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

Традиционный подход к этой проблеме — вычисление «первой разности» (целочисленное дифференцирование с порядком d=1). Исследователь переходит от самих цен к их изменениям (доходностям), вычитая из текущей цены вчерашнюю:

\Delta x_t = x_t - x_{t-1}

Этот шаг делает ряд стационарным — I(0). Ряд начинает колебаться вокруг нуля, и алгоритм теперь может стабильно обучаться. Однако здесь возникает критический изъян: первая разность полностью стирает память временного ряда. Доходность сообщает модели лишь о том, как актив изменился за последний день, но ничего не говорит о том, находится ли актив на историческом максимуме или на дне глубокой просадки. Модель страдает от искусственно вызванной «амнезии», теряя важнейший контекст ценового уровня.

Дилемма заключается в следующем: сырые цены (d=0) сохраняют всю память, но непригодны для предсказательного моделирования из-за нестационарности; доходности (d=1) идеально стационарны, но полностью лишены предиктивной памяти. Дробное дифференцирование решает эту проблему, позволяя найти компромиссный (дробный) порядок дифференцирования d (где 0 < d < 1). Этот порядок делает ряд достаточно стационарным для алгоритма, но при этом сохраняет максимально возможный объем исторической памяти.

Математический аппарат: оператор сдвига и биномиальный ряд

Для строгого понимания механики метода необходимо обратиться к операционному исчислению временных рядов. Пусть X — временной ряд, а x_t — его значение в момент времени t.

Введем линейный оператор сдвига назад (backshift operator), обозначаемый как B. Его действие на элемент ряда определяется предельно просто:

B x_t = x_{t-1}

Соответственно, применение оператора k раз возвращает нас на k шагов в прошлое: B^k x_t = x_{t-k}.

Классическая первая разность, описанная выше, теперь может быть элегантно записана через оператор B:

\Delta x_t = (1 - B) x_t

А вторая разность примет вид (1 - B)^2 x_t.

Инновация дробного подхода состоит в том, чтобы отказаться от ограничения степени целыми числами и возвести бином (1 - B) в вещественную (дробную) степень d. Опираясь на разложение в биномиальный ряд (ряд Тейлора для дробной степени), мы получаем бесконечную сумму:

(1 - B)^d = \sum_{k=0}^{\infty} {d \choose k} (-B)^k = \sum_{k=0}^{\infty} \omega_k B^k

Где \omega_k — это веса, с которыми прошлые наблюдения x_{t-k} входят в текущее значение трансформированного ряда. Эти веса вычисляются по следующей формуле:

\omega_k = (-1)^k \frac{\prod_{i=0}^{k-1} (d - i)}{k!}

Для компьютерных вычислений и понимания динамики затухания гораздо удобнее использовать рекуррентную форму записи весов:

\omega_0 = 1
\omega_k = -\omega_{k-1} \frac{d - k + 1}{k}

Взглянув на эту рекурсию, можно заметить важнейший эффект механизма затухания весов. Если d = 1 (классическая доходность), то \omega_0 = 1, \omega_1 = -1, а для всех k > 1 вес \omega_k строго равен 0. Память обрывается мгновенно. Но если d находится в интервале (0, 1), веса \omega_k никогда не обращаются в абсолютный 0. Они асимптотически стремятся к нулю по мере роста k. Это означает, что каждое новое значение продифференцированного ряда \tilde{x}_t содержит в себе взвешенную сумму всей доступной истории актива:

\tilde{x}_t = \sum_{k=0}^{\infty} \omega_k x_{t-k}

Практическое применение: метод FFD и порог отсечения

Несмотря на математическую красоту формулы бесконечного ряда, при её реализации на реальных данных возникает серьёзный алгоритмический изъян — проблема расширяющегося окна (Expanding Window).

Поскольку на практике мы располагаем конечной выборкой данных, для самого первого наблюдения x_0 мы можем использовать только вес \omega_0. Для наблюдения x_{100} мы используем уже 101 вес, и так далее. Это означает, что степень дифференцирования (и дисперсия ряда) будет нестабильной: ранние точки будут дифференцироваться иначе, чем поздние. Временной ряд с изменяющейся дисперсией не может считаться стационарным, что разрушает всю первоначальную цель процедуры.

Чтобы обойти это ограничение, Лопес де Прадо ввёл метод FFD (Fixed-Window Fractional Differentiation — дробное дифференцирование с фиксированным окном).

Суть FFD заключается во введении порога отсечения \tau (cutoff threshold). Поскольку веса при 0 < d < 1 монотонно убывают по модулю, мы можем искусственно обрубить хвост бесконечного ряда, отбросив те исторические значения, чей вес |\omega_k| становится меньше пренебрежимо малой величины \tau (на практике часто используют значение 10^{-4}).

Это задает строго фиксированную длину окна l, такую что для всех k \ge l выполняется условие |\omega_k| < \tau. Теперь рабочая формула шага вычислений принимает законченный вычислимый вид:

\tilde{x}_t = \sum_{k=0}^{l-1} \omega_k x_{t-k}
  • Для вычисления каждого нового значения всегда используется ровно l прошлых точек.
  • Вектор весов \omega остаётся неизменным на всём протяжении вычислений, гарантируя постоянство дисперсии и отсутствие паразитного дрифта (смещения).
  • Значения временного ряда до индекса l отбрасываются (процесс «прогрева» фильтра).

В практическом пайплайне машинного обучения подбор параметра d превращается в задачу оптимизации. Исследователь итерирует значение d от 0 до 1 с малым шагом, на каждом шаге применяя тест Дики — Фуллера (ADF) к полученному ряду \tilde{x}. Оптимальным считается минимально возможное значение d, при котором p-value теста ADF падает ниже критического уровня (например, 0.05). Таким образом, ряд едва пересекает границу стационарности, сохраняя при этом максимальную корреляцию (память) с исходным ценовым уровнем X.

См. также

Литература

  • Lopez de Prado M. Advances in Financial Machine Learning. — John Wiley & Sons, 2018. — 400 с.
  • Hosking J. R. M. Fractional differencing. — Biometrika. — 1981 T. 68. — С. 165-176.