표준편차
고친 사람 github-actions[bot]
표준편차는 값들이 평균에서 얼마나 멀리 흩어져 있는지를 수 하나로 알려 줍니다. 평균이 같은 두 묶음도 이 수로 서로 갈립니다. 응답 시간이 고르게 나오는지 들쭉날쭉한지를 견줄 때 씁니다.
쉽고 빠른 이해
표준편차는 값들이 평균 둘레에 얼마나 넓게 퍼져 있는지를 수 하나로 알려 줍니다. 평균이 똑같이 0.2초인 서버 두 대가 있다고 해 봅니다. 한 대는 늘 0.2초 언저리입니다. 다른 한 대는 0.1초와 0.3초를 오갈 수 있습니다.
이 수가 없으면 두 서버는 평균만으로 똑같아 보입니다. 퍼진 폭을 수로 적어 두면 어느 쪽이 들쭉날쭉한지 한눈에 견줄 수 있습니다.
- 값들의 평균을 구합니다
- 값마다 평균에서 떨어진 거리를 제곱하고, 그 제곱들의 평균을 냅니다
- 그 결과에 제곱근을 씌워 원래 단위로 되돌립니다
대가는 튀는 값에 약하다는 것입니다. 멀리 떨어진 값 하나가 이 수를 크게 부풀립니다. 한쪽으로만 길게 늘어진 값들에서는 퍼진 모양을 제대로 그려 주지 못합니다.
상세
두 반의 수학 시험 평균이 똑같이 70점이라고 합시다. 한 반은 거의 모두 65점에서 75점 사이입니다. 다른 반은 30점짜리와 100점짜리가 뒤섞여 있습니다. 평균 하나만 들으면 두 반이 같은 반처럼 들립니다.
표준편차는 값들이 평균에서 얼마나 멀리 흩어져 있는지를 재는 수입니다. 값마다 평균에서 떨어진 거리를 모아, 평균적으로 얼마나 떨어져 있는지를 하나로 냅니다. 위의 첫 반은 표준편차가 작고 둘째 반은 큽니다.
이 절은 먼저 평균이 같은 두 서버를 표준편차가 어떻게 가르는지 봅니다. 이어서 표준편차를 계산하는 순서와 그 순서의 이유를 봅니다. 마지막으로 이 수를 읽는 법과, 이 수가 흐려지는 경우를 봅니다.
평균이 같은 두 서버
서버 두 대의 응답 시간을 네 번씩 쟀습니다. 두 서버의 평균은 똑같이 0.2초입니다.
| 잰 값 (초) | 평균 | 표준편차 | |
|---|---|---|---|
| 서버 A | 0.19 · 0.21 · 0.19 · 0.21 | 0.2 | 0.01 |
| 서버 B | 0.1 · 0.3 · 0.1 · 0.3 | 0.2 | 0.1 |
두 서버는 마지막 열에서 갈립니다. 서버 A 는 매번 비슷한 시간에 답합니다. 서버 B 는 매번 크게 오르내립니다. 그래서 두 서버의 표준편차가 열 배 차이 납니다.
평균은 「보통 이만큼 걸린다」를 말합니다. 표준편차는 「그 보통에서 이만큼 벗어난다」를 말합니다. 둘을 같이 적어야 값의 묶음 하나가 머릿속에 그려집니다.
평균에서 떨어진 거리
값에서 평균을 뺀 수를 편차라고 합니다. 평균보다 큰 값은 편차가 양수이고, 작은 값은 음수입니다. 흩어진 정도는 이 편차들이 얼마나 큰가로 정해집니다.
편차를 그냥 더해서는 흩어짐을 잴 수 없습니다. 편차를 모두 더하면 언제나 0 이 되기 때문입니다. 평균보다 큰 쪽과 작은 쪽이 같은 크기로 벌어져 있어서 서로 지워집니다.
그래서 부호를 없애야 합니다. 표준편차는 편차를 제곱하는 길을 고릅니다. 음수도 제곱하면 양수가 되므로 더해도 지워지지 않습니다.
편차에서 표준편차까지의 계산
값 여덟 개로 계산을 끝까지 따라가 봅니다. 분마다 센 오류 건수가 2, 4, 4, 4, 5, 5, 7, 9 입니다. 여덟 값을 더하면 40 이라서 평균은 5 입니다.
값마다 5 를 빼면 편차가 나옵니다. 그 편차를 다시 제곱합니다.
| 값 | 편차 | 편차의 제곱 |
|---|---|---|
| 2 | −3 | 9 |
| 4 | −1 | 1 |
| 4 | −1 | 1 |
| 4 | −1 | 1 |
| 5 | 0 | 0 |
| 5 | 0 | 0 |
| 7 | 2 | 4 |
| 9 | 4 | 16 |
| 합 | 0 | 32 |
편차 열의 합은 0 입니다. 제곱 열의 합은 32 입니다. 제곱을 거치자 서로 지워지던 편차가 쌓이기 시작합니다.
제곱의 합 32 를 개수 8 로 나누면 4 입니다. 이렇게 편차의 제곱을 평균 낸 수를 분산이라고 부릅니다. 분산 4 에 제곱근을 씌운 2 가 이 여덟 값의 표준편차입니다.
파이썬 표준 라이브러리의 statistics 모듈로 계산하면 같은 값이 나옵니다.
from statistics import mean, pstdev
xs = [2, 4, 4, 4, 5, 5, 7, 9]
mean(xs) # 5
pstdev(xs) # 2.0
pstdev 는 방금 손으로 한 계산을 합니다. 이름 앞의 p 가 무엇인지는 아래 「모집단과 표본」에서
봅니다.
제곱했다가 제곱근을 씌우는 이유
분산에서 멈추지 않고 제곱근까지 가는 이유는 단위입니다.
응답 시간을 초로 쟀다면 분산의 단위는 초의 제곱입니다. 「0.01 제곱초만큼 흩어져 있다」는 말은 머릿속에 안 그려집니다. 제곱근을 씌우면 단위가 초로 돌아와 평균과 나란히 놓고 읽을 수 있습니다.
부호를 없애는 길은 제곱 말고도 있습니다. 편차의 절댓값을 평균 내는 수를 평균 절대 편차라고 부릅니다. 그래도 제곱 쪽이 널리 쓰이는 것은 계산을 다루기 쉬워서입니다.
그 쉬움이 가장 잘 보이는 것이 합의 분산입니다. 요청 하나가 두 구간을 차례로 지난다고 해 봅니다. 구간마다 걸리는 시간은 잴 때마다 달라서, 구간마다 분산이 따로 있습니다.
두 구간의 시간이 서로 영향을 주지 않으면, 전체 시간의 분산은 두 구간 분산의 합입니다. 잴 때마다 달라지는 두 양을 더할 때, 둘이 서로 영향을 주지 않으면 언제나 분산끼리 더해집니다.
표준편차끼리는 더해지지 않는다는 뜻이기도 합니다. 표준편차가 3 인 구간과 4 인 구간을 이으면 분산은 9 와 16 을 더한 25 입니다. 전체 표준편차는 7 이 아니라 25 의 제곱근인 5 입니다.
제곱은 대가도 남깁니다. 편차가 두 배면 제곱은 네 배입니다. 그래서 평균에서 멀리 떨어진 값일수록 분산에서 차지하는 비중이 커집니다. 이 성질은 아래 「튀는 값 하나의 무게」에서 다시 봅니다.
모집단과 표본
같은 값 여덟 개로도 표준편차가 둘로 갈릴 수 있습니다. 계산하는 값이 전부인지 일부인지에 따라 나누는 수가 개수 n 이 되기도 하고 n−1 이 되기도 합니다.
알고 싶은 대상 전체를 모집단이라고 합니다. 그중 일부를 뽑아 잰 것은 표본입니다. 한 달 동안 들어온 요청 전부가 모집단이라면, 그중 천 건을 골라 잰 응답 시간이 표본입니다.
값이 모집단 전부라면 앞의 계산처럼 개수 n 으로 나눕니다. 표본으로 모집단의 표준편차를 추정할 때는 n 대신 n−1 로 나눕니다. 이 보정을 베셀 보정이라고 부릅니다.
n−1 로 나누는 이유는 표본 평균이 그 표본 값들 쪽으로 끌려 있기 때문입니다. 표본 평균은 바로 그 값들로 계산한 수라서, 모집단의 평균보다 그 값들에 더 가깝게 놓입니다. 그래서 표본 평균에서 잰 편차의 제곱 합은 모집단 평균에서 잰 것보다 작게 나옵니다. 조금 작은 수로 나눠 그 모자람을 메웁니다.
앞의 여덟 값을 표본으로 보고 계산하면 2 보다 조금 큰 값이 나옵니다. statistics 모듈에서는 stdev
가 n−1 로 나누는 계산을 합니다.
from statistics import pstdev, stdev
pstdev(xs) # 2.0
stdev(xs) # 2.138...
값이 여덟 개일 때는 2.0 과 2.14 로 갈립니다. 값이 수천 개면 n 과 n−1 이 거의 같아서 차이가 눈에
안 띕니다. pstdev 의 p 는 모집단을 뜻하는 population 의 첫 글자입니다. 도구마다 두 계산을
다른 함수로 두는 경우가 많으니, 어느 쪽인지 이름을 보고 고릅니다.
종 모양 분포에서 읽는 법
평균과 표준편차 두 수만 알아도 값들이 어디에 있는지 추정할 수 있습니다. 그 추정은 값들이 특정한 모양으로 퍼져 있을 때만 맞습니다.
값들이 어디에 얼마나 몰려 있는지를 분포라고 합니다. 앞의 오류 건수에서는 4 건에 값 셋이 몰려 있습니다. 2 건과 9 건에는 하나씩뿐입니다.
평균을 가운데 두고 좌우가 같은 종 모양의 분포를 정규 분포라고 부릅니다. 가운데가 가장 높고 양끝으로 갈수록 낮아집니다. 사람의 키나 같은 것을 여러 번 잰 측정 오차가 이런 모양에 가깝습니다.
아래 그림의 가로축은 평균에서 표준편차 몇 개만큼 떨어졌는지입니다. 세로축은 그 근처에 값이 얼마나 몰리는지입니다.
xychart-beta
title "정규 분포의 종 모양"
x-axis "평균에서 떨어진 표준편차 수" ["-3", "-2.5", "-2", "-1.5", "-1", "-0.5", "0", "0.5", "1", "1.5", "2", "2.5", "3"]
y-axis "몰리는 정도" 0 --> 0.4
line [0.004, 0.018, 0.054, 0.130, 0.242, 0.352, 0.399, 0.352, 0.242, 0.130, 0.054, 0.018, 0.004]
그림에서 값은 가운데 0 근처에 몰립니다. 표준편차 둘을 넘어가면 거의 비어 갑니다. 이 모양에서는 평균에서 표준편차 몇 개 안에 값이 얼마나 드는지가 정해져 있습니다.
| 범위 | 그 안에 드는 값 |
|---|---|
| 평균 ± 표준편차 1개 | 셋 중 둘쯤 |
| 평균 ± 표준편차 2개 | 스무 개 중 열아홉쯤 |
| 평균 ± 표준편차 3개 | 천 개 중 997개쯤 |
세 비율을 백분율로 적으면 68, 95, 99.7 이라서 이 셋을 묶어 68-95-99.7 규칙이라고 부릅니다. 평균이 100 이고 표준편차가 10 인 정규 분포라면, 값의 셋 중 둘이 90 과 110 사이에 듭니다.
평균에서 표준편차 몇 개
앞 소절 그림의 가로축을 잣대로 쓰면 값 하나가 얼마나 드문지 잴 수 있습니다.
값이 평균에서 표준편차 몇 개만큼 떨어졌는지를 표준 점수라고 합니다. 값에서 평균을 빼고 표준편차로 나눠 얻습니다. 앞의 오류 건수는 평균이 5 이고 표준편차가 2 라서, 9 건의 표준 점수는 2 입니다.
어느 분에 오류가 13 건 나왔다면 표준 점수는 4 입니다. 오류 건수가 종 모양에 가깝다면, 평균에서 표준편차 셋 넘게 떨어진 값은 천 개 중 셋이 안 됩니다. 13 건은 그보다도 멀리 있습니다.
이렇게 나머지에서 멀찍이 떨어진 값을 이상치라고 부릅니다. 평소와 다른 값을 가려낼 때 이 계산을 씁니다. 분마다 센 오류 건수의 표준 점수가 3 을 넘으면 알리는 식입니다.
튀는 값 하나의 무게
제곱이 남긴 대가를 숫자로 보겠습니다. 응답 시간을 열 건 쟀습니다. 아홉 건은 0.1초에서 0.2초 사이입니다. 한 건만 3.7초입니다.
| 묶음 | 평균 | 표준편차 |
|---|---|---|
| 아홉 건만 | 약 0.14초 | 약 0.05초 |
| 3.7초 건을 더한 열 건 | 0.5초 | 약 1.07초 |
한 건이 들어오자 표준편차가 스무 배 넘게 커졌습니다. 평균도 움직였지만 표준편차만큼 크게 움직이지는 않았습니다.
표준편차만 크게 뛴 이유는 제곱입니다. 열 건의 평균 0.5초에서 3.7초 건의 편차는 3.2 이고, 제곱하면 10.24 입니다. 나머지 아홉 건의 편차 제곱을 모두 더해도 1.16 이라서, 한 건이 분산의 거의 전부를 차지합니다.
튀는 값에 덜 흔들리는 흩어짐의 잣대도 있습니다. 값을 크기순으로 늘어놓고 가운데 절반이 차지하는 폭을 재는 사분위 범위가 그중 하나입니다. 맨 끝의 값이 더 멀어져도 이 폭은 그대로입니다.
값을 크기순으로 늘어놓았을 때 한가운데 오는 값을 중앙값이라고 합니다. 값마다 중앙값에서 떨어진 거리를 재고, 그 거리들의 중앙값을 다시 뽑은 수가 중앙 절대 편차입니다. 이 수도 튀는 값에 덜 흔들립니다.
한쪽으로 긴 꼬리
표준편차가 값들의 모양을 잘못 그리는 경우가 있습니다. 응답 시간이 대표적입니다.
응답 시간은 대개 종 모양이 아닙니다. 대부분은 짧게 끝납니다. 드물게 아주 오래 걸리는 건이 오른쪽으로 길게 늘어집니다. 이렇게 한쪽 끝이 길게 끌리는 모양을 긴 꼬리라고 부릅니다.
이런 값들에서는 평균 ± 표준편차가 엉뚱한 범위를 가리킵니다. 앞 소절의 열 건은 평균이 0.5초이고 표준편차가 약 1.07초라서, 평균에서 표준편차를 빼면 −0.57초가 나옵니다. 응답 시간은 0 보다 작을 수 없으니 이 범위는 값들의 모양과 맞지 않습니다.
「셋 중 둘」 같은 비율도 종 모양에서만 맞습니다. 그래서 응답 시간은 표준편차 대신 백분위수로 적는 일이 많습니다. 요청 백 건 가운데 아흔아홉 건이 몇 초 안에 끝났는지를 바로 말해 주기 때문입니다.
표준편차를 믿기 전에 값의 모양부터 보려면 히스토그램을 그립니다. 히스토그램은 값의 범위를 여러 구간으로 나눠, 구간마다 든 값의 개수를 막대로 세운 그림입니다. 봉우리가 하나이고 좌우가 엇비슷하면 평균과 표준편차 두 수가 그 묶음을 잘 요약합니다.
측정값의 흔들림
같은 것을 여러 번 잴 때도 표준편차를 씁니다. 대표적인 쓰임이 성능 측정입니다.
같은 벤치마크를 여러 번 돌려도 결과가 매번 조금씩 다릅니다. 이 흔들림을 적을 때 평균과 함께 표준편차를 적습니다. 「초당 1200 건, 표준편차 30 건」처럼 둘을 같이 써야 그 결과가 얼마나 흔들리는지 읽힙니다.
바꾸기 전과 바꾼 뒤의 평균 차이가 표준편차보다 작으면, 그 차이는 흔들림 속에 묻혔을 수 있습니다. 차이가 흔들림을 넘는지 제대로 가리려면 통계적 유의성을 따지는 검정을 씁니다.
평균이 크게 다른 두 묶음의 흔들림을 견줄 때는 표준편차를 평균으로 나눈 변동 계수를 봅니다. 평균 1000 에서 표준편차 10 은 평균의 100분의 1 만큼 흔들린 것입니다. 평균 10 에서 표준편차 10 은 평균만큼 흔들린 것이라 같은 10 이어도 무게가 다릅니다.
관련 항목
표준편차와 나란히 분포를 요약하는 통계량
평균 · 중앙값 · 최빈값 · 백분위수 · 사분위수 · 요약 통계
표준편차와 같은 흩어짐을 다른 계산으로 재는 척도
분산 · 평균 절대 편차 · 사분위 범위 · 중앙 절대 편차 · 범위 · 변동 계수
표준편차를 바탕으로 계산하는 지표
편차 · 표준 점수 · 표준 오차 · 신뢰 구간 · 68-95-99.7 규칙 · 식스 시그마
표준편차를 읽을 때 전제로 두는 분포 모양
분포 · 정규 분포 · 긴 꼬리 · 치우침 · 히스토그램 · 확률 분포
표준편차를 계산할 때 가르는 두 대상과 보정
모집단 · 표본 · 베셀 보정 · 자유도 · 불편 추정량
표준편차로 흔들림을 적는 측정과 감시
벤치마크 · 응답 시간 · 꼬리 지연 · 이상치 · 이상 탐지 · 모니터링 · 통계적 유의성
표준편차가 속하는 상위 분야
다른 이름: standard deviation · 표준 편차 · stddev