Обзор

Допустим, вы разрабатываете беспилотный автомобиль или программное обеспечение для него (что, я согласен, является довольно большим предположением), и ваш первый прототип готов, который вы хотите тщательно протестировать. Один из способов - запустить множество тестовых автомобилей и проверить, как система реагирует на окружающую среду, что называется валидацией системы. Но это может быть очень капиталоемким, и хотя вы должны это делать, есть более простой или, скажем так, более дешевый способ сделать это, а именно с помощью моделирования, которое может очень быстро генерировать огромные объемы данных. В обоих случаях у вас есть множество сценариев, по которым вы можете протестировать свою систему, но имеет ли смысл подвергать программное обеспечение для самостоятельного вождения нагрузкам и множеству обычных условий? Нам необходимо протестировать программное обеспечение в критических сценариях, что является настоящим тестом для автономной системы, но критические сценарии генерируются менее чем в 1% случаев. Здесь я предлагаю метод, называемый обнаружением аномалий, который можно использовать для фильтрации критических сценариев из огромных блоков данных.

Во-первых, давайте поговорим об обнаружении аномалий или выбросов в целом. Согласно Википедии, обнаружение аномалий (также обнаружение выбросов) - это идентификация редких элементов, событий или наблюдений, вызывающих подозрения, поскольку они значительно отличаются от большинства данных. Итак, как можно реализовать обнаружение аномалий в наборе данных? Что ж, есть несколько методов для выполнения обнаружения аномалий, таких как обнаружение аномалий на основе плотности, обнаружение аномалий на основе кластеризации и обнаружение аномалий на основе Support Vector Machine. Здесь мы обсудим простой метод, основанный на скользящих средних, который обнаруживает точки за пределами фиксированного стандартного отклонения от скользящего среднего как выбросы в данных временного ряда. Анализировать среднее значение по временным рядам нетривиально, поскольку он не статичен. Вам понадобится скользящее окно для вычисления среднего значения по точкам данных. Технически это называется скользящей средней или скользящей средней, и она предназначена для сглаживания краткосрочных колебаний и выделения долгосрочных. Математически n-периодное простое скользящее среднее также можно определить как фильтр нижних частот. Вы можете найти очень интуитивное объяснение этого здесь. Давайте посмотрим на алгоритм:

  1. Сначала мы определяем функцию, которая вычисляет скользящее среднее для данных нашего временного ряда для фиксированного размера окна с использованием дискретных линейных сверток. Свертка - это математическая операция, которую можно описать как интеграл произведения двух функций после того, как одна будет обращена и сдвинута. В этом случае операция вычисляет среднее значение каждого скользящего окна.
  2. После вычисления скользящего среднего мы вычисляем разницу между значениями y и соответствующим средним значением, которое мы будем называть остатками. Затем мы вычисляем стандартное отклонение этих остатков.
  3. Мы определяем выброс или аномалии как точки, соответствующий остаток которых больше скользящего среднего плюс три стандартных отклонения или меньше скользящего среднего минус три стандартных отклонения. Мы выбрали три стандартных отклонения как произвольный выбор, который может варьироваться в зависимости от распределения данных и нашего варианта использования.

Давайте посмотрим на реализацию на Python:

Здесь я пытаюсь найти аномалии в образце данных для ускорения в зависимости от времени, которые дадут нам необычное поведение при ускорении транспортного средства. Это может означать резкое торможение или увеличение ускорения, которое может быть связано с возможным препятствием, столкновением или крутым поворотом и т. Д. Следующие результаты были получены на выборке данных с использованием скользящего окна 20:

Красные точки - это выбросы, а зеленая линия - среднее значение подвижных окон. Теперь эти выбросы должны быть дополнительно проанализированы, чтобы узнать, соответствуют ли они только шуму или критическим событиям, которые нас интересуют. Этот алгоритм дает нам интересующие моменты из всей продолжительности данных временного ряда, что сужает для нас поиск. Мы можем извлечь все такие критические события из огромного количества данных, которые мы могли бы собрать от клиентов / тестовых автомобилей, и передать их нашим автономным системам транспортных средств и посмотреть, как они на них отреагируют. Это может быть очень полезно при проверке автономных транспортных средств, поскольку критические события происходят менее чем в 1% данных, которые мы собираем.

Ваше здоровье !