Я работаю над проектом обнаружения аномалий для записи подробного вызова для телефонного оператора, я подготовил выборку из 10000 наблюдений и 80 измерений, которые представляют совокупность наблюдений за день трафика, данные представлены в виде следующим образом:
это небольшая часть всего набора данных.
однако я решил использовать библиотеку PYOD, которая представляет собой API, который предлагает множество неконтролируемых алгоритмов обучения, я решил начать с CNN:
from pyod.models.knn import KNN
knn= KNN(contamination= 0.1)
result = knn.fit_predict(conso)
Затем, чтобы визуализировать результат, я решил изменить размер образца в 2-х измерениях и отобразить его в разбросе с помощью синих наблюдений, которые, как предсказывал КНН, не были выбросами, а красным - те, которые являются выбросами.
from sklearn.manifold import TSNE
result_f = TSNE(n_components = 2).fit_transform(df_final_2)
result_f = pd.DataFrame(result_f)
color= ['red' if row == 1 else 'blue' for row in result_list]
'df_final_2' является версией данных для conso.
тогда я поставил все это в правильные цвета:
import matplotlib.pyplot as plt
plt.scatter(result_f[0],result_f[1], s=1, c=color)
То, что меня беспокоит на графике, это то, что наблюдения предсказывают, что выбросы на самом деле не являются выбросами, потому что обычно выбросы находятся в конце графика и не группируются с нормальным поведением, даже анализируя эти наблюдения, не имеющие их нормальное поведение в исходном наборе данных, я пробовал другие алгоритмы PYOD, и я изменил параметры каждого алгоритма, но я получил по крайней мере тот же результат. Я где-то допустил ошибку и не могу ее распознать.
Thnx.