В Подходе к поиску истины на основе данных мы представили наш проект статистического анализа, Delivery Times Intelligence (DTI). В этой статье мы глубоко погрузимся в стек технологий, используемых для поддержки DTI.

Azimo отправляет деньги от людей из Европы их близким в более чем 190 стран. Целью этого проекта было предоставить клиентам точные прогнозы того, когда их деньги поступят.

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

Мы используем Jupyter Notebook для анализа данных, отличное программное обеспечение для браузера, которое было разработано для науки о данных. Блочная структура Jupyter обеспечивает выполнение кода и визуализацию данных в виде текста или графиков, что делает создание прототипов легким и быстрым.

Кроме того, блоки могут отображать Markdown и HTML, что позволяет нам добавлять документацию и комментарии к нашим исследованиям во время работы. Базовым языком Jupyter является Python, который на сегодняшний день является наиболее распространенным языком, используемым в науке о данных и машинном обучении.

По этой причине мы сделали Python основным языком нашего проекта. Следуя основным программным принципам в процессе исследования данных, можно затем переместить этот код в повторно используемые и тестируемые классы и сохранить код в одном месте. Затем код может быть использован совместно нашим проектом и нашим анализатором Jupyter Notebook без необходимости перевода кода.

Наш проект Python состоит из независимых скриптов, которые можно рассматривать как атомарные блоки. В собранном виде они образуют конвейеры, которые используются тремя модулями для выполнения различных задач. Модули можно запускать однократно или периодически как услугу.

Код документируется и хранится в реестре Gitlab. Оттуда код можно вручную создать на Jenkins, а затем отправить в HashiCorp Nomad, который разместит его в качестве микросервиса в инфраструктуре Azimo AWS в соответствии с графиком, указанным разработчиком. Служба работает как среда выполнения Rocket и ее учетные данные предоставляются HashiCorp Vault.

Я резюмирую каждый из различных модулей ниже:

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

Сроки доставки оцениваются для наиболее популярных стран выплат и объединяются по стране отправителя клиента, времени создания транзакции, способу доставки, времени платежа и всем вышеперечисленным изменениям. Результаты проходят процесс отбора и становятся доступными для мобильных и веб-приложений через конечную точку Firebase API.

Кроме того, модуль вычисляет числовые пороги для переводов, которые считаются слишком долгими. Эти значения хранятся в службе реляционной базы данных Amazon. Идентификаторы транзакций, помеченные как аномалии, передаются в тему Kafka для использования другими системами. Работоспособность всех коридоров можно отслеживать с помощью автоматически сгенерированных отчетов в формате HTML, созданных из Jupyter Notebooks и собранных в Google Cloud Storage.

Модуль хостинга регулярно проверяет наличие изменений в Google Cloud Storage и создает простую панель данных (размещенную на веб-сервере NGINX) на основе найденных отчетов HTML. Панель управления защищена VPN, что позволяет любому, кто заинтересован, удаленно и безопасно анализировать исследования и ежедневные результаты.

Модуль мониторинга фокусируется только на переводах, которые в настоящее время выполняются. Он потребляет данные в реальном времени из темы Kafka, которая отвечает за потоковую передачу событий транзакций. Слишком длительные переводы помечаются как аномалия. Помните упомянутые ранее пороговые значения аномалий? Модуль мониторинга вызывает модуль расчета этих значений, чтобы определить, какие переводы следует пометить.

Поскольку тема отправляет информацию о передаче только при изменении ее статуса, состояния сохраняются локально и синхронизируются со службой реляционных баз данных Amazon, чтобы обеспечить защиту на случай отказа службы. Решения возвращаются к другой теме. Оттуда они могут быть получены другими системами, отвечающими за оповещения, анализ и визуализацию в реальном времени.

Спасибо за то, что прочитали этот краткий обзор нашего технологического стека DTI, быстро развивающегося проекта, в котором уже запланированы многие изменения. В следующем посте о DTI мы объясним, как именно работает расчет времени доставки с математической точки зрения. Будьте на связи! 🤓

На пути к финансовым услугам, доступным для всех

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