![Wie man Benutzerkohorten in Grafana in Form von Diagrammen zusammenstellt [+Docker-Image mit Beispiel]](/wp-content/uploads/2019/08/293a4d703ef9e7e69ee414be16217f1d.jpeg)
Wie wir das Problem der Visualisierung von Benutzerkohorten im Dienst Promopult mit Hilfe von Grafana gelöst haben.
â ein leistungsstarker Dienst mit einer groĂen Anzahl von Benutzern. Nach 10 Jahren Betrieb hat die Anzahl der Registrierungen im System die Millionengrenze ĂŒberschritten. Diejenigen, die mit Ă€hnlichen Diensten vertraut sind, wissen, dass diese groĂe Nutzerbasis keineswegs homogen ist.
Einige haben sich registriert und "schliefen" fĂŒr immer ein. Einige haben ihr Passwort vergessen und sich in einem halben Jahr noch ein paar Mal registriert. Einige bringen Geld in die Kasse, wĂ€hrend andere nur nach kostenlosen . Und es wĂ€re schön, von jedem einen gewissen Gewinn zu erzielen.
Bei so groĂen Datenmengen wie unseren macht es keinen Sinn, das Verhalten einzelner Nutzer zu analysieren und Mikroentscheidungen zu treffen. Aber Trends zu erkennen und mit groĂen Gruppen zu arbeiten - das kann und muss man tun. Genau das tun wir.
Kurze Zusammenfassung
- Was ist Kohortenanalyse und wozu dient sie?
- Wie man Kohorten nach dem Registrierungsmonat der Nutzer in SQL erstellt.
- Wie man Kohorten nach .
Wenn Sie bereits wissen, was Kohortenanalyse ist und wie man sie in SQL durchfĂŒhrt, springen Sie sofort zum letzten Abschnitt.
1. Was ist Kohortenanalyse und wozu dient sie?
Kohortenanalyse ist eine Methode, die auf dem Vergleich verschiedener Gruppen (Kohorten) von Nutzern basiert. In der Regel bilden wir Gruppen nach der Woche oder dem Monat, in dem der Nutzer den Dienst angefangen hat zu nutzen. Daraus wird die Lebensdauer des Nutzers berechnet, und das ist bereits ein Indikator, auf dessen Grundlage man ziemlich komplexe Analysen durchfĂŒhren kann. Zum Beispiel zu verstehen:
- wie der Akquise-Kanal die Lebensdauer des Nutzers beeinflusst;
- wie die Nutzung einer bestimmten Funktion oder Dienstleistung die Lebensdauer beeinflusst;
- wie die EinfĂŒhrung des Features X die Lebensdauer im Vergleich zum Vorjahr beeinflusst hat.
2. Wie erstellt man Kohorten in SQL?
Die GröĂe des Artikels und der gesunde Menschenverstand erlauben es nicht, hier unsere echten Daten anzugeben â im Test-Dump sind die Statistiken fĂŒr anderthalb Jahre: 1200 Benutzer und 53.000 Transaktionen. Damit Sie mit diesen Daten experimentieren können, haben wir ein Docker-Image mit MySQL und Grafana vorbereitet, in dem Sie all dies selbst ausprobieren können. Der Link zu GitHub am Ende des Artikels.
Hier zeigen wir die Erstellung von Kohorten an einem vereinfachten Beispiel.
Angenommen, wir haben einen Dienst. Nutzer registrieren sich darin und geben Geld fĂŒr Dienstleistungen aus. Im Laufe der Zeit verlassen die Nutzer den Dienst. Wir möchten herausfinden, wie lange die Nutzer bleiben und wie viele von ihnen nach dem ersten und zweiten Monat der Nutzung abwandern.
Um diese Fragen zu beantworten, mĂŒssen wir Kohorten nach dem Registrierungsmonat erstellen. Die AktivitĂ€t messen wir anhand der Ausgaben in jedem Monat. Anstelle von Ausgaben können auch Bestellungen, Abonnements oder jede andere AktivitĂ€t, die zeitlich gebunden ist, verwendet werden.
Stammdaten
Die Beispiele sind in MySQL erstellt, aber fĂŒr andere DBMS sollte es keine wesentlichen Unterschiede geben.
Tabelle der Nutzer â users:
userId
RegistrationDate
1
2019-01-01
2
2019-02-01
3
2019-02-10
4
2019-03-01
Tabelle der Ausgaben â billing:
userId
Date
Summe
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
Wir wÀhlen alle Abhebungen der Nutzer und das Registrierungsdatum aus:
SELECT
b.userId,
b.Date,
u.RegistrationDate
FROM billing AS b LEFT JOIN users AS u ON b.userId = u.userId
Ergebnis:
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
Wir erstellen die Kohorten nach Monaten, dafĂŒr wandeln wir alle Daten in Monate um:
DATE_FORMAT(Date, '%Y-%m')Jetzt mĂŒssen wir wissen, wie viele Monate der Nutzer aktiv war â das ist die Differenz zwischen dem Monat der Abhebung und dem Monat der Registrierung. In MySQL gibt es die Funktion PERIOD_DIFF() â die Differenz zwischen zwei Monaten. Wir fĂŒgen PERIOD_DIFF() in die Abfrage ein:
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
Wir zĂ€hlen die aktivierten Nutzer in jedem Monat â Gruppierung der EintrĂ€ge nach BillingMonth, RegistrationMonth und 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
Ergebnis:
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
Im Januar, Februar und MĂ€rz gab es jeweils einen neuen Nutzer â MonthsDiff = 0. Ein Nutzer aus Januar war auch im Februar aktiv â RegistrationMonth = 2019-01, BillingMonth = 2019-02, ebenso war ein Nutzer aus Februar im MĂ€rz aktiv.
Bei groĂen Datenmengen sind Muster natĂŒrlich besser erkennbar.
Wie man Kohorten in Grafana ĂŒbertrĂ€gt
Wir haben gelernt, Kohorten zu bilden, aber wenn die Anzahl der EintrÀge groà wird, wird die Analyse bereits schwer. Die EintrÀge können in Excel exportiert und schöne Tabellen erstellt werden, aber das ist nicht unser Ansatz!
Kohorten können in Form eines interaktiven Diagramms in .
DafĂŒr fĂŒgen wir eine weitere Abfrage hinzu, um die Daten in ein fĂŒr Grafana geeignetes Format zu konvertieren:
SELECT
DATE_ADD(CONCAT(s.RegistrationMonth, '-01'), INTERVAL s.MonthsDiff MONTH) AS time_sec,
SUM(s.Users) AS value,
s.RegistrationMonth AS metric
FROM (
## alte Abfrage, die Kohorten zurĂŒckgibt
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
Und wir exportieren die Daten nach Grafana.
Beispielgrafik aus :
![Wie man Benutzerkohorten in Grafana in Form von Diagrammen zusammenstellt [+Docker-Image mit Beispiel]](/wp-content/uploads/2019/08/9aa161a1d0e8fd7790875d4f12202d56.jpeg)
Zum Anfassen:
â das ist ein Docker-Image mit MySQL und Grafana, das auf Ihrem Computer ausgefĂŒhrt werden kann. In der Datenbank sind bereits Demo-Daten fĂŒr anderthalb Jahre vorhanden, von Januar 2018 bis Juli 2019.
Wenn gewĂŒnscht, können Sie Ihre eigenen Daten in dieses Image hochladen.
P.S. Artikel ĂŒber kohortenbasierte Analysen in SQL:
Quelle: habr.com
