Как меняется масштаб Polars .rolling в зависимости от количества столбцов?
Как изменяется масштаб Polars .rolling в зависимости от количества столбцов?
Вступление к вычислению вариограмм с использованием Polars
![Фото от Yiorgos с Unsplash.](https://ai.miximages.com/miro.medium.com/v2/resize:fit:640/format:webp/1*CTOPglyvof1LZHSr4Hab_A.jpeg)
Некоторое время я изучаю вариограммы [1]. Это инструмент визуализации, используемый в геостатистике для изучения изменения определенной величины в пространстве. Это может быть действительно хорошим диагностическим инструментом, помогающим ответить на следующие вопросы:
- Есть ли такое расстояние
d
от точкиxi
, где мы больше не получаем информационной ценности отxi
? - Есть ли цикличность в измерении в зависимости от расстояния?
Меня интересовало применение этой теории к данным временных рядов, особенно потому, что по сравнению с временными методами, такими как автокорреляция [2], вариограмма допустима для неполных или неравномерно распределенных данных (что является характеристикой реальных данных временных рядов) и может быть расширена до более высоких размерностей [3, 4].
Проблема с вариограммами заключается в том, что они требуют больших вычислительных ресурсов. Однако недавно я занимаюсь экспериментами с polars
и решил, что метод и/или выражение rolling
[5] прекрасно подходят для алгоритма вариограммы. Сложность заключается в том, что вариограмма масштабируется с количеством лагов, поэтому я хотел быстро увидеть, есть ли значительное ухудшение производительности при использовании Expr.rolling
[6] для большого количества столбцов.
Доказательство концепции: Можно ли использовать Polars .rolling для вариограмм?
Алгоритм для вариограммы относительно прост [1]:
- 10 лучших инструментов для дизайна моды AI
- Вы тратите время на свой ежедневный стэндап
- Быстрый шаблон FastAPI для LLM SaaS Часть 2 — Celery и Pg-vector
Где h
– это лаг (например, расстояние), delta
– это порог толерантности, z
– это значение, которое мы измеряем, и N
– это множество точек, где h-delta <= j-i <=h+delta
. Фактически, мы пытаемся найти все пары точек i,j
, разница между которыми находится в пределах [h-delta, h+delta]
.
Функция rolling в polars делает нечто очень похожее. Для каждой точки она создает окна [5]:
(x0 + offset, x0 + offset + period]
(x1 + offset, x1 + offset + period]
- …
Если мы определим offset = h — delta
, а period=2*delta
, то мы воссоздадим…