Tinkoff.ru développe de nombreux services sur le marché des services financiers. Nos analystes, développeurs, technologues et gestionnaires résolvent leurs tâches quotidiennes. Chaque jour, nous générons des idées, analysons, développons et faisons tout pour créer le meilleur produit sur le marché.
Je travaille en tant que programmeur backend dans le département de développement interne. Nous aidons à lancer de nouvelles lignes d'affaires, à automatiser le flux de travail et à essayer d'économiser une banque d'argent là où c'est possible (par exemple, refuser d'acheter une licence pour une sorte de logiciel coûteux). Notre flux de travail est très standard: les gestionnaires proposent des fonctionnalités métier, les technologues les formalisent et définissent les tâches, les analystes analysent les données et les développeurs résolvent déjà les tâches qui leur sont assignées. Tout dans la vie est plus compliqué, mais vous le savez déjà.
L'un de nos clients commerciaux est notre service de fidélisation client - Tinkoff Target. Avant de parler d'automatisation de l'analyse, je vais vous expliquer le fonctionnement de notre programme de fidélité.
Programme de fidélisation Tinkoff.ru ou comment nous distribuons de l'argent aux gens
Presque toutes les banques modernes émettent des remises en argent: en roubles, en miles ou en perroquets (points que vous pouvez dépenser pour quelque chose de spécifique).
Nous ne faisons pas exception, nous émettons un cashback standard de 1% pour tout et 5% pour 3 catégories sélectionnées (par exemple, "Transport", "Cinéma", "Souvenirs" et ainsi de suite). Vous n'êtes pas obligé de donner beaucoup de cashback (mais je le veux vraiment), et nous avons donc des offres spéciales de partenaires bancaires qui veulent également donner du cashback. Ainsi, dans le cadre de la ligne d'activité des programmes de fidélisation, nous essayons de trouver et de convaincre diverses entreprises d'émettre des remises en argent à nos clients à des conditions mutuellement avantageuses. Ces entreprises sont nos partenaires.
Comment fait-on cela? Imaginez qu'il y ait une entreprise conditionnelle Yabloko sur le marché. La meilleure façon d'attirer Yabloko dans notre programme de cashback est de l'aider à vendre son produit ou service. Ici, la tâche est d'attirer un public pour le partenaire. Par exemple, des clients achetés auprès de concurrents ou des clients qui ne connaissent pas l'existence de Yabloko. Et aussi, il est possible pour Yabloko de sélectionner les clients les plus appropriés pour le profil qui veulent vraiment "Yabloko", ils ne le savent pas encore - il s'agit de l'intelligence artificielle et de l'apprentissage automatique.
La sélection d'un tel public cible incombe aux analystes. Nous en avons deux, et il existe de nombreux partenaires - plus de 1000. En plus de cela, les analystes ont encore beaucoup de travail intéressant, et à mesure que le nombre de partenaires augmente, choisir le bon public devient une routine. Une telle routine doit être automatisée et transformée en un seul clic sur le bouton (ou mieux sans bouton du tout). De plus, le processus en plusieurs étapes de réalisation de telles tâches entraîne des erreurs causées par le facteur humain. Ensuite, je vais vous dire comment nous avons réussi à nous débarrasser de ce travail de routine.
Comment nous construisons l'analyse
Chez Tinkoff.ru, la plupart des analystes utilisent
Apache Zeppelin dans leurs tâches quotidiennes. Nous mettons depuis longtemps cet outil en service et le développons activement (nous nous engageons même à l'open source). Tous les employés ont accès à un référentiel mondial de données et de rapports, c'est-à-dire à toutes les ressources analytiques de Tinkoff.ru avec la possibilité d'utiliser un langage analytique pratique.
Zeppelin est écrit en Java et comprend de nombreux interprètes de langages et technologies modernes, dont Python, Hive, Spark, Groovy, R et bien d'autres. Les scripts écrits sont stockés dans des ordinateurs portables, qui se composent de paragraphes; en externe, l'interface utilisateur de l'environnement de travail est très similaire à
Jupyter . Et l'écran principal de l'application est le suivant:
Chaque secteur d'activité possède ici son propre répertoire de travail avec différenciation des droits de lecture et d'édition.
Un énorme avantage pour nous (développeurs) est la disponibilité d'une
API très pratique et interactive. Avec l'API, la vie devient plus facile. Grâce à l'API avec cet outil, vous pouvez faire tout ce que vous voulez, en contournant l'interface utilisateur Web. L'idée est donc venue d'intégrer les résultats du travail des analystes dans notre projet.
En bref sur notre projet
Notre backend est écrit en Java, Frontend dans Angular 5 (puisque le projet n'est pas jeune, une partie de l'interface utilisateur est écrite en Vaadin, dont nous nous débarrassons lentement). La plupart du projet est une application Web avec laquelle les managers peuvent travailler, où ils mènent des relations avec des partenaires, font de nouvelles offres spéciales, surveillent la mise en œuvre de leur KPI, etc. Nous avons un compte personnel de partenaire où tout partenaire de la banque peut observer les statistiques de leurs offres spéciales lancées (cumuls, activation, etc.), télécharger et signer des accords, des comptes et des relations documentaires en général.

Nous envoyons les données à la banque mobile et au portail Web à la section «Bonus» via le service Web SOAP. Il y a un Landing écrit en React, où n'importe qui peut laisser une demande de participation au programme de fidélité. Nous avons mis en place différents mécanismes de calcul de cashback et de versements spéciaux, intégration avec différents services bancaires.
Intégration avec Apache Zeppelin
Traditionnellement, pour attirer de nouveaux partenaires, les gestionnaires envoyaient aux analystes une lettre avec un ensemble de souhaits de partenaires pour générer un public cible. Les analystes ont utilisé des scripts précédemment écrits au zoo des langues et des copier-coller magiques.
De toute évidence, avec une formalisation appropriée des exigences, vous pouvez écrire un script universel, ce que nous avons fait. Et pour entrer des données formalisées, ils ont écrit une interface utilisateur pratique. Il ne reste plus qu'à implémenter le travail avec Apache Zeppelin dans notre application web. Le schéma de travail d'une telle intégration est le suivant:
Le gestionnaire en cours de communication avec le partenaire crée une tâche dans l'application, remplissant les paramètres du formulaire pour former le public cible. Un exemple de ces paramètres est le suivant:
- Catégories Codes BCC et / ou MCC dans lesquels le client effectue une transaction ou a effectué une transaction dans un certain laps de temps pour certains montants avec un certain chèque moyen.
- Entreprises compétitives dans lesquelles le client transporte ou transporte dans un certain laps de temps.
et un autre.
Il existe de nombreux paramètres de ce type et ils sont tous formalisés dans l'interface utilisateur. Après avoir entré les paramètres initiaux, le gestionnaire démarre l'opération de génération et l'algorithme commence son travail:
- Étant donné que tous nos scripts sont écrits dans un seul bloc-notes et que nous ne voulons pas le modifier, nous le clonons dans un répertoire distinct. Zeppelin en réponse à notre demande nous renvoie l'ID du clone, par lequel nous contacterons le nouvel ordinateur portable. Le clonage de scripts de travail est également pratique pour l'administration, car nous pouvons toujours regarder les scripts qui ont été exécutés pour une tâche spécifique et trouver le problème.
- À partir de la version Zeppelin API 0.8, après avoir créé un nouvel ordinateur portable, vous devez y ajouter un accès CRUD pour une administration ultérieure.
- Dans l'un des premiers paragraphes d'un ordinateur portable fonctionnel, en règle générale, les variables sont déclarées et leurs valeurs par défaut initiales sont définies, qui doivent être remplacées. A ce stade, nous insérons notre paragraphe dans le portable (avec l'initialisation des variables et des données formalisées), que nous formons avant l'envoi.
- Ensuite, avec une demande légère pour la méthode POST, nous lançons notre ordinateur portable pour exécution. Ou plutôt, nous exécutons nos paragraphes un à la fois, afin de surveiller l'exécution de tous les scripts et d'afficher l'état de la génération du public cible dans l'application.
- À la fin de l'opération, le gestionnaire reçoit une notification (au cas où il n'aurait pas suivi l'état d'avancement). Le résultat des scripts est le fichier CSV généré avec le public, stocké dans un répertoire partagé. Lors du lancement d'offres spéciales, nous pouvons générer plusieurs publics et les apposer avec un type différent lors de l'ajout à l'offre. Et pour des publics de types différents, nous pouvons définir de manière flexible les conditions et la taille de l'accumulation de cashback.
Un peu d'analyse grossière
Selon des estimations approximatives, l'automatisation de la collecte du public cible a conduit à la libération de plus de 30% du temps de travail des analystes (sans compter le temps consacré à la communication entre analystes et managers).
De juin 2018 à janvier 2019, le nombre de tâches de génération terminées dépasse 400. Selon les responsables de la communication et obtenant le résultat souhaité, ils ont passé de 0,5 à 4 heures, ce qui prend un temps moyen pour former le public cible de ~ 2 heures, plus de 800 heures de travail ont été économisées (plus de 100 jours ouvrables).
En conclusion
La chose la plus importante que l'intégration avec Zeppelin a réussi à réaliser était de minimiser le facteur humain à toutes les étapes du processus de génération du public cible. Les erreurs dans la formation d'un public approprié pour le partenaire, en règle générale, sont identifiées après les régularisations. Donner de l'argent à tout le monde de suite, après le lancement de l'offre spéciale, il est très difficile de minimiser les coûts financiers encourus et pour les erreurs commises, vous devez payer cher.
Un autre grand avantage est le transfert de responsabilité vers la source principale du processus, Le «goulot d'étranglement» du facteur humain est désormais dans la zone de formation initiale des données par le manager. Et cela signifie que celui qui crée la tâche de génération et remplit les paramètres initiaux le fait avec une attention accrue.
Actuellement, nous continuons à développer l'intégration et à automatiser les tâches analytiques. Ainsi, en utilisant le lancement à distance de scripts écrits en Zeppelin, à partir de l'application, nous générons différents types de rapports analytiques pour les managers qui ont été préparés individuellement sur demande.