Chapter 09

숫자로 확인하기

시범 운영 사흘째 아침, 지후가 대시보드 화면을 찍어 보낸다. "B가 이겼어요. p가 0.04예요." 버튼 문구를 바꾼 B 화면에서 버튼을 누른 손님이 3.8%p 더 많았다. 하린의 답은 짧다. "그 숫자, 일요일에도 그대로일까요?" 다섯 명을 지켜보는 사용성 테스트는 무엇이 왜 막히는지 알려 주지만, 수천 명 가운데 얼마나 더 많은 사람이 끝까지 가는지는 알려 주지 못한다. 그 일은 숫자가 한다. 다만 숫자도 우연에 흔들리고, 무엇을 세느냐에 따라 거짓말을 한다. 이 장은 지표를 고르는 법과, 그 지표가 우연이 아닌 차이를 보여 주는지 확인하는 법을 시뮬레이션으로 직접 돌려 본다.

다섯 명과 오천 명

8장의 사용성 테스트는 손님 다섯 명이 어디서 멈칫하는지 보여 주었다. "맡아 두기"와 "찜하기"를 헷갈리는 장면은 한 사람만 봐도 고쳐야 할 문제라는 것을 안다. 그런데 고친 화면이 정말 더 많은 사람을 책방까지 데려가는지는 다섯 명으로 알 수 없다. 다섯 명 가운데 세 명이 성공했는지 네 명이 성공했는지는 우연으로도 충분히 갈린다. "얼마나"를 묻는 질문에는 많은 사람의 행동을 세어야 한다.

세는 대상을 정한 것이 지표(Metric)다. 지표는 서비스에서 일어난 일을 하나의 숫자로 줄인 것이다. 가장 흔한 꼴은 전환율(Conversion rate)이다. 어떤 단계에 들어온 사람 가운데 원하는 행동까지 간 사람의 비율로, "결과 화면을 본 사람 가운데 맡아 두기를 요청한 사람"처럼 분모와 분자를 함께 정해야 뜻이 생긴다. 5장에서 본 퍼널의 단계별 통과율이 모두 전환율이다.

사용성 테스트(8장) 지표와 실험(9장) 사람 다섯 명을 오래 사람 수천 명을 짧게 알려 주는 것: 왜 막히는가 어디서, 어떤 말 때문에 못 하는 것: 얼마나 자주, 얼마나 큰가 알려 주는 것: 얼마나 달라졌는가 몇 %p, 얼마나 확실하게 못 하는 것: 왜 그렇게 됐는가
그림 1. 두 가지 확인. 질적 조사와 양적 지표는 서로를 대신하지 못한다. 테스트로 문제를 찾고 고친 뒤, 고친 것이 실제로 얼마나 차이를 만드는지는 지표로 확인한다. 지표가 이상하게 움직이면 다시 사람을 만나 이유를 묻는다.

숫자는 객관적으로 보이지만 두 군데서 틀어진다. 하나는 무엇을 세는가다. 쉽게 올릴 수 있는 숫자를 고르면 숫자는 오르는데 손님의 삶은 그대로일 수 있다. 다른 하나는 우연이다. 같은 화면을 그대로 두어도 전환율은 날마다 오르내린다. 이 장의 앞부분은 첫째를, 나머지는 둘째를 다룬다.

지표 고르기: 북극성과 가드레일

제품 팀이 가장 오래 바라볼 숫자 하나를 흔히 북극성 지표(North Star Metric)라고 부른다. 업계에서 널리 쓰는 말로, 사용자가 서비스에서 실제로 얻는 가치를 가장 가깝게 담은 숫자를 하나 고르자는 뜻이다. "맡아 두기"에서 손님이 얻는 가치는 버튼을 누르는 것도, 앱에 오래 머무는 것도 아니다. 헛걸음 없이 찾던 책을 손에 드는 것이다. 그러니 북극성 지표 후보는 "한 주 동안 실제로 찾아간 책의 수"다.

북극성 지표는 너무 느리고 멀어서 화면 하나를 고칠 때마다 보기는 어렵다. 그래서 그것을 이루는 단계로 쪼갠다. 아래 그림처럼 찾아간 책의 수는 결과 화면을 본 사람 수와 단계별 전환율의 곱이다. 화면 하나를 고칠 때는 그 화면이 움직일 수 있는 단계의 전환율을 본다. 이렇게 가까이에서 대신 보는 숫자를 대리 지표(Proxy metric)라고 한다. 대리 지표는 북극성과 함께 움직일 때만 쓸모가 있다.

