Wie man Nutzerkohorten in Form von Grafiken in Grafana erstellt [+Docker-Image mit Beispiel]

Wie man Nutzerkohorten in Form von Grafiken in Grafana erstellt [+Docker-Image mit Beispiel]

Wie wir das Problem der visuellen Darstellung von Nutzerkohorten im Dienst Promopult mit Hilfe von Grafana gelöst haben.

Promopult — ein leistungsstarker Service mit einer großen Anzahl von Nutzern. In 10 Jahren sind die Registrierungen im System auf ĂŒber eine Million gestiegen. Diejenigen, die mit Ă€hnlichen Services in BerĂŒhrung kamen, wissen, dass diese Nutzerbasis alles andere als homogen ist.

Einige haben sich registriert und sind fĂŒr immer „eingeschlafen“. Manche haben ihr Passwort vergessen und sich in einem halben Jahr noch ein paar Mal registriert. Einige bringen Geld in die Kasse, wĂ€hrend andere nach kostenlosen Werkzeugensuchen. Gut wĂ€re es, von jedem einen gewissen Profit zu erzielen.

Bei so großen Datenmengen wie unseren ist es sinnlos, das Verhalten eines einzelnen Nutzers zu analysieren und Mikroentscheidungen zu treffen. Stattdessen ist es wichtig, Trends zu erkennen und mit großen Gruppen zu arbeiten — genau das tun wir.

Zusammenfassung

  1. Was ist eine Kohortenanalyse und warum ist sie wichtig?
  2. Wie man Kohorten nach Monat der Nutzerregistrierung in SQL erstellt.
  3. Wie man Kohorten in Grafana.

Wenn Sie bereits wissen, was eine Kohortenanalyse ist und wie man sie in SQL umsetzt, gehen Sie direkt zum letzten Abschnitt.

1. Was ist eine Kohortenanalyse und warum ist sie wichtig?

Kohortenanalyse ist eine Methode, die auf dem Vergleich verschiedener Gruppen (Kohorten) von Nutzern basiert. In der Regel werden diese Gruppen nach der Woche oder dem Monat gebildet, in dem der Nutzer den Service begonnen hat. Daraus ergibt sich die Lebensdauer des Nutzers, die eine Kennzahl ist, auf deren Grundlage man relativ komplexe Analysen durchfĂŒhren kann. Beispielsweise kann man verstehen:

  • wie der Akquisekanal die Lebensdauer des Nutzers beeinflusst;
  • wie die Nutzung einer bestimmten Funktion oder Dienstleistung die Lebensdauer beeinflusst;
  • wie die EinfĂŒhrung der Funktion X die Lebensdauer im Vergleich zum Vorjahr beeinflusst hat.

2. Wie erstellt man Kohorten in SQL?

Der Umfang des Artikels und der gesunde Menschenverstand lassen es nicht zu, hier unsere echten Daten zu prĂ€sentieren – im Testdump sind die Statistiken ĂŒber anderthalb Jahre: 1200 Nutzer 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 alles selbst ausprobieren können. Der Link zu GitHub befindet sich am Ende des Artikels.

Hier zeigen wir die Erstellung von Kohorten anhand eines vereinfachten Beispiels.

Angenommen, wir haben einen Service. Darin registrieren sich Benutzer und geben Geld fĂŒr Dienstleistungen aus. Mit der Zeit fallen Benutzer ab. Wir möchten wissen, wie lange die Benutzer aktiv bleiben und wie viele nach dem ersten und zweiten Monat der Nutzung des Services abspringen.

Um diese Fragen zu beantworten, mĂŒssen wir Kohorten nach dem Registrierungsmonat erstellen. Die AktivitĂ€t messen wir an den Ausgaben in jedem Monat. Statt Ausgaben könnten auch Bestellungen, Abonnements oder jede andere zeitgebundene AktivitĂ€t betrachtet werden.

Rohdaten

Die Beispiele sind in MySQL erstellt, aber es sollten keine wesentlichen Unterschiede zu anderen DBMS bestehen.

Benutzertabelle — 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
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

Wir wÀhlen alle Abbuchungen der Benutzer 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

Das 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

