Построение аномалий в простом примере изолированного леса с использованием Python - PullRequest
0 голосов
/ 02 августа 2020

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

1

no | temp
1  | 36.5
2  | 39.8
3  | 37.4
4  | 40.2
5  | 40.8

Как видно, есть 2 пика или аномалии (выделены жирным шрифтом). Модель IsolationForest легко обнаруживает эти аномалии, и фрейм данных df['anomalies'] возвращает индексное местоположение аномалий.

Вот фрагмент кода, который сообщает об аномалиях (местоположения в наборе данных)

df['anomaly']=model.predict(df[['temp']])
anomaly=df.loc[df['anomaly']==-1]
print("Anomalies are detected at these positions")
anomaly_index=list(anomaly.index)
print(anomaly_index)

Приведенный выше код затем предсказывает аномалии в форме Расположение индексов (в наборе данных), например [43, 26, 126]

Исходя из этого, у меня есть две проблемы, которые я не могу для решения:

  1. Как получить значения из anomaly_index мест индекса. (Например, после обнаружения этих температурных аномалий я хотел бы получить соответствующие значения температуры (например, 39,8 и 40,8), чтобы в дальнейшем выполнять с ними действия.
  2. Я могу построить кадры данных для исходных значений, но я хотел бы наложить / наложить выбросы или аномалии на графике (например, все показания температуры из набора данных вместе с этими двумя аномалиями).

Я перепробовал все возможные способов, но из-за моего отсутствия навыков в python я застрял на этой проблеме. Может ли кто-нибудь помочь?

ура

1 Ответ

0 голосов
/ 02 августа 2020

Вы можете выполнить следующий шаг:

Шаг-1: Определите пороговое значение, если какое-либо значение, превышающее его, будет считаться аномалиями.

Шаг 2: Сравните все значения с порог и сохраните его.

Вы можете попробовать это

     THRESHOLD = 39
     df['threshold'] = THRESHOLD
     df['anomaly'] = df.temp > df.threshold
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...