0Pricing
Coding Interview Prep · 강의

SQL에서의 상승 효과, 유의성 및 안전장치

전환 상승 효과를 계산하고 실험이 잘못되었음을 알려 주는 데이터 검사를 수행합니다.

SQL에서의 상승 효과, 유의성 및 안전장치은(는) CoddyKit의 무료 Coding Interview Prep 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Coding Interview Prep 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Coding Interview Prep 강의에는 총 4개의 강의가 포함되어 있습니다.

지표에서 의사결정으로

변형별 전환율은 시작에 불과합니다. 면접 질문은 처리군이 실제로 이겼는가?입니다. 이를 판단하려면 개선 폭을 계산하고, 차이가 실제 차이인지 우연한 변동인지 가늠하며, 문제가 있는 실험을 찾아내는 안전 지표를 확인해야 합니다.

SQL에서 전체 통계 패키지를 실행하지는 않지만, 면접관이 보고 싶어 하는 계산 입력값과 대략적인 유의성 신호는 계산할 수 있습니다.

변형별 요약 CTE

이후의 모든 계산은 하나의 깔끔한 요약을 기반으로 합니다. 변형별 사용자 수 n, 전환 사용자 수 c, 전환율 p를 포함합니다. 이를 CTE에서 한 번 계산한 뒤 재사용합니다.

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;

절대 개선 폭과 상대 개선 폭

개선 폭에는 두 가지 정의가 있으며, 면접관은 기본적으로 상대 개선 폭을 원합니다:

  • 절대 개선 폭 = 처리군 비율 - 대조군 비율(퍼센트포인트).
  • 상대 개선 폭 = (처리군 비율 - 대조군 비율) / 대조군 비율(개선율).

“2퍼센트포인트 상승”과 “상대 기준 20% 개선”은 같은 결과를 설명할 수 있습니다. 어떤 기준인지 명확히 말씀하셔야 합니다.

자체 피벗으로 개선 폭 계산하기

한 행에서 두 변형을 비교하려면 조건부 집계를 사용해 대조군과 처리군을 나란히 가져온 다음 계산합니다.

이렇게 하면 불안정한 자체 결합을 피하면서 개선 폭 공식을 읽기 쉽게 유지할 수 있습니다.

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;

차이가 우연한 변동일 수 있는 이유

처리군의 전환율이 더 높아도 표본 추출의 우연한 결과일 수 있습니다. 유의성은 변형이 실제로 동일하다면 이 정도로 큰 차이가 나타날 가능성이 얼마나 되는가?를 묻습니다.

핵심 요소는 각 비율의 표준 오차이며, 표본 크기가 커질수록 작아집니다. 표본이 크면 작은 개선 폭도 신뢰할 수 있지만, 표본이 작으면 큰 개선 폭도 의심해야 합니다.

비율의 표준 오차

n명의 사용자에 대한 전환율 p의 표준 오차는 sqrt(p * (1 - p) / n)입니다. 각 변형에 대해 SQL에서 직접 계산합니다.

이 값을 사용하면 두 비율을 비교하기 전에 각 비율의 변동 정도를 수치화할 수 있습니다.

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;

두 비율의 Z 점수

대략적인 유의성 신호로 두 비율의 z 점수를 사용할 수 있습니다. 이는 비율의 차이를 그 차이의 표준 오차로 나눈 값입니다. 절댓값이 약 1.96을 넘으면 일반적인 95% 기준에 해당합니다.

이는 적절한 검정을 대신하는 것이 아니라 근사치임을 명확히 말씀하셔야 합니다. 그래도 SQL에서 “이 차이가 실제로 나타날 수 있는 차이인가?”라는 질문에는 답할 수 있습니다.

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;

Z 점수 해석하기

숫자를 비즈니스 관점의 결론으로 바꾸어 설명해야 합니다. 단순한 수학 계산만 말해서는 안 됩니다:

  • |z| >= 1.96: 약 95% 신뢰 수준에서 차이가 유의합니다.
  • |z| < 1.96: 증거가 충분하지 않으므로 개선 폭이 우연한 변동일 수 있습니다.

