생존 편향
고친 사람 github-actions[bot]
생존 편향은 도중에 사라진 것을 빼고 남은 것만 보고 판단해서 답이 한쪽으로 기우는 고장입니다. 탈퇴한 사용자를 지운 데이터로 잰 만족도는 늘 실제보다 높게 나옵니다. 사라진 것은 흔적을 남기지 않아서 데이터만 들여다봐서는 이 기울기가 안 보입니다. 무엇이 사라졌는지를 따로 찾아야 드러납니다.
쉽고 빠른 이해
생존 편향은 끝까지 남은 것만 보고 결론을 내서 답이 한쪽으로 어긋나는 일입니다. 불만이 큰 사용자부터 떠나면, 남은 사용자에게만 돌린 설문은 만족도를 높게 내놓습니다.
따로 이름이 붙은 까닭은 데이터를 더 모아도 안 사라지기 때문입니다. 남느냐 마느냐가 재려는 값에 달려 있어서, 몇 명을 보든 같은 쪽으로 빗나갑니다. 남은 것들의 공통점이 성공 비결처럼 보이는 착각도 여기서 나옵니다.
- 시간이 지나는 동안 일부가 사라집니다. 사용자는 탈퇴합니다. 요청은 끊깁니다. 장비는 고장 나서 교체됩니다
- 사라지는 까닭이 재려는 값과 엮여 있습니다. 불만이 큰 사람이 먼저 떠나는 식입니다
- 남은 것만 세면 평균이 사라진 쪽의 반대 방향으로 밀립니다. 이 예에서는 높은 쪽입니다
알아채기도 어렵습니다. 사라진 쪽은 데이터 안에 한 줄도 남지 않습니다. 남은 데이터가 아니라 처음 출발한 수와 견줘야 보입니다.
상세
동네에 수십 년 된 식당이 몇 곳 있으면 옛날 식당은 다 맛있었다는 말이 나옵니다. 맛없던 집은 진작 문을 닫아서 지금 눈에 안 띌 뿐입니다. 남은 집만 보고 옛날 전체를 말하면 그림이 밝아집니다.
알고 싶은 대상 전체를 모집단이라고 부릅니다. 그중 손에 들어온 일부가 표본입니다. 한 해 동안 가입한 사람 전부가 모집단이면, 지금 설문에 답할 수 있는 사람이 표본입니다.
생존 편향은 모집단의 일부가 재기 전에 사라질 때 생깁니다. 사라지는 까닭이 재려는 값과 엮여 있어야 합니다. 그러면 남은 표본으로 낸 평균은 모집단 전체로 셈한 값에서 늘 같은 쪽으로 벗어납니다. 이렇게 한쪽으로 꾸준히 빗나가는 정도를 통계에서 편향이라고 부릅니다.
표본을 뽑는 방식이 한쪽으로 기울어 생기는 편향을 표본 편향이라고 부릅니다. 생존 편향에서는 남을 것과 사라질 것을 시간이 골라냅니다. 시간이 고른 것이니 이것도 일종의 뽑기입니다. 그래서 생존 편향은 표본 편향 가운데 시간이 걸러 낸 경우에 붙는 이름입니다.
이 절은 가입자 만족도 예에서 출발해 편향이 생기는 조건과 이를 알아채고 줄이는 법까지 봅니다.
남은 것만 세는 설문
한 해 동안 100명이 가입했습니다. 한 해 뒤에는 20명이 남았습니다. 떠난 80명은 탈퇴하면서 계정이 지워졌습니다. 이제 만족도 설문을 돌리면 설문은 남은 20명에게만 닿습니다.
거르는 일은 설문보다 먼저 일어납니다. 설문을 아무리 공정하게 돌려도 떠난 80명은 이미 명단에 없습니다.
떠난 사람들이 떠나기 전에 답했다면 5점 만점에 평균 2.0 을 줬다고 해 봅시다. 남은 사람들은 평균 4.5 를 줍니다.
| 무리 | 사람 수 | 평균 만족도 |
|---|---|---|
| 남은 사용자 | 20 | 4.5 |
| 떠난 사용자 | 80 | 2.0 |
| 가입자 전체 | 100 | 2.5 |
설문이 내놓는 답은 첫 줄의 4.5 입니다. 가입자 전체로 셈하면 2.5 이므로 2.0 만큼 높게 나왔습니다. 남은 사람이 좋아서 남은 것이니 당연한 결과입니다.
가입자가 만 명으로 늘어도 답은 바뀌지 않습니다. 떠나는 비율과 떠나는 까닭이 같으면 남은 2천 명도 평균 4.5 를 줍니다. 무엇이 뽑히느냐의 우연에서 오는 표본 오차는 표본을 키우면 줄지만, 이 빗나감은 키워도 그대로 남습니다.
편향이 생기는 조건
생존 편향은 두 조건이 함께 설 때 생깁니다. 첫째는 재기 전에 대상 일부가 사라지는 과정이 있다는 것입니다.
둘째는 사라질지 말지가 재려는 값과 엮여 있다는 것입니다. 앞의 예에서는 만족도가 낮을수록 먼저 떠났습니다. 남을 확률이 바로 재려는 값인 만족도에 따라 갈렸습니다.
flowchart TD
A["재기 전에 일부가 사라지나"] -->|아니다| B["편향 없음"]
A -->|그렇다| C["사라지는 까닭이 재려는 값과 엮였나"]
C -->|아니다| D["이 값에는 편향 없음"]
C -->|그렇다| E["생존 편향"]
둘 중 하나라도 빠지면 그 값에 대한 편향은 없습니다.
둘째 조건만 빠지는 경우를 보면 차이가 또렷합니다. 시험 삼아 아이디 끝자리가 홀수인 계정만 정리했다고 합시다. 계정 절반이 사라졌지만 끝자리는 만족도와 상관이 없습니다. 남은 절반의 평균 만족도는 기울지 않습니다.
그래서 생존 편향은 데이터 하나에 붙는 성질이 아니라 데이터와 재려는 값의 짝에 붙는 성질입니다. 같은 사용자 명단이 만족도를 잴 때는 기울어 있습니다. 사용자 이름의 길이를 잴 때는 멀쩡합니다.
공통점이라는 착각
생존 편향이 낳는 착각이 하나 더 있습니다. 남은 것들의 공통점을 남은 까닭으로 읽는 것입니다. 성공 사례 발표를 듣다 보면 흔히 빠집니다.
어떤 설계 방식 A 를 두고 회사 100곳을 따라가 봤다고 합시다. 다섯 해 뒤에 살아남은 회사 10곳 가운데 8곳이 방식 A 를 썼습니다. 열에 여덟이 같은 방식을 썼으니 비결처럼 들립니다.
| 방식 A 를 씀 | 안 씀 | 합 | |
|---|---|---|---|
| 살아남음 | 8 | 2 | 10 |
| 문을 닫음 | 72 | 18 | 90 |
| 합 | 80 | 20 | 100 |
표의 첫 줄만 보면 방식 A 가 압도적입니다. 그런데 둘째 줄을 보면 문을 닫은 회사도 열에 여덟이 방식 A 를 썼습니다. 방식 A 를 쓴 80곳 가운데 살아남은 곳은 8곳이라 열에 하나입니다. 안 쓴 20곳 가운데 살아남은 곳도 2곳이라 똑같이 열에 하나입니다.
방식 A 는 생존과 아무 상관이 없었습니다. 그저 흔한 방식이었을 뿐입니다. 사례 발표에 나오는 것은 첫 줄뿐이고 둘째 줄은 말할 사람이 남아 있지 않습니다.
이 착각을 피하는 물음은 하나입니다. 「사라진 쪽에도 같은 공통점이 있었나」를 묻습니다. 그 물음에 답할 데이터가 없으면 공통점은 아무것도 말해 주지 않습니다.
백엔드에서 숨는 곳
백엔드 데이터에도 도중에 사라지는 것이 많습니다. 아래 표는 흔한 경우를 사라지는 쪽과 그 탓에 어긋나는 답으로 나눠 봅니다.
| 데이터 | 사라지는 쪽 | 어긋나는 답 |
|---|---|---|
| 끝난 요청만 남기는 로그 | 타임아웃으로 끊기거나 프로세스가 죽은 요청 | 응답 시간이 짧게, 오류가 적게 나온다 |
| 죽을 때 프로세스가 스스로 보내는 크래시 리포트 | 리포트를 보낼 틈도 없이 죽은 경우 | 가장 심한 장애가 통계에서 빠진다 |
| 탈퇴하면 지우는 사용자 데이터 | 떠난 사용자 | 만족도와 사용량이 높게 나온다 |
| 지금 돌고 있는 서버 장비 목록 | 고장 나서 교체된 장비 | 장비가 오래가는 것처럼 보인다 |
| 지금 남아 있는 오래된 코드 | 버그 탓에 갈아엎혀 없어진 코드 | 옛 코드는 튼튼하다는 인상이 생긴다 |
다섯 줄 모두 사라지는 까닭이 재려는 값 자체라서 생존 편향의 둘째 조건이 저절로 섭니다. 오래 걸리는 요청은 끊깁니다. 심한 장애일수록 리포트를 못 보냅니다. 불만인 사람은 떠납니다.
크래시 리포트 줄을 조금 더 따라가 봅니다. 리포트를 보내는 코드가 죽어 가는 프로세스 안에서 돈다고 합시다. 메모리가 망가지거나 프로세스가 강제로 끝나면 그 코드도 돌지 못합니다. 리포트가 적게 오는 버전이 안정적인 버전이 아니라, 너무 심하게 죽어서 말을 못 하는 버전일 수 있습니다.
알아채는 법
남은 데이터만 들여다봐서는 생존 편향이 보이지 않습니다. 사라진 쪽은 흔적을 남기지 않기 때문입니다. 탈퇴자가 지워진 테이블에는 탈퇴자가 있었다는 표시가 한 줄도 없습니다.
그래서 첫째 방법은 데이터가 쌓이는 과정을 따라가며 묻는 것입니다. 물음은 「이 데이터에 들어오기 전에 무엇이 사라질 수 있었나」입니다. 탈퇴 시 삭제, 타임아웃, 장비 교체, 오래된 기록을 지우는 보존 기간이 흔한 답입니다.
둘째 방법은 출발한 수와 견주는 것입니다. 가입자 수는 지금 사용자 수와 나란히 놓습니다. 앞단 로드 밸런서가 센 요청 수는 로그 건수와 나란히 놓습니다. 차이가 크면 그만큼이 어딘가에서 사라졌습니다.
셋째 방법은 같은 때 출발한 무리를 처음부터 끝까지 따라가는 것입니다. 이런 무리를 코호트라고 부릅니다. 지난 1월에 가입한 사람들을 한 코호트로 묶으면 남은 비율의 분모가 처음 가입자 수로 고정됩니다. 떠난 사람도 분모에서 빠지지 않으므로 그 비율이 정직하게 나옵니다.
줄이는 법
줄이는 길은 둘입니다. 사라지기 전에 기록을 남기거나, 사라진 것을 버리지 않고 계산에 넣는 것입니다.
요청이라면 들어올 때 시작 기록부터 남깁니다. 끝날 때 결과를 덧붙입니다. 끝 기록이 없는 시작 기록이 곧 끊긴 요청입니다.
크래시라면 죽는 프로세스 안이 아니라 바깥에서 지켜봅니다. 프로세스가 멈추면 알아채는 워치독 같은 감시 프로그램이 그 일을 맡습니다.
사용자라면 탈퇴할 때 개인을 알아볼 수 없게 걷어 낸 뒤 사용량 같은 집계값을 남겨 둡니다. 그러면 떠난 사람도 분모와 평균에 들어옵니다.
기록을 남겨 두었다면 통계 방법도 쓸 수 있습니다. 이 방법은 사라지기 전 기록이 있어야 돌아갑니다. 그래서 앞의 첫째 길을 먼저 해 둬야 합니다.
이런 데이터에는 끝까지 따라가지 못한 대상이 섞입니다. 가입자가 얼마나 오래 남는지 잰다면, 석 달 전에 가입한 사람은 아직 석 달밖에 지켜보지 못했습니다. 언제 떠날지는 모르지만 「석 달까지는 남아 있었다」는 압니다. 이렇게 관찰이 도중에 끊긴 기록을 중도 절단이라고 부릅니다.
생존 분석은 중도 절단된 기록을 버리지 않고 아는 데까지 계산에 넣는 방법입니다. 남은 것만 세는 대신 떠난 시점과 관찰이 끊긴 시점까지 함께 셉니다.
문제가 안 되는 경우
앞의 두 조건은 무엇을 묻느냐에 따라 서기도 하고 안 서기도 합니다. 지금 남아 있는 사용자가 무엇을 불편해하는지 묻는다면 모집단이 곧 지금 사용자입니다. 떠난 사람은 애초에 모집단 밖이라 사라져도 첫째 조건에 걸리지 않습니다.
같은 설문으로 가입자 전체가 서비스를 어떻게 느끼는지 말하면 이야기가 달라집니다. 이제 떠난 사람도 모집단에 들고, 그들이 사라진 까닭이 불만이라 둘째 조건까지 섭니다. 데이터는 같고 겨냥한 모집단만 바뀌었습니다.
관련 항목
생존 편향이 속하는 상위 분류
표본 편향 · 선택 편향 · 편향 (통계) · 인지 편향
생존 편향과 나란히 분석을 기울이는 편향과 역설
무응답 편향 · 자기 선택 편향 · 편의 표본 · 확증 편향 · 심슨의 역설
생존 편향이 어긋나게 만드는 짐작의 재료
모집단 · 표본 · 무작위 표본 · 평균 · 표본 오차 · 대표성
생존 편향을 잡아내거나 되돌리는 분석 방법
코호트 · 코호트 분석 · 생존 분석 · 중도 절단 · 카플란-마이어 추정 · 역확률 가중치 · 전수 조사
생존 편향이 숨어드는 백엔드 기록
로그 · 타임아웃 · 크래시 리포트 · 로드 밸런서 · 워치독 · 텔레메트리 · 관측성 · 데이터 보존 기간
생존 편향이 흐리는 지표와 판단
이탈률 · 잔존율 · 상관관계 · 인과 관계 · A-B 테스트 · 포스트모템 · 레거시 코드
다른 이름: survivorship bias · 생존자 편향 · 생존 편의