Я работаю с большим количеством временных рядов. Эти временные ряды представляют собой в основном сетевые измерения, поступающие каждые 10 минут, а некоторые из них являются периодическими (т.е. Полоса пропускания), в то время как некоторые другие не являются (например, количеством трафика маршрутизации).
Мне нужен простой алгоритм для онлайн-обнаружения "outlier". В принципе, я хочу хранить в памяти (или на диске) все исторические данные для каждого временного ряда, и я хочу обнаружить любой выброс в реальном сценарии (каждый раз, когда будет отснят новый образец). Каков наилучший способ достижения этих результатов?
В настоящее время я использую скользящее среднее, чтобы удалить некоторый шум, но потом что дальше? Простые вещи, такие как стандартное отклонение, безумный,... против всего набора данных не работают (я не могу предположить, что временные ряды неподвижны), и мне хотелось бы что-то более "точный", в идеале черный ящик вроде:
double outlier_detection(double* vector, double value);
где vector - это массив двойных, содержащий исторические данные, а возвращаемое значение - это показатель аномалий для нового образца "значение".