읽기 쉬운 레이블을 출력하도록 CASE로 감싸고, 유의성을 실제 개선 폭의 크기와 항상 함께 제시합니다.

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;

표본 비율 불일치(SRM)

면접관이 가장 먼저 확인하는 안전 지표는 사용자가 설계한 대로 분할되었는지입니다. 수백만 명을 대상으로 한 50/50 실험이 53/47로 끝났다면 위험 신호입니다. 무작위화 또는 로그 기록에 문제가 있다는 뜻입니다.

관측된 사용자 수를 기대한 분할 비율과 비교합니다. 큰 편차가 있으면 지표를 확인하기도 전에 전체 테스트의 유효성이 훼손됩니다.

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;

안전 지표

안전 지표는 주요 지표가 개선되더라도 악화되어서는 안 되는 지표입니다. 대표적인 안전 지표로 페이지 지연 시간, 환불율, 구독 취소율, 오류율이 있습니다.

성공 지표와 함께 변형별로 보고합니다. 전환율은 높이지만 환불을 두 배로 늘리는 처리군은 성공이라고 할 수 없습니다. 안전 지표를 요청받기 전에 계산하면 제품 관점의 판단력을 보여 줄 수 있습니다.

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;

전체 결과 보고

면접관이 높이 평가하는 완전한 실험 결과 보고는 변형별 전환율, 상대 개선 폭, 유의성 판단, SRM 확인이라는 네 가지 내용을 하나의 결과에 담습니다. CTE를 계층적으로 구성하여 의사결정에 바로 사용할 수 있는 하나의 표로 제시합니다.

마지막에는 다음과 같이 결론을 말합니다. 통계적으로 유의하고, 개선 폭이 수용 가능하며, 안전 지표가 건전하고, 분할이 균형을 이루었으므로 출시하거나 보류합니다.

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;

빠른 확인

처리군의 전환율이 상대 기준 25% 개선되었지만 각 변형의 사용자가 40명뿐입니다. 올바른 결론은 무엇입니까?

복습: 개선 폭, 유의성 및 안전 지표

이제 변형별 원시 지표를 의사결정으로 전환할 수 있습니다:

  • 절대(퍼센트포인트) 개선 폭과 상대(백분율) 개선 폭을 구분합니다.
  • 각 비율의 표준 오차와 대략적인 유의성 신호인 두 비율의 z 점수를 계산합니다(|z| >= 1.96은 약 95%에 해당합니다).
  • 분할 비율이 설계와 일치하는지 확인하기 위해 SRM 검사를 실행합니다.
  • 성공이 악화를 가리지 않도록 안전 지표를 보고합니다.
  • 의사결정에 바로 사용할 수 있는 하나의 결과 보고를 제시하고, 유의성을 실제 개선 폭의 크기와 항상 함께 설명합니다.

이로써 SQL에서 퍼널과 A/B 테스트를 분석하는 과정을 마칩니다.

자주 묻는 질문

“SQL에서의 상승 효과, 유의성 및 안전장치” 강의는 무료인가요?

네 — “SQL에서의 상승 효과, 유의성 및 안전장치” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Coding Interview Prep 강의 전체를 잠금 해제할 수 있습니다. Coding Interview Prep 강의에는 총 4개의 강의가 포함되어 있습니다.

“SQL에서의 상승 효과, 유의성 및 안전장치”에서 뭘 배우나요?

전환 상승 효과를 계산하고 실험이 잘못되었음을 알려 주는 데이터 검사를 수행합니다. 브라우저에서 직접 실행하는 실습 코드로 Coding Interview Prep을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Coding Interview Prep을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Coding Interview Prep은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.

“SQL에서의 상승 효과, 유의성 및 안전장치” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Coding Interview Prep 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Coding Interview Prep 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 다단계 퍼널 만들기
  2. 순서가 있는 이벤트와 시간 윈도
  3. A/B 테스트 할당과 지표
  4. SQL에서의 상승 효과, 유의성 및 안전장치
← Coding Interview Prep(으)로 돌아가기