Чем отличаются настоящие выбросы с PYod? - PullRequest
0 голосов
/ 03 апреля 2019

Я работаю над проектом обнаружения аномалий для записи подробного вызова для телефонного оператора, я подготовил выборку из 10000 наблюдений и 80 измерений, которые представляют совокупность наблюдений за день трафика, данные представлены в виде следующим образом:

enter image description here

это небольшая часть всего набора данных.

однако я решил использовать библиотеку 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)

enter image description here

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

Thnx.

1 Ответ

0 голосов
/ 08 мая 2019

Есть несколько вещей, которые нужно проверить:

  • с использованием моделей knn, lof и аналогичных моделей, основанных на измерении расстояний, данные должны быть сначала стандартизированы (с использованием sklearn StandardScaler)
  • Теперь tsne может работать в этом случае, и уменьшение размерности может быть отключено
  • , возможно, не использовать fit_predict, но сделайте это (используйте y_train_pred):
    # train kNN detector
    clf_name = 'KNN'
    clf = KNN(contamination=0.1)
    clf.fit(X)

    # get the prediction labels and outlier scores of the training data
    y_train_pred = clf.labels_  # binary labels (0: inliers, 1: outliers)
    y_train_scores = clf.decision_scores_  # raw outlier scores

Если ни один из этихработайте, не стесняйтесь открывать отчет о проблеме на GitHub, и мы проведем дальнейшее расследование.

...