Как использовать машинное обучение для обнаружения мошенничества (или исключения)
В телекоммуникационной отрасли злоупотребление услугами существует уже много лет. В 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!