Добрый день. Есть два временных ряда. Например: Графики золота и серебра
Графики, хоть и имеют различия в размерности, но двигаются очень похоже.
Вопрос: есть ли в python библиотека, которая может мне помочь с кластеризацией таких временных рядов?
Если вас не затруднит - поглядите, пожалуйста, ответ в соседней ветке. во временные ряды я погрузился, чтобы не отвлекать простыми вопросами.
За ссылки - спасибо, погляжу
Кластеризация временного ряда - это первое, что приходит в голову новичку в теме, но как знают те, что в тему уже не первый год - очень не лучшее решение для предсказания на основе временного ряда. Есть смысл использовать его только тогда, когда другие, более отработанные методы оказываются почему-то непригодными. Ну, например, когда один график повторяет другой но без привязки ко времени (трудно без картинки пояснить - погуглите Dynamic Time Warping) и есть необходимость использования именно другого (чужого) графика, а не "свои" данные текущего ряда.
Вы же рассматриваете зависимость значений вашего ряда от ПРЕДЫДУЩИХ значений либо самого вашего ряда, либо нескольких рядов. (Цена золота сегодня зависит от цены золота вчера и цены серебра вчера). Т.е. в вашем случае надо смотреть обычные (ну, многомерные, если очень хочется) временны ряды и работу с ними. Для таких задач, кстати, наличие сильной корреляция двух рядов скорее преграда, а не помощь в предсказании.
Ваша задача достаточно хорошо проработана в теории и в виде кучи разных реализаций. От методов Брауна-Хольта-Винтерса, до (V)SARIMA, от скользящего среднего до всяких нейросети (LSTM - как пример), от Фурье-анализа до GARCH-моделей. И для моделей с сезонностью, и для моделей случайного блуждания, и для моделей с регрессией и без. С реализациями и в TemsorFlow, и в Prophet, и в Pytorch, примеров применения которых в разных предметных областях - выше крыше, а ваши "потоки покупателей/продаж" и пр. маркетинговые штучки - так вообще излюбленная тема примеров. Большинство из методов не только даст вам прогноз, но и позволит оценить его точность. И в какой-то мере обеспечить пониманием того, насколько прогнозу можно доверять (в отличии, кстати, от кластеризации).
На досуге ознакомьтесь: https://otexts.com/fpp2/
P.S. Но если уж очень хочется помучиться именно с кластеризацией - то вот еще приличная статейка - забыл ее включить в первый свой ответ: https://habr.com/ru/post/334220/ Там же найдете неплохой список библиографии, если что.
dmshar, DTW - ок, на неделе планировал до него дойти, спасибо.
статья на Хабре - да, отличная. вопрос был именно от нее: чтобы не собирать велосипеды самому, есть решения? (Prophet от FB пока не хочется - ибо там уже, как я понял, нейронки). ARIMA, судя по всему, плохоустойчива к выбросам.
В общем, кроличья нора глубже, чем казалась.
да, я знакомился с этой статьей, конечно.
я не зря сказал "например".
у меня есть куча временных рядов (для простоты - получение данных с точек продаж). отбрасываем расположение/поток людей и все такое. остается чистое поведение именно во времени.
для чего кластеризовать:
те графики, которые двигаются похоже (неважно, отличаются ли они по Эвклидову расстоянию, т.е. по OY, или нет) - запихиваю в один кластер.
И да, отдаю себе отчет в том, что некоторые точки могут менять кластер при очередном пике сезонности.
Тогда я смогу построить предположение, что "т.к. точка а находится в кластере А, который ведет себя вот так, то, значит, следующее значение должно быть таким-то". Если этот наивный прогноз не сбывается - я считаю это выбросом.
Сейчас делаю так:
1/ беру все данные из последнего поступления
2/ вытаскиваю значение по одной точке
3/ считаю распределение по оставшимся / нормализую его
4/ если вытащенное значение лежит в +/- сигме (или двух) - считаю значение нормальным. Если нет - выброс.
5/ так циклом прохожусь по всем.
Нормально, но хочется осознанности