Изабель Таллам | Sw Eng, аналитика в реальном времени; Чарльз Ву | Sw Eng, аналитика в реальном времени; Капил Баджай | Инженер-менеджер, аналитика в реальном времени

Обнаружение аномальных событий в последние годы становится все более важным в Pinterest. Аномальные события в широком смысле — это редкие явления, которые отклоняются от нормального или ожидаемого поведения. Поскольку такие типы событий можно обнаружить практически где угодно, возможности и приложения для обнаружения аномалий огромны. В Pinterest мы изучили использование обнаружения аномалий, в частности, нашей платформы обнаружения аномалий Warden, для нескольких вариантов использования (о которых мы поговорим в этом посте). Учитывая положительные результаты, которые мы наблюдаем, мы планируем продолжать расширять нашу работу по обнаружению аномалий и варианты использования.

В этом сообщении блога мы рассмотрим:

  1. Платформа для обнаружения аномалий Warden. Мы подробнорасскажем об общей архитектуре и философии дизайна платформы.
  2. Сценарий использования 1: дрейф модели машинного обучения. Недавно мы добавили функцию просмотра оценок машинного обучения в нашу платформу обнаружения аномалий Warden. Это позволяет нам анализировать любой дрейф в моделях.
  3. Сценарий использования 2. Обнаружение спама. Обнаружение и удаление спама и пользователей, создающих спам, является приоритетом для обеспечения безопасности наших систем и обеспечения удобства пользователей.

Что такое надзиратель?

Warden — это платформа для обнаружения аномалий, созданная в Pinterest. Ключевым принципом проектирования Warden является модульность — построение платформы по модульному принципу, чтобы мы могли легко вносить изменения.

Почему? В начале нашего исследования быстро стало ясно, что существует много подходов к обнаружению аномалий, в зависимости от типа данных или того, как аномалии могут быть определены для данных. Для учета этих различий потребуются различные подходы и алгоритмы. Имея это в виду, мы работали над созданием трех разных модулей, модулей, которые мы используем до сих пор:

  • Входные данные запроса: извлекает данные для анализа из источника данных.
  • Применение алгоритма аномалий: анализирует данные и идентифицирует любые выбросы.
  • Уведомление: возврат результатов или предупреждений для потребляющих систем, чтобы инициировать следующие шаги.

Этот модульный подход позволил нам легко адаптироваться к новым типам данных и при необходимости подключать новые алгоритмы. В следующих разделах мы рассмотрим два наших основных варианта использования: дрейф модели машинного обучения и обнаружение спама.

Обнаружение дрейфа модели машинного обучения в реальном времени

Первый вариант использования — наш проект ML Monitoring. В этом разделе будет подробно рассказано о том, почему мы инициировали этот проект, какие технологии и алгоритмы мы использовали и как мы решили некоторые препятствия, с которыми мы столкнулись во время внедрения изменений.

Зачем контролировать дрейф модели?

Pinterest, как и многие компании, использует машинное обучение в нескольких областях и добилась больших успехов. Однако со временем точность модели может снизиться по мере изменения внешних факторов. Проблема, с которой мы столкнулись, заключалась в том, как обнаружить эти изменения, которые мы называем дрейфами.

Что такое дрейф модели на самом деле? Предположим, что пользователи Pinterest (пиннеры) ищут идеи для одежды. Если текущий сезон — зима, то пальто и шарфы могут быть в тренде, а модели ML будут рекомендовать булавки, подходящие к зимней одежде. Однако, как только сезон станет теплее, пиннеры будут больше заинтересованы в более легкой одежде для весны и лета. На данный момент модель, которая по-прежнему рекомендует зимнюю одежду, больше не является точной, поскольку пользовательские данные меняются. Это называется дрейфом модели, и команда машинного обучения должна принять меры и обновить функции, например, чтобы исправить выходные данные модели.

Многие из наших команд, использующих машинное обучение, пробовали свои собственные подходы к внедрению изменений или обновлению моделей. Однако мы хотим убедиться, что команды могут сосредоточить свои усилия и ресурсы на своих реальных целях и не тратить слишком много времени на выяснение того, как выявить отклонения. .

