Как меняется масштаб Polars .rolling в зависимости от количества столбцов?

Как изменяется масштаб Polars .rolling в зависимости от количества столбцов?

Вступление к вычислению вариограмм с использованием Polars

Фото от Yiorgos с Unsplash.

Некоторое время я изучаю вариограммы [1]. Это инструмент визуализации, используемый в геостатистике для изучения изменения определенной величины в пространстве. Это может быть действительно хорошим диагностическим инструментом, помогающим ответить на следующие вопросы:

  • Есть ли такое расстояние d от точки xi, где мы больше не получаем информационной ценности от xi?
  • Есть ли цикличность в измерении в зависимости от расстояния?

Меня интересовало применение этой теории к данным временных рядов, особенно потому, что по сравнению с временными методами, такими как автокорреляция [2], вариограмма допустима для неполных или неравномерно распределенных данных (что является характеристикой реальных данных временных рядов) и может быть расширена до более высоких размерностей [3, 4].

Проблема с вариограммами заключается в том, что они требуют больших вычислительных ресурсов. Однако недавно я занимаюсь экспериментами с polars и решил, что метод и/или выражение rolling [5] прекрасно подходят для алгоритма вариограммы. Сложность заключается в том, что вариограмма масштабируется с количеством лагов, поэтому я хотел быстро увидеть, есть ли значительное ухудшение производительности при использовании Expr.rolling [6] для большого количества столбцов.

Доказательство концепции: Можно ли использовать Polars .rolling для вариограмм?

Алгоритм для вариограммы относительно прост [1]:

Где 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, то мы воссоздадим…