SQL Interview Prep · Lekcja

Wzrost, istotność i zabezpieczenia w SQL

Obliczanie wzrostu konwersji i kontroli danych sygnalizujących nieprawidłowe działanie eksperymentu.

Lekcja 4 z 413 kroki

Wzrost, istotność i zabezpieczenia w SQL to bezpłatna lekcja SQL Interview Prep na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej SQL Interview Prep, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs SQL Interview Prep zawiera 4 lekcji w sumie.

Od metryk do decyzji

Konwersja dla poszczególnych wariantów to dopiero początek. Pytanie podczas rozmowy brzmi: czy wariant testowy rzeczywiście wygrał? Oznacza to obliczenie liftu, ocenę, czy różnica jest rzeczywista, czy wynika z szumu, oraz sprawdzenie metryk ochronnych, które wykrywają błędnie działający eksperyment.

Nie trzeba uruchamiać w SQL pełnego pakietu statystycznego, ale można obliczyć dane wejściowe i przybliżony sygnał istotności, którego oczekują rekrutujący.

CTE z podsumowaniem dla poszczególnych wariantów

Wszystkie dalsze obliczenia opierają się na jednym uporządkowanym podsumowaniu: dla każdego wariantu liczbie użytkowników n, liczbie użytkowników dokonujących konwersji c oraz współczynniku konwersji p. Należy obliczyć je raz w CTE i ponownie wykorzystać.

WITH summary AS (
  SELECT
    variant,
    COUNT(DISTINCT user_id)            AS n,
    COUNT(DISTINCT converted_user)     AS c
  FROM experiment_flat
  GROUP BY variant
)
SELECT
  variant, n, c,
  1.0 * c / n AS p
FROM summary;

Lift absolutny a względny

Istnieją dwie definicje liftu, przy czym rekrutujący domyślnie oczekują względnej:

  • Lift absolutny = p_treatment - p_control (punkty procentowe).
  • Lift względny = (p_treatment - p_control) / p_control (procentowa poprawa).

Stwierdzenia „wzrost o 2 punkty” i „względny lift na poziomie 20%” mogą opisywać ten sam wynik. Należy jasno określić, o którą wartość chodzi.

Obliczanie liftu za pomocą samodzielnego pivotu

Aby porównać dwa warianty w jednym wierszu, należy zestawić kontrolę i wariant testowy obok siebie za pomocą agregacji warunkowej, a następnie wykonać obliczenia arytmetyczne.

Pozwala to uniknąć podatnego na błędy samozłączenia i zachować czytelność wzoru na lift.

WITH s AS (
  SELECT variant,
    COUNT(DISTINCT user_id)        AS n,
    COUNT(DISTINCT converted_user) AS c
  FROM experiment_flat GROUP BY variant
),
rates AS (
  SELECT
    MAX(CASE WHEN variant='control'   THEN 1.0*c/n END) AS p_ctrl,
    MAX(CASE WHEN variant='treatment' THEN 1.0*c/n END) AS p_trt
  FROM s
)
SELECT
  p_ctrl, p_trt,
  p_trt - p_ctrl                          AS abs_lift,
  ROUND(100.0 * (p_trt - p_ctrl) / p_ctrl, 2) AS rel_lift_pct
FROM rates;

Dlaczego różnica może być szumem

Wyższy współczynnik konwersji w wariancie testowym może wynikać ze szczęśliwego przypadku przy losowaniu próby. Istotność odpowiada na pytanie: jak prawdopodobne jest uzyskanie tak dużej różnicy, gdyby warianty były w rzeczywistości identyczne?

Kluczowym elementem jest błąd standardowy każdego współczynnika, który maleje wraz ze wzrostem liczebności próby. Duże próby sprawiają, że małe lifty są wiarygodne, natomiast małe próby powodują, że nawet duże lifty należy traktować z podejrzliwością.

Błąd standardowy proporcji

Dla współczynnika konwersji p obliczonego dla n użytkowników błąd standardowy wynosi sqrt(p * (1 - p) / n). Należy obliczyć go bezpośrednio w SQL dla każdego wariantu.

Wartość ta określa wahania każdego współczynnika przed ich porównaniem.