북극성 지표 한 주에 실제로 찾아간 책 = 결과 화면방문자 수 × 요청률맡아 두기 누름 × 확정률주인이 확인 × 찾아간 비율기한 안에 방문 버튼 문구가 움직이는 곳 가드레일: 나빠지면 안 되는 숫자 주인 확인까지 걸린 시간 · 가 보니 책이 없던 헛걸음 올리려는 숫자가 아니라, 다른 것을 고치다 망가뜨리지 않았는지 지켜보는 숫자
그림 2. "맡아 두기"의 지표 나무. 북극성 지표를 곱셈으로 쪼개면 화면마다 책임질 전환율이 보인다. 결과 화면의 버튼 문구는 요청률을 움직이지만, 요청이 늘었다고 찾아간 책이 늘었는지는 뒤의 두 단계에 달려 있다. 가드레일은 실험이 다른 사람(주인)이나 다른 목표(헛걸음 줄이기)를 해치지 않는지 지키는 숫자다.

지표를 하나만 정하면 팀은 그 숫자를 올리는 쪽으로 움직인다. 숫자는 오르지만 원래 바라던 것과 멀어지는 일이 흔해서, 경제학자 찰스 굿하트(Charles Goodhart)가 1975년 통화 정책을 두고 한 지적에서 이름을 딴 굿하트의 법칙(Goodhart's law)이라는 말이 있다. 흔히 "측정이 목표가 되면 더는 좋은 측정이 아니다"라는 문장으로 알려졌는데, 이 문장 자체는 뒤에 인류학자 메릴린 스트래선(Marilyn Strathern)이 1997년 글에서 요약한 표현이다. 그래서 실험에서는 올리려는 지표 옆에 가드레일 지표(Guardrail metric)를 함께 둔다. 오르지 않아도 되지만 나빠지면 안 되는 숫자다.

아래에서 "맡아 두기"에 가상의 변경 네 가지를 적용해 본다. 막대는 각 지표가 바뀐 정도이고, 초록은 좋은 쪽, 빨강은 나쁜 쪽이다. 판정 기준을 바꾸고 가드레일을 켜 본다.

SIMULATOR

무엇을 보고 성공이라 할까

이 변경—
판정—
가드레일—
해볼 것: ① "버튼 키우기"를 버튼 누름으로 판정한다. 18% 올라 대성공처럼 보인다. "북극성으로 판정"을 누르면 찾아간 책은 1%밖에 늘지 않았다. 누름이 늘어도 끝까지 가는 사람은 거의 그대로다. ② "바로 확정"을 북극성으로 판정한다. 찾아간 책이 늘었다. 이제 "가드레일도 본다"를 켠다. 주인 확인을 건너뛰자 헛걸음이 40% 늘었다. ③ 네 가지 중 북극성이 오르고 가드레일도 지키는 변경을 찾는다. (막대의 값은 원리를 보이려고 만든 가상의 결과다. 실제 변경이 어느 지표를 얼마나 움직일지는 실험해 봐야 안다.)

"버튼 키우기"처럼 누름만 늘리는 변경은 쉽게 찾을 수 있다. 버튼을 키우고 색을 강하게 하고 문구를 재촉하면 대개 누름은 는다. 그런데 그 누름이 실수로 누른 것이거나, 맡기고 찾으러 오지 않을 사람의 것이라면 주인의 일만 늘린다. 반대로 "바로 확정"은 북극성 지표를 올리지만, 주인이 재고를 확인하지 않으니 가 보니 책이 없는 헛걸음이 는다. 이 서비스가 처음 풀려던 문제(3장)를 되살리는 셈이다. 가드레일은 이런 변경을 걸러 낸다.

실험 하나에서 판정에 쓰는 지표는 미리 하나로 정해 둔다. 이것을 1차 지표(Primary metric)라고 부른다. 결과를 본 뒤 여러 지표 가운데 오른 것을 골라 "성공"이라 부르면 아래에서 볼 우연의 함정에 그대로 빠진다. 온라인 실험을 오래 다룬 론 코하비(Ron Kohavi), 다이앤 탱(Diane Tang), 야 쉬(Ya Xu)의 책 『Trustworthy Online Controlled Experiments』(Cambridge University Press, 2020)도 실험 전에 판정 기준(그 책의 말로는 종합 평가 기준, OEC)과 가드레일을 정해 두라고 거듭 강조한다.

허영 지표를 알아보는 질문 누적 가입자 수, 페이지뷰, 앱에 머문 시간처럼 늘 오르거나 쉽게 부풀릴 수 있는 숫자를 흔히 허영 지표(Vanity metric)라고 부른다. 숫자를 하나 받았을 때 세 가지를 묻는다. 이 숫자가 오르면 손님에게 무엇이 좋아졌나? 이 숫자를 보고 다음 주에 무엇을 다르게 할 수 있나? 이 숫자를 나쁜 방법으로도 올릴 수 있나? 마지막 질문에 "그렇다"면 짝이 되는 가드레일을 붙인다. 머문 시간은 길수록 좋을 수도, 길을 잃어서 길어진 것일 수도 있다. "맡아 두기"는 빨리 찾고 빨리 떠나는 것이 좋은 서비스다.

전환율은 날마다 흔들린다

지표를 정했으면 이제 그 숫자를 읽는다. 첫 번째로 알아 둘 것은, 화면을 하나도 바꾸지 않아도 전환율이 날마다 다르다는 사실이다. 결과 화면을 본 손님 한 명 한 명은 버튼을 누르거나 누르지 않는다. 동전을 던지는 것처럼 각자의 결과에 우연이 섞인다. 그러니 하루 400명이 오는 날 진짜 요청률이 12%라도, 어떤 날은 10%, 어떤 날은 14%가 관측된다.

아래에서 진짜 전환율과 하루 방문자 수를 정하면, 같은 서비스를 30일 동안 그대로 두었을 때 관측된 전환율이 점으로 찍힌다. 띠는 우연만으로 흔히 나오는 범위(약 95%)다.

SIMULATOR

아무것도 바꾸지 않은 30일

가장 높은 날 · 낮은 날—
하루 표준 오차—
띠 밖으로 나간 날—
해볼 것: ① 하루 방문자 400명, 진짜 전환율 12%. 같은 서비스인데 가장 높은 날과 낮은 날이 몇 %p나 벌어진다. "다른 30일"을 몇 번 눌러 본다. ② 방문자를 100명으로 줄인다. 띠가 두 배로 넓어진다. 방문자를 4분의 1로 줄이면 흔들림은 두 배가 된다. ③ 방문자를 5,000명으로 늘린다. 띠가 좁아져 하루하루가 진짜 값에 붙는다. 그래도 30일 가운데 한두 날은 띠 밖으로 나간다. 띠가 95% 범위이기 때문이다. (모형: 손님마다 서로 독립으로 같은 확률로 전환하는 베르누이 시행. 실제 서비스는 요일과 날씨, 행사 때문에 이보다 더 흔들린다. 시드 고정 난수를 쓰므로 같은 설정과 같은 횟수면 같은 결과가 나온다.)

점들이 흩어지는 폭은 대략 \(\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 3일 동안 맡아 두기 B 같은 지표 B − A
그림 3. A/B 테스트의 뼈대. 같은 기간에 들어온 사람을 무작위로 나누면, 두 무리는 버튼 문구 말고는 평균적으로 같다. 그러면 두 무리의 지표 차이는 문구의 효과와 우연, 둘 중 하나에서 온다. 통계는 그 우연의 몫이 얼마나 되는지 재는 도구다. 가운데 두 화면은 이 장의 케이스에서 쓰는 가상의 결과 화면이다.

무작위로 나누는 것이 핵심이다. 오전 방문자에게 A, 오후 방문자에게 B를 보여 주면 시간대의 차이가 문구의 차이와 섞인다. 같은 사람이 들어올 때마다 A와 B를 번갈아 보면 헷갈리기만 한다. 그래서 보통 사람(또는 브라우저) 단위로 한 번 배정하면 실험이 끝날 때까지 같은 화면을 보게 한다. 배정의 단위가 곧 분모의 단위다.

두 무리의 차이가 우연인지 아닌지는 차이의 신뢰 구간(Confidence interval)으로 읽는다. 표본이 충분히 크면 다음과 같은 정규 근사를 쓴다.

$$\big(\hat p_B-\hat p_A\big)\;\pm\;1.96\sqrt{\frac{\hat p_A(1-\hat p_A)}{n_A}+\frac{\hat p_B(1-\hat p_B)}{n_B}}$$
\(\hat p_A,\hat p_B\): 두 무리에서 관측된 전환율, \(n_A,n_B\): 두 무리의 사람 수. 1.96은 표준 정규 분포에서 가운데 95%를 감싸는 값이다. 같은 방식으로 실험을 여러 번 되풀이하면, 이렇게 만든 구간 가운데 약 95%가 진짜 차이를 품는다.

구간이 0을 걸치지 않으면 "유의 수준 5%에서 차이가 유의하다"고 말한다. 같은 판정을 숫자 하나로 적은 것이 p값(p-value)이다. p값은 "진짜 차이가 0이라면, 지금만큼 또는 그보다 큰 차이가 우연히 나올 확률"이다. p값이 0.04라는 것은 "B가 나을 확률이 96%"라는 뜻이 아니다. 차이가 없을 때 이런 결과가 나오기가 드물다는 뜻일 뿐이다. 판정의 문턱으로 미리 정한 확률(흔히 0.05)을 유의 수준(Significance level, α)이라고 한다.

아래에서 A와 B의 진짜 전환율을 정한다. 현실에서는 진짜 값을 모르지만, 여기서는 정해 두고 그 아래에서 사람들이 우연히 누르거나 누르지 않게 한 뒤 관측값을 본다.

SIMULATOR

진짜 차이를 아는 A/B 테스트

관측된 차이(B − A)—
95% 신뢰 구간—
p값 · 판정—
이 설정에서 유의하게 나올 확률—
해볼 것: ① A 12%, B는 10% 더 높게(13.2%), 한 무리 1,000명. "다시 실험"을 여러 번 누른다. 진짜로 B가 낫는데도 구간이 0을 걸쳐 "알 수 없음"이 더 자주 나온다. 어떤 때는 B가 오히려 낮게 관측된다. ② 사람 수를 10,000명으로 늘린다. 구간이 좁아지고 열에 일곱 번쯤 유의하게 나온다. 20,000명이면 열에 아홉 번이 넘는다. ③ 진짜 차이를 0%로 두고 여러 번 돌린다. 대부분 "알 수 없음"이지만 가끔 유의하게 나온다. 다음 절의 주제다. (모형: 사람마다 독립인 베르누이 시행. 신뢰 구간은 위 식의 정규 근사, p값은 두 비율을 합친 z검정이다. 사람 수가 작고 전환율이 낮으면 근사가 거칠어진다.)

네 번째 칸의 "유의하게 나올 확률"을 기억해 둔다. 진짜 차이가 있을 때 실험이 그것을 잡아낼 확률이다. 1,000명씩으로 12%와 13.2%를 비교하면 이 확률이 20%도 안 된다. 다섯 번 실험하면 네 번은 "효과 없음"처럼 보인다는 뜻이다. 이때 "유의하지 않다"를 "효과가 없다"로 읽으면 좋은 변경을 버린다. 유의하지 않다는 것은 "이 표본으로는 구별하지 못했다"는 뜻이다.

통계적으로 유의한 것과 중요한 것 표본이 아주 크면 0.1%p 같은 작은 차이도 유의하게 나온다. 유의하다는 것은 차이가 우연이 아닐 가능성이 높다는 뜻이지, 그 차이가 만들 가치가 있다는 뜻이 아니다. 거꾸로 표본이 작으면 큰 차이도 유의하지 않게 나온다. 그래서 결과는 p값 하나가 아니라 차이의 크기와 신뢰 구간으로 보고한다. "B가 요청률을 0.3~2.1%p 올렸다(95% 구간)"는 문장은 "p = 0.02"보다 훨씬 많은 것을 알려 준다. 미국통계학회(ASA)도 2016년 p값에 관한 성명(Wasserstein & Lazar, "The ASA Statement on p-Values", The American Statistician)에서 p값 하나만으로 결론을 내리지 말라고 밝혔다.

A/A 테스트: 아무것도 바꾸지 않았는데 이긴다

A와 B에 똑같은 화면을 보여 주는 실험을 A/A 테스트(A/A test)라고 한다. 바꾼 것이 없으니 진짜 차이는 0이다. 그래도 유의 수준 5%로 판정하면, 스무 번에 한 번쯤은 "유의한 차이"가 나온다. 진짜 차이가 없는데 있다고 판정하는 것을 거짓 양성(False positive, 1종 오류)이라고 하고, 유의 수준 α가 바로 그 확률의 상한이다. 실무에서 A/A 테스트는 배정 장치와 집계가 제대로 되는지 점검하는 데 쓴다. 여기서는 우연이 얼마나 자주 이기는지 보는 데 쓴다.

아래 그림의 가로줄 하나가 A/A 실험 하나의 신뢰 구간이다. 100번의 실험을 위아래로 쌓았다. 0을 걸치지 않은 구간, 곧 "유의하게 이긴" 실험은 빨갛다.

SIMULATOR

A/A 실험 100번

이번 100번 중 유의—
지금까지 모두—
기대값—
해볼 것: ① α = 0.05에서 "100번 더"를 열 번쯤 누른다. 빨간 줄의 비율이 5% 근처로 모인다. ② 사람 수를 5,000명으로 늘린다. 구간이 모두 좁아지지만 빨간 줄의 비율은 그대로 5%쯤이다. 표본을 키워도 거짓 양성은 줄지 않는다. 줄어드는 것은 구간의 폭이다. ③ α = 0.01로 바꾼다. 빨간 줄이 100번에 한 번꼴로 준다. 대신 진짜 차이를 놓칠 확률은 커진다. (두 무리의 진짜 전환율은 모두 10%. 신뢰 구간과 판정은 앞 시뮬레이터와 같은 정규 근사다.)

5%는 작아 보이지만, 지표를 여러 개 보면 금방 커진다. 서로 독립인 지표 \(k\)개를 각각 α = 0.05로 판정하면, 그중 적어도 하나가 우연히 유의하게 나올 확률은 \(1-(1-0.05)^k\)이다. 지표 10개면 약 40%다. 실험이 끝난 뒤 대시보드의 지표 열 개 가운데 오른 것 하나를 골라 "B가 이겼다"고 말하면, 바꾼 것이 아무 효과가 없어도 열 번에 네 번은 이긴다. 1차 지표를 미리 하나로 정해 두는 이유다. 여러 지표를 꼭 판정해야 한다면 유의 수준을 지표 수로 나누는 본페로니 보정 같은 방법을 쓴다.

표본 크기와 검정력

A/B 시뮬레이터에서 진짜 차이가 있어도 사람이 적으면 놓친다는 것을 봤다. 진짜 차이가 있을 때 실험이 그것을 유의하게 잡아낼 확률을 검정력(Statistical power)이라고 한다. 흔히 80%를 목표로 잡는다. 놓쳐도 아깝지 않을 만큼 작은 차이는 버리고, 이만큼은 꼭 잡아야 한다는 가장 작은 차이를 정하는데, 이것이 최소 검출 효과(Minimum detectable effect, MDE)다. 기준 전환율, 최소 검출 효과, 유의 수준, 검정력을 정하면 한 무리에 필요한 사람 수가 나온다. 두 비율을 비교할 때 흔히 쓰는 정규 근사 공식은 다음과 같다.

$$n \approx \frac{\Big(z_{1-\alpha/2}\sqrt{2\bar p(1-\bar p)}\;+\;z_{1-\beta}\sqrt{p_A(1-p_A)+p_B(1-p_B)}\Big)^2}{(p_B-p_A)^2}$$
\(n\): 한 무리에 필요한 사람 수, \(p_A\): 기준 전환율, \(p_B = p_A +\) 최소 검출 효과, \(\bar p\): 두 값의 평균. \(z_{1-\alpha/2}\)는 유의 수준 5%(양쪽)에서 1.96, \(z_{1-\beta}\)는 검정력 80%에서 0.84, 90%에서 1.28이다. 분모가 차이의 제곱이라는 점을 본다.

분모가 제곱이라서, 찾으려는 차이를 절반으로 줄이면 필요한 사람은 네 배가 된다. 아래 그래프의 가로축이 최소 검출 효과, 세로축이 한 무리에 필요한 사람 수다(세로축은 10배씩 늘어나는 눈금이다). 곡선 위의 점을 끌어 본다.

SIMULATOR

작은 차이는 큰 표본을 부른다

곡선 위의 점을 끈다
한 무리에 필요한 사람—
두 무리 합계—
하루 460명이면—
해볼 것: ① 기준 8%, 최소 검출 효과 2%p(8% → 10%), 검정력 80%. 한 무리에 약 3,200명, 합쳐 6,400명이 넘게 필요하다. ② 점을 1%p로 끈다. 사람 수가 네 배 가까이 늘어 하루 460명인 서비스에서는 두 달 가까이 걸린다. 0.5%p라면 반년이 넘는다. ③ 기준 전환율을 30%로 올린다. 같은 2%p라도 필요한 사람이 훨씬 많아진다. 전환율이 50%에 가까울수록 한 사람의 결과가 가장 많이 흔들리기 때문이다. (유의 수준 5% 양쪽, 위 정규 근사 공식. 하루 460명은 이 장 케이스의 가상 방문자 수이고, 두 무리에 반씩 나눈다고 보았다.)

작은 서비스가 A/B 테스트에서 가장 먼저 부딪히는 벽이 이것이다. 하루 방문자가 수백 명이면 1%p 차이는 몇 달을 기다려야 겨우 보인다. 그때 할 수 있는 일은 세 가지다. 더 큰 차이를 낼 만한 과감한 변경을 시험하거나, 분모가 큰 앞쪽 단계(요청률)를 대리 지표로 쓰되 북극성과의 연결을 따로 확인하거나, 숫자 대신 8장의 사용성 테스트로 판단하는 것이다. "실험할 만큼 사람이 없다"는 것도 이 계산이 주는 중요한 답이다.

실험 계획서를 먼저 쓴다 실험을 켜기 전에 한 쪽짜리 계획서를 쓴다. ① 가설: 무엇을 바꾸면 누구의 무엇이 왜 달라질 것인가. ② 1차 지표와 그 분모, 배정 단위. ③ 가드레일과 중단 조건. ④ 기준 전환율, 최소 검출 효과, 유의 수준, 검정력, 그래서 필요한 사람 수와 기간. ⑤ 판정 날짜와 판정 방식. 계획서는 결과를 본 뒤에 고치지 않는다. 결과를 보고 나서 기준을 고르면, 어떤 결과든 성공으로 읽을 수 있기 때문이다. 이렇게 판정 기준을 미리 적어 두는 일을 연구에서는 사전 등록(Preregistration)이라고 부른다.

중간에 들여다보기

계획서에 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개를 돌리며 정해진 날마다 결과를 들여다보고, 유의해지면 바로 멈춘다.

SIMULATOR

유의해지는 날 멈추면

들여다본 횟수—
거짓 양성(이 방식)—
같은 실험을 끝에만 봤다면—
해볼 것: ① "매일", 28일. 선 하나가 A/A 실험 하나의 z값(차이를 표준 오차로 나눈 값)이 날마다 움직인 길이다. 점선(±1.96) 밖으로 한 번이라도 나가면 그날 멈추고 빨간 점을 찍는다. 400번 가운데 거짓 양성이 5%의 몇 배나 된다. ② "끝에 한 번"으로 바꾼다. 같은 실험들인데 5% 근처로 돌아온다. ③ "매일"에서 기간을 42일로 늘린다. 오래 들여다볼수록 더 늘어난다. "매주"는 그 사이다. (두 무리 모두 진짜 전환율 10%, 하루 한 무리 230명. 하루 전환 수는 이항 분포를 정규 분포로 근사해 뽑았다. 그림에는 400개 중 처음 30개만 그렸다.)

선 하나하나는 술에 취한 사람의 걸음처럼 0 근처를 오르내린다. 마지막 날 한 번 보면 그 위치가 문턱 밖일 확률은 5%다. 그러나 매일 보면 걸음이 한 번이라도 문턱을 스친 실험은 모두 걸린다. 그리고 그날 멈추었기 때문에 그 뒤에 0 근처로 돌아왔을 실험도 "승리"로 기록된다. 사흘 만의 p = 0.04는 이렇게 생긴다.

해결책은 들여다보지 않는 것이 아니라, 들여다볼 계획을 미리 세우는 것이다. 판정은 계획서의 날짜에 한 번만 하고, 그 전의 대시보드는 배정이 고르게 되는지, 오류가 터지지 않는지, 가드레일이 무너지지 않는지 감시하는 데만 쓴다. 중간에 멈출 수 있어야 한다면 그것을 처음부터 허락하는 통계 방법을 쓴다.

중간에 봐도 되는 실험 임상시험은 해로운 약을 끝까지 투여할 수 없으니 일찍부터 중간 분석을 해야 했다. 그래서 들여다볼 횟수와 시점을 미리 정하고, 앞의 들여다보기일수록 훨씬 엄격한 문턱을 쓰는 순차 검정(Sequential testing)이 발전했다. 오브라이언과 플레밍(O'Brien & Fleming, 1979, Biometrics)의 방법이 잘 알려진 예로, 초반에는 아주 큰 차이에만 멈추고 마지막에는 거의 1.96에 가까운 문턱을 쓴다. 전체의 거짓 양성을 5%로 맞추도록 문턱을 나누어 쓰는 셈이다. 요즘 온라인 실험 도구에는 언제 들여다봐도 거짓 양성이 유지되도록 설계된 방법을 넣은 것도 있다. 어떤 방법이든 원리는 같다. 여러 번 보는 만큼 한 번의 문턱을 높인다.

얼마나 오래: 요일과 새로움

표본 크기만 채우면 끝이 아니다. 같은 6,400명이라도 사흘 만에 모은 것과 2주에 걸쳐 모은 것은 다르다. 사흘 동안 온 사람은 평일 손님뿐일 수 있다. 주말에 아이와 함께 오는 손님은 다른 이유로 다른 버튼을 누른다. 그래서 실험 기간은 적어도 한 주, 가능하면 두 주처럼 요일이 온전히 몇 바퀴 도는 길이로 잡는 것이 흔한 관행이다.

또 하나는 새로움 효과(Novelty effect)다. 단골 손님은 화면이 바뀌면 "이게 뭐지" 하고 한 번 더 눌러 본다. 그 호기심은 며칠 만에 사라진다. 반대로 익숙한 것이 바뀌어 처음 며칠은 오히려 헤매는 경우도 있다(초두 효과, Primacy effect). 어느 쪽이든 실험 초반의 차이는 오래 갈 차이와 다르다.

아래 그래프의 얇은 선은 B가 A보다 날마다 얼마나 높았는지(상대 차이), 굵은 선은 첫날부터 그날까지 모은 자료로 계산한 누적 추정치다. 점선이 시간이 지난 뒤에도 남는 진짜 효과(+5%)다. 우연한 흔들림은 빼고 기대값만 그렸다.

SIMULATOR

사흘째의 승리, 2주째의 진실

3일째 누적 추정—
14일째 누적 추정—
오래 남는 효과—
해볼 것: ① 처음 설정에서 3일째 누적 추정치를 본다. 진짜 효과의 몇 배로 부풀어 있다. 14일째에도 아직 두 배가 넘는다. 앞 며칠의 큰 값이 누적 평균에 오래 남기 때문이다. 반감 기간을 1일로 줄여도 몇 %p가 남는다. 그래서 아래 글처럼 효과를 날짜별로 나누어 본다. ② 새로움 효과를 −15%로 내린다(바뀐 화면에 처음엔 헤맨다). 사흘째 판정이라면 좋은 변경을 버렸을 것이다. ③ 새로움을 0으로 두고 요일 효과만 본다. 누적 추정치는 주말을 지날 때마다 출렁이다가, 7일·14일처럼 요일이 한 바퀴 돌 때 진짜 값에 맞는다. (가상의 모형: 날마다의 효과 = 진짜 효과 5% + 새로움 × 0.5^(경과 일 ÷ 반감 기간) + 요일 효과(토·일 +8%p, 평일 −3.2%p, 한 주 평균 0). 1일째를 월요일로, 날마다 방문자 수가 같다고 두었다.)

새로움 효과를 의심할 때 쓰는 간단한 방법이 있다. 실험이 끝난 뒤 효과를 날짜별로 나누어 보아 처음 며칠만 크고 줄어드는 모양인지 본다. 또는 처음 들어온 사람(새 손님)과 이전부터 쓰던 사람(단골)을 나누어 본다. 새 손님에게는 "새로움"이 없으니, 두 무리의 효과가 크게 다르면 새로움을 의심한다. 다만 이렇게 나누어 보는 것은 판정이 아니라 해석을 위한 것이다. 쪼갤수록 표본이 작아지고 지표가 늘어 우연히 튀는 조각이 생긴다.

배정이 반반인지 먼저 본다 50:50으로 나누었는데 결과의 사람 수가 A 3,320명, B 3,090명처럼 나왔다면, 결과를 보기 전에 멈추고 원인을 찾는다. 이런 어긋남을 표본 비율 불일치(Sample Ratio Mismatch, SRM)라고 한다. B 화면이 느려 일부가 기록되기 전에 떠났거나, 특정 브라우저에서 B가 깨졌거나, 배정 코드에 버그가 있다는 신호다. 이 경우 두 무리는 더 이상 무작위로 나뉜 무리가 아니라서, 차이가 아무리 유의해도 믿을 수 없다. 사람 수가 이만큼 어긋날 확률은 카이제곱 검정으로 계산할 수 있다(위 예라면 아주 드물다).
동전 두 개로 하는 A/A 테스트 종이에 표를 그리고 두 사람이 각자 동전을 던진다. 앞면이 "전환"이다. 한 번 던질 때마다 각자의 누적 앞면 비율을 적고, 열 번째부터는 두 비율의 차이가 몇 %p인지 적는다. 50번까지 던진다. 두 동전은 같은 동전이니 진짜 차이는 0이다. ① 차이가 가장 크게 벌어진 회차와 그 크기, ② 차이가 20%p를 넘은 회차가 몇 번 있었는지, ③ 50번째의 차이를 적는다. 친구 여럿과 함께 하면 "중간에 크게 벌어진 적이 있는 쌍"이 "마지막에 크게 벌어진 쌍"보다 훨씬 많다는 것을 손으로 확인할 수 있다. 중간에 들여다보기의 함정이 바로 그것이다.

서윤의 봄 서비스 노트

CASE 서윤서비스 노트 · 9장

사흘 만의 승리를 미루다

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차 지표: 결과 화면을 본 방문자(브라우저 단위 무작위 배정) 가운데 맡긴 책을 기한 안에 실제로 찾아간 비율. 버튼 누름(요청률)은 해석용 보조 지표로만 본다. 가드레일: 요청부터 주인 확인까지 걸린 시간의 중앙값(시범 운영 기준 30분을 넘으면 중단 검토), 헛걸음 신고 수. 미리 정한 값: 기준 8%, 최소 검출 효과 2%p, α = 0.05 양쪽, 검정력 80% → 한 무리 약 3,200명(합계 약 6,400명), 하루 460명 기준 14일(5월 15일 월요일부터 28일 일요일까지 두 주). 판정은 14일째 한 번만 하고, 그 전에는 배정 비율(SRM)과 오류, 가드레일만 본다. 가상 자료다.
아직 남은 문제숫자는 "3일 동안"이 더 좋은 문구인지 알려 줄 수 있어도, 왜 그런지나 더 나은 문구가 무엇인지는 알려 주지 않는다. 시범 운영 중 손님이 보낸 화면 캡처에는 "요청 실패(code 409)"라는 오류와, 검색 결과가 비었을 때의 "결과 없음"이 그대로 찍혀 있었다. 네 책방이 직접 쓴 안내 문구는 말투도 제각각이다.
다음 단계10장: 버튼과 오류, 빈 상태의 문구를 손보고, 네 책방이 함께 쓸 문구 원칙을 정한다.

핵심 정리

  1. 사용성 테스트는 "왜", 지표는 "얼마나"를 알려 준다. 둘은 서로를 대신하지 못한다.
  2. 북극성 지표는 사용자가 얻는 가치에 가장 가까운 숫자다. 화면 하나를 고칠 때는 그것을 곱셈으로 쪼갠 단계의 전환율(대리 지표)을 보되, 북극성과 함께 움직이는지 확인한다.
  3. 숫자 하나만 좇으면 숫자는 오르고 목적은 멀어진다(굿하트의 법칙). 실험마다 판정용 1차 지표 하나와, 나빠지면 안 되는 가드레일 지표를 미리 정한다.
  4. 전환율은 아무것도 바꾸지 않아도 우연히 흔들린다. 흔들림(표준 오차)은 \(\sqrt{p(1-p)/n}\)으로, 절반으로 줄이려면 사람이 네 배 필요하다.
  5. A/B 테스트는 같은 기간의 사람을 무작위로 나누어 비교한다. 결과는 차이의 크기와 신뢰 구간으로 보고하고, "유의하지 않다"를 "효과가 없다"로 읽지 않는다.
  6. 유의 수준 5%는 진짜 차이가 없어도 스무 번에 한 번은 이긴다는 뜻이다(A/A 테스트). 지표를 여러 개 보면 우연한 승리는 더 흔해진다.
  7. 필요한 표본은 찾으려는 차이의 제곱에 반비례한다. 기준값, 최소 검출 효과, 유의 수준, 검정력으로 사람 수와 기간을 실험 전에 정한다.
  8. 매일 들여다보다 처음 유의해진 날 멈추면 거짓 양성이 몇 배로 는다. 판정일을 정하거나 순차 검정을 쓴다. 기간은 요일이 온전히 도는 길이로 잡고, 새로움 효과를 의심한다.

확인 퀴즈

1. 결과 화면의 버튼을 크고 진한 색으로 바꾸자 버튼 누름이 18% 늘었다. 이 결과만으로 변경을 성공이라 부르기 어려운 가장 큰 이유는?

누름은 쉽게 부풀릴 수 있는 앞단의 숫자다. 누름이 늘어도 끝까지 가는 사람이 그대로라면 손님에게 좋아진 것이 없고, 오히려 주인의 일만 늘 수 있다. 판정은 미리 정한 1차 지표(찾아간 비율)로 하고 가드레일을 함께 본다(굿하트의 법칙).

2. 진짜 차이가 0인 A/A 테스트를 유의 수준 0.05로 200번 돌렸다. 각 실험의 표본을 10배로 늘려 다시 200번 돌리면 "유의한 차이"가 나오는 실험 수는 어떻게 되는가?

진짜 차이가 없을 때 유의하게 나올 확률은 표본 크기와 상관없이 유의 수준 α(여기서 5%)다. 200번이면 10번 안팎이다. 표본이 커지면 신뢰 구간이 좁아져 작은 진짜 차이를 더 잘 잡게 되지만(검정력), 진짜 차이가 0일 때의 거짓 양성 비율은 바뀌지 않는다.

3. 기준 전환율 8%에서 2%p 차이를 잡으려면 한 무리에 약 3,200명이 필요하다. 같은 조건에서 1%p 차이를 잡으려면 대략 몇 명이 필요한가?

표본 크기 공식의 분모는 차이의 제곱이다. 차이를 절반으로 줄이면 필요한 사람은 약 네 배가 된다(이 장의 공식으로 계산하면 약 12,200명). 하루 460명인 서비스라면 2주가 아니라 두 달 가까이 걸린다.

4. 2주로 계획한 실험의 대시보드를 매일 보다가, 사흘째 처음으로 p값이 0.05 아래로 내려가 그날 실험을 멈추고 B를 채택했다. 이 판단의 문제로 가장 알맞은 것은?

p값은 실험 내내 오르내린다. 매일 보고 처음 문턱을 넘는 날 멈추면, 마지막 날 한 번 볼 때보다 거짓 양성이 몇 배로 늘어난다(Armitage 등 1969). 게다가 평일 사흘은 요일이 한 바퀴 돌지 않았고 새로움 효과도 남아 있다. p = 0.04는 "B가 나을 확률 96%"가 아니다.