В команде iyzico по обработке данных мы используем набор различных алгоритмов машинного обучения для обнаружения мошенничества с кредитными картами и одновременного увеличения коэффициента конверсии. У нас слишком много технических и нетехнических требований к нашему продукту для обнаружения мошенничества:
- Непрерывная доставка. Специалисты по обработке данных разрабатывают и тестируют модели машинного обучения, которые необходимо постоянно гибко развертывать в производственной среде. Каждую неделю мы обучаем и развертываем модели машинного обучения в производственной среде.
- Обнаружение мошенничества в реальном времени. Система обнаружения мошенничества (совокупность моделей машинного обучения) должна оценивать риск платежной транзакции максимум за 100 миллисекунд (0,1 секунды).
- Высокая доступность и масштабируемость. Система должна быть высокодоступной со скоростью 99,99%. Он также должен быстро расширяться, потому что iyzico - это очень быстрорастущий стартап (количество транзакций iyzico увеличилось на 800% в прошлом году).
- Кривая обучения. Наш технологический стек должен иметь низкую кривую обучения. Стек также должен легко поддерживать связь между специалистом по данным и разработчиком программного обеспечения. Наши инженеры всегда борются с чрезмерным проектированием.
- Открытый исходный код: поскольку мы стартап и любим открытый исходный код, стек технологий должен быть полностью открытым. Мы пытаемся внести свой вклад в проекты с открытым исходным кодом.
- Быстро. Девиз нашей компании - «просто, быстро и весело». Мы должны действовать быстро при создании прототипов и развертывании MVP наших продуктов.
- Локально: из-за правил оплаты мы не можем запускать программное обеспечение в облаке. Наше решение должно быть развернуто локально.
При поддержке инженеров и специалистов по обработке и анализу данных мы изначально начали создавать модели машинного обучения с помощью фреймворка prediction.io поверх Spark ML. Почему мы выбрали prediction.io и Spark ML? Причины:
- Нашим основным критерием было время выхода на рынок, и нам нужно легко и быстро развертывать модели машинного обучения. Это очень простая задача - легко обучить модель с помощью prediction.io через его REST API:
- Spark - это масштабируемый механизм обработки данных. Его можно легко масштабировать по мере роста объема данных.
Мы разработали и протестировали наши модели обнаружения мошенничества и перешли в рабочую среду с помощью prediction.io и Spark 2.0. Мы автоматизировали все процессы обучения, тестирования и развертывания, чтобы обеспечить непрерывную доставку. Каждую неделю разрабатывались десятки функций и внедрялось множество моделей машинного обучения. Конвейер данных работал, но начали появляться новые проблемы.
Основные проблемы:
- Невозможно развернуть существующую модель в производственной среде с помощью prediction.io. Вам следует снова обучиться в производственной среде, потому что фреймворк тяжелый и может запускать только модели, которые он обучил, в той же среде.
- Prediction.io и Spark требуют слишком много оборудования, даже если вы работаете с небольшим объемом данных. Например, почти 16 ГБ ОЗУ требуется для обучения модели с 1 миллионом транзакций с 100 функциями с деревом решений . Общедоступное облако с функциями автоматического масштабирования не может использоваться из-за нормативных требований, и нам нужно выделить дополнительные серверы с большой оперативной памятью только для обучения.
- Когда количество функций увеличивается, время прогнозирования увеличивается экспоненциально на сайте prediction.io.
- Экспериментировать со Spark и prediction.io сложно. Специалистам по обработке данных необходимо построить модель с помощью облегченного фреймворка (Python, R, IPython и т. Д.) Для быстрого экспериментирования. Более того, разработчики также хотели бы иметь возможность развертывать модели, созданные ими в среде песочницы, в производственной среде.
- У Spark хорошее сообщество разработчиков. Однако у prediction.io нет стабильного сообщества, и внести свой вклад сложно. Он реализован с помощью Scala, и поддержка и масштабирование кода Scala - еще одна сложная проблема.
После того, как эти проблемы стали мучить нас, мы начали искать легкую платформу машинного обучения с открытым исходным кодом. Для нас было легко перейти на другую платформу машинного обучения, поскольку мы реализовали «Разработка функций» и «Конвейер данных» с Java 8, и нам не нужно было менять сторону разработки функций. Мы изменим только модель обучения и инфраструктуру развертывания.
Команда специалистов по обработке и анализу данных протестировала фреймворки Tensor Flow, Spark ML (существующий фреймворк) и H2O и проанализировала тесты производительности. Метрики тестов были:
- Простота развертывания существующей модели машинного обучения в производственной среде.
- Требования к оборудованию для обучения модели машинного обучения.
- Были протестированы деревья принятия решений и байесовские модели.
- Поддержка Python, R и SQL.
- Простота экспериментов в локальной среде.
- Время прогноза в миллисекундах.
После тщательного анализа мы решили перейти на фреймворк H2O. Причины миграции:
- Модели машинного обучения можно преобразовать в простой POJO, и эту модель легко развернуть в любой среде Java. Чтобы специалист по данным мог построить модель с помощью R и Python и передать эту модель команде разработчиков в формате POJO.
- Управление выпусками и цикл DevOps упрощаются с моделью POJO ML.
- Потребности в оборудовании уменьшились. Например, для обучения с 1 миллионом транзакций и 100 функциями со случайным лесом (с 64 деревьями) требуется почти 16 ГБ ОЗУ на Spark ML, 10 ГБ ОЗУ на Tensor Flow и 2 ГБ ОЗУ на H2O.
- С H2O легко проводить эксперименты в локальной среде. Вы можете просто запустить фреймворк с помощью команды «java -jar h2o.jar» и поэкспериментировать с Python и R в записной книжке браузера.
Затем мы, наконец, перешли со Spark ML на H2O и получили следующие результаты:
- 60 ГБ ОЗУ. Spark ML и prediction.io нуждались в этой оперативной памяти во время обучения модели
- 12 ядер сохранено. Эти ядра понадобились Spark ML и prediction.io, чтобы сократить время обучения модели.
- Время отклика уменьшилось почти в 10 раз (с 300 миллисекунд до 35 миллисекунд):
- Производительность механизма защиты от мошенничества (точность, отзыв и измерение F) не изменилось:
- Развернуть существующую модель машинного обучения в производственной среде теперь действительно просто. С помощью приведенного ниже кода вы можете легко делать прогнозы, используя существующую модель:
Для получения более подробной информации вы можете присылать свои вопросы на адрес [email protected] и в нашу команду по разработке данных (Мустафа Кирач, Кадрие Доган, Кемал Топрак Учар , Yalçın Yenigün) свяжется с вами.
Использованная литература:
- Https://www.slideshare.net/YalnYenign/building-data-driven-applications-with-machine-learning-71497185
- Https://www.slideshare.net/YalnYenign/ai-development-with-h2oai
- Https://github.com/szilard/benchm-ml
- Https://www.stat.berkeley.edu/~ledell/docs/h2o_hpccon_oct2015.pdf
- Http://docs.h2o.ai/h2o/latest-stable/h2o-docs/
- Https://www.slideshare.net/0xdata/rf-brighttalk
- Https://github.com/h2oai/h2o-3/blob/master/h2o-docs/src/product/howto/MOJO_QuickStart.md