Введение
Индустрия ставок требует мощных и гибких систем для мониторинга ставок и защиты от мошенничества. Построение антифрод-системы, способной эффективно фильтровать подозрительные активности, стало непростой задачей. В этой статье я поделюсь подробностями технической части разработки антифрод-системы для ставок, построенной на основе данных из различных источников, в том числе sidestake net.
1. Архитектура системы
Система для выявления мошенничества в ставках должна обеспечивать несколько критически важных характеристик:
Масштабируемость — возможность обработки больших объёмов данных в реальном времени.
Точность — минимизация ложных срабатываний и правильная классификация ставок.
Реальное время — мгновенная реакция на подозрительные ставки.
Для этого была выбрана микросервисная архитектура с использованием стриминговой обработки данных. Система должна была работать в реальном времени, обрабатывать большие объемы данных и выявлять паттерны ставок.
Инструменты:
Apache Kafka — для сбора и передачи данных о ставках в систему.
Apache Flink — для потоковой обработки и анализа данных в реальном времени.
MongoDB — для хранения исторических данных о ставках и пользовательской активности.
Elasticsearch — для быстрого поиска и индексации данных.
2. Источник данных и подготовка
Данные поступали с различных платформ, включая sidestake net, а также внутренние данные букмекерской платформы:
Данные о ставках: ставка, сумма, временная метка, тип события.
Метаданные: ID пользователя, информация о ставках на аналогичные события, история ставок.
Для работы с потоковыми данными мы использовали Apache Kafka. Он обеспечивал асинхронный сбор информации с платформы и передачу её в потоковую обработку с использованием Apache Flink. Kafka позволил нам обработать миллионы событий ставок в день с минимальными задержками.
Проблемы с исходными данными:
Неструктурированные данные: многие ставки имели пропущенные значения, что требовало предварительной обработки.
Шумовые данные: часто встречались ошибки ввода или аномальные ставки, которые затрудняли построение корректных моделей.
Решение:
Для предобработки данных использовали библиотеки Python, такие как Pandas для очистки данных и PySpark для распределённой обработки.
Пропущенные значения заполнялись с использованием техник, таких как импутация по медиане для числовых признаков и модальная импутация для категориальных данных.
3. Модели машинного обучения
Первоначально для классификации ставок использовались традиционные методы машинного обучения: Random Forest и XGBoost. Однако результаты показали высокое количество ложных срабатываний (false positives), что потребовало доработки модели.
Начальные этапы:
Обучение на исторических данных: использовались данные ставок за последние 12 месяцев для обучения моделей на метках «нормальная» или «подозрительная» ставка.
Проблемы с ложными срабатываниями: модель слишком часто классифицировала нормальные ставки как мошеннические, особенно если ставку делал новый пользователь или сумма ставки выходила за пределы норм.
Решение:
Дообучение модели с использованием real-time learning на основе свежих данных, поступающих с платформы. Модели стали корректироваться с каждым новым событием.
Использование гибридного подхода: добавление простых правил (например, по времени ставок или суммам) в качестве постобработки для сокращения ложных срабатываний.
Новые методы:
Isolation Forest — для выявления аномальных данных на основе изолированных выбросов.
Autoencoders (нейронные сети) — использовались для построения латентных представлений ставок и выявления сложных паттернов, которые не могли быть захвачены простыми методами.
Для работы с большими данными и вычислениями использовались TensorFlow и Keras для построения нейронных сетей, что позволило улучшить точность классификации.
4. Потоковая обработка с использованием Apache Flink
Для обработки ставок в реальном времени использовался Apache Flink. В отличие от традиционных методов обработки данных, Flink позволяет эффективно обрабатывать потоковые данные с низкой задержкой и интегрировать их с машинным обучением.
Архитектура потока данных:
Kafka как основа для сбора данных о ставках.
Flink обрабатывает данные, выполняя первичную классификацию с использованием моделей ML.
Результаты передаются в Elasticsearch для быстрого поиска и дальнейшего анализа.
Если ставка классифицируется как подозрительная, она отправляется на ручную проверку.
С использованием Flink CEP (Complex Event Processing) мы могли обрабатывать события на основе временных паттернов, например, если несколько ставок были сделаны на одно и то же событие за короткий промежуток времени.
5. Внедрение правил и доработка
Хотя машинное обучение могло эффективно выявлять основные паттерны, некоторые типы мошенничества требовали более точных настроек и алгоритмов.
Дополнительные правила:
Временные ограничения: ставки, сделанные в интервале меньше 1 секунды на одно событие, считались подозрительными.
Аномальные суммы ставок: ставки, превышающие 3 стандартных отклонения от медианы для данного события, попадали под подозрение.
Исторические паттерны: ставки, сделанные пользователем в определённой последовательности (например, чередование ставок на победу одной команды), классифицировались как потенциально мошеннические.
Ручные правила обеспечивали дополнительный слой фильтрации, который был необходим для снижения ложных срабатываний и повышения точности системы.
6. Проблемы с производительностью
Одной из критических проблем, с которой мы столкнулись, стала производительность системы при обработке больших объёмов данных. Потоки ставок в реальном времени поступали с высокой частотой, что требовало значительных вычислительных мощностей.
Решения:
Использование кэширования с Redis: для хранения промежуточных результатов проверки ставок, что снизило нагрузку на систему и уменьшило время отклика.
Обработка в несколько потоков с использованием Dask для параллельных вычислений и обработки больших данных.
Оптимизация SQL-запросов: использование PostgreSQL с оптимизированными индексами для хранения исторических данных о ставках.
7. Результаты
После внедрения модели и дополнительных правил система значительно улучшила точность:
Количество ложных срабатываний снизилось на 85%.
Мошеннические ставки, основанные на закономерностях времени и суммы, были точно определены.
Производительность системы была оптимизирована до 20 000 ставок в секунду при обработке.
Заключение
Процесс создания антифрод-системы для sidestake потребовал не только внедрения стандартных методов машинного обучения, но и глубокой доработки системы для учёта специфики ставок. Использование потоковых вычислений, комбинированных с машинным обучением, а также детальная настройка правил позволили создать систему, которая эффективно выявляет мошенничество, минимизируя ложные срабатывания. Однако ключевым уроком стало то, что в реальной жизни технологии требуют постоянной настройки и адаптации к новым данным.