0Pricing
SQL Interview Prep · Pelajaran

Retensi Hari ke-N dan Retensi Bergulir

Perbedaan antara definisi retensi klasik, bergulir, dan berbatas.

Retensi Hari ke-N dan Retensi Bergulir adalah pelajaran SQL Interview Prep gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar SQL Interview Prep, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus SQL Interview Prep mencakup 4 pelajaran total.

Mengapa Retensi Memiliki Banyak Definisi

Pewawancara jarang hanya mengatakan, "hitung retensi". Pertanyaan lanjutan yang tajam adalah: retensi yang mana? Data yang sama dapat menghasilkan angka yang sangat berbeda, bergantung pada definisinya.

Tiga definisi yang wajib Anda ketahui adalah retensi Hari-N (klasik), retensi bergulir (tak terbatas), dan retensi dalam jendela terbatas. Mengetahui perbedaannya dan menanyakan definisi yang diinginkan bisnis merupakan kemampuan yang sebenarnya sedang diuji.

Retensi Hari-N (Klasik)

Retensi Hari-N menanyakan: apakah pengguna aktif pada tepat hari ke-N setelah tindakan pertamanya? Hari-1, Hari-7, dan Hari-30 adalah metrik klasik aplikasi seluler.

Kata kuncinya adalah tepat. Pengguna yang aktif pada hari ke-6 dan ke-8 tetapi tidak pada hari ke-7 tidak dianggap bertahan pada Hari-7 menurut definisi klasik. Ketepatan inilah yang membuat jumlahnya ketat dan kurvanya bergerigi.

Menghitung Selisih Hari

Retensi Hari-N bergantung pada jumlah hari antara awal kohort dan setiap hari aktivitas. Di Postgres, pengurangan dua tanggal langsung menghasilkan jumlah hari berupa bilangan bulat.

Dialek lain: DATEDIFF(day, start, d) di SQL Server, DATEDIFF(d, start) di MySQL. Sebutkan dialek yang digunakan; konsepnya, yaitu selisih hari, tetap sama.

WITH cohort AS (
  SELECT user_id, MIN(event_at::date) AS day0
  FROM events GROUP BY user_id
),
act AS (
  SELECT DISTINCT user_id, event_at::date AS day
  FROM events
)
SELECT c.user_id, (a.day - c.day0) AS day_n
FROM cohort c
JOIN act a ON a.user_id = c.user_id;

Kueri Retensi Hari-7

Untuk mendapatkan tingkat retensi Hari-7, hitung pengguna unik yang selisih harinya sama dengan 7, lalu bagi dengan ukuran kohort. Gunakan agregasi bersyarat agar pembilang dan penyebut diperoleh dalam satu pemindaian.

Kesamaan = 7 (bukan >= 7) merupakan ciri retensi klasik. Menggantinya dengan pertidaksamaan akan mengubah definisinya secara diam-diam.

WITH dn AS (
  SELECT c.user_id, (a.day - c.day0) AS day_n
  FROM cohort c JOIN act a ON a.user_id = c.user_id
)
SELECT
  COUNT(DISTINCT CASE WHEN day_n = 7 THEN user_id END) AS d7_retained,
  COUNT(DISTINCT user_id)                               AS cohort_size,
  ROUND(100.0 * COUNT(DISTINCT CASE WHEN day_n = 7 THEN user_id END)
        / NULLIF(COUNT(DISTINCT user_id), 0), 1)         AS d7_pct
FROM dn;

Retensi Bergulir (Tak Terbatas)

Retensi bergulir pada hari N mengajukan pertanyaan yang lebih longgar: apakah pengguna aktif pada hari N atau pada hari apa pun setelahnya? Pengguna dianggap bertahan pada hari ke-7 jika ia kembali pada hari ke-7, hari ke-20, atau kapan pun setelahnya.

Definisi ini menghasilkan kurva yang lebih mulus dan lebih tinggi, serta sering dipilih untuk mengukur keterikatan jangka panjang. Perubahan utamanya adalah dari = N menjadi >= N pada hari aktivitas maksimum.

Retensi Bergulir dengan Hari MAX

Cara yang rapi untuk menghitung retensi bergulir adalah mencari selisih hari aktif terakhir setiap pengguna (MAX), lalu menganggap pengguna bertahan secara bergulir pada hari N jika nilai maksimum tersebut >= N.

Setelah MAX, satu pengguna menjadi satu baris, sehingga penghitungan menjadi sederhana. Ini juga memperjelas bahwa retensi bergulir bersifat monoton: jika Anda bertahan pada hari ke-30, Anda juga bertahan pada setiap N yang lebih kecil.

WITH last_day AS (
  SELECT c.user_id, MAX(a.day - c.day0) AS max_day_n
  FROM cohort c JOIN act a ON a.user_id = c.user_id
  GROUP BY c.user_id
)
SELECT
  COUNT(*)                                          AS cohort_size,
  COUNT(*) FILTER (WHERE max_day_n >= 7)            AS rolling_d7,
  ROUND(100.0 * COUNT(*) FILTER (WHERE max_day_n >= 7)
        / NULLIF(COUNT(*), 0), 1)                    AS rolling_d7_pct
FROM last_day;

Retensi dalam Jendela Terbatas

Jalan tengahnya adalah retensi terbatas: aktif setidaknya sekali dalam suatu jendela di sekitar hari N, misalnya hari ke-5 sampai ke-9 untuk metrik "minggu pertama". Definisi ini menoleransi pengguna yang tidak aktif tepat pada hari tersebut, tetapi tidak semulus retensi yang sepenuhnya bergulir.

