Два графика похожи. Что это значит численно?
Вопрос не праздный: от ответа зависит, какие эпизоды истории попадут в выдачу. Есть два принципиально разных подхода, и на сайте используются оба — но в разных ролях.
Пирсон сравнивает точки по позициям
Коэффициент корреляции Пирсона берёт две последовательности одинаковой длины и смотрит, насколько согласованно они отклоняются от своих средних. Первая точка сравнивается с первой, десятая с десятой, пятидесятая с пятидесятой.
Для многих задач этого достаточно, и считается он очень быстро. Но у жёсткой привязки к позиции есть слабое место, и на графиках оно проявляется постоянно.
Представьте два эпизода: в обоих цена сходила вниз, постояла и развернулась вверх. В первом падение заняло восемь свечей, во втором — двенадцать. Человек скажет, что это одна и та же фигура, просто вторая растянута. Пирсон скажет, что корреляция низкая: к тому моменту, когда первая последовательность уже разворачивается, вторая ещё падает, и точки не совпадают по позициям.
Рынок не обязан повторять движения с одинаковой скоростью. Привязка к позиции отбрасывает совпадения, которые по существу совпадения.
Что делает DTW
Dynamic Time Warping решает ровно эту проблему. Вместо жёсткого соответствия «точка i к точке i» алгоритм ищет наилучшее соответствие с возможностью тянуть время: одна точка образца может соответствовать нескольким точкам окна и наоборот.
Формально строится матрица расстояний между всеми парами точек и в ней ищется путь от начала к концу с минимальной суммой. Путь может идти по диагонали — это совпадение точка в точку, — а может двигаться вбок, и это как раз означает «здесь одна последовательность шла медленнее».
Результат — накопленное расстояние вдоль лучшего пути. Чем меньше, тем более похожи.
Почему DTW нельзя оставить без ограничений
У свободы тянуть время есть обратная сторона. Если разрешить произвольное растяжение, алгоритм найдёт хорошее соответствие практически между любыми двумя последовательностями: он просто сопоставит первую половину одной с одной точкой другой, а потом всё остальное — со всем остальным.
Такое совпадение бессмысленно. Фигура, растянутая в десять раз, — это уже не та же фигура.
Поэтому DTW ограничивают полосой вокруг диагонали: точке с номером i разрешено соответствовать только точкам в окрестности того же номера. Это называется полосой Сакоэ-Чибы, и её ширина — главный параметр.
У нас полоса равна десяти процентам длины образца. На окне в пятьдесят свечей это пять свечей свободы в каждую сторону: движение может опоздать или опередить на пять баров, и это всё ещё будет считаться тем же движением. Задержка на пятнадцать баров — уже нет.
Десять процентов — не универсальная константа, а выбор. Шире — больше совпадений и больше мусора, уже — алгоритм вырождается обратно в покоординатное сравнение.
Зачем тогда остался Пирсон
DTW дороже покоординатного сравнения на порядки: вместо одного прохода по последовательности нужно заполнить матрицу. На двадцати тысячах окон это заметно.
Поэтому Пирсон никуда не делся, он переставлен вперёд и работает предфильтром. Порог — 0.70 для методов по ценам, 0.50 для методов по приращениям. То, что не набрало даже такой грубой согласованности, точно не станет хорошим совпадением по форме, и тратить на него DTW незачем.
Получается разделение ролей: Пирсон дёшево отсекает заведомо чужое, DTW аккуратно оценивает оставшееся. Ни один не заменяет другого.
Три способа сравнения
На сайте три метода, и различаются они тем, что именно подаётся на вход алгоритму.
По ценам. Последовательность нормированных цен — процентов от первой свечи окна. Сравнивается сама траектория. Это метод по умолчанию.
По приращениям. Последовательность изменений от свечи к свече. Траектория при этом игнорируется, важен ритм движения: где были резкие шаги, где спокойные. Порог Пирсона здесь мягче, 0.50, потому что ряд приращений заметно шумнее ряда цен.
Пошаговое сравнение. Метод без DTW. Сначала проверяется, что общее движение окна близко к общему движению образца. Потом для каждой пары соседних свечей смотрится, отличается ли шаг окна от шага образца больше чем на 0.75 процентного пункта. Похожесть — просто доля совпавших шагов. Строгая привязка к позициям здесь сохраняется, зато результат легко объяснить словами: «восемьдесят процентов шагов совпали с точностью до трёх четвертей пункта».
Как расстояние превращается в проценты
Для методов на DTW похожесть считается так: сто делится на единицу плюс расстояние. Расстояние ноль даёт сто процентов, расстояние единица — пятьдесят, дальше кривая быстро спадает.
Из этой формулы следует важное свойство шкалы: она нелинейная и очень строгая в верхней части. Чтобы получить девяносто процентов, расстояние должно быть около одной девятой — то есть совпадение почти точное. Разница между порогом 90 и порогом 80 гораздо больше, чем между 80 и 70, хотя по шкале шаг одинаковый.
У пошагового метода шкала другая: там похожесть — это прямо доля совпавших шагов, умноженная на сто. Восемьдесят процентов означают, что совпали четыре шага из пяти. Одна и та же цифра на ползунке означает для этих методов разные вещи, и это стоит знать при переключении.
Что из этого следует на практике
Выбор алгоритма — не техническая деталь, а решение о том, какие эпизоды вы считаете похожими.
Если важна точная траектория — метод по ценам. Если важнее характер движения, а не его направление, — метод по приращениям. Если нужна прозрачность и объяснимость каждого процента — пошаговое сравнение.
И во всех трёх случаях на выходе остаётся одно и то же: список мест в истории с похожим рисунком движения. Что было после них — отдельный вопрос, и отвечать на него нужно осторожно.