모집단
고친 사람 github-actions[bot]
모집단은 통계가 무엇에 대해 말하는지를 정합니다. 알고 싶은 대상 전체가 모집단입니다. 대개는 그중 일부만 뽑아 잽니다. 그것으로 전체를 추정합니다.
쉽고 빠른 이해
모집단은 「이 숫자가 누구에 대한 말인가」의 답입니다. 지난달 이 서버가 받은 요청 전부가 한 예입니다.
이게 없으면 숫자가 떠다닙니다. 도중에 끊긴 요청은 로그에 안 남기도 합니다. 그러면 뽑아서 잰 평균 응답 시간이 모든 요청에 대한 말인지, 로그에 남은 요청에 대한 말인지 가를 수 없습니다.
- 알고 싶은 대상 전체를 정합니다
- 그중 일부를 고르게 뽑아 잽니다
- 뽑은 일부로 계산한 수로 전체의 수를 추정합니다
대가는 결론이 모집단 안에 갇힌다는 것입니다. 평일 낮 요청에서 뽑았다면 그 결과로 주말 밤을 말할 수 없습니다. 뽑은 일부가 전체를 닮지 않으면 추정도 빗나갑니다.
상세
냄비에 끓인 국의 맛을 알고 싶을 때 국을 다 마셔 보지는 않습니다. 잘 저은 뒤 한 숟가락 떠서 맛을 봅니다. 알고 싶은 것은 냄비 전체의 맛입니다. 입에 넣은 것은 한 숟가락입니다.
통계에서 냄비에 해당하는 것이 모집단입니다. 한 달 동안 이 서버에 들어온 요청 전부가 모집단이 될 수 있습니다. 그 요청들의 평균 응답 시간이 알고 싶은 수입니다.
이 절은 모집단과 표본을 가르는 낱말부터 봅니다. 예로는 값 열 개짜리 작은 모집단과 서버 요청을 씁니다.
모집단과 표본
표본은 모집단에서 뽑아 잰 일부입니다. 국 비유의 한 숟가락입니다. 한 달 치 요청 가운데 천 건을 골라 응답 시간을 쟀다면 그 천 건이 표본입니다. 이렇게 표본을 뽑는 일을 샘플링이라고 합니다.
모집단을 남김없이 재는 방식을 전수 조사라고 합니다. 표본만 재는 방식은 표본 조사입니다. 어느 쪽을 고를지는 전부를 잴 수 있느냐에 달려 있습니다.
전부를 못 재는 이유는 여럿입니다. 요청이 하루에 수억 건이면 전부 기록하는 비용이 큽니다. 재는 일이 대상을 망가뜨리기도 합니다. 전구의 수명을 재려면 전구를 켜 둔 채 끝까지 태워야 합니다.
한 건도 빠지면 안 되는 수는 전수 조사로 셉니다. 이번 달 결제 금액의 합계가 그런 수입니다. 표본으로 추정한 합계는 청구서에 쓸 수 없습니다.
모수와 통계량
모수는 모집단 전체를 요약한 수입니다. 모집단의 평균이나 모집단의 표준편차가 모수입니다. 모집단이 정해지면 모수도 하나로 정해집니다. 대개는 그 값을 모릅니다.
모집단의 평균은 따로 모평균이라고 부릅니다. 한 달 치 요청 전부의 평균 응답 시간이 모평균입니다.
표본으로 계산한 수는 통계량이라고 합니다. 표본의 평균인 표본 평균이 대표적입니다. 통계량은 손에 든 값들로 계산하므로 언제나 값을 압니다.
모수는 영어로 parameter 입니다. 코드의 매개변수와 영어 낱말이 같습니다. 통계에서 parameter 는 모집단이 가졌지만 아직 모르는 수를 가리킵니다.
아는 통계량으로 모르는 모수를 추정하는 일을 추론 통계라고 합니다. 모집단에서 추정까지의 흐름을 그리면 다음과 같습니다.
flowchart TD
P["모집단 · 요청 전부"] -->|뽑는다| S["표본 · 천 건"]
S -->|계산한다| T["통계량 · 표본 평균"]
T -->|추정한다| M["모수 · 모평균"]
M -.->|모집단이 가진 수| P
그림의 점선은 모수가 모집단에 딸린 수라는 뜻입니다. 구하려는 것은 이 모수입니다. 모집단을 전부 잴 수 없으니 모수를 바로 계산하지 못합니다. 그래서 표본을 뽑아 통계량을 계산하는 길로 둘러 갑니다.
값 열 개로 보는 모수와 통계량
어느 배치 작업을 열 번 돌린 실행 시간 전부를 모집단으로 삼아 봅니다. 값이 열 개뿐이라 모수를 직접 계산할 수 있습니다.
실행 시간은 2, 3, 3, 4, 4, 5, 5, 6, 7, 11 초입니다. 모두 더하면 50 이라서 모평균은 5초입니다. 이 수는 모집단이 바뀌지 않는 한 그대로입니다.
이 열 개에서 세 개씩 표본을 뽑아 봅니다. 뽑을 때마다 표본 평균이 다르게 나옵니다.
| 뽑은 표본 (초) | 표본 평균 (초) |
|---|---|
| 3 · 4 · 5 | 4 |
| 2 · 3 · 4 | 3 |
| 5 · 7 · 11 | 약 7.7 |
모평균은 5초 하나입니다. 표에 적은 세 표본만 해도 표본 평균이 3초에서 7.7초까지 흔들립니다. 이렇게 통계량이 모수에서 벗어난 폭을 표본 오차라고 부릅니다.
표본을 크게 뽑으면 이 흔들림이 줄어듭니다. 열 개 가운데 아홉 개를 뽑으면 한 개만 빠집니다. 어느 하나를 빼도 표본 평균은 4.3초에서 5.3초 사이에 머뭅니다.
모집단에서 고르게 뽑은 표본이 커질수록 표본 평균은 모평균에 가까워집니다. 이 성질을 대수의 법칙이라고 합니다. 표본으로 모집단을 추정할 수 있는 것은 이 성질 덕분입니다.
모집단을 먼저 정하는 이유
「우리 서비스의 평균 응답 시간」이라는 말은 모집단을 정하기 전까지 뜻이 하나로 서지 않습니다. 헬스 체크 요청을 넣는지에 따라 수가 달라집니다. 어느 기간의 요청인지, 실패한 요청도 넣는지에 따라서도 달라집니다.
결론은 모집단 밖으로 넓힐 수 없습니다. 평일 낮 요청에서 뽑은 표본으로는 주말 밤 요청의 응답 시간을 말할 수 없습니다. 두 시간대는 트래픽 양도 요청 종류도 다를 수 있습니다.
그래서 숫자를 적을 때는 어떤 모집단에 대한 수인지를 함께 적습니다. 「지난주 평일, 헬스 체크를 뺀 요청의 평균」처럼 적으면 읽는 사람이 같은 모집단을 떠올립니다.
표본틀과 빠지는 요청
정해 둔 모집단과 실제로 뽑을 수 있는 목록은 다를 때가 많습니다. 표본을 뽑아 오는 그 목록을 표본틀이라고 합니다. 영어로는 sampling frame 입니다.
서버가 받은 요청 전부가 모집단이어도 뽑을 수 있는 것은 로그에 남은 요청뿐입니다. 요청이 끝날 때 로그를 쓰는 서버라면, 도중에 연결이 끊긴 요청은 로그에 안 남습니다. 이런 요청은 표본틀 밖에 있습니다.
flowchart TD
subgraph POP["모집단 · 서버가 받은 요청 전부"]
F["표본틀 · 로그에 남은 요청"]
X["로그 없이 끊긴 요청"]
end
F -->|뽑는다| S["표본"]
그림에서 끊긴 요청으로는 화살표가 안 갑니다. 표본을 아무리 늘려도 그 요청들은 한 건도 표본에 들지 않습니다.
끊긴 요청에는 오래 걸리다 타임아웃에 걸린 요청이 섞여 있습니다. 그런 요청이 통째로 빠지면 로그로 계산한 평균 응답 시간은 모평균보다 짧게 나옵니다.
치우친 표본과 무작위 표본
편향은 로그 예처럼 표본이 한 방향으로 계속 어긋나는 것입니다. 「값 열 개로 보는 모수와 통계량」에서 본 표본 오차는 표본을 키우면 줄어듭니다. 편향은 표본을 키워도 줄지 않습니다.
편향은 뽑는 방식에서도 생깁니다. 트래픽이 한산한 새벽에만 요청을 모으면 표본은 한산한 때의 요청으로 쏠립니다. 붐비는 낮에 오래 걸린 요청이 빠진 채로 평균이 나옵니다.
편향을 줄이는 기본 방법은 무작위 표본입니다. 모집단의 요청 하나하나에 뽑힐 기회를 똑같이 주는 방식입니다. 앞에서 「고르게 뽑는다」고 한 것이 바로 이 방식입니다. 요청마다 난수를 뽑아 백 건 중 한 건꼴로 남기는 것이 한 예입니다.
무작위로 뽑아도 표본틀 밖의 요청은 여전히 못 뽑습니다. 무작위 표본이 없애는 것은 뽑는 방식에서 생기는 편향입니다. 표본틀이 모집단과 어긋난 문제는 따로 남습니다.
끝이 없는 모집단
모집단이 정해진 개수의 목록이 아닐 때도 있습니다. 「이 서버의 응답 시간」에 앞으로 들어올 요청까지 넣으면 모집단은 끝이 없습니다. 아직 오지 않은 요청은 잴 수 없어서 전수 조사는 처음부터 안 됩니다.
값이 어떤 크기로 얼마나 자주 나오는지를 정한 규칙을 확률 분포라고 합니다. 응답 시간이라면 0.1초 언저리가 가장 자주 나오는 반면 3초는 드물게 나온다는 식의 규칙입니다.
끝이 없는 모집단은 값의 목록 대신 이 확률 분포로 봅니다. 모집단 역할을 하는 이 분포를 모집단 분포라고 부릅니다. 지금까지 모은 응답 시간은 그 분포에서 나온 표본입니다.
모집단인지 표본인지로 갈리는 계산
같은 값이라도 모집단 전부로 보느냐 표본으로 보느냐에 따라 계산이 달라지는 수가 있습니다. 표준편차가 대표적입니다.
값이 모집단 전부라면 평균에서 떨어진 거리를 하나씩 제곱해 더합니다. 이 제곱 합을 개수 n 으로 나눈 뒤 제곱근을 씌웁니다. 표본으로 모집단의 표준편차를 추정할 때는 n 대신 n−1 로 나눕니다. n−1 로 나누는 이 보정이 베셀 보정입니다.
n−1 로 나누는 이유는 거리를 재는 기준점에 있습니다. 표본 평균은 바로 그 표본 값들로 계산하므로 값들의 한가운데에 놓입니다. 그래서 표본 평균에서 잰 제곱 합은 모평균에서 잰 제곱 합보다 작거나 같게 나옵니다. 조금 작은 수로 나눠 그 모자람을 메웁니다.
파이썬 표준 라이브러리의 statistics 모듈은 두 계산을 다른 함수로 둡니다. 같은 값 여덟 개를 두
함수에 넣어 봅니다.
from statistics import pstdev, stdev
xs = [2, 4, 4, 4, 5, 5, 7, 9]
pstdev(xs) # 2.0 모집단 전부로 볼 때
stdev(xs) # 2.138 표본으로 볼 때
pstdev 의 p 는 모집단을 뜻하는 population 의 첫 글자입니다. 값이 여덟 개라 두 결과가 눈에 띄게
갈립니다. 값이 수천 개면 n 과 n−1 이 거의 같아서 차이가 작습니다.
배포와 실험에서 부르는 모집단
배포와 실험을 다루는 글에서도 이 낱말이 나옵니다. A/B 테스트에서 실험에 든 사용자는 표본입니다. 실험 결과를 적용하려는 전체 사용자가 모집단입니다.
카나리 배포는 새 버전을 일부 서버나 사용자에게 먼저 내보냅니다. 이 먼저 받는 무리를 카나리 모집단이라고 부르기도 합니다. 이 무리가 전체 트래픽을 닮아야 카나리에서 본 결과를 전체에 넓힐 수 있습니다.
분산 추적은 요청 하나가 여러 서비스를 거친 경로를 기록합니다. 모든 요청을 기록하면 부담이 커서 일부 요청만 남기기도 합니다. 이 샘플링에서는 받은 요청 전부가 모집단입니다. 기록을 남긴 요청이 표본입니다.
관련 항목
모집단에서 뽑아 재는 대상과 뽑는 방식
표본 · 표본틀 · 전수 조사 · 표본 조사 · 무작위 표본 · 층화 표본 · 샘플링
모집단을 요약하는 수와 그 추정량
모수 · 모평균 · 통계량 · 표본 평균 · 추정량 · 불편 추정량 · 점 추정
표본이 모집단에서 벗어나는 오차와 그 크기
표본 오차 · 편향 · 선택 편향 · 생존 편향 · 표준 오차 · 신뢰 구간
모집단을 값의 규칙으로 나타내는 분포와 정리
분포 · 확률 분포 · 모집단 분포 · 표집 분포 · 대수의 법칙 · 중심극한정리
모집단인지 표본인지에 따라 계산이 갈리는 요약 통계
평균 · 분산 · 표준편차 · 베셀 보정 · 자유도 · 요약 통계
모집단과 표본의 구도로 돌아가는 배포와 측정 기법
A-B 테스트 · 카나리 배포 · 분산 추적 · 세그먼트 · 코호트 · 응답 시간 · 로그
모집단 개념이 속하는 상위 분야
다른 이름: population · 통계 모집단