Ini adalah definisi yang paling realistis bagi bisnis karena penggunaan nyata terjadi secara berkelompok. Kuerinya menggunakan BETWEEN pada selisih hari.

SELECT
  COUNT(DISTINCT CASE WHEN day_n BETWEEN 5 AND 9
                      THEN user_id END) AS week1_retained,
  COUNT(DISTINCT user_id)               AS cohort_size
FROM dn;

Tiga Definisi, Satu Pengguna

Perjelas perbedaannya dengan contoh. Seorang pengguna mulai pada hari 0, lalu hanya aktif pada hari ke-9.

  • Hari-7 klasik: TIDAK bertahan (tidak ada aktivitas tepat pada hari ke-7).
  • Hari-7 bergulir: bertahan (hari maksimum 9 >= 7).
  • Minggu pertama terbatas 5–9: bertahan (hari ke-9 berada dalam jendela).

Data yang sama, tiga jawaban. Dalam wawancara, jelaskan satu contoh seperti ini untuk membuktikan bahwa Anda memahami maknanya, bukan hanya sintaksnya.

Tingkat Periode: Hari vs Minggu vs Bulan

"Hari-N" dapat digeneralisasi menjadi periode-N. Untuk produk B2B dengan penggunaan bulanan, retensi harian hanya menghasilkan derau; Anda dapat mengelompokkan berdasarkan bulan dan menanyakan tentang bulan ke-N. Mekanismenya sama, hanya tingkat pemotongannya yang berubah.

Pilih tingkat perincian yang sesuai dengan ritme penggunaan alami produk, lalu jelaskan pilihan tersebut. Gunakan harian untuk aplikasi seluler konsumen, serta mingguan atau bulanan untuk alat B2B yang lebih lambat.

-- weekly grain: offset in whole weeks
SELECT
  c.user_id,
  FLOOR((a.day - c.day0) / 7) AS week_n
FROM cohort c
JOIN act a ON a.user_id = c.user_id;

Jebakan Bias Penyintas dan Kematangan

Ini adalah pertanyaan halus untuk tingkat senior: jangan laporkan retensi Hari-30 untuk kohort yang baru berusia 10 hari. Mereka belum memiliki kesempatan untuk aktif pada hari ke-30, sehingga nilainya secara artifisial menjadi 0, bukan benar-benar menunjukkan retensi yang rendah.

Cegah hal ini dengan hanya menyertakan kohort yang usianya >= N saat melaporkan Hari-N. Saring berdasarkan CURRENT_DATE - day0 >= N. Jika hal ini dilupakan, kohort terbaru akan terlihat sangat buruk.

WITH cohort AS (
  SELECT user_id, MIN(event_at::date) AS day0
  FROM events GROUP BY user_id
)
SELECT *
FROM cohort
WHERE (CURRENT_DATE - day0) >= 30;  -- mature enough for Day-30

Menentukan Definisi dengan Jelas

Jawaban wawancara terbaik bukanlah kueri, melainkan pertanyaan balik: "Apakah Anda menginginkan Hari-N klasik, retensi bergulir, atau jendela terbatas? Dan apa periode alaminya?"

Kemudian jelaskan komprominya: definisi klasik bersifat ketat dan baik untuk pemicu produk pada hari tertentu; definisi bergulir melebih-lebihkan jangka pendek tetapi menangkap keterikatan sepanjang masa; definisi terbatas adalah kompromi yang realistis. Menunjukkan bahwa Anda memilih metrik dengan sengaja merupakan inti pelajaran ini.

Pemeriksaan Singkat

Tindakan pertama seorang pengguna terjadi pada hari 0; satu-satunya aktivitas lainnya terjadi pada hari ke-12. Menurut setiap definisi, apakah pengguna tersebut bertahan pada Hari-7?

Ringkasan: Definisi Retensi

Hal-hal penting tentang retensi Hari-N dan retensi bergulir:

  • Hari-N klasik: aktif tepat pada hari N (selisih = N) — kurva yang ketat dan bergerigi.
  • Bergulir: aktif pada hari N atau setelahnya (MAX offset >= N) — lebih mulus, monoton, dan mengukur keterikatan.
  • Terbatas: aktif dalam suatu jendela (BETWEEN) — kompromi yang realistis.
  • Generalisasikan hari menjadi tingkat perincian periode apa pun yang sesuai dengan ritme produk.
  • Laporkan Hari-N hanya untuk kohort matang (usia >= N) agar terhindar dari jebakan bias penyintas, dan selalu tanyakan definisi yang dimaksud oleh bisnis.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Retensi Hari ke-N dan Retensi Bergulir” gratis?

Ya — teks lengkap “Retensi Hari ke-N dan Retensi Bergulir” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus SQL Interview Prep, upgrade ke CoddyKit PRO. Kursus SQL Interview Prep mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Retensi Hari ke-N dan Retensi Bergulir”?

Perbedaan antara definisi retensi klasik, bergulir, dan berbatas. Kamu berlatih SQL Interview Prep dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai SQL Interview Prep?

Tidak diperlukan pengalaman sebelumnya. SQL Interview Prep di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.

Berapa lama pelajaran “Retensi Hari ke-N dan Retensi Bergulir” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran SQL Interview Prep ini?

Ya. Setiap pelajaran SQL Interview Prep menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Menentukan Kohort berdasarkan Tindakan Pertama
  2. Membangun Matriks Retensi
  3. Retensi Hari ke-N dan Retensi Bergulir
  4. Kueri Churn dan Kembalinya Pengguna
← Kembali ke SQL Interview Prep