Линейная подгонка в пределах Rolling_map медленная для Python-поляровPython

Программы на Python
Ответить
Anonymous
 Линейная подгонка в пределах Rolling_map медленная для Python-поляров

Сообщение Anonymous »

У меня есть набор данных временных рядов в виде поляры (v0.20.6) pl.DataFrame, который имеет сильную сезонность, которая хорошо прогнозируется и моделируется с помощью (линейных) прогнозов на один час вперед.
На данный момент это невероятно медленно, вызывает проблемы с памятью и, в конечном итоге, сбой ядра Python.
В качестве примера я использую строку pl.DataFrame размером ~2 м с ~300 столбцами, что является набор данных временных рядов с ежеминутной частотой. На этих данных я выполняю

Код: Выделить всё

def ols_slope(y: pl.Expr) -> pl.Expr:
# Calculate linear regression slope
x = y.rank("ordinal")
numerator = ((x - x.mean())*(y - y.mean())).sum()
denominator = ((x - x.mean())**2).sum()
return numerator / denominator

Код: Выделить всё

def ols_offset(y: pl.Expr) -> pl.Expr:
# Calculate linear regression offset
x = y.rank("ordinal")
numerator = ((x - x.mean())*(y - y.mean())).sum()
denominator = ((x - x.mean())**2).sum()
return (numerator / denominator) * x.mean() - y.mean()
в столбце date_utc+value, чтобы получить локальную линейную подгонку с помощью

Код: Выделить всё

raw_data = (
pl.read_ipc("../data_vault_1min.feather")
.with_columns(
[
pl.col("A1").rolling_map(ols_slope, window_size=60, min_periods=3).alias("A1_hourly_lin_pred"),
pl.col("A1").rolling_map(ols_slope, window_size=60, min_periods=3).alias("A1_hourly_lin_pred")
]
)
)
Насколько я вижу, под капотом выполняется функция group_by_dynamic(), от которой я ожидаю достаточно высокой производительности.
Тем не менее, эта единственная операция всегда полностью перегружает мою память и приводит к сбою ядра.
Она хорошо работает на небольшом подмножестве данных

Подробнее здесь: https://stackoverflow.com/questions/782 ... hon-polars
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»