Я пытаюсь автоматизировать обнаружение выбросов во временных рядах, и я использовал модификацию решения, предложенного здесь Робом Хиндманом .
Скажем, я измеряю ежедневные посещения сайта из разных стран. В некоторых странах, где ежедневные посещения составляют несколько сотен или тысяч, мой метод, кажется, работает разумно.
Однако в тех случаях, когда страна ведет к 1 или 2 визитам в день, ограничения алгоритма очень узки (например, 1 ± 0,001), и поэтому 2 посещения считаются выбросами. Как я могу автоматически обнаруживать такие случаи и как я могу лечить их, чтобы идентифицировать выбросы? Я не хотел бы устанавливать ручной порог, скажем, 100 посещений в день.
Спасибо!
Ответы:
Не ожидайте многого для маленьких дискретных счетов. Переход от 1 до 2 посещений - это увеличение на 100%, а от 0 до 1 посещения - это бесконечное увеличение. На низких уровнях вы можете иметь дело с моделями с нулевой раздувкой , и там может быть очень шумно.
По моему опыту, подсчет данных со смесью больших и малых подсчетов, подобных этой, приводит к двум проблемам с вашими малыми подсчетами: 1) они слишком грубые, чтобы их можно было много делать, 2) они генерируются различными процессами. (Представьте себе маленькое сельское почтовое отделение или большое городское почтовое отделение). Поэтому вам нужно как минимум разделить моделирование на две части: делать то, что вы успешно делаете, для больших количеств и делать что-то другое - более грубое и более приближенное - с небольшими. Но не ожидайте большого количества маленьких подсчетов.
Хорошая новость заключается в том, что большое количество по определению включает больше ваших транзакций, поэтому ваша лучшая модель охватывает больше данных, даже если она может не охватывать большинство ваших сайтов.
(Я говорю, что «моделирование» носит общий характер, но, конечно, обнаружение выброса предполагает принятие конкретной модели и нахождение точек, которые весьма маловероятны с предположениями этой модели.)
источник
Каждое значение из вашего временного ряда является выборкой из распределения вероятностей. Сначала нужно найти, каково распределение вероятностей, а затем определить, что означает слово редкий в этом распределении.
Поэтому рассчитайте эмпирический cdf и рассчитайте 95% доверительный интервал. Когда что-то происходит за пределами этого региона, то по определению вы знаете, что это должно быть редкое событие.
источник
Одно дело обнаружить выброс на определенном уровне достоверности, а другое - разместить вторую спецификацию, которая еще больше ограничит принятие выброса. Однажды мне задали следующий вопрос: «Может ли AUTOBOX обнаружить среднее смещение единиц хх с заранее заданным уровнем достоверности». По сути, требовалось двойное испытание. AUTOBOX - это программное обеспечение, которое я помогал разработать, которое может оказаться экономически эффективным, поскольку ни одно бесплатное программное обеспечение не реализовало этот двойной тест.
Спасибо, Ник: Я использовал сдвиг уровня в качестве конкретного примера "выброса" или вообще эмпирически определенного детерминированного воздействия. Другими формами «выбросов» являются импульсы, сезонные импульсы и тренды местного времени И конкретные комбинации, такие как переходные процессы на новый уровень. Основной момент заключался в том, что могут быть две гипотезы, которые отражают статистическую значимость и значимость в реальном мире. Клиент, который первоначально обратил внимание на эту проблему, интересовался обоими.
источник
У вас возникла эта проблема, потому что ваши данные далеки от нормального распределения. Если распределение очень асимметричное, с неровностями, горбами или слишком длинными / короткими хвостами, вы столкнетесь с проблемами. Хорошая идея - применить преобразование типа Box Cox или Yeo-Johnson перед использованием вашего метода. В вашем примере, если вы используете F (x) = log (1 + x), вы избегаете проблемы с другой величиной и можете конвертировать обратно, используя: exp (z) -1
Есть несколько процедур, которые вы можете использовать, чтобы автоматически найти хорошую лямбду для преобразования Бокса-Кокса. Я лично использую медиану всех методов функции boxcoxnc из пакета AID в R. Если ваши данные не являются строго положительными, вам нужно будет добавить 1 или другое положительное число, прежде чем использовать его.
источник