숫자로 확인하기
시범 운영 사흘째 아침, 지후가 대시보드 화면을 찍어 보낸다. "B가 이겼어요. p가 0.04예요." 버튼 문구를 바꾼 B 화면에서 버튼을 누른 손님이 3.8%p 더 많았다. 하린의 답은 짧다. "그 숫자, 일요일에도 그대로일까요?" 다섯 명을 지켜보는 사용성 테스트는 무엇이 왜 막히는지 알려 주지만, 수천 명 가운데 얼마나 더 많은 사람이 끝까지 가는지는 알려 주지 못한다. 그 일은 숫자가 한다. 다만 숫자도 우연에 흔들리고, 무엇을 세느냐에 따라 거짓말을 한다. 이 장은 지표를 고르는 법과, 그 지표가 우연이 아닌 차이를 보여 주는지 확인하는 법을 시뮬레이션으로 직접 돌려 본다.
- 북극성 지표, 가드레일 지표, 대리 지표를 구분하고, 지표 하나만 좇을 때 생기는 일(굿하트의 법칙)을 설명한다.
- 전환율은 같은 서비스에서도 날마다 우연히 흔들린다는 것을 보고, 그 흔들림의 크기가 표본 수에 따라 어떻게 줄어드는지 안다.
- A/B 테스트의 무작위 배정, 관측된 차이와 신뢰 구간, p값의 뜻을 시뮬레이터로 읽는다.
- A/A 테스트로 유의 수준 5%가 "스무 번에 한 번은 우연히 이긴다"는 뜻임을 확인한다.
- 작은 차이를 찾으려면 왜 큰 표본이 필요한지 표본 크기 공식과 검정력으로 설명하고, 실험 기간을 미리 정한다.
- 결과를 매일 들여다보다 처음 유의해진 날 멈추면 거짓 양성이 크게 늘어난다는 것과, 새로움 효과·요일 효과가 짧은 실험을 속이는 방식을 안다.
다섯 명과 오천 명
8장의 사용성 테스트는 손님 다섯 명이 어디서 멈칫하는지 보여 주었다. "맡아 두기"와 "찜하기"를 헷갈리는 장면은 한 사람만 봐도 고쳐야 할 문제라는 것을 안다. 그런데 고친 화면이 정말 더 많은 사람을 책방까지 데려가는지는 다섯 명으로 알 수 없다. 다섯 명 가운데 세 명이 성공했는지 네 명이 성공했는지는 우연으로도 충분히 갈린다. "얼마나"를 묻는 질문에는 많은 사람의 행동을 세어야 한다.
세는 대상을 정한 것이 지표(Metric)다. 지표는 서비스에서 일어난 일을 하나의 숫자로 줄인 것이다. 가장 흔한 꼴은 전환율(Conversion rate)이다. 어떤 단계에 들어온 사람 가운데 원하는 행동까지 간 사람의 비율로, "결과 화면을 본 사람 가운데 맡아 두기를 요청한 사람"처럼 분모와 분자를 함께 정해야 뜻이 생긴다. 5장에서 본 퍼널의 단계별 통과율이 모두 전환율이다.
숫자는 객관적으로 보이지만 두 군데서 틀어진다. 하나는 무엇을 세는가다. 쉽게 올릴 수 있는 숫자를 고르면 숫자는 오르는데 손님의 삶은 그대로일 수 있다. 다른 하나는 우연이다. 같은 화면을 그대로 두어도 전환율은 날마다 오르내린다. 이 장의 앞부분은 첫째를, 나머지는 둘째를 다룬다.
지표 고르기: 북극성과 가드레일
제품 팀이 가장 오래 바라볼 숫자 하나를 흔히 북극성 지표(North Star Metric)라고 부른다. 업계에서 널리 쓰는 말로, 사용자가 서비스에서 실제로 얻는 가치를 가장 가깝게 담은 숫자를 하나 고르자는 뜻이다. "맡아 두기"에서 손님이 얻는 가치는 버튼을 누르는 것도, 앱에 오래 머무는 것도 아니다. 헛걸음 없이 찾던 책을 손에 드는 것이다. 그러니 북극성 지표 후보는 "한 주 동안 실제로 찾아간 책의 수"다.
북극성 지표는 너무 느리고 멀어서 화면 하나를 고칠 때마다 보기는 어렵다. 그래서 그것을 이루는 단계로 쪼갠다. 아래 그림처럼 찾아간 책의 수는 결과 화면을 본 사람 수와 단계별 전환율의 곱이다. 화면 하나를 고칠 때는 그 화면이 움직일 수 있는 단계의 전환율을 본다. 이렇게 가까이에서 대신 보는 숫자를 대리 지표(Proxy metric)라고 한다. 대리 지표는 북극성과 함께 움직일 때만 쓸모가 있다.
지표를 하나만 정하면 팀은 그 숫자를 올리는 쪽으로 움직인다. 숫자는 오르지만 원래 바라던 것과 멀어지는 일이 흔해서, 경제학자 찰스 굿하트(Charles Goodhart)가 1975년 통화 정책을 두고 한 지적에서 이름을 딴 굿하트의 법칙(Goodhart's law)이라는 말이 있다. 흔히 "측정이 목표가 되면 더는 좋은 측정이 아니다"라는 문장으로 알려졌는데, 이 문장 자체는 뒤에 인류학자 메릴린 스트래선(Marilyn Strathern)이 1997년 글에서 요약한 표현이다. 그래서 실험에서는 올리려는 지표 옆에 가드레일 지표(Guardrail metric)를 함께 둔다. 오르지 않아도 되지만 나빠지면 안 되는 숫자다.
아래에서 "맡아 두기"에 가상의 변경 네 가지를 적용해 본다. 막대는 각 지표가 바뀐 정도이고, 초록은 좋은 쪽, 빨강은 나쁜 쪽이다. 판정 기준을 바꾸고 가드레일을 켜 본다.
무엇을 보고 성공이라 할까
"버튼 키우기"처럼 누름만 늘리는 변경은 쉽게 찾을 수 있다. 버튼을 키우고 색을 강하게 하고 문구를 재촉하면 대개 누름은 는다. 그런데 그 누름이 실수로 누른 것이거나, 맡기고 찾으러 오지 않을 사람의 것이라면 주인의 일만 늘린다. 반대로 "바로 확정"은 북극성 지표를 올리지만, 주인이 재고를 확인하지 않으니 가 보니 책이 없는 헛걸음이 는다. 이 서비스가 처음 풀려던 문제(3장)를 되살리는 셈이다. 가드레일은 이런 변경을 걸러 낸다.
실험 하나에서 판정에 쓰는 지표는 미리 하나로 정해 둔다. 이것을 1차 지표(Primary metric)라고 부른다. 결과를 본 뒤 여러 지표 가운데 오른 것을 골라 "성공"이라 부르면 아래에서 볼 우연의 함정에 그대로 빠진다. 온라인 실험을 오래 다룬 론 코하비(Ron Kohavi), 다이앤 탱(Diane Tang), 야 쉬(Ya Xu)의 책 『Trustworthy Online Controlled Experiments』(Cambridge University Press, 2020)도 실험 전에 판정 기준(그 책의 말로는 종합 평가 기준, OEC)과 가드레일을 정해 두라고 거듭 강조한다.
전환율은 날마다 흔들린다
지표를 정했으면 이제 그 숫자를 읽는다. 첫 번째로 알아 둘 것은, 화면을 하나도 바꾸지 않아도 전환율이 날마다 다르다는 사실이다. 결과 화면을 본 손님 한 명 한 명은 버튼을 누르거나 누르지 않는다. 동전을 던지는 것처럼 각자의 결과에 우연이 섞인다. 그러니 하루 400명이 오는 날 진짜 요청률이 12%라도, 어떤 날은 10%, 어떤 날은 14%가 관측된다.
아래에서 진짜 전환율과 하루 방문자 수를 정하면, 같은 서비스를 30일 동안 그대로 두었을 때 관측된 전환율이 점으로 찍힌다. 띠는 우연만으로 흔히 나오는 범위(약 95%)다.
아무것도 바꾸지 않은 30일
점들이 흩어지는 폭은 대략 \(\sqrt{p(1-p)/n}\)이다. 이것을 전환율의 표준 오차(Standard error)라고 한다. \(p\)는 진짜 전환율, \(n\)은 방문자 수다. 분모가 \(n\)이 아니라 \(\sqrt{n}\)이라는 점이 이 장 전체를 지배한다. 흔들림을 절반으로 줄이려면 방문자가 네 배 필요하다. 하루 400명짜리 작은 서비스에서 "어제보다 2%p 올랐다"는 말은 대개 아무 뜻이 없다. 하루의 표준 오차가 이미 1.6%p쯤이기 때문이다.
A/B 테스트: 같은 날, 두 화면
날마다 흔들리는 숫자로 "바꾼 뒤가 바꾸기 전보다 낫다"를 말하기는 어렵다. 지난주와 이번 주는 버튼 문구만 다른 것이 아니라 날씨도, 손님도, 책방의 행사도 다르다. 그래서 같은 기간에 들어온 사람을 무작위로 둘로 나누어 한쪽에는 지금 화면(A), 다른 쪽에는 바꾼 화면(B)을 보여 준다. 이것이 A/B 테스트(A/B test, 온라인 대조 실험)다. 지금 화면을 받는 쪽을 대조군(Control), 바꾼 화면을 받는 쪽을 실험군(Treatment)이라고 한다.
무작위로 나누는 것이 핵심이다. 오전 방문자에게 A, 오후 방문자에게 B를 보여 주면 시간대의 차이가 문구의 차이와 섞인다. 같은 사람이 들어올 때마다 A와 B를 번갈아 보면 헷갈리기만 한다. 그래서 보통 사람(또는 브라우저) 단위로 한 번 배정하면 실험이 끝날 때까지 같은 화면을 보게 한다. 배정의 단위가 곧 분모의 단위다.
두 무리의 차이가 우연인지 아닌지는 차이의 신뢰 구간(Confidence interval)으로 읽는다. 표본이 충분히 크면 다음과 같은 정규 근사를 쓴다.
구간이 0을 걸치지 않으면 "유의 수준 5%에서 차이가 유의하다"고 말한다. 같은 판정을 숫자 하나로 적은 것이 p값(p-value)이다. p값은 "진짜 차이가 0이라면, 지금만큼 또는 그보다 큰 차이가 우연히 나올 확률"이다. p값이 0.04라는 것은 "B가 나을 확률이 96%"라는 뜻이 아니다. 차이가 없을 때 이런 결과가 나오기가 드물다는 뜻일 뿐이다. 판정의 문턱으로 미리 정한 확률(흔히 0.05)을 유의 수준(Significance level, α)이라고 한다.
아래에서 A와 B의 진짜 전환율을 정한다. 현실에서는 진짜 값을 모르지만, 여기서는 정해 두고 그 아래에서 사람들이 우연히 누르거나 누르지 않게 한 뒤 관측값을 본다.
진짜 차이를 아는 A/B 테스트
네 번째 칸의 "유의하게 나올 확률"을 기억해 둔다. 진짜 차이가 있을 때 실험이 그것을 잡아낼 확률이다. 1,000명씩으로 12%와 13.2%를 비교하면 이 확률이 20%도 안 된다. 다섯 번 실험하면 네 번은 "효과 없음"처럼 보인다는 뜻이다. 이때 "유의하지 않다"를 "효과가 없다"로 읽으면 좋은 변경을 버린다. 유의하지 않다는 것은 "이 표본으로는 구별하지 못했다"는 뜻이다.
A/A 테스트: 아무것도 바꾸지 않았는데 이긴다
A와 B에 똑같은 화면을 보여 주는 실험을 A/A 테스트(A/A test)라고 한다. 바꾼 것이 없으니 진짜 차이는 0이다. 그래도 유의 수준 5%로 판정하면, 스무 번에 한 번쯤은 "유의한 차이"가 나온다. 진짜 차이가 없는데 있다고 판정하는 것을 거짓 양성(False positive, 1종 오류)이라고 하고, 유의 수준 α가 바로 그 확률의 상한이다. 실무에서 A/A 테스트는 배정 장치와 집계가 제대로 되는지 점검하는 데 쓴다. 여기서는 우연이 얼마나 자주 이기는지 보는 데 쓴다.
아래 그림의 가로줄 하나가 A/A 실험 하나의 신뢰 구간이다. 100번의 실험을 위아래로 쌓았다. 0을 걸치지 않은 구간, 곧 "유의하게 이긴" 실험은 빨갛다.
A/A 실험 100번
5%는 작아 보이지만, 지표를 여러 개 보면 금방 커진다. 서로 독립인 지표 \(k\)개를 각각 α = 0.05로 판정하면, 그중 적어도 하나가 우연히 유의하게 나올 확률은 \(1-(1-0.05)^k\)이다. 지표 10개면 약 40%다. 실험이 끝난 뒤 대시보드의 지표 열 개 가운데 오른 것 하나를 골라 "B가 이겼다"고 말하면, 바꾼 것이 아무 효과가 없어도 열 번에 네 번은 이긴다. 1차 지표를 미리 하나로 정해 두는 이유다. 여러 지표를 꼭 판정해야 한다면 유의 수준을 지표 수로 나누는 본페로니 보정 같은 방법을 쓴다.
표본 크기와 검정력
A/B 시뮬레이터에서 진짜 차이가 있어도 사람이 적으면 놓친다는 것을 봤다. 진짜 차이가 있을 때 실험이 그것을 유의하게 잡아낼 확률을 검정력(Statistical power)이라고 한다. 흔히 80%를 목표로 잡는다. 놓쳐도 아깝지 않을 만큼 작은 차이는 버리고, 이만큼은 꼭 잡아야 한다는 가장 작은 차이를 정하는데, 이것이 최소 검출 효과(Minimum detectable effect, MDE)다. 기준 전환율, 최소 검출 효과, 유의 수준, 검정력을 정하면 한 무리에 필요한 사람 수가 나온다. 두 비율을 비교할 때 흔히 쓰는 정규 근사 공식은 다음과 같다.
분모가 제곱이라서, 찾으려는 차이를 절반으로 줄이면 필요한 사람은 네 배가 된다. 아래 그래프의 가로축이 최소 검출 효과, 세로축이 한 무리에 필요한 사람 수다(세로축은 10배씩 늘어나는 눈금이다). 곡선 위의 점을 끌어 본다.
작은 차이는 큰 표본을 부른다
작은 서비스가 A/B 테스트에서 가장 먼저 부딪히는 벽이 이것이다. 하루 방문자가 수백 명이면 1%p 차이는 몇 달을 기다려야 겨우 보인다. 그때 할 수 있는 일은 세 가지다. 더 큰 차이를 낼 만한 과감한 변경을 시험하거나, 분모가 큰 앞쪽 단계(요청률)를 대리 지표로 쓰되 북극성과의 연결을 따로 확인하거나, 숫자 대신 8장의 사용성 테스트로 판단하는 것이다. "실험할 만큼 사람이 없다"는 것도 이 계산이 주는 중요한 답이다.
중간에 들여다보기
계획서에 14일이라고 적어도, 대시보드는 매일 아침 숫자를 보여 준다. 사흘째 p값이 0.04로 떨어지면 멈추고 싶어진다. 그런데 "유의해지는 날 멈춘다"는 규칙은 거짓 양성을 크게 늘린다. p값은 실험 내내 오르내리는 숫자이고, 매일 들여다보면 그 오르내림이 한 번이라도 문턱 아래로 내려가는 순간을 잡게 되기 때문이다. 문턱을 한 번 지나는 일은 마지막 날 한 번 보는 것보다 훨씬 자주 일어난다.
이 현상은 오래전부터 알려져 있다. 의학 통계학자 피터 아미티지(Peter Armitage) 등은 1969년 논문 "Repeated significance tests on accumulating data"(Journal of the Royal Statistical Society, Series A)에서 자료가 쌓일 때마다 유의성 검정을 되풀이하면 처음 정한 유의 수준보다 거짓 양성이 훨씬 많아진다는 것을 보였다. 아래에서 직접 확인한다. 진짜 차이가 0인 A/A 실험 400개를 돌리며 정해진 날마다 결과를 들여다보고, 유의해지면 바로 멈춘다.
유의해지는 날 멈추면
선 하나하나는 술에 취한 사람의 걸음처럼 0 근처를 오르내린다. 마지막 날 한 번 보면 그 위치가 문턱 밖일 확률은 5%다. 그러나 매일 보면 걸음이 한 번이라도 문턱을 스친 실험은 모두 걸린다. 그리고 그날 멈추었기 때문에 그 뒤에 0 근처로 돌아왔을 실험도 "승리"로 기록된다. 사흘 만의 p = 0.04는 이렇게 생긴다.
해결책은 들여다보지 않는 것이 아니라, 들여다볼 계획을 미리 세우는 것이다. 판정은 계획서의 날짜에 한 번만 하고, 그 전의 대시보드는 배정이 고르게 되는지, 오류가 터지지 않는지, 가드레일이 무너지지 않는지 감시하는 데만 쓴다. 중간에 멈출 수 있어야 한다면 그것을 처음부터 허락하는 통계 방법을 쓴다.
얼마나 오래: 요일과 새로움
표본 크기만 채우면 끝이 아니다. 같은 6,400명이라도 사흘 만에 모은 것과 2주에 걸쳐 모은 것은 다르다. 사흘 동안 온 사람은 평일 손님뿐일 수 있다. 주말에 아이와 함께 오는 손님은 다른 이유로 다른 버튼을 누른다. 그래서 실험 기간은 적어도 한 주, 가능하면 두 주처럼 요일이 온전히 몇 바퀴 도는 길이로 잡는 것이 흔한 관행이다.
또 하나는 새로움 효과(Novelty effect)다. 단골 손님은 화면이 바뀌면 "이게 뭐지" 하고 한 번 더 눌러 본다. 그 호기심은 며칠 만에 사라진다. 반대로 익숙한 것이 바뀌어 처음 며칠은 오히려 헤매는 경우도 있다(초두 효과, Primacy effect). 어느 쪽이든 실험 초반의 차이는 오래 갈 차이와 다르다.
아래 그래프의 얇은 선은 B가 A보다 날마다 얼마나 높았는지(상대 차이), 굵은 선은 첫날부터 그날까지 모은 자료로 계산한 누적 추정치다. 점선이 시간이 지난 뒤에도 남는 진짜 효과(+5%)다. 우연한 흔들림은 빼고 기대값만 그렸다.
사흘째의 승리, 2주째의 진실
새로움 효과를 의심할 때 쓰는 간단한 방법이 있다. 실험이 끝난 뒤 효과를 날짜별로 나누어 보아 처음 며칠만 크고 줄어드는 모양인지 본다. 또는 처음 들어온 사람(새 손님)과 이전부터 쓰던 사람(단골)을 나누어 본다. 새 손님에게는 "새로움"이 없으니, 두 무리의 효과가 크게 다르면 새로움을 의심한다. 다만 이렇게 나누어 보는 것은 판정이 아니라 해석을 위한 것이다. 쪼갤수록 표본이 작아지고 지표가 늘어 우연히 튀는 조각이 생긴다.
서윤의 봄 서비스 노트
사흘 만의 승리를 미루다
5월 둘째 주, "맡아 두기"는 네 책방에서 시범 운영을 시작했다. 2차 사용성 테스트를 거친 결과 화면의 버튼 문구를 두고 서윤과 주인들의 의견이 갈렸다. 지금 문구는 "맡아 두기"(A)이고, 책방 E 주인은 기한이 보여야 한다며 "3일 동안 맡아 두기"(B)를 원했다. 지후는 두 문구를 무작위로 반씩 보여 주는 A/B 테스트를 하루 만에 붙였다. 배정은 브라우저 단위였다. 결과 화면을 보는 방문자는 하루 평균 460명쯤이었다(시범 운영 가상 자료, 이하 같다).
사흘째 아침, 지후의 대시보드에는 이렇게 떠 있었다. 각 무리 690명, 버튼 누름은 A 80명(11.6%), B 106명(15.4%), p = 0.04. "B가 이겼어요. 오늘 B로 바꿀까요?" 하린은 같은 표의 맨 아래 줄을 가리켰다. 실제로 책을 찾아간 사람은 A 56명(8.1%), B 61명(8.8%), p = 0.63이었다. "누름은 늘었는데 찾아간 사람은 거의 그대로예요. 그리고 이 p값, 어제도 그제도 봤죠? 오늘 처음 0.05 아래로 내려온 거면 그건 들여다본 횟수만큼 싼 숫자예요." 사흘은 모두 평일이었고, 주말에 아이와 오는 작은 숲 손님은 아직 한 명도 들어오지 않았다. 바뀐 문구에 단골이 한 번씩 눌러 보는 새로움도 걸러지지 않았다.
한 줄 주인이 물었다. "확인 알림이 와도 손님 받느라 바로 못 봐요. 누름이 늘면 저는 더 늦어지는 거 아닌가요?" 서윤은 그 말을 지표로 옮겼다. 주인 확인까지 걸린 시간은 올릴 숫자가 아니라 무너지면 안 되는 숫자였다.
서윤의 선택은 실험을 지우고 계획서부터 다시 쓰는 것이었다. 4월 말 내부 시험 기간의 기록으로 찾아간 비율의 기준값을 8%로 잡고, 이 문구로 기대할 만한 가장 작은 의미 있는 차이를 2%p(8% → 10%)로 정했다. 유의 수준 5%(양쪽), 검정력 80%로 계산하자 한 무리에 약 3,200명, 합쳐 6,400명이 필요했다. 하루 460명이면 14일, 마침 요일이 두 바퀴 도는 길이였다. 지후는 대시보드에서 1차 지표의 p값 칸을 판정일까지 가렸다.
핵심 정리
- 사용성 테스트는 "왜", 지표는 "얼마나"를 알려 준다. 둘은 서로를 대신하지 못한다.
- 북극성 지표는 사용자가 얻는 가치에 가장 가까운 숫자다. 화면 하나를 고칠 때는 그것을 곱셈으로 쪼갠 단계의 전환율(대리 지표)을 보되, 북극성과 함께 움직이는지 확인한다.
- 숫자 하나만 좇으면 숫자는 오르고 목적은 멀어진다(굿하트의 법칙). 실험마다 판정용 1차 지표 하나와, 나빠지면 안 되는 가드레일 지표를 미리 정한다.
- 전환율은 아무것도 바꾸지 않아도 우연히 흔들린다. 흔들림(표준 오차)은 \(\sqrt{p(1-p)/n}\)으로, 절반으로 줄이려면 사람이 네 배 필요하다.
- A/B 테스트는 같은 기간의 사람을 무작위로 나누어 비교한다. 결과는 차이의 크기와 신뢰 구간으로 보고하고, "유의하지 않다"를 "효과가 없다"로 읽지 않는다.
- 유의 수준 5%는 진짜 차이가 없어도 스무 번에 한 번은 이긴다는 뜻이다(A/A 테스트). 지표를 여러 개 보면 우연한 승리는 더 흔해진다.
- 필요한 표본은 찾으려는 차이의 제곱에 반비례한다. 기준값, 최소 검출 효과, 유의 수준, 검정력으로 사람 수와 기간을 실험 전에 정한다.
- 매일 들여다보다 처음 유의해진 날 멈추면 거짓 양성이 몇 배로 는다. 판정일을 정하거나 순차 검정을 쓴다. 기간은 요일이 온전히 도는 길이로 잡고, 새로움 효과를 의심한다.
확인 퀴즈
1. 결과 화면의 버튼을 크고 진한 색으로 바꾸자 버튼 누름이 18% 늘었다. 이 결과만으로 변경을 성공이라 부르기 어려운 가장 큰 이유는?
2. 진짜 차이가 0인 A/A 테스트를 유의 수준 0.05로 200번 돌렸다. 각 실험의 표본을 10배로 늘려 다시 200번 돌리면 "유의한 차이"가 나오는 실험 수는 어떻게 되는가?
3. 기준 전환율 8%에서 2%p 차이를 잡으려면 한 무리에 약 3,200명이 필요하다. 같은 조건에서 1%p 차이를 잡으려면 대략 몇 명이 필요한가?
4. 2주로 계획한 실험의 대시보드를 매일 보다가, 사흘째 처음으로 p값이 0.05 아래로 내려가 그날 실험을 멈추고 B를 채택했다. 이 판단의 문제로 가장 알맞은 것은?