Всем привет! Меня зовут Оюна Любимова, я занимаюсь продуктовой аналитикой в Юле и Объявлениях ВКонтакте. Я отвечаю за сбор и интерпретацию данных, чтобы наша команда могла принимать уверенные решения о развитии продукта. В статье я расскажу об аналитике безопасности взаимодействия пользователей с продуктом, это часть направления Trust and Safety Юлы. Чтобы отслеживать насколько эффективно работают наши инструменты борьбы с мошенниками, мы собираем данные и разрабатываем аналитические метрики. В 2020 году мы придумали специальный индекс, который помогает нам отслеживать уровень безопасности в Юле, и назвали его Индекс лепрекона. В этой статье я расскажу: как и зачем мы собрали и интерпретировали этот показатель, за какими «фантастическими тварями и местами их обитания» следим с его помощью, а также о том, какие альтернативные формулы рассматривали и почему отказались от них.
Не мифические существа рунета
Онлайн-сервисы объявлений (они же классифайды) стали резко набирать популярность в 2020 году, с приходом в нашу жизнь локдаунов. Следующий заметный приток пользователей произошел недавно, в марте 2022 года. Причинами послужили перетекание аудитории из одних социальных сетей в другие, а также поиск подходящих товаров среди частных объявлений, у профессиональных продавцов и в небольших онлайн-магазинах. Так, число пользователей Объявлений ВКонтакте и Юлы за март увеличилось на 30%. Вместе с ростом аудитории площадок зачастую приходят и те, кто ищет легкого обогащения, – мошенники. Обманщики используют и совершенствуют специальные инструменты и схемы, чтобы заработать на доверчивых пользователях. Чтобы держать ситуацию под контролем, мы постоянно отслеживаем уровень безопасности нашего сервиса, а в этом нам помогает мониторинг индексов безопасности.
Изначально мы использовали несколько показателей, которые отражали деятельность мошенников в продукте. Со временем мы поняли, что для общей оценки такой подход не слишком удобен, так как каждый показатель нужно интерпретировать в отдельности. Так у нас возникла идея разработать интегрированный показатель, который должен был помочь сложить все сигналы о рисках мошенничества в одну метрику здоровья продукта – Индекс лепрекона.
Название индекса мы выбрали не случайно. В ирландской мифологии лепреконы – волшебные существа, которые превыше всего ценят богатство добытое хитростью. Мы хотим обезопасить платформу от ненадежных сделок, поэтому тщательно следим за «популяцией лепреконов» и держим ее под контролем.
Как мы собрали Индекс лепрекона?
Поскольку изначальная потребность состояла в том, чтобы найти способ упаковать в общую метрику различные косвенные маркеры, мы последовательно рассмотрели все имеющиеся показатели. Начали с обращений в службу поддержки.
Обращения в службу поддержки
На Юле мы выделяем две большие группы сигналов о мошенничестве от пользователей:
первая группа «пострадавших от мошенничества». Эти люди реально потеряли деньги, и после этого обратились к нам. Это факты реализованного обмана;
вторая – «попытки мошенничества». Эти обращения написали пользователи, которые не попались на уловку, и теперь сообщают в поддержку, чтобы мы заблокировали негодяев.
С точки зрения индекса оба типа обращений свидетельствуют о фроде. Распределение в одну из этих двух групп зависит от бдительности пользователя и навыков мошенника. Поэтому и первый, и второй тип обращения мы решили учитывать в Индексе лепрекона.
Кроме того, мы задумались, стоит ли учитывать в сводной метрике детализацию обращений по способу «развода». Такое распределение помогает нам обнаружить новые схемы мошенничества и выявить наиболее популярные. Например, раньше мы часто получали сигналы о мошенниках, которые притворялись продавцами и просили предоплату за свой несуществующий товар. Сейчас более популярен способ развода, в котором мошенник притворяется покупателем, переводит общение с продавцом в мессенджер и там отправляет ссылку на фейковую страницу. Продавец товара думает, что при вводе данных карты, он получит оплату. В действительности деньги списываются с его счета. Многие мошенники сейчас даже не заходят на сервис объявлений, чтобы найти потенциальную жертву, а разрабатывают или покупают автоматический парсинг контактных данных.
Информацию о тактике мошенников мы учитываем при разработке фичей антифрода. Однако для расчета Индекса детализация по схеме мошенничества выглядит бесполезной. По сути не имеет значения, какую уловку применял «лепрекон», важнее, что он вышел на пользователей. К тому же некоторых типов обращений в поддержку статистически мало, и разбиение получается чересчур детальным.
Все способы обокрасть пользователя, удачные и сорванные попытки мошенничества, мы учитываем в интегрированном Индексе с максимальным коэффициентом – единица.
Жалобы на подозрительных пользователей
Следующий показатель, который включили в сводный Индекс лепрекона – количество жалоб. Жалобами мы называем сигналы пользователей, отправленные через специальный функционал на сайте или в приложении. Когда пользователь создает жалобу, система предлагает выбрать ее тип: на спам, на мошенничество, непристойные сообщения в переписке, на продажу запрещенных товаров, неверно оформленное объявление и прочее.
В Индексе лепрекона мы стали учитывать только те жалобы, где человек выбирал тип «на мошенничество». Однако даже в этом случае, в выборку попадало много сообщений, не связанных с «лепреконами». Жалоб категории «на мошенничество» мы разметили вручную, 90% сообщений указывали на необязательность людей, желание побыстрее сбыть с рук товар, приукрасив его качества или недоговаривая о нем что-то. Пользователи часто выбирают тип жалобы «мошенничество», потому что думают, что в этом случае сообщение быстрее рассмотрят.
Таким образом, мы выяснили, что лишь десятая часть жалоб свидетельствует о факте мошенничества. Поэтому в формуле сводного Индекса мы учитываем количество жалоб за период с коэффициентом 0,1.
Заблокированные за мошенничество пользователи
Когда мы рассматривали включение этой метрики в интегрированный индекс, возникло много сомнений. В итоге показатель заблокированных пользователей не попал в итоговую формулу. Почему?
Во-первых, любое изменение значения метрики «заблокированные за мошенничество пользователи» мы можем интерпретировать как положительно, так и отрицательно. Например, выросло количество заблокированных. Это может означать и то, что к нам в сервис активно пошли мошенники (и это нехорошо), так и то, что наши действия стали приносить больше результатов – нам удалось обезвредить больше охотников за легкими деньгами, чем удавалось раньше (а это уже повод для радости).
Во-вторых, возникает вопрос: в какой момент нам удалось заблокировать мошенника – до того, как он начал проворачивать свои «грязные делишки», или уже после появления пострадавших.
Метрику «количество заблокированных за мошенничество» мы использовали в вспомогательном варианте Индекса, но не стали добавлять в основной. Зато добавили метрику «Контакты заблокированных пользователей».
Контакты заблокированных пользователей
Мы оцифровываем количество взаимодействий тех пользователей, кого мы заблокировали за мошенничество, с добросовестными пользователями.
К взаимодействиям мошенников мы относим:
созданные с их участием чаты;
просмотры номеров телефонов;
и даже добавление мошенником объявлений в «избранное». Это тоже контакт, поскольку если кто-то добавит ваш товар в избранное, то вам придет системное уведомление об этом.
Перечисленные действия заблокированных пользователей потенциально могут привести к реализованному обману. Нам удалось оценить долю случаев, когда контакт приводит к «разводу», и эта величина составляет около 3%. Мы получили эту оценку экспериментально, когда проверяли новые методы ограничения действий мошенников.
Таким образом, данные о контактах мы включили в общий Индекс с коэффициентом 0,03.
Защита от темных искусств: собираем первую формулу лепрекона
Мы определили показатели, которые будут включены в интегрированный индекс. Теперь нам предстояло упаковать метрики в формулу.
Так как по сути мы собираем разные сигналы о мошенничестве из разных источников – формула должна быть аддитивной. А поскольку сила сигналов не равноценна, каждому слагаемому нужно присвоить свой вес. Поэтому мы воспользовались формулой взвешенной суммы.
Вот она:
, где
метрики | коэффициенты | значения |
Обращения в саппорт | С1 | 1 |
Жалобы на мошенничество | С2 | 0,1 |
Создание чатов | С3 | 0,03 |
Добавления в избранное | С4 | 0,03 |
Просмотры номеров телефонов | С5 | 0,03 |
Затем в формулу Индекса добавили нормирование на DAU (daily active users или число уникальных пользователей в день). При этом в DAU включили только авторизованных пользователей: без авторизации невозможно контактировать с другими пользователями или разместить объявление. Иными словами, неавторизованный пользователь не может пострадать от мошенников.
Так мы получили первый вариант Индекса лепрекона:
Как можно интерпретировать полученную метрику?
Какая доля пользователей на Юле получает вред (моральный или финансовый) от мошенников;
Насколько вероятно встретить или пострадать от мошенника на Юле.
Эту величину можно считать оценкой сверху, поскольку в числителе некоторых пользователей мы могли учесть не один, а несколько раз. Например, юзер мог написать в поддержку, затем отправить жалобу через приложение, и до этого у него был контакт с мошенником. В этом случае его сигналы о мошенниках попадут сразу в три параметра в числителе формулы.
Мы сознательно решили не усложнять расчеты, поскольку пересечение не критично завышает индекс. Для нас важнее не допустить занижение оценки, ведь цена ошибки в этом случае выше.
Кстати, проблему завышения можно решить альтернативной интерпретацией: метрика сообщает не о доле пользователей, которые получили вред, а об измерении этого вреда. Другими словами, пользователь, который написал в саппорт после контакта с мошенником, получил значимо больший вред чем тот, чей товар мошенник добавил в «избранное», провоцируя на диалог.
Однако эта интерпретация немного сложнее для понимания, чем та, на которой мы остановились.
Летопись противостояния лепреконам
Индекс лепрекона зарекомендовал себя на практике. Собрав значения, мы подготовили график, который информативно отражает результаты борьбы команды Юлы с мошенниками, ну и мошенников с нами.
График построен с детализацией по кварталам, начиная с первого квартала 2020 года – это первый период, за который мы произвели расчет Индекса лепрекона. Вот что у нас получилось:
период | события | значения индекса |
2020, квартал 2 | Первый и самый серьезный локдаун – март 2020 года. Большая часть коммуникаций переходит в интернет: поиск товара, покупка и продажа, диалог о сделке и оплата. Мошенники видят возможность неплохо заработать на всплеске онлайн-сделок и активности аудитории. Развивается популярная схема развода – мошенники охотятся за деньгами покупателей, выступая в роли «продавца». На Юле появились «товары-приманки». | Индекс лепрекона 0,05678. Это наш исторический максимум |
2020, квартал 3 | Команда модерации Юлы создает ML-модель поиска «товаров-приманок» и начинает мгновенно их блокировать. | Индекс лепрекона снизился до значения 0,04431 ⬇️ |
2020, квартал 4 | Мошенники переключаются с покупателей на продавцов: для получения денег сначала вручную собирают на Юле номера телефонов продавцов, а затем разрабатывают для быстрого сбора контактных данных специальные парсеры. Теперь мошенник прикидывается покупателем. В ответ на новую схему команда Юлы разработала инструменты по блокировке мошенников по графу связей между аккаунтами. | Индекс лепрекона за квартал составил 0,03234 ⬇️ |
2021, кварталы 1-2 | Команда разработки Юлы создала инструмент автоматической блокировки парсеров на основе логов о действиях аккаунтов. Активность мошенников резко снизилась. | Значение Индекса лепрекона = 0,01731 ⬇️ |
2021, кварталы 3-4 | Аудитория Юлы активно растет – Юла расширилась внутрь социальной сети ВКонтакте. Появились Объявления ВКонтакте. Инструменты антифрода Юлы требуют адаптации под особенности размещения объявлений в социальной сети. Расширилась аудитория сервиса, что привлекло больше мошенников | Индекс подрос и составляет 0,02826 ⬆️ |
Другие версии Индекса лепрекона
Когда мы разрабатывали индекс, мы хотели иметь под рукой практичную и достоверную оценку вреда от мошенников в продукте и эффективности наших инструментов борьбы с фродом. Поэтому мы попробовали построить и другие варианты индекса, чтобы оценивать здоровье сервиса с разных сторон.
Второй индекс мы собрали, добавив в знаменатель первой формулы количество заблокированных пользователей. Если первый индекс отражает оценку «вреда, который получает от мошенника обычный пользователь», то второй вариант интерпретируется как «потенциальное количество вреда, которое успевает нанести один обнаруженный мошенник одному пользователю до того, как Юла его заблокирует».
По сути, этот индекс рассматривается как «скорость блокировки мошенников».
Вот как выглядит вторая версия индекса:
Третий индекс выглядит так:
где под контактами подразумеваем один из типов взаимодействия между пользователями внутри сервиса: просмотр номера телефона, создание нового чата или добавление товара в «Избранное».
Интерпретация третьего индекса – «величина, обратная конверсии в блокировку». Почему обратная величина? Чтобы аналогично первому индексу лепрекона и второму индексу третий увеличивался, когда ситуация с фродом становится хуже, и уменьшался, если ситуация становится лучше. Обратная конверсия вида CONST/ConversionRate будет стремиться к константе, когда мы ловим всех мошенников (конверсия в блокировку равна 1), и стремиться к бесконечности, если мы не можем поймать ни одного.
Попробую пояснить, почему формула выше может быть интерпретирована как CONST/ConversionRate.
Для этого нам понадобится предположение, что конверсия в «развод» из контакта (~доверчивость людей) и конверсия из «развода» в обращение или жалобу (~готовность людей сообщить о «лепреконах») являются константами. С этим утверждением можно поспорить, но для индекса эти допущения будут важны.
Обозначим как «активность мошенников» некую неизвестную величину – количество действий, которые совершают мошенники, чтобы найти наивных пользователей и «развести» их.
«Активность мошенников» включает в себя как количество мошенников, так и интенсивность их действий. Сюда же попадают действия тех мошенников, которых Юла не смогла вычислить.
Рассмотрим «активность мошенников» с двух сторон.
С другой стороны,
Приравняем две части уравнения:
Далее заменим конверсии из наших предположений на константы и получим, что
И наконец получим формулу Индекса 3:
Заключение
Из трех построенных вариантов индекса, мы решили взять за основной первый вариант:
Во-первых, он наиболее понятный для интерпретации;
Во-вторых, он не требует дополнительных предположений.
Тем не менее, внутри мы наблюдаем и за двумя дополнительными вариантами индекса. Они помогают нам оценивать, насколько быстро и полно мы успеваем блокировать мошенников.
С первой задачей – оценить скорость реакции на фрод – нам помогает Индекс 2, который отвечает на вопрос «сколько вреда нанесет мошенник до того, как мы его заблочим». Как мы видим на графике, после увеличения количества мошенников Индекс 2 также подскочил, но этот индекс показывает тренд на снижение. Сейчас его значения существенно ниже чем в 2020 и 2021 году.
Индекс 3 – индекс, обратный конверсии из появления мошенника в его блокировку, – помогает нам оценить, не пропускаем ли мы мошенников больше, чем раньше.
Абсолютные значения индекса бесполезны из-за неизвестной константы, но наблюдая тренд на снижение, мы можем считать, что доля отловленных негодяев из всех со временем растет. Значит наши инструменты эффективно работают против арсенала средств мошенников.
Индексы стали для нас хорошей метрикой оценки глобальной картины, насколько лучше или хуже становится ситуация с безопасностью в нашем сервисе. А также помогают оценить какие методы сработали не слишком эффективно, а какие из наших инструментов сильно портят жизнь мошенникам.