Однако методы, обсуждаемые в этой статье, могут применяться не только к финансовым временным рядам, но и ко многим другим областям. В этой статье вы узнаете, как идентифицировать выбросы, используя скользящую статистику.

— Идентификация выбросов с помощью фильтра Хампеля

— Выявление точек изменения во временном ряду

— Выявление трендов во временных рядах

- Использование показателя Херста для выявления закономерностей во временном ряду.

— Изучение общих характеристик доходности активов.

Скользящая статистика для обнаружения выбросов

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

Используя скользящее среднее и стандартное отклонение, мы представляем простой метод, использующий фильтр для выявления выбросов. В течение 2019 и 2020 годов мы будем изучать цены акций Tesla.

Выполнение этой задачи включает в себя следующие шаги:

Следующие шаги помогут вам определить выбросы, используя скользящую статистику, и построить их график:

Должны быть включены необходимые библиотеки.

import pandas as pd
import yfinance as yf

Чтобы вычислить простую доходность Tesla, получите цены на ее акции за период с 2019 по 2020 год.

df = yf.download("TSLA",
                 start="2019-01-01",
                 end="2020-12-31",
                 progress=False)
df["rtn"] = df["Adj Close"].pct_change()
df = df[["rtn"]].copy()

Среднее значение скользящего окна за 21 день и стандартное отклонение следующие:

df_rolling = df[["rtn"]].rolling(window=21) \
                        .agg(["mean", "std"])
df_rolling.columns = df_rolling.columns.droplevel()

Добавьте скользящие данные в исходный DataFrame.

df = df.join(df_rolling)

Пределы должны быть определены на верхнем и нижнем концах.

N_SIGMAS = 3
df["upper"] = df["mean"] + N_SIGMAS * df["std"]
df["lower"] =…