company_banner

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

    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, из приложения мы формируем различные виды аналитических отчетов для менеджеров, которые раньше готовились индивидуально по запросу.
    Tinkoff.ru
    120,76
    IT’s Tinkoff.ru — просто о сложном
    Поделиться публикацией

    Комментарии 18

    • НЛО прилетело и опубликовало эту надпись здесь
      • НЛО прилетело и опубликовало эту надпись здесь
        0
        Возможно немного не по теме, но все же. Каким образом компания может попасть в вашу систему кешбека? Есть ли какие-то мин.требования?
        Например, у меня есть онлайн-сервис, оплаты на котором проходят через Я.Кассу. Оборот конечно не миллионный, но все же и не нулевой. По каким критериям идет отбор компании и как подать заявку?
          0

          Посмотрите сюда — https://target.tinkoff.ru/

            0
            Спасибо, я и не знал, что есть отдельный сайт под это.
              0
              Все верно, это наш лэндинг. Чтобы попасть в нашу систему кешбека нужно оставить заявку на форме
            0

            Зачем нужна Активация спецпредложений? Вам самим понять предпочтения клиентов, или передать партнёру для прогнозирования спроса? Не самая удобная функциональность.

              0
              Активация дает некоторую гибкость партнеру при выборе трансляции его спецпредложений. Если у спецпредложения автоактивация, возникает риск слепого отклика
                0
                Прочитал три раза, всё равно не понял
                  0
                  Ну смотри, у тебя есть бизнес и ты хочешь увеличить продажи и решил давать кэшбэк за покупки. Тебе же будет лучше, если люди, прежде чем что то у тебя купить, зайдут в мобильный банк и посмотрят на твое спецпредложение (нажмут кнопку активировать), или лучше чтоб люди пост факт получили от тебя кэшбэк и узнали, что у тебя было спецпредложение (это и есть слепой отклик)? С активацией ты сам можешь выбирать как давать людям кэшбэк
                    +2
                    Когда спецпредложений становится сотни, а у меня их сейчас 239, то мало кто будет заморачиваться искать и кликать куда-то. В начале, когда спецпредложений было немного, что-то нажимал, а потом просто перестал.
                      0
                      Об этой проблеме мы знаем и сейчас ищем пути как это разрешить. Например, есть категория «Популярное» с 10-20 спецпредложениями. Еще мы пытаемся проанализировать, что клиент может потенциально хотеть и в скором времени будем также рекомендовать 10-20 спецпредложений индивидуально для каждого
                        0
                        Именно, аналогично Wallhead — я не захожу давно туда и ничего не выбираю. Даже категории не помогают. Инструмент не выполняет свои цели.
                0
                Зачем нужна Активация спецпредложений? — чтобы уменьшить количество слепых покупок.
                Не все партнеры верят в какие-то прогнозы, у них свое видение происходящего
                0
                Я имел опыт работы с Zeppelin лишь однажды, то еще удовольствие. Хотел отобразить данные по работе spark-job, все зубы об него сломал. Не обрабатывает Scala-код и все тут. При этом выбрасывает ошибку на строке, в которой ошибок нет.
                Попросил помочь коллегу. Тот подошел, сказал «Аааа, да у него со скобками глюк какой-то» и перенес одну квадратную скобку с текущей строки на следующую, после чего все заработало:)

                Неоднократно слышал, что Zeppelin — набитый глюками инструмент, и лучше пользоваться Jupiter. Учитывая мой, хоть и небогатый, опыт склонен с этим мнением согласиться
                  0
                  Для работы с питоном Jupiter определенно лучше, но Zeppelin более гибкий инструмент, и относительно легко кастомизируемый под свои нужды. А еще у Zeppelin более удобное REST API
                    0
                    Если вы достаточно давно его смотрели (как я — на заре его жизни), то за последнее время его сильно доточили в плане надежности. Есть подозрение, что не обошлось без вендоров, кто его поставляет в своих продуктах.
                    0
                    Мне интересно, по какому принципу ваши HR отсылают вакансии? Я вообще ни разу не работал с людьми, в резюме написано QA, тестировщик, но блин, мне присылают вакансию Представитель банка. Это вообще как?
                    Прошу прощения за оффтоп

                    Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                    Самое читаемое