Die Kohorten erstellen wir nach Monaten, dazu wandeln wir alle Daten in Monate um:

DATE_FORMAT(Date, '%Y-%m')

Jetzt mĂŒssen wir wissen, wie viele Monate der Benutzer aktiv war – das ist die Differenz zwischen dem Abbuchungsmonat und dem Registrierungsmonat. In MySQL gibt es die Funktion PERIOD_DIFF() – die Differenz zwischen zwei Monaten. Wir fĂŒgen PERIOD_DIFF() zur Abfrage hinzu:

WÄHLEN
    b.userId,
    DATE_FORMAT(b.Date, '%Y-%m') AS Abrechnungsmonat,
    DATE_FORMAT(u.RegistrationDate, '%Y-%m') AS Registrierungsmonat,
    PERIOD_DIFF(DATE_FORMAT(b.Date, '%Y%m'), DATE_FORMAT(u.RegistrationDate, '%Y%m')) AS MonateDiff
VON billing AS b LINKS JOIN users AS u ON b.userId = u.userId

userId
Abrechnungsmonat
RegistrationDate
MonateDiff

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 Benutzer in jedem Monat — wir gruppieren die DatensĂ€tze nach Abrechnungsmonat, Registrierungsmonat und MonateDiff:

WÄHLEN
    COUNT(DISTINCT(b.userId)) AS BenutzerAnzahl,
    DATE_FORMAT(b.Date, '%Y-%m') AS Abrechnungsmonat,
    DATE_FORMAT(u.RegistrationDate, '%Y-%m') AS Registrierungsmonat,
    PERIOD_DIFF(DATE_FORMAT(b.Date, '%Y%m'), DATE_FORMAT(u.RegistrationDate, '%Y%m')) AS MonateDiff
VON billing AS b LINKS JOIN users AS u ON b.userId = u.userId
GRUPPIEREN NACH Abrechnungsmonat, Registrierungsmonat, MonateDiff

Das Ergebnis:

BenutzerAnzahl
Abrechnungsmonat
Registrierungsmonat
MonateDiff

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 Benutzer — MonateDiff = 0. Ein Benutzer aus Januar war auch im Februar aktiv — Registrierungsmonat = 2019-01, Abrechnungsmonat = 2019-02, und ebenso war ein Benutzer aus Februar im MĂ€rz aktiv.

In großen Datenmengen sind Muster natĂŒrlich besser sichtbar.

Wie man Kohorten in Grafana ĂŒbertrĂ€gt

Wir haben gelernt, Kohorten zu bilden, aber wenn die DatensÀtze zahlreich werden, ist ihre Analyse nicht mehr einfach. Man kann die DatensÀtze nach Excel exportieren und schöne Tabellen erstellen, aber das ist nicht unsere Methode!

Kohorten können in Form eines interaktiven Diagramms gezeigt werden in Grafana.

FĂŒgen wir einen weiteren Abfrage hinzu, um die Daten in ein fĂŒr Grafana geeignetes Format zu bringen:

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 exportieren die Daten nach Grafana.

Beispielgrafik aus Demo:

Wie man Nutzerkohorten in Form von Grafiken in Grafana erstellt [+Docker-Image mit Beispiel]

Anfassen:

GitHub-Repository mit dem Beispiel — ist ein Docker-Image mit MySQL und Grafana, das Sie auf Ihrem Computer ausfĂŒhren können. In der Datenbank sind bereits Demodaten fĂŒr anderthalb Jahre, von Januar 2018 bis Juli 2019, enthalten.

Falls gewĂŒnscht, können Sie Ihre eigenen Daten in dieses Image hochladen.

P.S. Artikel ĂŒber Kohortenanalyse in SQL:

https://chartio.com/resources/tutorials/performing-cohort-analysis-using-mysql/

https://www.holistics.io/blog/calculate-cohort-retention-analysis-with-sql/

Quelle: habr.com

Erwerben Sie zuverlĂ€ssiges Hosting fĂŒr Websites mit DDoS-Schutz, VPS VDS-Server đŸ”„ Kaufen Sie zuverlĂ€ssiges Hosting fĂŒr Websites mit DDoS-Schutz, VPS VDS-Server | ProHoster