WITH s AS (
  SELECT variant,
    COUNT(DISTINCT user_id)        AS n,
    COUNT(DISTINCT converted_user) AS c
  FROM experiment_flat GROUP BY variant
)
SELECT
  variant, n,
  1.0 * c / n                                       AS p,
  SQRT( (1.0*c/n) * (1 - 1.0*c/n) / n )             AS std_err
FROM s;

Wynik z dla dwóch proporcji

Przybliżonym sygnałem istotności jest wynik z dla dwóch proporcji: różnica współczynników podzielona przez błąd standardowy tej różnicy. Wartość bezwzględna większa niż około 1.96 odpowiada często stosowanemu progowi 95%.

Należy jasno zaznaczyć, że jest to przybliżenie, a nie zamiennik właściwego testu, ale w SQL pozwala odpowiedzieć na pytanie „czy ta różnica może być rzeczywista?”.

WITH r AS (
  SELECT
    MAX(CASE WHEN variant='control'   THEN 1.0*c/n END) AS p1,
    MAX(CASE WHEN variant='control'   THEN n END)        AS n1,
    MAX(CASE WHEN variant='treatment' THEN 1.0*c/n END) AS p2,
    MAX(CASE WHEN variant='treatment' THEN n END)        AS n2
  FROM (
    SELECT variant, COUNT(DISTINCT user_id) n,
           COUNT(DISTINCT converted_user) c
    FROM experiment_flat GROUP BY variant
  ) s
)
SELECT
  p2 - p1 AS abs_lift,
  (p2 - p1) / SQRT( p1*(1-p1)/n1 + p2*(1-p2)/n2 ) AS z_score
FROM r;

Interpretacja wyniku z

Liczbę należy przełożyć na werdykt, aby pokazać rekrutującemu rozumienie biznesowe, a nie tylko matematyczne:

  • |z| >= 1.96: różnica jest istotna przy poziomie ufności około 95%.
  • |z| < 1.96: brakuje wystarczających dowodów; lift może być szumem.

Należy użyć CASE, aby zwrócić czytelną etykietę, i zawsze zestawiać istotność z praktyczną wielkością liftu.

SELECT
  z_score,
  CASE WHEN ABS(z_score) >= 1.96
       THEN 'significant at 95%'
       ELSE 'not significant' END AS verdict
FROM (
  SELECT 2.3 AS z_score
) t;

Niezgodność proporcji próby (SRM)

Pierwsza metryka ochronna, o którą pytają rekrutujący: czy użytkownicy zostali rzeczywiście podzieleni zgodnie z założeniami? Eksperyment 50/50, który przy milionach użytkowników kończy się wynikiem 53/47, jest sygnałem ostrzegawczym — randomizacja lub rejestrowanie danych nie działa poprawnie.

Należy porównać zaobserwowane liczebności z oczekiwanym podziałem. Duże odchylenie unieważnia cały test, zanim w ogóle zostanie przeanalizowana jego metryka.

WITH cnt AS (
  SELECT variant, COUNT(DISTINCT user_id) AS n
  FROM experiment_flat GROUP BY variant
),
tot AS (SELECT SUM(n) AS total FROM cnt)
SELECT
  c.variant, c.n,
  ROUND(100.0 * c.n / t.total, 2)        AS observed_pct,
  50.0                                   AS expected_pct
FROM cnt c CROSS JOIN tot t;

Metryki ochronne

Metryka ochronna (guardrail) to metryka, która nie może się pogorszyć, nawet jeśli główna metryka się poprawia. Klasyczne metryki ochronne to: opóźnienie wczytywania strony, współczynnik zwrotów, współczynnik rezygnacji z subskrypcji oraz współczynnik błędów.

Należy raportować je dla każdego wariantu obok metryki wskazującej zwycięstwo. Wariant testowy, który zwiększa konwersję, ale jednocześnie podwaja liczbę zwrotów, nie jest zwycięzcą. Samodzielne obliczenie metryk ochronnych świadczy o dobrym rozumieniu produktu.

SELECT
  variant,
  AVG(load_ms)                                  AS avg_latency_ms,
  ROUND(100.0 * SUM(refunded) / COUNT(*), 2)    AS refund_rate_pct,
  ROUND(100.0 * SUM(errored)  / COUNT(*), 2)    AS error_rate_pct