Мы решили рассмотреть проблему комплексно и вложить средства в поиск единственного решения, которое мы можем предоставить с Warden.

В качестве первого шага к обнаружению дрейфа в оценках модели нам нужно было определить, как мы хотим смотреть на данные. Мы определили три разных подхода к анализу данных:

  • Сравнение текущих данных с историческими данными — например, неделю назад, месяц назад и т. д.
  • Сравнение данных между двумя разными средами, например промежуточной и рабочей.
  • Сравнение текущих данных о продукте с предопределенными данными, как ожидается, что модель будет работать.

В нашей первой версии платформы мы решили использовать первый подход, который сравнивает исторические данные. Мы приняли это решение, потому что этот подход дал представление об изменениях модели с течением времени, может потребоваться повторное обучение сигнализации.

Выбор правильного алгоритма

Чтобы определить дрейф в оценках модели, нам нужно было убедиться, что мы выбрали правильный алгоритм, который позволил бы нам легко идентифицировать любой дрейф в модели. Изучив различные алгоритмы, мы сузили его до индекса стабильности населения (PSI) и дивергенции Кульбака-Лейблера/дивергенции Дженсена-Шеннона (KLD/JSD). В нашей первой версии мы решили реализовать PSI, так как этот алгоритм также доказал свою эффективность в других случаях использования. В будущем мы планируем подключить другие алгоритмы, чтобы расширить наши возможности.

Алгоритм PSI разделяет входные данные на 10 сегментов. Простой пример — деление списка пользователей на их возраст. Мы распределяем каждого человека по возрастному сегменту. Сегмент создается для каждого 10-летнего возрастного диапазона: 0–10 лет, 11–20 лет, 21–30 лет и т. д. Для каждого сегмента рассчитывается процентная доля того, сколько данных мы находим в этом диапазоне. Затем мы сравниваем каждый блок текущих данных с блоком исторических данных. Это приведет к единой оценке для каждого вычисления ведра. Сумма этих баллов и будет общей оценкой PSI. Это можно использовать для определения того, как возраст населения изменился с течением времени.

В нашей текущей реализации мы рассчитываем оценку PSI, сравнивая исторические оценки модели с текущими оценками модели. Для этого сначала определяем размер корзины в зависимости от входных данных. Затем мы вычисляем проценты сегментов для каждого периода времени, которые используются для возврата оценки PSI. Чем выше показатель PSI, тем больший дрейф режим испытывает в течение выбранного периода.

Расчет повторяется каждые несколько минут, при этом окно ввода скользит, чтобы обеспечить непрерывную оценку PSI, четко показывающую, как оценки модели меняются с течением времени.

Настройка алгоритма

На этапе проверки мы заметили, что размер временного окна оказывает большое влияние на полезность оценки PSI. Выбор слишком маленького окна может привести к очень изменчивым показателям PSI, потенциально создавая предупреждения даже при небольших отклонениях. Выбор слишком большого периода может потенциально скрыть проблемы дрейфа модели. В нашем случае мы видим хорошие результаты с 3-часовым окном и расчетом PSI каждые 3–5 минут. Эта конфигурация будет сильно зависеть от изменчивости данных и требований SLA по обнаружению дрейфа.

Еще одно изменение, которое мы заметили в рассчитанных показателях PSI, заключалось в том, что некоторые из показателей оказались выше ожидаемых. Это особенно верно для оценок модели, которые не сильно отклоняются от ожидаемого диапазона. Мы должны предположить, что результирующий показатель PSI равен 0 или близок к 0 для этих вариантов использования.

После более глубокого изучения входных данных мы обнаружили, что расчетный размер корзины для этих экземпляров был установлен на очень маленькое значение. Поскольку наша логика включает вычисление размеров корзины на лету, это произошло для показателей модели с очень узким диапазоном данных и показало несколько всплесков данных.

