Как использовать машинное обучение для обнаружения мошенничества (или исключения)

В телекоммуникационной отрасли злоупотребление услугами существует уже много лет. В 2017 году он принес 6 млрд долларов США годовых убытков [источник: CFCA]. Это злоупотребление, также известное как наложенное мошенничество (или мошенничество с международным распределением доходов), тесно связано со взломом. Вот как это происходит: действующая учетная запись пользователя выдается за другое лицо (благодаря фишингу, паролю с низким уровнем безопасности, клонированию SIM-карты и т. Д.) И используется удаленно третьей стороной. К сожалению, настоящий пользователь заметит, что его взломали, и запаникует только тогда, когда получит счет. К счастью, как и мошенничество с кредитными картами, взломанные пользователи не несут ответственности. Банки и поставщики телекоммуникационных услуг несут ответственность за обеспечение безопасности своих пользователей.

Шаблоны все время меняются

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

На помощь: займитесь машинным обучением - без присмотра! Годы исследований, проведенных AT&T, INRIA и международным исследовательским сообществом, наконец-то нашли свое применение в производственном программном обеспечении, и технология 2018 года по обнаружению выбросов стала доступной. Теперь легко обнаружить подозрительное, а значит, и мошенническое поведение. Вы тоже можете это сделать.

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

Давайте посмотрим, как машинное обучение помогает обнаруживать закономерности. Спойлер: Никакого программирования не требуется!

Перво-наперво: каково поведение пользователей?

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

Если мы вернемся к предыдущему примеру с телекоммуникациями, давайте подумаем о пяти величинах:

  • Общее использование услуги (или стоимость) для регулярных звонков внутри страны за последние семь дней
  • Общее использование услуги (или стоимость) для международных звонков за последние семь дней
  • Общее использование услуги (или стоимость) для вызовов премиум-класса (VAS) за последние семь дней
  • Суммарное использование SMS-сервиса за последние семь дней
  • Использование тарифного плана за последние семь дней

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

Данные для этого руководства будут храниться в стеке TICK от InfluxDB, но могут быть сохранены в MongoDB или Elasticsearch, что даст тот же результат. Мы будем использовать классические функции Python для построения вывода.

Подготовка набора данных - структурированные данные очень помогают!

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

  • Ключ (или тег) userID для разделения данных, относящихся к каждому подписчику.
  • Поле timestamp: когда произошло оплачиваемое событие
  • Поле cost, содержащее платежную информацию, относящуюся к использованию услуги.
  • Поле class, которое содержит число: 1, 2, 3, 4, 5. Чтобы не усложнять, мы предположим, что 1 = национальный, 2 = международный, 3 = премиум, 4 = использование SMS, 5 = использование тарифного плана. Примечание: можно использовать и другие разделы данных!

Использование Loud ML для безболезненного машинного обучения

Воспользуемся Loud ML, Enterprise edition. Версия Enterprise предоставляет набор инструментов для работы с отпечатками пальцев, который нам нужен в этом руководстве. Инструкции по установке Loud ML доступны здесь.

Создание модели машинного обучения

Мы можем использовать Linux CLI для создания модели:

loudml create-model behavior.json

Интересная часть содержится в behavior.json

Давайте посмотрим. Я имею в виду, давайте более подробно рассмотрим каждый раздел и его значение:

  • «Тип»: это модель кластеризации.
  • «Промежуток»: каждый отпечаток будет охватывать 7 дней.
  • «Ключ»: первичный ключ, используемый для разделения различных отпечатков пальцев.
  • «Default_datasource»: база данных, содержащая актуальную информацию о выставлении счетов, которая будет обработана этой моделью.
  • «Агрегаты»: для определения количества, содержащегося в каждом отпечатке пальца.
  • «Измерение»: интересующая таблица в базе данных
  • «Поле»: интересующее поле в таблице
  • «Метрика»: наше первое количество называется «стоимость-1», а первое количество «стоимость-1» = сумма (стоимость), где класс = 1.
  • «Anomaly_type»: мы, конечно, хотим выделить выбросы с неожиданным high использованием службы
  • «Match_all»: фильтрация релевантных данных

Обучение модели

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

loudml train behavior-model --from "2018–01–01T00:00:00.000Z" --to "2018–02–01T00:00:00.000Z" -l 1000

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

Визуализация данных

Мы можем использовать интерфейс командной строки для сравнения состояния обучения с состоянием кластеризации в любой момент времени - в прошлом или в настоящем. Здесь мы используем данные за одну неделю с марта 2017 года:

loudml predict behavior-model --from "2017–03–01T00:00:00.000Z" --to "2017–03–08T00:00:00.000Z"

Если бы мы отобразили эту информацию на графике, это выглядело бы так (совет: этот график был создан с помощью Seaborn):

Но подождите, у наших данных было пять измерений, верно? Стоимость-1, стоимость-2, до стоимости-5, а могло быть и больше. Мы по-прежнему просматриваем данные в трех измерениях (ось x, ось y, и z для градиентов, показывающих кластеры пользователей). Это называется уменьшением размерности. Уменьшение размерности очень удобно, поскольку мы, люди, все еще не можем обрабатывать данные в 100 измерениях! Машинное обучение может, и оно также может предоставлять результаты в более значимом для нас формате.

Ни один человек - это не остров. На графике показаны области с высокой плотностью размещения, в которых поведение пользователей одинаково. Выброс (обозначенный красным треугольником на приведенном выше графике) - это точка данных, которая находится на собственном острове или в области с низкой плотностью населения. Легко заметить и принять меры! Приятно то, что нам вообще не нужно было определять фактическое числовое значение для «высокого» или «низкого»! ML изучает эту информацию автономно, экономя время и усилия.

Добавляем самый важный параметр: время!

Пришло время действовать. Шаблоны ненормального использования сервисов не статичны: они меняются! Для сравнения, «нормальные» паттерны вряд ли изменятся со временем, а это значит, что мы можем извлечь выгоду из уменьшения размерности, чтобы отвлечься от нормальных паттернов и сконцентрироваться на аномалиях, когда бы они ни возникали. В результате обучение без учителя экономит ресурсы. Чтобы выявить злоупотребления и неожиданные изменения в шаблонах, пока еще не поздно, важно действовать практически в реальном времени. Сделаем это, сделав еще один шаг!

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

Чтобы обобщить всю эту информацию, мы собрали слайд-колоду Учебник.

Надеемся, вам понравилась эта статья. Дайте нам знать свои вопросы, комментарии и идеи, чтобы улучшить Loud ML новыми захватывающими возможностями!

Следующая статья: можете ли вы угадать, что произойдет, если мы изменим только высокий на низкий в приведенном выше примере, что это поможет определить? Публикуйте свои идеи в Твиттере и получайте крутые подарки от Loud ML!