Потоковая аналитика (data mining).
Два типа запросов:
Некоторые системы предоставляют SQL-подобный язык запросов. Другие требуют написания программных обработчиков.
Невозможно сохранить “весь” поток. Следствие: необходимо выдавать результаты запросов по мере поступления данных.
Ограничения потоковой обработки:
Следствие – какая-то форма “конспектирования” данных.
Два аспекта времени:
\(t_e \le t_s\). \(t_s - t_e\) – сдвиг.
Оконные методы – рассмотрение некоторого временного среза.
“Окно” – небольшая ограниченная часть потока данных.
Данные ограничены:
В основе – либо время, либо объём данных в окне.
Политики вытеснения и срабатывания основаны на времени.
Факторы:
Протяжённость окна – время, в течение которого данные хранятся в окне и доступны для обработки. Политика вытеснения.
Интервал скольжения – по сути, интервал срабатывания. Политика срабатывания.
Поддержка в системах потоковой обработки разнится.
Прыгающие окна могут работать по времени или по счётчику. Основное отличие от скользящего окна – каждое событие принадлежит только одному прыгающему окну.
Нужно для статистического анализа.
Идея: достаточно большая равномерно-распределённая случайная выборка будет иметь такие же статистические свойства, как и исходный процесс.
Для потоковых данны – резервуарная выборка.
Идея: хранить заранее определённое число значений из потока, делать его “более случайным” при поступлении новых данных.
\(k\) – размер резервуара. Первые \(k\) значений помещаются в резервуар. Для каждого следующего – помещается на случайное место с вероятностью \(k/i\), где \(i\) – номер значения (начиная с 1). Результат: в резервуаре равномерная случайная выборка.
Две реализации: простая и эффективная.
Простая реализация:
Эффективная реализация:
В случае потоковой обработки – основан на вероятностных алгоритмах.
Две категории:
Обычно – на основе битовых комбинаций. Популярные – HyperLogLog и HyperLogLog++. Концептуально одинаковы.
Алгоритм:
0...01
\(α_m < 1\) – коэффициент, учитывающий коллизии. Для \(m\in[4,7]\), \(α_m≈0.7\)
\(m\) – точность, определяет относительную погрешность (около \(\frac{1.04}{2^{m/2}}\))
Сколько раз встречается элемент \(x\)?
Популярный алгоритм – Count-Min sketch.
Счётчики \(M_i\) – набор числовых массивов. Индексируются с нуля.
Число счётчиков – ширина \(w\); размер счётчика – длина \(m\).
\(w\) хеш-функций \(H_i\) (по одной на счётчик).
\[\forall i \in [1,w]: M_i[H_i(v)] := M_i[H_i(v_t)]+1\]
\[F(x) ≈ \min_{i \in [1,w]} M_i[H_i(v)]\]
Погрешность \[\frac{\tilde x-x}{N} \le \frac{e}{m}\] с вероятностью \[1-δ = 1-e^{-w},\] где \(N\) – число элементов в потоке.
Встречался ли данный элемент в потоке ранее?
Такой же подход, как и в случае с определением частот. Фильтр Блума (не путать с визуальным эффектом).
Может давать ложноположительный ответ, но не ложноотрицательный.
Отличия от CM sketch:
Временной ряд – собранный в разные моменты времени статистический материал о значении каких-либо параметров исследуемого процесса.
Каждая такая точка – измерение или отсчёт.
Существенно отличаются от простой статистической выборки – учитывается взаимосвязь с временем.
Две основных задачи:
Составляющие:
Систематическая составляющая содержит:
Сезонность:
Нелинейная сезонность – редко.
Если тренд монотонный, возможен анализ регрессионными методами.
Необходимо исключение случайных составляющих. Основной метод – сглаживание.
Сглаживание подразумевает локальное усреднение.
Универсальный подход – скользящее среднее.
Реже – более сложные методы, такие как метод наименьших квадратов.
После удаления случайной компоненты – линейная или (реже) нелинейная регрессия.
Анализ периодических составляющих – на основе автокорреляции.
Периодическая зависимость – формально корреляция между каждым i-м элементом ряда и (i-k)-м элементом ряда. k – лаг, или сдвиг.
Найти k – поиском минимума АКФ \[R(k) = \sum_i y_i y_{i-k}\]
Могут присутствовать несколько автокорреляций различного порядка (с различным k). Должны быть исключены последовательно.
Другой метод – исследование ЧАКФ. В ЧАКФ устраняется зависимость между промежуточными отсчётами (внутри лага), т.е. при вычислении ЧАКФ с лагом \(k\), из неё удаляются влияние автокорреляций с лагами \(0<l<k\).
Периодическая составляющая для лага \(k\) удаляется взятием разности временного ряда с самим собой с соответствующим сдвигом.
Таким образом можно определить скрытые периодические составляющие ряда.
Удаление сезонных составляющих делает ряд стационарным.
Известна как метод Бокса-Дженкинса.
Позволяет анализировать временные ряды с неизвестной моделью процесса.
ARIMA – “интегрированная модель авторегрессии и скользящего среднего”.
Три параметра:
Процесс авторегрессии:
\[x_t = ξ + ε_t + \sum_{i=1}^p φ_i x_{t-i}\]
\(ξ\) – константа, \(ε\) – случайное воздействие, \(φ_i\) – параметры.
Процесс скользящего среднего:
\[x_t = μ + ε_t - \sum_{j=1}^q θ_j ε_{t-j},\] \(μ\) – константа, \(ε\) – случайное воздействие, \(θ_i\) – параметры.
В этом изложении – только для стационарного ряда.
Ряд можно сделать стационарным, вычисляя разности. Число необходимых разностей – \(d\).
Для нестационарного ряда:
\[(Δ^d x)_t = ξ + \sum_{i=1}^p φ_i (Δ^d x)_{t-i} + \sum_{j=1}^q θ_j ε_{t-j} + ε_t,\] \(Δ^d\) – оператор разности временного ряда порядка \(d\)
Параметры d, p, q в общем случае не могут быть определены автоматически.
Определение \(d\) требует анализа автокорреляционных свойств.
Параметры p и q выбираются минимальные из тех, которые хорошо предсказывают поведение ряда.
На практике, p и q редко бывают больше 2.
Общие рекомендации для выбора параметров на основе вида АКФ и ЧАКФ:
Общие рекомендации для выбора параметров на основе вида АКФ и ЧАКФ (продолжение):
Для определения параметров \(φ_i\) и \(θ_i\), применяются методы оптимизации, минимизируется функция ошибки.
Полученные оценки параметров используются для прогноза.
Для получения прогноза в терминах исходного ряда – интегрирование разностей.
В ARIMA возможно добавить сезонную составляющую, введя для определённого лага сезонные параметры (ps, ds, qs). Обычно это поход, дающий значимо лучшие результаты, чем прямое увеличение d, p, q. Такая модель называется SARIMA (сезонная ARIMA).
Экспоненциальное сглаживание – другой популярный метод.
Рассматриваем временной ряд как последовательность \[x_t = b(t) + ε_t,\] где \(b(t)\) – некоторая медленно меняющаяся со временем функция, а \(ε\) – случайная компонента.
Выделение \(b(t)\) – сглаживание скользящим средним. Последним наблюдениям – большие веса, чем предпоследним и т.д.
При простом экспоненциальном сглаживании, старым наблюдениям – экспоненциально убывающие веса. В отличие от скользящего среднего, учитываются все предшествующие наблюдения ряда:
\[s_t = α x_t + (1-α) s_{t-1},\] \(s_t\) – сглаженный ряд.
\[s_t = α x_t + (1-α) s_{t-1},\] \(s_t\) – сглаженный ряд.
Когда применяется рекурсивно, каждое сглаженное значение – взвешенное среднее текущего отсчёта и сглаженного ряда. Новое сглаженное значение – также прогноз.
Результат зависит от \(α\). При \(α=1\), прошлые наблюдения игнорируются, при \(α=0\), игнорируется новое наблюдение.
Выбор α – на основе методов оптимизации.
Метрики:
Для коротких рядов – значительное влияние от начального \(s_0\). Его выбор тоже может осуществляться оптимизационными методами.
Для выбора \(α\), \(s_0\) есть эвристики.
Сезонность и тренд – добавлением составляющих, имеющих задержку.
Аддитивная: \(π_t = s_t + i_{t-p}\)
Мультипликативная: \(π_t = s_t i_{t-p}\)
\(s_t\) – экспоненциально сглаженное значение, \(π_t\) – прогноз, \(i_{t-p}\) – сглаженный сезонный компонент.
Оценка сезонной компоненты:
Аддитивной: \(i_t = i_{t-p} + δ(1-α)e_t\)
Мультипликативной: \(i_t = i_{t-p} + δ(1-α)e_t/s_t\)
\(e_t = \tilde x_t - x_t\)
\[0 \le δ \le 1\]
Если \(δ = 0\), то сезонность не меняется между периодами.
Если \(δ=1\), то сезонность меняется “максимально”.
Аналогично можно учитывать тренд: экспоненциально сгладить разность 1 порядка временного ряда с отдельным параметром и добавить к прогнозу.
В общем случае, для мультипликативной сезонности:
\[\begin{align} s_0 & = x_0 \\ s_t & = α \frac{x_t}{c_{t-L}} + (1-α)(s_{t-1}+b_{t-1}) \\ b_t & = β(s_t - s_{t-1})+(1-β)b_{t-1} \\ c_t & = γ\frac{x_t}{s_t}+(1-γ)c_{t-L} \end{align}\]
Для аддитивной сезонности:
\[\begin{align} s_0 & = x_0 \\ s_t & = α (x_t-c_{t-L}) + (1-α)(s_{t-1}+b_{t-1}) \\ b_t & = β(s_t - s_{t-1})+(1-β)b_{t-1} \\ c_t & = γ(x_t-s_{t-1}-b_{t-1})+(1-γ)c_{t-L} \end{align}\]
Цель сезонной декомпозиции – разделить сезонность, тренд и случайную компоненты.
Стандартный приём – метод Census I.
Временной ряд как комбинация 4 компонентов:
Обычно, тренд и циклическую компоненту объединяют в \(tc_t\)
Основные варианты связей:
Аддитивная: \(x_t = tc_t + s_t + i_t\)
Мультипликативная: \(x_t = tc_t s_t i_t\)
Алгоритм:
Метод – эвристический.
X-11 или Census II – больше специфических эвристик.
Нельзя не упомянуть про методы спектрального анализа. В рамках анализа потоковых данных – менее интересны.
В основе – преобразование Фурье.
Может помочь выделить характерные периоды в каком-то массиве данных, которые могут быть не слишком очевидны.
Поскольку SARIMA или экспоненциальное сглаживание предполагают, что периодичность известна a priori, анализ при помощи ПФ позволяет более обоснованно выбирать параметры.