![Comment créer des cohortes d'utilisateurs sous forme de graphiques dans Grafana [+image Docker avec exemple]](/wp-content/uploads/2019/08/293a4d703ef9e7e69ee414be16217f1d.jpeg)
Comment nous avons résolu la tùche de visualisation des cohortes d'utilisateurs dans le service Promopult avec Grafana.
â un puissant service avec un grand nombre d'utilisateurs. En 10 ans d'activitĂ©, le nombre d'inscriptions dans le systĂšme a dĂ©passĂ© le million. Ceux qui ont rencontrĂ© des services similaires savent que cet ensemble d'utilisateurs est loin d'ĂȘtre homogĂšne.
Certaines personnes se sont inscrites et sont restées inactives pour toujours. D'autres ont oublié leur mot de passe et se sont réinscrites plusieurs fois en six mois. Certains apportent des fonds à la caisse, tandis que d'autres viennent chercher des . Et il serait bon d'obtenir un certain profit de chacun.
Sur de tels volumes de données, comme les nÎtres, analyser le comportement d'un utilisateur individuel et prendre des micro-décisions est futile. En revanche, détecter des tendances et travailler avec de grands groupes est possible et nécessaire. C'est ce que nous faisons, en fait.
Résumé
- Qu'est-ce que l'analyse de cohortes et pourquoi est-elle nécessaire.
- Comment créer des cohortes par mois d'inscription des utilisateurs sur SQL.
- Comment transférer des cohortes dans .
Si vous savez déjà ce qu'est l'analyse de cohortes et comment la réaliser sur SQL, passez directement à la derniÚre section.
1. Qu'est-ce que l'analyse de cohortes et pourquoi est-elle nécessaire
L'analyse de cohortes est une mĂ©thode basĂ©e sur la comparaison de diffĂ©rents groupes (cohortes) d'utilisateurs. Le plus souvent, nous formons des groupes par semaine ou par mois, selon le moment oĂč l'utilisateur a commencĂ© Ă utiliser le service. Ă partir de cela, nous calculons la durĂ©e de vie de l'utilisateur, ce qui devient un indicateur sur la base duquel nous pouvons effectuer une analyse assez complexe. Par exemple, comprendre :
- comment le canal d'acquisition influence la durée de vie de l'utilisateur ;
- comment l'utilisation d'une fonctionnalité ou d'un service influence la durée de vie ;
- comment le lancement de la fonctionnalité X a influencé la durée de vie par rapport à l'année précédente.
2. Comment créer des cohortes sur SQL ?
La taille de l'article et le bon sens ne permettent pas de fournir ici nos donnĂ©es rĂ©elles â dans un Ă©chantillon de test, la statistique couvre un an et demi : 1200 utilisateurs et 53 000 transactions. Pour que vous puissiez jouer avec ces donnĂ©es, nous avons prĂ©parĂ© une image Docker avec MySQL et Grafana, dans laquelle vous pouvez explorer tout cela vous-mĂȘme. Le lien vers GitHub est Ă la fin de l'article.
Et ici, nous allons montrer la création de cohortes avec un exemple simplifié.
Supposons que nous avons un service. Les utilisateurs s'y inscrivent et dépensent de l'argent pour des services. Avec le temps, les utilisateurs se désabonnent. Nous souhaitons savoir combien de temps les utilisateurs restent et combien d'entre eux se désabonnent aprÚs 1 et 2 mois d'utilisation du service.
Pour répondre à ces questions, nous devons construire des cohortes par mois d'inscription. Nous mesurerons l'activité en fonction des dépenses de chaque mois. Au lieu des dépenses, il peut s'agir de commandes, d'abonnements ou de toute autre activité liée au temps.
Données d'origine
Les exemples sont faits en MySQL, mais il ne devrait pas y avoir de différences significatives pour les autres SGBD.
Table des utilisateurs â users :
userId
RegistrationDate
1
2019-01-01
2
2019-02-01
3
2019-02-10
4
2019-03-01
Table des dĂ©penses â billing :
userId
Date
Sum
1
2019-01-02
11
1
2019-02-22
11
2
2019-02-12
12
3
2019-02-11
13
3
2019-03-11
13
4
2019-03-01
14
4
2019-03-02
14
Nous sélectionnons tous les débits des utilisateurs et leur date d'inscription :
SELECT
b.userId,
b.Date,
u.RegistrationDate
FROM billing AS b LEFT JOIN users AS u ON b.userId = u.userId
Résultat :
userId
Date
RegistrationDate
1
2019-01-02
2019-01-02
1
2019-02-22
2019-01-02
2
2019-02-12
2019-02-01
3
2019-02-11
2019-02-10
3
2019-03-11
2019-02-10
4
2019-03-01
2019-03-01
4
2019-03-02
2019-03-01
Nous construisons des cohortes par mois, pour cela nous transformons toutes les dates en mois :
DATE_FORMAT(Date, '%Y-%m')Nous devons maintenant savoir combien de mois l'utilisateur a Ă©tĂ© actif â c'est la diffĂ©rence entre le mois de dĂ©bit et le mois d'inscription. MySQL dispose de la fonction PERIOD_DIFF() â la diffĂ©rence entre deux mois. Ajoutons PERIOD_DIFF() Ă la requĂȘte :
SELECT
b.userId,
DATE_FORMAT(b.Date, '%Y-%m') AS BillingMonth,
DATE_FORMAT(u.RegistrationDate, '%Y-%m') AS RegistrationMonth,
PERIOD_DIFF(DATE_FORMAT(b.Date, '%Y%m'), DATE_FORMAT(u.RegistrationDate, '%Y%m')) AS MonthsDiff
FROM billing AS b LEFT JOIN users AS u ON b.userId = u.userId
userId
BillingMonth
RegistrationDate
MonthsDiff
1
2019-01
2019-01
0
1
2019-02
2019-01
1
2
2019-02
2019-02
0
3
2019-02
2019-02
0
3
2019-03
2019-02
1
4
2019-03
2019-03
0
4
2019-03
2019-03
0
Nous comptons les utilisateurs activĂ©s chaque mois â nous groupons les enregistrements par BillingMonth, RegistrationMonth et MonthsDiff :
SELECT
COUNT(DISTINCT(b.userId)) AS UsersCount,
DATE_FORMAT(b.Date, '%Y-%m') AS BillingMonth,
DATE_FORMAT(u.RegistrationDate, '%Y-%m') AS RegistrationMonth,
PERIOD_DIFF(DATE_FORMAT(b.Date, '%Y%m'), DATE_FORMAT(u.RegistrationDate, '%Y%m')) AS MonthsDiff
FROM billing AS b LEFT JOIN users AS u ON b.userId = u.userId
GROUP BY BillingMonth, RegistrationMonth, MonthsDiff
Résultat :
UsersCount
BillingMonth
RegistrationMonth
MonthsDiff
1
2019-01
2019-01
0
1
2019-02
2019-01
1
2
2019-02
2019-02
0
1
2019-03
2019-02
1
1
2019-03
2019-03
0
En janvier, fĂ©vrier et mars, un nouvel utilisateur est apparu chaque mois â MonthsDiff = 0. Un utilisateur de janvier Ă©tait actif en fĂ©vrier â RegistrationMonth = 2019-01, BillingMonth = 2019-02, tout comme un utilisateur de fĂ©vrier Ă©tait actif en mars.
Avec un grand ensemble de données, les tendances sont bien sûr plus visibles.
Comment transférer les cohortes dans Grafana
Nous avons appris Ă former des cohortes, mais lorsque le nombre d'enregistrements devient important, leur analyse devient difficile. Les enregistrements peuvent ĂȘtre exportĂ©s vers Excel et de beaux tableaux peuvent ĂȘtre gĂ©nĂ©rĂ©s, mais ce n'est pas notre mĂ©thode !
Les cohortes peuvent ĂȘtre affichĂ©es sous forme de graphique interactif dans .
Pour cela, nous ajoutons une autre requĂȘte pour convertir les donnĂ©es au format appropriĂ© pour Grafana :
SELECT
DATE_ADD(CONCAT(s.RegistrationMonth, '-01'), INTERVAL s.MonthsDiff MONTH) AS time_sec,
SUM(s.Users) AS value,
s.RegistrationMonth AS metric
FROM (
## ancienne requĂȘte, retournant les cohortes
SELECT
COUNT(DISTINCT(b.userId)) AS Users,
DATE_FORMAT(b.Date, '%Y-%m') AS BillingMonth,
DATE_FORMAT(u.RegistrationDate, '%Y-%m') AS RegistrationMonth,
PERIOD_DIFF(DATE_FORMAT(b.Date, '%Y%m'), DATE_FORMAT(u.RegistrationDate, '%Y%m')) AS MonthsDiff
FROM billing AS b LEFT JOIN users AS u ON b.userId = u.userId
WHERE
u.RegistrationDate BETWEEN '2018-01-01' AND CURRENT_DATE
GROUP BY
BillingMonth, RegistrationMonth, MonthsDiff
) AS s
GROUP BY
time_sec, metric
Et nous exportons les données vers Grafana.
Exemple de graphique provenant de :
![Comment créer des cohortes d'utilisateurs sous forme de graphiques dans Grafana [+image Docker avec exemple]](/wp-content/uploads/2019/08/9aa161a1d0e8fd7790875d4f12202d56.jpeg)
Toucher de ses propres mains :
â c'est une image Docker avec MySQL et Grafana, que vous pouvez exĂ©cuter sur votre ordinateur. La base contient dĂ©jĂ des donnĂ©es de dĂ©monstration couvrant un an et demi, de janvier 2018 Ă juillet 2019.
Si vous le souhaitez, vous pouvez télécharger vos propres données dans cette image.
P.S. Articles sur l'analyse de cohortes en SQL :
Source : habr.com