Логически, расчет PSI правильный. Однако в данном конкретном случае незначительные отклонения менее 0,1 не имеют значения. Чтобы сделать показатели PSI более актуальными, мы внедрили настраиваемый минимальный размер сегментов — минимум 0,1 для большинства случаев. Результаты с этой конфигурацией теперь более значимы для групп машинного обучения, просматривающих данные.

Однако эта конфигурация будет сильно зависеть от каждой модели и от того, какой процент изменения считается отклонением от нормы. В некоторых случаях отклонение 0,001 может быть очень значительным и потребует гораздо меньших размеров ковша.

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

Учитывая этот ранний успех, теперь мы планируем расширить использование показателей PSI. Мы будем проводить оценку дрейфа признаков, а также рассмотрим остальные варианты сравнения, упомянутые выше.

Обнаружение спама

Обнаружение спама — второй вариант использования Warden. В следующем разделе мы рассмотрим, зачем нам нужно обнаружение спама и почему мы выбрали библиотеку Yahoo Extensible Generic Anomaly Detection System (EGADS) для этого проекта.

Почему обнаружение спама так важно?

Прежде чем обсуждать обнаружение спама, давайте сосредоточимся на том, что мы определяем как спам и почему мы хотим его исследовать. Pinterest — это глобальная платформа, миссия которой — вдохновить каждого на создание жизни, которую он любит. Это означает создание положительного места, которое соединяет нашу глобальную аудиторию, более 450 миллионов пользователей, с персонализированным, действенным контентом — местом, где они могут черпать вдохновение, планировать и реализовывать лучшие мировые идеи.

Одним из наших главных приоритетов и основной ценностью программы «Путь булавки превыше всего» является обеспечение отличного опыта для наших пользователей, независимо от того, ищут ли они вдохновения для ужина на следующей неделе, делают покупки на день рождения любимого человека или просто хотят сделать перерыв на здоровье. Когда они ищут вдохновения, а вместо этого находят спам, это может стать большой проблемой. Некоторые злоумышленники создают булавки и связывают их со страницами, не связанными с изображением булавки. Поскольку пользователь, нажавший на изображение вкусного рецепта, попадет на совсем другую страницу, это может разочаровать, и поэтому мы хотим, чтобы этого не произошло.

Удаление спам-булавок — это часть решения, но как предотвратить повторение этого? Мы не просто хотим удалить симптом, то есть плохой контент, мы хотим удалить источник проблемы и убедиться, что мы выявляем злоумышленников, чтобы они не продолжали создавать спам.

Как мы можем определить спам?

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

До того, как наша платформа обнаружения аномалий Warden стала доступной, для выявления спама нашей группе доверия и безопасности требовалось вручную запускать запросы, просматривать и оценивать данные, а затем инициировать вмешательство в случае любых подозрительных событий.

Итак, как мы узнаем, когда создается спам? В большинстве случаев злоумышленники не просто создают один спам-пин. Чтобы заработать деньги, они хотят создавать большое количество спам-булавок за раз и расширять свою сеть. Это помогает нам идентифицировать этих пользователей. Глядя, например, на создание пинов, мы знаем, что ожидаем что-то вроде синусоиды, когда смотрим на количество пинов, созданных за день или неделю. Пользователи создают пины днем, а ночью создается меньше пинов. Мы также знаем, что могут быть некоторые различия в зависимости от дня недели.

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

Чтобы получить более детализированную картину, мы углубились в детали и отфильтровали по определенным параметрам. Эти параметры включали фильтры, такие как используемый интернет-провайдер (ISP), страна происхождения, типы событий (создание булавок и т. д.) и многие другие параметры. Это позволило нам просматривать все меньшие и меньшие наборы данных, в которых пики более четкие и их легче идентифицировать.

Получив знания о том, как должны выглядеть обычные пользовательские данные без спама, мы продвинулись вперед и рассмотрели варианты обнаружения аномалий:

  1. Ожидается, что данные будут следовать аналогичному шаблону с течением времени.
  2. Мы можем фильтровать данные, чтобы лучше понять
  3. Мы хотим знать о любых всплесках данных как о потенциальном спаме.

