Tinkoff.ru desenvolve muitos serviços no mercado de serviços financeiros. Nossos analistas, desenvolvedores, tecnólogos e gerentes resolvem suas tarefas diárias. Todos os dias geramos idéias, analisamos, desenvolvemos e fazemos tudo para criar o melhor produto do mercado.
Trabalho como programador back-end no departamento de desenvolvimento interno. Ajudamos a lançar novas linhas de negócios, automatizamos o fluxo de trabalho e tentamos economizar um banco de dinheiro sempre que possível (por exemplo, recusamos comprar uma licença para algum tipo de software caro). Nosso fluxo de trabalho é muito padrão: os gerentes criam recursos de negócios, os tecnólogos os formalizam e definem tarefas, os analistas analisam os dados e os desenvolvedores já resolvem as tarefas atribuídas a eles. Tudo na vida é mais complicado, mas você já sabe disso.
Um de nossos clientes corporativos é nosso departamento de fidelidade - Tinkoff Target. Antes de falar sobre automação de análise, explicarei como nosso programa de fidelidade funciona.
Programa de fidelidade Tinkoff.ru ou como distribuímos reembolso para as pessoas
Quase todos os bancos modernos emitem cashback: em rublos, milhas ou papagaios (pontos que você pode gastar em algo específico).
Não somos exceção, emitimos um reembolso padrão de 1% para tudo e 5% para 3 categorias selecionadas (por exemplo, "Transporte", "Cinema", "Lembranças" e assim por diante). Você não precisa fornecer muito dinheiro assim (mas eu realmente quero) e, portanto, temos ofertas especiais de parceiros do banco que também desejam emitir o reembolso. Portanto, como parte da linha de negócios de programas de fidelidade, estamos tentando encontrar e convencer várias empresas a emitir cashback para nossos clientes em condições mutuamente benéficas. Essas empresas são nossos parceiros.
Como fazemos isso? Imagine que existe uma empresa condicional Yabloko no mercado. A melhor maneira de atrair Yabloko ao nosso programa de reembolso é ajudá-lo a vender seu produto ou serviço. Aqui, a tarefa é atrair uma audiência para o parceiro. Por exemplo, clientes comprados de concorrentes ou clientes que não estão cientes da existência da Yabloko. Além disso, é possível para a Yabloko selecionar os clientes mais adequados para o perfil que realmente desejam a "Yabloko", eles ainda não sabem disso ainda - trata-se de inteligência artificial e aprendizado de máquina.
A tarefa de selecionar esse público-alvo é dos analistas. Temos dois deles e existem muitos parceiros - mais de 1000. Além disso, os analistas ainda têm muito trabalho interessante e, à medida que o número de parceiros cresce, a escolha do público certo se torna uma rotina. Essa rotina precisa ser automatizada e transformada em um único clique no botão (ou melhor, sem um botão). Além disso, o processo de várias etapas da realização de tais tarefas acarreta erros causados pelo fator humano. A seguir, mostrarei como conseguimos nos livrar desse trabalho rotineiro.
Como criamos análises
No Tinkoff.ru, a maioria dos analistas usa o
Apache Zeppelin em suas tarefas diárias. Há muito tempo colocamos essa ferramenta em serviço e estamos desenvolvendo-a ativamente (até comprometendo-nos com o código aberto). Todos os funcionários têm acesso a um repositório global de dados e relatórios, ou seja, a todos os recursos analíticos do Tinkoff.ru com a possibilidade de usar uma linguagem analítica conveniente.
O Zeppelin é escrito em Java e inclui muitos intérpretes de linguagens e tecnologias modernas, incluindo Python, Hive, Spark, Groovy, R e muitos outros. Os scripts escritos são armazenados em laptops, que consistem em parágrafos; externamente, a interface do usuário do ambiente de trabalho é muito semelhante ao
Jupyter . E a tela principal do aplicativo é a seguinte:
Cada linha de negócios aqui possui seu próprio diretório de trabalho com diferenciação dos direitos de leitura e edição.
Uma grande vantagem para nós (desenvolvedores) é a disponibilidade de uma
API muito conveniente e interativa. Com a API, a vida se torna mais fácil. Por meio da API com essa ferramenta, você pode fazer o que quiser, ignorando a interface da web. Então surgiu a ideia de integrar os resultados do trabalho dos analistas em nosso projeto.
Brevemente sobre o nosso projeto
Nosso back-end é escrito em Java, Front-end no Angular 5 (como o projeto não é jovem, parte da interface do usuário é escrita em Vaadin, da qual estamos nos livrando lentamente). A maior parte do projeto é um aplicativo da web para os gerentes trabalharem, onde eles conduzem relacionamentos com parceiros, fazem novas ofertas especiais, monitoram a implementação de seus KPIs etc. Temos uma conta pessoal de parceiro em que qualquer parceiro do banco pode observar as estatísticas de suas ofertas especiais lançadas (accruals, ativação etc.), baixar e assinar contratos, contas e documentar relacionamentos em geral.
Enviamos os dados para o banco móvel e o portal da web para a seção "Bônus" através do serviço da web SOAP. Há um Landing escrito em React, onde qualquer pessoa pode deixar uma solicitação para participar do programa de fidelidade. Implementamos várias mecânicas para o cálculo de reembolso e parcelas especiais, integração com vários serviços bancários.
Integração com Apache Zeppelin
Tradicionalmente, para atrair novos parceiros, os gerentes enviavam aos analistas uma carta com um conjunto de desejos de parceiros para gerar um público-alvo. Os analistas usavam scripts escritos anteriormente no zoológico de idiomas e copiar e colar mágico.
Obviamente, com a formalização adequada dos requisitos, você pode escrever um script universal, o que fizemos. E para inserir dados formalizados, eles escreveram uma interface conveniente. Resta apenas implementar o trabalho com o Apache Zeppelin em nosso aplicativo da web. O esquema de trabalho dessa integração é o seguinte:
O gerente no curso de comunicação com o parceiro cria uma tarefa no aplicativo, preenchendo os parâmetros no formulário para formar o público-alvo. Um exemplo desses parâmetros é o seguinte:
- Categorias Códigos BCC e / ou MCC nos quais o cliente realiza transações ou transações em um determinado período de tempo por determinados valores com uma determinada verificação média.
- Empresas competitivas nas quais o cliente transporta ou transporta em um determinado período de tempo.
e outro.
Existem muitos desses parâmetros e todos são formalizados na interface do usuário. Após inserir os parâmetros iniciais, o gerente inicia a operação de geração e o algoritmo inicia seu trabalho:
- Como todos os nossos scripts estão escritos em um bloco de anotações e não queremos alterá-lo, o clonamos em um diretório separado. O Zeppelin, em resposta à nossa solicitação, retorna o ID do clone, pelo qual entraremos em contato com o novo laptop. A clonagem de scripts de trabalho também é conveniente para administração, pois sempre podemos examinar os scripts que foram executados para uma tarefa específica e encontrar o problema.
- A partir da versão Zeppelin API 0.8, após a criação de um novo laptop, você precisa afixar o acesso CRUD a ele para administração subsequente.
- Em um dos primeiros parágrafos de um laptop em funcionamento, como regra, as variáveis são declaradas e seus valores padrão iniciais são definidos, que devem ser substituídos. Nesse estágio, inserimos nosso parágrafo no laptop (com a inicialização de variáveis e dados formalizados), que formamos antes do envio.
- Em seguida, com uma solicitação leve para o método POST, lançamos nosso laptop para execução. Ou melhor, executamos nossos parágrafos um de cada vez, para monitorar a execução de todos os scripts e exibir o status da geração do público-alvo no aplicativo.
- No final da operação, o gerente recebe uma notificação (caso não tenha monitorado o status do progresso). O resultado dos scripts é o arquivo CSV gerado com o público, armazenado em um diretório compartilhado. Ao lançar ofertas especiais, podemos gerar vários públicos-alvo e afixá-los com um tipo diferente ao adicionar à oferta. E para públicos de diferentes tipos, podemos definir de forma flexível as condições e o tamanho do acúmulo de reembolso.
Um pouco de análise rude
De acordo com estimativas aproximadas, a automação da coleta do público-alvo levou à liberação de mais de 30% do tempo de trabalho dos analistas (sem contar o tempo gasto na comunicação entre analistas e gerentes).
De junho de 2018 a janeiro de 2019, o número de tarefas de geração concluídas excede 400. De acordo com os gerentes de comunicação e obtendo o resultado necessário, eles passaram de 0,5 a 4 horas, levando o tempo médio para formar o público-alvo de ~ 2 horas, mais de 800 horas-homem foram salvas (mais de 100 dias úteis).
Em conclusão
A coisa mais importante que a integração com o Zeppelin conseguiu alcançar foi minimizar o fator humano em todas as etapas do processo de geração de público-alvo. Erros na formação de um público adequado para o parceiro, em regra, são identificados após acumulações. Emitindo reembolso para todos em uma fila, após o lançamento da oferta especial, é muito difícil minimizar os custos financeiros incorridos e, por erros cometidos, você deve pagar caro.
Outra grande vantagem é a mudança de responsabilidade em relação à fonte primária do processo, como O "gargalo" do fator humano está agora na zona da formação inicial de dados pelo gerente. E isso significa que quem cria a tarefa de geração e preenche os parâmetros iniciais faz isso com maior atenção.
Atualmente, continuamos a desenvolver integração e automatizar tarefas analíticas. Portanto, usando o lançamento remoto de scripts escritos no Zeppelin, a partir do aplicativo, geramos vários tipos de relatórios analíticos para gerentes que foram previamente preparados individualmente, mediante solicitação.