평균
고친 사람 github-actions[bot]
평균은 값 여러 개를 하나의 수로 줄여 줍니다. 값을 모두 더해 개수로 나눈 수가 그 하나입니다. 수백 건을 한눈에 견주고 싶을 때 이 수를 씁니다. 줄이는 동안 유난히 크거나 작은 값은 묻힙니다.
쉽고 빠른 이해
평균은 값 여럿을 대표하는 수 하나를 뽑아 줍니다. 요청 천 건의 응답 시간을 「0.2초쯤」이라고 말할 수 있게 해 주는 수입니다.
이게 없으면 값을 하나씩 다 봐야 합니다. 어제와 오늘 중 어느 쪽이 느렸는지 견주려면 천 건 대 천 건을 맞대야 합니다. 대표하는 수가 하나 있으면 두 수만 견주면 됩니다.
- 값을 모두 더합니다
- 값의 개수로 나눕니다
- 나온 수를 그 묶음의 대표로 씁니다
대가는 정보가 사라진다는 것입니다. 아주 느린 몇 건은 나머지에 섞여 평균 안에서 안 보입니다. 그래서 성능을 볼 때는 평균 하나만 보지 않고 가운데 값이나 느린 쪽 끝을 같이 봅니다.
상세
학급 성적표를 떠올리면 됩니다. 스물다섯 명의 점수를 한 줄로 늘어놓으면 이 반이 잘 봤는지 한눈에 안 들어옵니다. 그래서 점수를 다 더해 인원수로 나눈 수 하나를 반 평균이라고 부릅니다.
평균은 값 여러 개를 하나의 대표값으로 줄인 수입니다. 그냥 평균이라고 하면 값을 모두 더해 개수로 나눈 산술평균을 가리킵니다. 응답 시간 네 건이 0.1초, 0.2초, 0.1초, 0.4초라면 평균은 0.2초입니다.
이 절은 먼저 평균을 어떻게 셈하고 그 수가 어떤 성질을 갖는지 봅니다. 이어서 평균이 무엇을 가리는지, 그래서 어떤 수를 곁들여 보는지 봅니다. 마지막으로 평균의 갈래와 평균을 다룰 때 어긋나기 쉬운 대목을 봅니다.
더해서 개수로 나눈다
셈은 두 단계입니다. 값을 모두 더하고, 더한 값의 개수로 나눕니다. 값이 몇 개든 절차가 같아서 코드로도 두 줄입니다.
xs = [10, 20, 30, 40]
sum(xs) / len(xs) # 25.0
나눗셈에 쓰는 개수는 더한 값의 개수입니다. 값이 하나도 없으면 나눌 수가 없어서 평균도 없습니다. 빈 목록을 그대로 넣으면 0 으로 나누게 되니, 셈하기 전에 개수가 0 인지 보는 줄이 필요합니다.
평균에는 눈에 띄는 성질이 하나 있습니다. 각 값에서 평균을 뺀 차이를 모두 더하면 0 이 됩니다. 위 네 값이라면 -15, -5, 5, 15 를 더해 0 입니다. 평균은 값들이 양쪽으로 똑같이 벌어져 있는 무게중심입니다.
그래서 값 하나만 바뀌어도 평균은 따라 움직입니다. 모든 값이 평균에 조금씩 들어가 있기 때문입니다. 이 성질이 다음 소절에서 볼 문제를 만듭니다.
평균이 가리는 것
모든 값이 들어간다는 말은 유난히 큰 값 하나가 전체를 끌어올린다는 말이기도 합니다. 서버 응답 시간이 그런 값입니다. 대부분은 빠른데 가끔 한 건이 크게 느립니다.
응답 시간 열 건을 재 봤다고 합시다. 아홉 건은 0.1초에서 0.2초 사이이고 한 건만 3.7초입니다. 이 열 건의 평균은 0.5초입니다.
xychart-beta
title "응답 시간 열 건과 그 평균"
x-axis [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
y-axis "초" 0 --> 4
bar [0.1, 0.1, 0.2, 0.1, 0.2, 0.1, 0.2, 0.1, 0.2, 3.7]
line [0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5]
막대가 각 건의 응답 시간이고 가로로 뻗은 선이 평균입니다. 그림에서 볼 것은 선이 막대 열 개 중 아홉 개보다 위에 있다는 점입니다. 평균 0.5초는 실제로 아무도 겪지 않은 시간입니다.
값을 크기순으로 늘어놓았을 때 한가운데 오는 값을 중앙값이라고 합니다. 위 열 건의 중앙값은 0.15초입니다. 느린 한 건은 평균을 다섯 배 가까이 끌어올리지만 중앙값은 못 건드립니다.
성능을 볼 때 평균 하나로 끝내지 않는 까닭이 이것입니다. 전체를 크기순으로 늘어놓고 아래에서 몇 번째쯤인지를 말하는 수가 백분위수입니다. 가장 느린 한 건은 평균에는 거의 안 보이지만 위쪽 백분위수에는 그대로 드러납니다.
이렇게 나머지에서 멀찍이 떨어진 값을 이상치라고 부릅니다. 이상치가 섞인 묶음에서는 평균이 대표 노릇을 못 합니다.
값들이 어떻게 퍼져 있는지 보려면 분포를 그대로 그립니다. 구간마다 몇 건이 들어갔는지를 막대로 쌓아 보이는 그림이 히스토그램입니다. 퍼진 폭을 수 하나로 재고 싶으면 평균에서 얼마나 벌어져 있는지를 재는 표준편차를 함께 봅니다.
네 갈래 평균
평균이라고 부르는 셈이 하나가 아닙니다. 무엇을 더하느냐에 따라 갈립니다.
| 이름 | 셈하는 법 | 쓰는 데 |
|---|---|---|
| 산술평균 | 값을 더해 개수로 나눈다 | 대부분의 경우 |
| 가중평균 | 값마다 무게를 곱해 더하고 무게의 합으로 나눈다 | 묶음마다 건수가 다를 때 |
| 기하평균 | 값을 모두 곱한 뒤 개수만큼의 제곱근을 낸다 | 성장률처럼 곱해서 쌓이는 값 |
| 조화평균 | 값을 뒤집어 더한 뒤 그 결과를 다시 뒤집는다 | 속도처럼 나눗셈으로 얻은 값 |
넷이 따로 있는 까닭은 값의 성격이 다르기 때문입니다. 갈 때와 올 때의 속도를 산술평균으로 내면 왕복 평균 속도와 어긋납니다. 왕복에 걸린 시간으로 되짚어 보면 조화평균이 맞습니다.
시간에 따라 흐르는 값에는 이동 평균을 씁니다. 최근 몇 건만 창처럼 잘라 그 안에서 평균을 내고, 새 값이 들어올 때마다 가장 오래된 값을 빼고 새 값을 넣습니다. 감시 화면의 들쭉날쭉한 선을 부드럽게 만들 때 이 셈을 씁니다.
평균의 평균
이미 평균이 난 수들을 다시 평균 내는 어긋남이 잦습니다. 묶음마다 건수가 다르면 그 셈이 틀립니다.
서버 두 대를 예로 들겠습니다. 서버 A 는 90건을 처리했고 그 평균이 0.1초입니다. 서버 B 는 10건을 처리했고 평균이 1.0초입니다.
| 셈하는 법 | 결과 |
|---|---|
| 두 평균을 다시 평균 낸다 | 0.55초 |
| 100건 전체로 되짚는다 | 0.19초 |
두 평균을 그냥 더해 둘로 나누면 0.55초가 나옵니다. 100건 전체로 되짚으면 9초와 10초를 더해 100으로 나눈 0.19초입니다. 10건짜리 서버가 90건짜리 서버와 같은 무게를 받아서 생긴 차이입니다.
그래서 이미 평균이 난 수를 다시 묶을 때는 건수를 무게로 준 가중평균을 씁니다. 감시 도구가 분마다 낸 평균을 시간 단위로 접을 때 같은 함정을 만납니다.
기준을 정할 때의 평균
평균은 무언가를 재는 기준을 세울 때도 씁니다. 하루의 길이는 날마다 조금씩 다릅니다. 그래서 여러 날의 길이를 평균 낸 평균 태양일을 하루의 기준으로 삼았습니다.
1초의 길이도 여기서 나왔습니다. 평균 태양일을 86400 으로 나눈 값이 한때의 1초였습니다. 윤초는 이렇게 정한 시계와 실제 지구 자전이 어긋날 때 끼워 넣는 1초입니다.
알고리즘을 잴 때의 평균
복잡도를 말할 때 나오는 평균의 경우도 같은 셈입니다. 다만 더하는 대상이 측정값이 아니라 들어올 수 있는 입력들입니다. 입력마다 걸리는 단계 수를 모아 그 평균을 봅니다.
이때는 입력이 어떤 비율로 들어오는지를 먼저 가정해야 평균이 정해집니다. 그 가정이 실제와 다르면 평균의 경우도 실제와 다릅니다.
평균이 대표 노릇을 하는 조건
값들이 한 덩이로 몰려 있으면 평균이 그 덩이를 잘 가리킵니다. 사람의 키나 시험 점수가 그렇습니다. 꼬리가 길거나 봉우리가 둘이면 평균은 어느 쪽도 아닌 수가 됩니다.
합계를 구할 때는 평균이 언제나 맞습니다. 평균에 건수를 곱하면 합계가 그대로 나오기 때문입니다. 하루 평균 요청 수로 한 달 용량을 잡는 셈이 그 쓰임입니다.
사용자 한 사람이 겪는 시간을 말할 때는 평균이 맞지 않습니다. 그 사람에게는 자기 요청 한 건의 시간만 있습니다. 이럴 때는 꼬리 지연처럼 느린 쪽 끝을 보여 주는 값을 봅니다.
관련 항목
평균과 나란히 분포를 요약하는 통계량
중앙값 · 최빈값 · 분산 · 표준편차 · 백분위수 · 사분위수 · 요약 통계 · 분포
평균의 하위 갈래
가중평균 · 기하평균 · 조화평균 · 이동 평균 · 절사평균 · 지수 이동 평균
평균이 가리는 값을 드러내는 지표
꼬리 지연 · 높은 분위수 · 분위수 · 이상치 · 히스토그램 · 긴 꼬리
평균으로 요약하는 성능 지표
응답 시간 · 지연 · 처리량 · 평균 복구 시간 · 평균 고장 시간 · 서비스 수준 목표
평균을 도구로 쓰는 분야
데이터 분석 · 성능 · 모니터링 · 용량 계획 · 탐색적 자료 분석
평균을 바탕으로 정한 시간 단위
평균 태양일 · 윤초 · 협정 세계시 · 세계시 · 원자시
알고리즘 분석에서 평균을 쓰는 개념
다른 이름: average · mean · 산술평균