У меня проблема с обнаружением аномалий с большой разницей между исправными и аномальными данными (т. Е.> 20 000 здоровых точек данных против <30 аномалий). </p>
В настоящее время я использую только точность, отзыв и оценку f1 для измеренияпроизводительность моей модели.Но у меня нет хорошего способа установить пороговый параметр.Но это не проблема на данный момент.
Я хочу измерить, способна ли модель различать два класса независимо от порога.Я прочитал, что меру ROC-AUC можно использовать, если данные не сбалансированы (https://medium.com/usf-msds/choosing-the-right-metric-for-evaluating-machine-learning-models-part-2-86d5649a5428).). Но с моими данными я получаю очень высокие оценки ROC-AUC (> 0,97), даже если модель выдает низкие оценки, есливозникает аномалия.
Может быть, кто-то знает лучшую меру производительности для этой задачи, или мне следует придерживаться показателя ROC-AUC?
Я пытаюсь добавить пример для своей проблемы:
Мы рассматриваем случай, когда у нас есть 20448 точек данных. У нас есть 26 аномалий в этих данных. С моей моделью я получаю следующие оценки аномалий для этих аномалий:
[1.26146367, 1.90735495, 3.08136725, 1.35184909, 2.45533306,
2.27591039, 2.5894709 , 1.8333928 , 2.19098432, 1.64351134,
1.38457746, 1.87627623, 3.06143893, 2.95044859, 1.35565042,
2.26926566, 1.59751463, 3.1462369 , 1.6684134 , 3.02167491,
3.14508974, 1.0376038 , 1.86455995, 1.61870919, 1.35576177,
1.64351134]
Если я сейчас выведу, сколькоточки данных имеют более высокий балл аномалии, например, 1.38457746, я получаю 281 балл данных. С моей точки зрения это выглядит как плохая производительность. Но в итоге показатель ROC AUC по-прежнему составляет 0,976038.
len(np.where(scores > 1.38457746)[0]) # 281