FROM experiment_flat
GROUP BY variant;

Pełne podsumowanie wyników

Kompletne podsumowanie eksperymentu, które rekrutujący szczególnie cenią, łączy w jednym wyniku cztery elementy: współczynniki dla poszczególnych wariantów, lift względny, werdykt dotyczący istotności oraz kontrolę SRM. Należy ułożyć CTE i przedstawić wynik jako jedną tabelę gotową do podjęcia decyzji.

Na koniec należy stwierdzić: wynik jest istotny, wielkość liftu jest akceptowalna, metryki ochronne są prawidłowe, podział jest zrównoważony, a zatem rozwiązanie należy wdrożyć albo wstrzymać.

WITH s AS (
  SELECT variant, COUNT(DISTINCT user_id) n,
         COUNT(DISTINCT converted_user) c
  FROM experiment_flat GROUP BY variant
),
r AS (
  SELECT
    MAX(CASE WHEN variant='control'   THEN 1.0*c/n END) p1,
    MAX(CASE WHEN variant='control'   THEN n END) n1,
    MAX(CASE WHEN variant='treatment' THEN 1.0*c/n END) p2,
    MAX(CASE WHEN variant='treatment' THEN n END) n2
  FROM s
)
SELECT
  ROUND(100.0*(p2-p1)/p1, 2) AS rel_lift_pct,
  CASE WHEN ABS((p2-p1)/SQRT(p1*(1-p1)/n1 + p2*(1-p2)/n2)) >= 1.96
       THEN 'significant' ELSE 'not significant' END AS verdict,
  CASE WHEN ABS(1.0*n2/(n1+n2) - 0.5) > 0.02
       THEN 'SRM warning' ELSE 'split ok' END AS srm_check
FROM r;

Szybkie sprawdzenie

Wariant testowy wykazuje względny lift konwersji na poziomie 25%, ale każdy wariant obejmuje tylko 40 użytkowników. Jaki wniosek należy wyciągnąć?

Podsumowanie: lift, istotność i metryki ochronne

Może Pan/Pani teraz przekształcić surowe metryki wariantów w decyzję:

  • Należy odróżniać lift absolutny (punktowy) od liftu względnego (procentowego).
  • Należy obliczyć błąd standardowy każdego współczynnika oraz wynik z dla dwóch proporcji jako przybliżony sygnał istotności (|z| >= 1.96 ~ 95%).
  • Należy przeprowadzić kontrolę SRM, aby potwierdzić zgodność podziału z założeniami.
  • Należy raportować metryki ochronne, aby zwycięstwo nie ukrywało regresji.
  • Należy przedstawić jedno podsumowanie gotowe do podjęcia decyzji i zawsze zestawiać istotność z praktyczną wielkością liftu.

Na tym kończy się analiza lejków i testów A/B w SQL.

Bezpłatny start

Ucz się SQL dzięki korepetycjom AI — za darmo

Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.

Kursy
30
Lekcje
120

Często zadawane pytania

Czy lekcja „Wzrost, istotność i zabezpieczenia w SQL” jest bezpłatna?

Tak — pełny tekst „Wzrost, istotność i zabezpieczenia w SQL” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu SQL Interview Prep, przejdź na CoddyKit PRO. Kurs SQL Interview Prep zawiera 4 lekcji w sumie.

Co nauczysz się w „Wzrost, istotność i zabezpieczenia w SQL”?

Obliczanie wzrostu konwersji i kontroli danych sygnalizujących nieprawidłowe działanie eksperymentu. Ćwiczysz SQL Interview Prep z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć SQL Interview Prep?

Nie wymagamy żadnego doświadczenia. SQL Interview Prep w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.

Ile czasu zajmuje lekcja „Wzrost, istotność i zabezpieczenia w SQL”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji SQL Interview Prep?

Tak. Każda lekcja SQL Interview Prep zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Budowanie wieloetapowego lejka
  2. Uporządkowane zdarzenia i okna czasowe
  3. Przypisywanie do testu A/B i metryki
  4. Wzrost, istotność i zabezpieczenia w SQL
← Powrót do SQL Interview Prep