Definition af en kohorte ud fra den første handling
Tildeling af en kohorte til hver bruger baseret på datoen for den første hændelse.
Definition af en kohorte ud fra den første handling er en gratis Forberedelse til kodeinterviews-lektion på CoddyKit. Dette er lektion 1 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i Forberedelse til kodeinterviews, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Forberedelse til kodeinterviews-kurset indeholder 4 lektioner i alt.
Hvorfor kohorter dukker op i interviews
Når en interviewer inden for produktanalyse siger "opret en kohorte", tester vedkommende, om du kan tildele hver bruger til en gruppe baseret på hvornår brugeren gjorde noget for første gang og derefter følge gruppen over tid.
En kohorte er et sæt brugere, der deler en starthændelse i den samme periode, normalt deres første køb, tilmelding eller login. Fordelen ved kohorter er, at de lader dig sammenligne brugere på lige vilkår: Alle i januarkohorten måles fra deres egen start i januar.
Den første underfærdighed, og den som denne lektion træner, er at beregne hver brugers dato for første handling pålideligt.
Kildetabellen
Næsten alle spørgsmål om kohorter begynder med en hændelsestabel: én række pr. brugerhandling med et tidsstempel. Forestil dig en events-tabel:
user_id— hvem der handledeevent_type— hvad brugeren gjordeevent_at— hvornår det skete, som et tidsstempel
Afklar datagranulariteten højt i et interview: "Er der én række pr. hændelse, og kan en bruger optræde mange gange?" Svaret er næsten altid ja, og netop derfor skal du aggregere for at samle data til én første handling pr. bruger.
CREATE TABLE events (
user_id INT,
event_type VARCHAR(50),
event_at TIMESTAMP
);Første handling = MIN af tidsstemplet
Det centrale trin er enkelt: Gruppér efter user_id, og brug MIN(event_at). Denne minimumsværdi er brugerens første handling, altså det tidspunkt der placerer brugeren i en kohorte.
Det er det svar, interviewere først vil høre, før du begynder på avancerede vinduesfunktioner. En almindelig GROUP BY er korrekt, let at læse og hurtig.
SELECT
user_id,
MIN(event_at) AS first_action_at
FROM events
GROUP BY user_id;Filtrering til en afgørende hændelse
Ofte defineres kohorten af en bestemt handling og ikke af en vilkårlig hændelse. "Inddel brugere efter deres første køb" betyder, at du skal filtrere til købsrækker før du finder minimumsværdien.
Placér filteret i WHERE, så MIN kun ser kvalificerende rækker. En typisk interviewfælde er at finde MIN over alle hændelser og derefter filtrere, hvilket ville give en forkert startdato til alle, der kiggede rundt, før de købte.
SELECT
user_id,
MIN(event_at) AS first_purchase_at
FROM events
WHERE event_type = 'purchase'
GROUP BY user_id;Inddeling i en kohorteperiode
En kohorte er normalt en periode og ikke et nøjagtigt tidsstempel: for eksempel "kohorten fra 2024-03" eller "ugen fra 2024-03-04". Afkort datoen for den første handling til periodens granularitet.
I Postgres skal du bruge DATE_TRUNC('month', ...). I MySQL kan du bruge DATE_FORMAT(d, '%Y-%m-01'); i SQL Server DATETRUNC(month, d) eller en beregnet første dag i måneden. Nævn din SQL-dialekt i interviewet, så valget af syntaks virker bevidst.
SELECT
user_id,
DATE_TRUNC('month', MIN(event_at)) AS cohort_month
FROM events
WHERE event_type = 'purchase'
GROUP BY user_id;Saml det i en CTE
Tildelingen af en kohorte pr. bruger er en byggeblok, som du vil genbruge i forespørgsler om fastholdelse, så pak den ind i en CTE med et tydeligt navn. Det gør de næste trin lettere at læse og viser intervieweren, at du tænker i sammensættelige dele.
Herfra kan alle efterfølgende forespørgsler forbinde tilbage til user_cohort for at vide, hvilken gruppe en bruger tilhører.
WITH user_cohort AS (
SELECT
user_id,
DATE_TRUNC('month', MIN(event_at)) AS cohort_month
FROM events
WHERE event_type = 'purchase'
GROUP BY user_id
)
SELECT * FROM user_cohort;Kohortestørrelse: Optæl medlemmer
Det første plausibilitetstjek, en interviewer forventer, er kohortestørrelsen: hvor mange brugere tilhører hver kohorte. Gruppér CTE'en med tildelingen efter cohort_month, og optæl unikke brugere.
Brug for en sikkerheds skyld COUNT(DISTINCT user_id), selv om CTE'en allerede har én række pr. bruger; det viser, at du tænker over datagranulariteten. Denne optælling bliver nævneren for alle senere fastholdelsesprocenter.
WITH user_cohort AS (
SELECT user_id, DATE_TRUNC('month', MIN(event_at)) AS cohort_month
FROM events WHERE event_type = 'purchase'
GROUP BY user_id
)
SELECT
cohort_month,
COUNT(DISTINCT user_id) AS cohort_size
FROM user_cohort
GROUP BY cohort_month
ORDER BY cohort_month;Alternativ med en vinduesfunktion
Interviewere beder nogle gange om at få kohortemærkatet knyttet til hver hændelsesrække i stedet for en sammenfoldet tabel. Her er en vinduesfunktion velegnet: MIN(event_at) OVER (PARTITION BY user_id) beregner den første handling uden at fjerne rækker.
Det er praktisk, når du skal bruge både de detaljerede hændelser og kohortemærkatet i ét gennemløb, hvilket er grundlaget for at tælle fastholdelse.
SELECT
user_id,
event_at,
DATE_TRUNC('month',
MIN(event_at) OVER (PARTITION BY user_id)
) AS cohort_month
FROM events
WHERE event_type = 'purchase';Faldgruben med ens værdier og dubletter
Hvad nu hvis en bruger har to hændelser på præcis det samme tidligste tidspunkt? MIN håndterer det problemfrit: Den returnerer den ene minimumsværdi, uanset hvor mange rækker der har samme værdi, så kohortetildelingen fortsat bliver én pr. bruger.
Sammenlign det med en tilgang baseret på ROW_NUMBER() ... ORDER BY event_at, hvor ens værdier brydes vilkårligt, og du skal tilføje en deterministisk tie-breaker (for eksempel event_id) for at få et stabilt resultat. Hvis du nævner denne afvejning uden at blive bedt om det, virker du erfaren.
SELECT user_id, event_at,
ROW_NUMBER() OVER (
PARTITION BY user_id
ORDER BY event_at, event_id
) AS rn
FROM events
WHERE event_type = 'purchase';Tidszoner og døgnskellet
Et subtilt interviewspørgsmål: Et køb kl. 23.30 i New York ligger på den næste dag i UTC. Hvis kohorter inddeles efter kalenderdag, afgør tidszonen, hvilken kohorte brugeren havner i.
Det sikre svar er: Gem tidsstempler i UTC, og konvertér dem derefter til virksomhedens tidszone, før du afkorter. Sig tydeligt, hvilken tidszone der definerer "dag" for målingen, fordi denne ene beslutning kan flytte tusindvis af brugere mellem kohorter.
SELECT
user_id,
DATE_TRUNC('day',
MIN(event_at AT TIME ZONE 'America/New_York')
) AS cohort_day
FROM events
WHERE event_type = 'purchase'
GROUP BY user_id;Udeluk brugere før analyseperioden
Reelle analyser afgrænser kohorten til et datointerval, for eksempel "kohorter, der startede i Q1". Filtrér på den aggregerede dato for den første handling, hvilket betyder en HAVING-klausul eller et ydre filter på CTE'en, ikke et WHERE-filter på rå hændelser.
Hvis du filtrerer rå hændelser efter dato, vil en bruger, der købte for første gang i december, men også var aktiv i Q1, fejlagtigt kunne ende i en Q1-kohorte. Afgræns altid efter den beregnede første handling.
WITH user_cohort AS (
SELECT user_id, MIN(event_at) AS first_at
FROM events WHERE event_type = 'purchase'
GROUP BY user_id
)
SELECT user_id, DATE_TRUNC('month', first_at) AS cohort_month
FROM user_cohort
WHERE first_at >= DATE '2024-01-01'
AND first_at < DATE '2024-04-01';Hurtigt tjek
En interviewer spørger: "Inddel hver bruger efter måneden for det første køb. Brugere kan have kigget rundt, før de køber." Hvilken tilgang er korrekt?
Opsummering: Definér en kohorte
De vigtigste pointer til interviewspørgsmålet om definition af en kohorte:
- En kohorte grupperer brugere efter deres første kvalificerende handling.
- Beregn den med
MIN(event_at)efter at have filtreret til den afgørende hændelse i WHERE. - Inddel i en periode med
DATE_TRUNCeller den tilsvarende funktion i din SQL-dialekt. - Saml tildelingen i en CTE, så den kan genbruges;
COUNT(DISTINCT user_id)giver kohortestørrelsen. - Vær opmærksom på døgnskellet i tidszonen, og afgræns datointervaller efter den beregnede første handling, aldrig efter rå hændelser.
Få styr på dette, så bliver fastholdelsesmatricen i næste lektion blot en sammenføjning.
Lær Forberedelse til kodeinterviews med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 90
- Lektioner
- 360
Ofte stillede spørgsmål
Er lektionen “Definition af en kohorte ud fra den første handling” gratis?
Ja — hele teksten til “Definition af en kohorte ud fra den første handling” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af Forberedelse til kodeinterviews-kurset, skal du opgradere til CoddyKit PRO. Forberedelse til kodeinterviews-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Definition af en kohorte ud fra den første handling”?
Tildeling af en kohorte til hver bruger baseret på datoen for den første hændelse. Du øver dig i Forberedelse til kodeinterviews med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på Forberedelse til kodeinterviews?
Der kræves ingen tidligere erfaring. Forberedelse til kodeinterviews på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 1 af 4.
Hvor lang tid tager lektionen “Definition af en kohorte ud fra den første handling”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne Forberedelse til kodeinterviews-lektion?
Ja. Alle Forberedelse til kodeinterviews-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- Definition af en kohorte ud fra den første handling
- Opbygning af en fastholdelsesmatrix
- Dag-N- og rullende fastholdelse
- Forespørgsler om kundefrafald og tilbagevenden