LINUX.ORG.RU

Фильтрование выбросов (аномальных значений) числового ряда с pandas

 , ,


0

2

Помогите реализовать метод отфильтровывания слишком больших значений числового ряда (это котировки акций). Пример значений 2018-09-09, 2018-09-17

               value
timestamp
2018-09-01  0.000206
2018-09-02  0.000217
2018-09-03  0.000212
2018-09-04  0.000209
2018-09-05  0.000212
2018-09-06  0.000235
2018-09-07  0.000267
2018-09-08  0.000271
2018-09-09  0.050000
2018-09-10  0.000277
2018-09-11  0.000252
2018-09-12  0.000243
2018-09-13  0.000261
2018-09-14  0.000291
2018-09-15  0.000303
2018-09-16  0.000292
2018-09-17  0.080000
2018-09-18  0.000352
2018-09-19  0.000389
2018-09-20  0.000359
2018-09-21  0.000350
2018-09-22  0.000350
2018-09-23  0.000350
2018-09-24  0.000335
2018-09-25  0.000341
2018-09-26  0.000355
2018-09-27  0.000358
2018-09-28  0.000357
2018-09-29  0.000352
2018-09-30  0.000333
тут находится полный csv с данными https://file.io/TINyWl существующий код для фильтрования (можете запускать на скачаннном файле)
import pandas as pd

df = pd.read_csv("254.csv")
df["timestamp"] = pd.to_datetime(df["timestamp"])
df.set_index('timestamp', inplace=True)

df["data_pct"] = df["value"].pct_change(1)
df["data_pct_norm"] = (df["data_pct"] - df["data_pct"].mean())/df["data_pct"].std()
df["data_pct_norm"].fillna(0, inplace=True)
index = df["data_pct_norm"].between(-7, 7)
df = df[index]

data_res = df["value"].resample('24H')
data_int = data_res.interpolate(method='linear')

data_int.to_csv("254_cleaned.csv")

Проблемы с существующим кодом: он не может фильтровать два подряд идущих аномальных значения (так как ищет относительное изменение значения в ряде) и иногда отфильтровывает реальные пики в данных. Посоветуйте алгоритмы, альтернативные подходы к подобной задаче (можно использовать scipy, что-либо еще)



Последнее исправление: C (всего исправлений: 1)

Почему бы просто не взять нужный перцентиль и на фильтровать по нему ?

Dred ★★★★★
()
Ответ на: комментарий от shkolnick-kun

спасибо! norm не могу изменять, иначе в исходном примере перестает выбросы находить, а kernel_size догнал до 77 аж

C
() автор топика
Ответ на: комментарий от Dred

как фильтровать по перцентилю в нестационарном процессе? мат ожидание сигнала постоянно прыгает.

C
() автор топика

Я надеюсь, что автор осведомлен о том, что курс акций очень хреново предсказывается математическими методами?

Ну, там, когда тишь и гладь на рынках, то что-то можно предвидеть. Однако, если на рынках штормит, обвалы акций или взлет, то математика ничего не дает обычно, скорее даже мешает, а вот психология и инсайдерская информация куда больше приносят пользы. И основные деньги зарабатываются и теряются как раз, когда на рынках штормит.

А так, у меня книжка где-то валяется по приложению теории мартингалов к финансовой математике. Я на нее смотрю как на прикольный такой предмет искусства математической мысли. Красиво, конечно, но есть ли толк?!

dave ★★★★★
()
Последнее исправление: dave (всего исправлений: 1)
Ответ на: комментарий от shkolnick-kun

Да я параметры подобрал, что оно теперь ко всем активам подходит. В том то и идея была, чтобы автоматически отфильтровывать выбросы

C
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.