Как Tinkoff.ru автоматизирует аналитику с Zeppelin

в 12:50, , рубрики: analytics, apache zeppelin, api, backend, cashback, java, python, tinkoff, Блог компании Tinkoff, Блог компании Tinkoff.ru

Tinkoff.ru разрабатывает множество сервисов на рынке финансовых услуг. У нас решают свои повседневные задачи аналитики, разработчики, технологи, менеджеры. Все мы ежедневно генерим идеи, анализируем, разрабатываем и делаем все, чтобы создавать лучший продукт на рынке.

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

Одним из наших бизнес-заказчиков является отдел лояльности клиентов —Tinkoff Target. Прежде чем расскажу об автоматизации аналитики, поясню как устроена наша программа лояльности.

Программа лояльности Tinkoff.ru или как мы раздаем людям кэшбэк

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

Мы не исключение, мы выдаем стандартный кэшбэк в 1% на все и 5% на 3 выбранные категории (например, «Транспорт», «Кино», «Сувениры» и так далее). Много такого кэшбэка не выдать (а очень хочется), и поэтому у нас есть спецпредложения от партнеров банка, которые тоже хотят выдавать кэшбэк. Так вот, в рамках бизнес-линии программ лояльности мы пытаемся найти и убедить различные компании выдавать нашим клиентам кэшбэк на взаимовыгодных условиях. Эти компании и являются нашими партнерами.

Как мы это делаем? Представим, что есть на рынке условная компания «Яблоко». Лучший способ привлечь «Яблоко» к нашей кэшбек-программе — помочь ему продать свой товар или услугу. Здесь задача стоит в привлечении аудитории для партнера. Например — клиентов, которые закупаются у конкурентов или клиентов, которые не знают о существовании «Яблока». А еще, можно для Яблока подобрать подходящих по профилю клиентов, которые очень хотят «Яблоко», просто еще не знают об этом — это я про искусственный интеллект и машинное обучение.

Задача подбора такой целевой аудитории лежит на плечах аналитиков. Их у нас двое, а партнеров много — более 1000. У аналитиков помимо этого еще много всякой интересной работы, а с ростом количества партнеров подбор правильной аудитории превращается в рутину. Такую рутину необходимо автоматизировать и превращать в один клик по кнопке (а лучше вообще без кнопки). К тому же многоступенчатый процесс выполнения подобных задач влечет за собой ошибки, обусловленные человеческим фактором. Далее я расскажу как у нас получилось избавится от подобной рутинной работы.

Как мы строим аналитику

В Tinkoff.ru большинство аналитиков в своих повседневных задачах используют Apache Zeppelin. Мы давно взяли этот инструмент на вооружение и активно его развиваем (даже комитим в опенсорс). Для всех сотрудников открыт доступ к глобальному хранилищу данных и отчетности, то есть ко всем аналитическим ресурсам Tinkoff.ru с возможностью использования удобного аналитического языка.

Zeppelin написан на Java, включает в себя множество интерпретаторов современных языков и технологий, среди которых Python, Hive, Spark, Groovy, R и многие другие. Написанные скрипты хранятся в ноутбуках, которые состоят из параграфов, внешне UI рабочей среды очень напоминает Jupyter. А основной экран приложения выглядит следующим образом:

image

У каждой бизнес-линии здесь есть своя рабочая директория с разграничением прав чтения и редактирования.

Огромным плюсом для нас (разработчиков) является наличие очень удобного и интерактивного API. С API жизнь становится проще. Через API с этим инструментом можно делать все что угодно, минуя web UI. Так и пришла идея интегрировать результаты работы аналитиков в наш проект.

Кратко о нашем проекте

Backend у нас написан на Java, Frontend на Angular 5 (так как проект у нас не молодой, часть UI написана на Vaadin от которого мы потихоньку избавляемся). Большая часть проекта это веб-приложение для работы менеджеров, где они ведут взаимоотношения с партнерами, заводят новые спецпредложения, следят за выполнением своих KPI и т.д. У нас есть личный кабинет партнера, где любой партнер банка может наблюдать статистику своих запущенных спецпредложений (начисления, активации и тд), скачивать и подписывать договора, счета, документировать взаимоотношения в общем.

image

Мы отдаем данные в мобильный банк и вэб портал в раздел «Бонусы» через SOAP веб-сервис. Есть лэндинг, написанный на React, где любой желающий может оставить заявку на участие в программе лояльности. У нас реализованы различные механики начисления кэшбэка и спецрассрочки, интеграции с различными банковскими сервисами.

Интеграция с Apache Zeppelin

Традиционно для привлечения новых партнеров менеджеры отправляли аналитикам письмо с набором хотелок партнера для генерации целевой аудитории. Аналитики использовали ранее написанные скрипты на зоопарке языков и магический копипаст.

Очевидно, что при должной формализации требований можно написать универсальный скрипт, что мы и сделали. А для ввода формализованных данных написали удобный UI. Осталось только реализовать работу с Apache Zeppelin в нашем веб-приложении. Схема работы такой интеграции следующая:

image

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

  • Категории BCC и/или MCC коды в которых клиент транзачит или транзачил в определенный период времени на определенные суммы с определенным средним чеком.
  • Компании-конкуренты у которых клиент транзачит или транзачил в определенный период времени.

и другое.

Таких параметров очень много и все они формализованы на UI. После ввода исходных параметров менеджер запускает операцию генерации и алгоритм начинает свою работу:

  1. Так как все наши скрипты написаны в одном ноутбуке и мы не хотим его изменить, мы клонируем его в отдельную директорию. Zeppelin в ответ на наш запрос возвращает нам ID клона, по которому мы будем обращаться к новому ноутбуку. Клонирование рабочих скриптов также удобно при администрировании, так как мы всегда можем заглянуть в скрипты, которые были выполнены для конкретного задания и найти проблему.
  2. Начиная с версии Zeppelin API 0.8 после создания нового ноутбука необходимо проставить CRUD доступ к нему для последующего администрирования.
  3. В одном из первых параграфов рабочего ноутбука, как правило объявлены переменные и заданы их начальные значения по умолчанию, которые необходимо заменить. На этом этапе мы вставляем свой параграф в ноутбук (с инициализацией переменных и формализованными данными), который формируем перед отправкой.
  4. Далее, легким запросом метода POST мы запускаем наш ноутбук на выполнение. Вернее сказать, мы запускаем наши параграфы поочередно, с целью мониторинга процесса выполнения всех скриптов и отображения статуса генерации целевой аудитории в приложении.
  5. По окончанию операции менеджеру приходит уведомление (на случай, если он не отслеживал статус выполнения). Результатом выполнения скриптов является сгенерированный CSV файл с аудиторией, сохраненный в общей директории. При запуске спецпредложения мы можем сгенерировать несколько аудиторий и проставить им разный тип при добавлении к офферу. А для аудиторий с разным типом мы можем гибко задавать условия и размеры начисления кэшбэка.

Немного грубой аналитики

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

С июня 2018 по январь 2019 года число выполненных заданий на генерацию превышает 400. По словам менеджеров на коммуникацию и получения требуемого результата они тратили от 0.5 до 4 часов, взяв среднее время для формирования целевой аудитории ~2 часа, было сэкономлено более 800 человеко-часов (более 100 рабочих дней).

В заключение

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

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

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

Автор: alexyakovlev90

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js