A/B-testin jako ja mittarit
Kokeen osallistujajaon yhdistäminen tuloksiin ja varianttikohtaisten mittareiden laskeminen.
A/B-testin jako ja mittarit on ilmainen SQL-työhaastatteluun valmistautuminen-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 SQL-työhaastatteluun valmistautuminen-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. SQL-työhaastatteluun valmistautuminen-kurssilla on yhteensä 4 oppituntia.
Mitä A/B-testikysymyksellä testataan
A/B-testikysymyksillä arvioidaan, osaatteko yhdistää kokeeseen määrittämisen tuloksiin ja laskea selkeän varianttikohtaisen mittarin.
Kompastuskivi on lähes aina liitos: tulosten laskeminen käyttäjille, joita ei koskaan otettu mukaan kokeeseen, tai kahdesti määritettyjen käyttäjien laskeminen kahteen kertaan. Kun määritätte määrityksen liitoksen oikein, mittarit ovat helppoa aritmetiikkaa.
Saamanne kaksi taulua
Odotettavissa on määritystaulu ja tulostaulu:
assignments(user_id, variant, assigned_at), jossa variantti on 'control' tai 'treatment'.orders(user_id, order_id, amount, created_at)tai yleiskäyttöinen tapahtumataulu.
Määritystaulu on totuuslähde sille, ketkä kuuluvat kokeeseen. Tulokset lasketaan vain, jos käyttäjä löytyy määritystaulusta.
CREATE TABLE assignments (
user_id INT,
variant VARCHAR(20),
assigned_at TIMESTAMP
);
CREATE TABLE orders (
user_id INT,
order_id INT,
amount NUMERIC,
created_at TIMESTAMP
);Aloittakaa määritystaulusta ja tehkää tuloksiin LEFT JOIN
Perussääntö: käyttäkää määritystaulua lähtötauluna ja tehkää tuloksiin LEFT JOIN. Näin mukaan jäävät käyttäjät, jotka otettiin kokeeseen mutta eivät koskaan konvertoituneet, mikä tarvitaan rehellistä nimittäjää varten.
INNER JOIN pudottaisi hiljaisesti konvertoitumattomat käyttäjät ja kasvattaisi konversioastetta keinotekoisesti.
SELECT
a.user_id,
a.variant,
o.order_id
FROM assignments a
LEFT JOIN orders o
ON o.user_id = a.user_id;Konversion laskeminen varianteittain
Konversioaste = konvertoituneet käyttäjät / määritetyt käyttäjät kussakin variantissa. Laskekaa osoittajassa erilliset konvertoituneet käyttäjät ja nimittäjässä kaikki määritetyt käyttäjät.
Käyttäkää COUNT(DISTINCT ...)-lauseketta tilauksen tehneen käyttäjän tunnisteeseen, jotta kolme tilausta tehnyt käyttäjä lasketaan silti vain yhdeksi konvertoituneeksi käyttäjäksi.
SELECT
a.variant,
COUNT(DISTINCT a.user_id) AS assigned,
COUNT(DISTINCT o.user_id) AS converters,
ROUND(100.0 * COUNT(DISTINCT o.user_id)
/ COUNT(DISTINCT a.user_id), 2) AS conv_rate_pct
FROM assignments a
LEFT JOIN orders o ON o.user_id = a.user_id
GROUP BY a.variant;Kahdesti määrittämisen ansa
Entä jos käyttäjä esiintyy määrityksissä kahdesti, kerran kummassakin variantissa? Liitos laskee hänet nyt molemmille puolille ja vääristää kokeen tuloksen.
Haastattelijat lisäävät tämän tarkoituksella ansaksi. Suojautukaa siltä poistamalla määrityksistä kaksoiskappaleet niin, että käyttäjällä on ennen liitosta vain yksi variantti, yleensä ensimmäinen määritys.
WITH dedup AS (
SELECT user_id, variant,
ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY assigned_at) AS rn
FROM assignments
)
SELECT user_id, variant
FROM dedup
WHERE rn = 1;Laskekaa vain määrityksen jälkeiset tulokset
Ennen käyttäjän määritystä tehty tilaus ei voi johtua kokeesta. Lisätkää aikarajoite: tuloksen on tapahduttava määrityshetkellä tai sen jälkeen.
Sijoittakaa tämä ehto ON-lausekkeeseen LEFT JOIN -liitoksessa, jotta konvertoitumattomat käyttäjät säilyvät mukana.
SELECT
a.variant,
COUNT(DISTINCT a.user_id) AS assigned,
COUNT(DISTINCT o.user_id) AS converters
FROM assignments a
LEFT JOIN orders o
ON o.user_id = a.user_id
AND o.created_at >= a.assigned_at
GROUP BY a.variant;ON vai WHERE tulosliitoksessa
Tämä on lähes varma jatkokysymys. Jos siirrätte ehdon o.created_at >= a.assigned_at WHERE-lausekkeeseen, muutatte LEFT JOIN -liitoksen inner joiniksi: riveillä, joilla käyttäjä ei ole koskaan tehnyt tilausta, o.created_at = NULL, predikaatin arvoksi tulee UNKNOWN ja rivit katoavat.
Pitäkää tuloksia suodattavat ehdot ON-lausekkeessa, jotta konvertoitumattomat käyttäjät säilyvät nimittäjässä.
Varianttikohtaiset liikevaihtomittarit
Konversion lisäksi haastattelijat kysyvät käyttäjäkohtaisesta liikevaihdosta (ARPU) ja konvertoitunutta käyttäjää kohti lasketusta liikevaihdosta. Summatkaa amount ja jakakaa sitten oikealla nimittäjällä.
ARPU lasketaan kaikista määritetyistä käyttäjistä; liikevaihto konvertoitunutta käyttäjää kohti lasketaan vain tilauksen tehneistä käyttäjistä. Määritelkää selkeästi, kumpaa liiketoiminta tarvitsee.
SELECT
a.variant,
COUNT(DISTINCT a.user_id) AS assigned,
COALESCE(SUM(o.amount), 0) AS revenue,
ROUND(COALESCE(SUM(o.amount), 0)
/ COUNT(DISTINCT a.user_id), 2) AS arpu
FROM assignments a
LEFT JOIN orders o
ON o.user_id = a.user_id
AND o.created_at >= a.assigned_at
GROUP BY a.variant;Kaksitasoinen aggregointimalli
Kun mittari on "tilauksia käyttäjää kohti keskimäärin", älkää laskeko sitä yhdellä kertaa, koska sekoittaisitte käyttäjä- ja tilaustason rakeisuuden. Aggregoikaa ensin käyttäjätasolle ja laskekaa sitten keskiarvo käyttäjien yli.
Tämä käyttäjäkohtainen ja sitten varianttikohtainen malli käyttää oikeaa rakeisuutta ja erottaa usein haastattelussa vahvan ratkaisun muista.
WITH per_user AS (
SELECT a.variant, a.user_id,
COUNT(o.order_id) AS orders_cnt
FROM assignments a
LEFT JOIN orders o
ON o.user_id = a.user_id
AND o.created_at >= a.assigned_at
GROUP BY a.variant, a.user_id
)
SELECT variant, ROUND(AVG(orders_cnt), 3) AS avg_orders_per_user
FROM per_user
GROUP BY variant;Täydellinen, perusteltavissa oleva kysely
Yhdistäkää kaikki: poistakaa kaksoiskappaleet ja säilyttäkää ensimmäinen määritys, käyttäkää määritystaulua lähtötauluna, rajoittakaa tulokset ajallisesti ON-lausekkeessa ja raportoikaa konversio sekä ARPU varianteittain. Selostakaa jokainen varmistus sitä kirjoittaessanne.
WITH enrolled AS (
SELECT user_id, variant, assigned_at
FROM (
SELECT user_id, variant, assigned_at,
ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY assigned_at) AS rn
FROM assignments
) x WHERE rn = 1
)
SELECT
e.variant,
COUNT(DISTINCT e.user_id) AS assigned,
COUNT(DISTINCT o.user_id) AS converters,
ROUND(100.0 * COUNT(DISTINCT o.user_id)
/ COUNT(DISTINCT e.user_id), 2) AS conv_pct,
ROUND(COALESCE(SUM(o.amount),0)
/ COUNT(DISTINCT e.user_id), 2) AS arpu
FROM enrolled e
LEFT JOIN orders o
ON o.user_id = e.user_id
AND o.created_at >= e.assigned_at
GROUP BY e.variant;Haastattelijan odottamat järkevyystarkistukset
Tarkistakaa kokeen asetukset ennen tulosten ilmoittamista:
- Ovatko varianttien koot suunnilleen tasapainossa? Kun tarkoitus oli 50/50, jakauma 90/10 viittaa virheeseen.
- Päätyikö jokin käyttäjä kumpaankin varianttiin? Laskekaa käyttäjät, joilla on useampi kuin yksi erillinen variantti.
- Onko sellaisia määrityksiä, joille ei ole mahdollista tulosikkunaa, koska määritys on tehty datan katkaisupäivän jälkeen?
Näiden tarkistusten tarjoaminen oma-aloitteisesti osoittaa analyyttistä kypsyyttä.
SELECT user_id, COUNT(DISTINCT variant) AS variant_count
FROM assignments
GROUP BY user_id
HAVING COUNT(DISTINCT variant) > 1;Pikatarkistus
Laskette konversiota varianteittain yhdistämällä orders-taulun assignments-tauluun LEFT JOIN -liitoksella, mutta sijoitatte ehdon o.created_at >= a.assigned_at WHERE-lausekkeeseen. Mitä tapahtuu?
Kertaus: A/B-testin määritys ja mittarit
Nyt teillä on perusteltavissa oleva kokeenanalyysin toimintamalli:
- Käsitelkää määritystä totuuslähteenä ja tehkää tuloksiin LEFT JOIN.
- Poistakaa kaksoiskappaleet niin, että käyttäjällä on yksi variantti (ensimmäinen määritys).
- Rajoittakaa tulokset ajallisesti ON-lausekkeessa, ei koskaan WHERE-lausekkeessa, jotta konvertoitumattomat käyttäjät säilyvät mukana.
- Valitkaa oikea nimittäjä konversiolle, ARPU:lle ja liikevaihdolle konvertoitunutta käyttäjää kohti.
- Aggregoikaa ensin käyttäjätasolle, kun laskette käyttäjäkohtaisia keskiarvoja.
- Suorittakaa järkevyystarkistukset jakauman tasapainosta ja käyttäjien päätymisestä useisiin määrityksiin.
Seuraavaksi muutamme nämä varianttikohtaiset mittarit liftiksi, merkitsevyydeksi ja guardrail-mittareiksi.
Opi SQL 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
- 30
- Oppitunnit
- 120
Usein kysytyt kysymykset
Onko oppitunti ”A/B-testin jako ja mittarit” ilmainen?
Kyllä – oppitunnin ”A/B-testin jako ja mittarit” 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 SQL-työhaastatteluun valmistautuminen-kurssin, päivitä CoddyKit PROhon. SQL-työhaastatteluun valmistautuminen-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”A/B-testin jako ja mittarit”?
Kokeen osallistujajaon yhdistäminen tuloksiin ja varianttikohtaisten mittareiden laskeminen. Harjoittelet SQL-työhaastatteluun valmistautuminen-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni SQL-työhaastatteluun valmistautuminen-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin SQL-työhaastatteluun valmistautuminen-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 3/4.
Kuinka kauan ”A/B-testin jako ja mittarit”-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ä SQL-työhaastatteluun valmistautuminen-oppitunnilla?
Kyllä. Jokainen SQL-työhaastatteluun valmistautuminen-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
- Monivaiheisen suppilon rakentaminen
- Järjestetyt tapahtumat ja aikaikkunat
- A/B-testin jako ja mittarit
- Lift, merkitsevyys ja suojarajat SQL:ssä