Ana sing mlebu lan "tidur" ing salawas-lawase. Ana sing lali sandi lan ndhaptar kaping pindho sajrone nem wulan. Ana sing nggawa dhuwit menyang kasir, lan ana sing teka kanthi gratis instrumen. Lan luwih becik entuk bathi saka kabeh wong.
Ing set data gedhe kaya kita, nganalisa prilaku pangguna individu lan nggawe keputusan mikro ora ana gunane. Nanging keno tren lan nggarap kelompok gedhe bisa lan perlu. Kang persis apa kita nindakake.
Ringkesan
Apa analisis kohort lan kenapa perlu?
Cara nggawe kohort miturut sasi registrasi pangguna ing SQL.
Yen sampeyan wis ngerti apa analisis kohort lan carane nindakake ing SQL, skip langsung menyang bagean pungkasan.
1. Apa analisis kohort lan kenapa perlu?
Analisis kohort minangka cara adhedhasar mbandhingake macem-macem klompok (cohorts) pangguna. Paling asring, klompok kita dibentuk ing minggu utawa wulan nalika pangguna wiwit nggunakake layanan kasebut. Saka kene umur pangguna diwilang, lan iki minangka indikator sing adhedhasar analisis sing rada rumit bisa ditindakake. Contone, ngerti:
carane saluran akuisisi mengaruhi umur pangguna;
carane nggunakake sembarang fitur utawa layanan mengaruhi umur;
Kepiye peluncuran fitur X mengaruhi umur dibandhingake taun kepungkur.
2. Kepiye carane nggawe kohort ing SQL?
Ukuran artikel lan akal sehat ora ngidini kita nampilake data nyata ing kene - ing dump test, statistik kanggo setahun lan setengah: 1200 pangguna lan 53 transaksi. Supaya sampeyan bisa muter karo data iki, kita wis nyiapake gambar docker karo MySQL lan Grafana sing bisa nemu kabeh dhewe. Link menyang GitHub ing pungkasan artikel.
Lan ing kene kita bakal nuduhake nggawe kohort nggunakake conto sing disederhanakake.
Ayo nganggep kita duwe layanan. Pangguna ndhaptar ana lan mbuwang dhuwit kanggo layanan. Sajrone wektu, pangguna mandheg. Kita pengin ngerti suwene pangguna urip, lan pira sing tiba sawise 1st lan 2nd sasi nggunakake layanan kasebut.
Kanggo njawab pitakonan kasebut, kita kudu mbangun kohort adhedhasar sasi registrasi. Kita bakal ngukur aktivitas kanthi biaya saben wulan. Tinimbang biaya, bisa uga ana pesenan, biaya langganan, utawa kegiatan adhedhasar wektu liyane.
Data sumber
Conto kasebut digawe ing MySQL, nanging kanggo DBMS liyane ora ana bedane sing signifikan.
Tabel pangguna - pangguna:
panggunaId
Tanggal Pendaftaran
1
2019-01-01
2
2019-02-01
3
2019-02-10
4
2019-03-01
Tabel biaya - tagihan:
panggunaId
tanggal
Cacahe
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
Pilih kabeh penghapusan pangguna lan tanggal registrasi:
SELECT
b.userId,
b.Date,
u.RegistrationDate
FROM billing AS b LEFT JOIN users AS u ON b.userId = u.userId
Asil:
panggunaId
tanggal
Tanggal Pendaftaran
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
Kita mbangun kohort miturut sasi; kanggo nindakake iki, kita ngowahi kabeh tanggal dadi sasi:
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
panggunaId
BillingWulan
Tanggal Pendaftaran
WulanDiff
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
Kita ngetung pangguna sing diaktifake saben wulan - kita nglumpukake cathetan miturut BillingMonth, RegistrationMonth lan 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
Asil:
UsersCount
BillingWulan
Wulan Pendaftaran
WulanDiff
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
Ing Januari, Februari lan Maret, siji pangguna anyar muncul saben - MonthsDiff = 0. Siji pangguna Januari aktif ing Februari - RegistrationMonth = 2019-01, BillingMonth = 2019-02, lan siji pangguna Februari aktif ing Maret.
Alami, pola luwih katon ing kumpulan data gedhe.
Cara nransfer kohort menyang Grafana
Kita wis sinau carane mbentuk kohort, nanging yen ana akeh cathetan, iku ora gampang maneh kanggo njelasno. Rekaman bisa diekspor menyang Excel lan dibentuk dadi tabel sing apik, nanging iki dudu cara kita!
Cohorts bisa ditampilake minangka grafik interaktif ing Grafana.
Kanggo nindakake iki, kita nambah pitakon liyane kanggo ngowahi data menyang format sing cocog kanggo 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 (
## ΡΡΠ°ΡΡΠΉ Π·Π°ΠΏΡΠΎΡ, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡΠΈΠΉ ΠΊΠΎΠ³ΠΎΡΡΡ
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
Repositori GitHub kanthi conto punika gambar docker karo MySQL lan Grafana sing bisa mbukak ing komputer. Basis data kasebut wis ngemot data demo suwene setengah taun, wiwit Januari 2018 nganti Juli 2019.
Yen sampeyan pengin, sampeyan bisa mbukak data menyang gambar iki.