Внедрение системы обнаружения спама

Мы начали рассматривать несколько фреймворков, которые легко доступны и уже поддерживают многие функции, которые мы искали. Сравнив несколько вариантов, мы решили остановиться на Yahoo! Фреймворк EGADS [https://github.com/yahoo/egads].

Эта структура анализирует данные в два этапа. Процесс настройки считывает исторические данные и определяет данные, ожидаемые в будущем. Обнаружение — это второй шаг, на котором фактические данные сравниваются с ожидаемыми, а любые выбросы, превышающие определенный порог, помечаются как аномалии.

Итак, как мы используем эту библиотеку в нашей платформе обнаружения аномалий Warden? Чтобы обнаружить аномалии, нам нужно пройти несколько фаз.

На первом этапе мы предоставляем все необходимые конфигурации, необходимые для задач. Это включает в себя сведения об источнике входных данных, какие алгоритмы обнаружения аномалий использовать, параметры, которые будут использоваться на этапе обнаружения, и, наконец, как обрабатывать результаты.

Имея конфигурацию, Warden начинает с подключения к источнику данных и запроса входных данных. Благодаря модульному подходу мы можем подключать различные источники и добавлять дополнительные разъемы по мере необходимости. Наша первая версия Warden была сосредоточена на чтении данных из нашего кластера Apache Druid. Поскольку данные представляют собой данные в режиме реального времени и уже сгруппированы по отметкам времени, это позволяет легко обнаруживать аномалии. Для более поздних проектов мы также добавили коннектор Presto для поддержки новых вариантов использования.

Как только данные запрашиваются из источника данных, они преобразуются в требуемый формат для этапа настройки/обнаружения. Подача данных в модуль моделирования временных рядов EGADS (TM) запускает этап настройки, за которым следует этап обнаружения с использованием одной или нескольких моделей обнаружения аномалий (ADM) для выявления любых выбросов.

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

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

Как только мы собрали достаточно подробностей о данных, мы переходим к нашей последней фазе, фазе уведомления. На этом этапе мы уведомляем всех подписчиков о потенциальных аномалиях. Подробная информация предоставляется по электронной почте, через Slack и другими способами, чтобы сообщить нашей группе доверия и безопасности о принятии мер по деактивации пользователей, блокировке пользователей и т. д.

С помощью платформы обнаружения аномалий Warden мы смогли улучшить работу Pinterest по обнаружению спама, что значительно повлияло на количество выявленных злоумышленников и скорость их обнаружения. Это было большим улучшением по сравнению с ручными исследованиями.

Наши команды Trust & Safety высоко оценили использование Warden и планируют увеличить количество вариантов использования.

«Одна из самых важных вещей, которые нам нужны для выявления спамеров, — это правильно сегментировать функции и периоды времени, прежде чем мы будем выполнять какую-либо кластеризацию или измерение. Warden позволил нам заранее получать оповещения и находить наиболее важный сегмент для запуска наших алгоритмов». — Группа доверия и безопасности

Будущее

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

В будущем мы планируем расширить использование обнаружения аномалий, чтобы заранее получать оповещения о любых изменениях в системе Pinterest до того, как возникнут реальные проблемы. Еще один вариант использования, который мы планируем включить в нашу платформу, — это анализ первопричин. Это будет применяться к текущим и историческим данным, что позволит нашим командам сократить время, затрачиваемое на выявление причин проблем, и сосредоточиться на их быстром устранении.

Благодарности

Большое спасибо командам наших партнеров и их инженерам (Cathy Yang | Trust & Safety; Howard Nguyen | MLS; Li Tang | MLS), которые работали с нами над выполнением этих проектов, и за их поддержку!

Чтобы узнать больше об инженерных разработках в Pinterest, ознакомьтесь с оставшейся частью нашего Инженерного блога и посетите наш сайт Pinterest Labs. Чтобы узнать о жизни в Pinterest, посетите нашу страницу Карьера.