Päivä-N:n ja liukuva retentio
Klassisten, liukuvien ja rajattujen retentio-määritelmien erot.
Päivä-N:n ja liukuva retentio on ilmainen Valmistautuminen ohjelmointihaastatteluihin-oppitunti CoddyKitissä. Tämä on oppitunti 3/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Valmistautuminen ohjelmointihaastatteluihin-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Valmistautuminen ohjelmointihaastatteluihin-kurssilla on yhteensä 4 oppituntia.
Miksi retentiolla on useita määritelmiä
Haastattelija pyytää harvoin vain laskemaan retentiota. Terävä jatkokysymys on: mikä retentio? Samoista tiedoista saadaan hyvin erilaisia lukuja määritelmästä riippuen.
Kolme määritelmää, jotka on tunnettava: Day-N-retentio (klassinen), liukuva (rajaamaton) retentio ja rajatun ikkunan retentio. Eron ymmärtäminen ja sen kysyminen, minkä määritelmän liiketoiminta haluaa, on jo itsessään testattava taito.
Päivä-N-retentio (klassinen)
Day-N-retentio kysyy, oliko käyttäjä aktiivinen täsmälleen päivänä N ensimmäisen toimintonsa jälkeen. Day-1, Day-7 ja Day-30 ovat mobiilisovellusten vakiomittareita.
Ratkaiseva sana on täsmälleen. Jos käyttäjä oli aktiivinen päivinä 6 ja 8 mutta ei päivänä 7, häntä ei lasketa klassisen määritelmän mukaan Day-7-retentioon jääneeksi. Tämä tarkkuus tekee laskennasta tiukan ja käyrästä sahalaitaisen.
Päiväeron laskeminen
Day-N-retentio perustuu päivien lukumäärään kohortin aloituksen ja kunkin aktiivisuuspäivän välillä. Postgresissa kahden päivämäärän vähentäminen tuottaa suoraan kokonaislukuna päivien määrän.
Muissa SQL-murteissa käytetään SQL Serverissä muotoa DATEDIFF(day, start, d) ja MySQL:ssä muotoa DATEDIFF(d, start). Ilmoittakaa käytetty murre; käsite eli päiväsiirtymä on 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;Päivä-7-retentiokysely
Saadaksenne Day-7-retentioasteen laskekaa niiden eri käyttäjien määrä, joiden päiväsiirtymä on 7, ja jakakaa se kohortin koolla. Käyttäkää ehdollista aggregointia, jotta sekä osoittaja että nimittäjä saadaan yhdellä läpikäynnillä.
Yhtäsuuruus = 7 (ei >= 7) on klassisen retention-määritelmän tunnusmerkki. Epäyhtälön käyttäminen muuttaa määritelmää huomaamatta.
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;Liukuva (rajaamaton) retentio
Liukuva retentio päivänä N esittää lievemmän kysymyksen: oliko käyttäjä aktiivinen päivänä N tai jonakin myöhempänä päivänä? Käyttäjä lasketaan päivä 7 kohdalla retentioon jääneeksi, jos hän palasi päivänä 7, päivänä 20 tai milloin tahansa myöhemmin.
Tuloksena on tasaisempi ja korkeampi käyrä, jota suositaan usein pitkäaikaisen sitoutuneisuuden mittaamiseen. Tunnusomainen muutos on vaihtaa aktiivisuuspäivän arvon ehto muodosta = N muotoon >= N.
Liukuva retentio MAX-päivän avulla
Siistein tapa laskea liukuva retentio on selvittää kunkin käyttäjän viimeisin aktiivisuuspäivän siirtymä (MAX). Käyttäjä on tällöin retentioon jäänyt päivänä N, jos tämä maksimi on >= N.
MAX-operaation jälkeen kullakin käyttäjällä on yksi rivi, joten laskenta on yksinkertaista. Samalla käy ilmi, että liukuva retentio on monotoninen: jos käyttäjä on retentioon jäänyt päivänä 30, hän on retentioon jäänyt myös jokaisena sitä pienempänä päivänä N.
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;Rajatun ikkunan retentio
Välimuoto on rajattu retentio: käyttäjä on ollut aktiivinen vähintään kerran päivää N ympäröivässä ikkunassa, esimerkiksi päivinä 5–9 "viikon 1" mittaria varten. Tämä sallii käyttäjät, jotka eivät olleet aktiivisia täsmälleen kyseisenä päivänä, mutta tasoittaa tulosta vähemmän kuin täysin liukuva retentio.
Tämä on liiketoiminnan kannalta realistisin määritelmä, koska todellinen käyttö tapahtuu jaksoittain. Kyselyssä käytetään päiväsiirtymään kohdistuvaa BETWEEN-ehtoa.
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;Kolme määritelmää, sama käyttäjä
Tehkää ero konkreettiseksi. Käyttäjä aloittaa päivänä 0 ja on sen jälkeen aktiivinen vain päivänä 9.
- Klassinen Day-7: EI retentioon jäänyt (aktiivisuutta ei ollut täsmälleen päivänä 7).
- Liukuva Day-7: retentioon jäänyt (maksimipäivä 9 >= 7).
- Rajattu viikon 1 retentio (päivät 5–9): retentioon jäänyt (päivä 9 osuu ikkunaan).
Samat tiedot, kolme vastausta. Kertokaa haastattelussa yksi tällainen esimerkki osoittaaksenne, että ymmärrätte semantiikan ettekä vain syntaksia.
Jakson tarkkuus: päivä, viikko vai kuukausi
"Day-N" yleistyy muotoon period-N. Kuukausittain käytettävässä B2B-tuotteessa päivätason retentio on kohinaa; tällöin käyttö kannattaa ryhmitellä kuukausittain ja tarkastella kuukauden N retentiota. Mekaniikka on sama, vain katkaisun tarkkuus muuttuu.
Valitkaa tarkkuus tuotteen luontaisen käyttörytmin mukaan ja kertokaa valinnasta. Kuluttajien mobiilisovelluksissa käytetään päiviä, hitaammin käytettävissä B2B-työkaluissa viikkoja tai kuukausia.
-- 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;Selviytymisharha ja kypsyysloukku
Hienovarainen senioritason kysymys: älkää ilmoittako Day-30-retentiota kohortille, joka on vasta 10 päivää vanha. Sillä ei ole vielä ollut mahdollisuutta olla aktiivinen päivänä 30, joten arvo on keinotekoisesti 0 eikä todellisuudessa tarkoita heikkoa retentiota.
Rajatkaa mukaan vain kohortit, joiden ikä on >= N, kun ilmoitatte Day-N-retention. Suodattakaa ehdolla CURRENT_DATE - day0 >= N. Jos tämän unohtaa, viimeaikaiset kohortit näyttävät katastrofaalisen heikoilta.
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-30Määritelmän valitseminen ääneen
Paras vastaus haastattelussa ei ole kysely vaan vastakysymys: "Haluatteko klassisen Day-N-retention, liukuvan retention vai rajatun ikkunan? Ja mikä on luonteva jakso?"
Kertokaa sen jälkeen kompromisseista: klassinen on tiukka ja sopii tietyn päivän tuotetoimintojen mittaamiseen; liukuva yliarvioi lyhyttä aikaväliä mutta kuvaa elinkaaren aikaista sitoutuneisuutta; rajattu ikkuna on realistinen kompromissi. Tärkeintä on osoittaa, että valitsette mittarin tarkoituksella.
Pikatarkistus
Käyttäjän ensimmäinen toiminto on päivänä 0, ja hänen ainoa muu aktiivisuutensa on päivänä 12. Lasketaanko käyttäjä kunkin määritelmän mukaan retentioon jääneeksi Day-7-kohdalla?
Kertaus: retentio-määritelmät
Day-N- ja liukuvan retention tärkeimmät opit:
- Klassinen Day-N: aktiivinen täsmälleen päivänä N (siirtymä
= N) — tiukka ja sahalaitainen käyrä. - Liukuva: aktiivinen päivänä N tai myöhemmin (
MAX offset >= N) — tasaisempi ja monotoninen, mittaa sitoutuneisuutta. - Rajattu: aktiivinen ikkunan sisällä (
BETWEEN) — realistinen kompromissi. - Yleistääkää päivä mille tahansa jakson tarkkuudelle, joka vastaa tuotteen käyttörytmiä.
- Ilmoittakaa Day-N-retentio vain kypsille kohorteille (ikä >= N), jotta vältätte selviytymisharhan, ja kysykää aina, mitä määritelmää liiketoiminta tarkoittaa.
Opi Valmistautuminen ohjelmointihaastatteluihin tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 90
- Oppitunnit
- 360
Usein kysytyt kysymykset
Onko oppitunti ”Päivä-N:n ja liukuva retentio” ilmainen?
Kyllä – oppitunnin ”Päivä-N:n ja liukuva retentio” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Valmistautuminen ohjelmointihaastatteluihin-kurssin, päivitä CoddyKit PROhon. Valmistautuminen ohjelmointihaastatteluihin-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Päivä-N:n ja liukuva retentio”?
Klassisten, liukuvien ja rajattujen retentio-määritelmien erot. Harjoittelet Valmistautuminen ohjelmointihaastatteluihin-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni Valmistautuminen ohjelmointihaastatteluihin-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin Valmistautuminen ohjelmointihaastatteluihin-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 3/4.
Kuinka kauan ”Päivä-N:n ja liukuva retentio”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä Valmistautuminen ohjelmointihaastatteluihin-oppitunnilla?
Kyllä. Jokainen Valmistautuminen ohjelmointihaastatteluihin-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- Kohortin määrittäminen ensimmäisen toiminnon perusteella
- Retentio-matriisin rakentaminen
- Päivä-N:n ja liukuva retentio
- Poistuma- ja paluukyselyt