데이터 분포에 맞는 중심 경향치 선택 가이드
산술평균·기하평균·조화평균·중앙값·최빈값의 적용 조건과 이상치, 분포, 연산 규칙에 따른 선택 기준을 정리한다.
2026-08-14 · 최초 발행 2024-04-29
대표값은 데이터의 연산 규칙에서 출발한다
대표값을 하나로 요약하는 일은 분석의 출발점이면서 의사결정 근거를 만드는 과정이다. 중심 경향(Central Tendency)은 분포에서 전형적 위치를 나타내는 통계량의 묶음이며, 데이터 분포·척도·이상치·가감 또는 승제 연산 규칙에 따라 선택이 달라진다.
산술평균(Arithmetic Mean)은 (1/n) Σ x_i로 정의한다. 선형 결합, 즉 가감 과정과 대칭 분포, 이상치가 적은 상황에 적합하다.
기하평균(Geometric Mean)은 (Π x_i)^(1/n)이다. 곱셈 과정이나 성장률, 로그정규 분포를 다룰 때 쓰며, 로그 연산의 일관성을 위해 모든 값이 양수여야 한다.
조화평균(Harmonic Mean)은 n / Σ (1/x_i)로 계산한다. 비율과 속도의 평균에 적합하지만, 0 또는 음수가 들어가면 정의와 안정성 문제가 생긴다.
중앙값(Median)은 누적분포의 50번째 분위수다. 이상치가 있거나 비대칭적인 분포에서 강건성(robustness)이 높다. 최빈값(Mode)은 가장 자주 출현한 값으로, 범주형 데이터를 요약하는 데 맞는다. 연속형 데이터라면 구간화(bin) 설계가 필요하다.
계산 전에 확인할 데이터 조건
히스토그램·QQ-plot·왜도·첨도 지표로 분포의 정규성과 비대칭성을 먼저 진단한다. 동시에 범주형과 연속형, 비율·비차·구간·명목 척도를 구분해 허용되는 연산을 판단해야 한다.
이상치 영향은 Cook’s distance, IQR 규칙, MAD 등으로 관리한다. 결측값과 무한값의 제거 또는 대체 전략도 정하고, 평균의 정의역 제약인 ≤0, =0 여부를 검증한다.
가감적 과정에는 산술평균을, 승제적 과정에는 기하평균을 맞춘다. 조화평균은 역수 평균이라는 조화성에 맞는 경우에 적용한다. 로그 또는 Box-Cox 변환 뒤 평균을 구하는 방식도 연산 규칙을 일관되게 유지하는 방법이다.
가중 평균을 쓸 때는 정의역과 스케일을 점검한다. 특히 기하평균과 조화평균에서 이 확인이 필요하다. 그룹별 집계는 결합법칙도 살펴야 한다. 산술평균은 가중합으로 결합하기 쉽지만, 기하평균과 조화평균은 원시값에 접근하는 편이 권장된다.
선택한 이유, 대체안, 제약사항은 메타데이터로 남긴다. 전처리·선택·검증을 파이프라인으로 만들고 테스트 자동화까지 연결해야 결과를 반복해서 재현할 수 있다.
업무 맥락에 따라 달라지는 선택
포트폴리오의 연복리 수익률처럼 금융 수익률과 성장률을 다룰 때는 기하평균을 적용한다. 로그정규 근사에서는 산술평균으로 인한 과대추정을 피할 수 있다.
왕복 시간이나 처리율처럼 네트워크와 제조 공정의 속도를 평균낼 때는 조화평균이 느린 구간의 영향을 적절히 반영한다. 고객 응답시간과 결제 금액처럼 긴 꼬리와 이상치가 존재하는 데이터는 중앙값과 절사평균(참고지표)을 함께 보고할 수 있다.
정상 운영과 대칭 분포를 가정한 매출 단가, 품질 지표에는 산술평균을 사용한다. 트림 또는 윈저라이즈로 이상치 영향을 억제할 수 있다. 범주 선호도와 A/B 선택은 최빈값으로 대표 선택을 추정하며, 연속형 모드는 커널 밀도 추정 또는 구간화 뒤 산출한다.
지표별 계산·운영 특성
| 지표 | 성능(계산비용) | 확장성(스트리밍/분산) | 일관성(분포/연산규칙) | 안정성(이상치 민감도) | 운영 편의(해석/커뮤니케이션) |
|---|---|---|---|---|---|
| 산술평균 | 매우 높음 O(n) | 매우 높음 | 정규·가감 과정에 높음 | 낮음 | 매우 높음 |
| 기하평균 | 높음 O(n) + log | 높음(로그 합 축약) | 로그정규·승제 과정에 높음(양수 조건) | 중간 | 높음 |
| 조화평균 | 높음 O(n) + 역수 | 높음 | 비율/속도에 높음(0 배제) | 낮음~중간 | 중간 |
| 중앙값 | 중간(O(n) 선택 알고리즘) | 높음(샘플링/approx 가능) | 비대칭·순서척도에 높음 | 매우 높음 | 높음 |
| 최빈값 | 중간(빈도표) | 높음(맵리듀스) | 범주형에 매우 높음 | 데이터 의존 | 중간 |
주: “성능”은 단순 반복 연산 기준이며, “안정성”은 이상치 민감도 관점에서 정의한다.
선택 조건을 따라가는 판단 흐름
기하평균은 x_i ≤ 0가 있으면 로그 기반 해석을 할 수 없다. 분석 맥락에서 0을 실패 또는 소멸로 간주한다면 GM=0으로 보고할 수 있지만, 일관성을 위해 중앙값이나 산술평균으로 대체하고 근거를 명시하는 편이 권장된다.
조화평균은 x_i = 0 또는 부호 혼재 시 정의할 수 없다. 0을 제외할 수 없다면 중앙값 또는 가중 산술평균을 사용한다. 연속형 최빈값은 구간화 방식에 따라 결과가 달라지므로 bin 폭이나 커널 선택 근거를 기록해야 한다.
재현 가능한 산출 흐름 만들기
입력 단계에서는 데이터셋, 척도 정의, 도메인 규칙(가감/승제/비율), 품질 기준(결측/이상치 허용 한계)을 준비한다.
처리 단계에서는 타입·범위·단위·중복과 결측값·무한값을 점검한다. 히스토그램·왜도·QQ-plot으로 정규·로그정규·꼬리를 판단하고, 양수·0·음수 포함 여부를 확인한다. 이후 판단 흐름을 적용해 대표값을 선택하며, 필요하면 절사·윈저라이즈 평균을 보조지표로 병행한다. 부트스트랩과 신뢰구간 계산, 민감도 분석으로 불확실성도 산정한다.
출력에는 대표값뿐 아니라 선택 근거, 제약과 예외 처리, 신뢰구간 또는 변동성, 재현 코드와 환경을 포함한다.
안전하게 중심 경향치를 계산하는 Python 예시
전제조건:
- Python 3.10+, numpy 1.26+, scipy 1.11+, pandas 2.1+
import numpy as np
import pandas as pd
from scipy import stats
def drop_bad(x):
x = np.asarray(x, dtype=float)
x = x[np.isfinite(x)]
return x
def arithmetic_mean(x):
x = drop_bad(x)
return x.mean()
def geometric_mean(x, allow_zero_as_zero=False):
x = drop_bad(x)
if np.any(x < 0):
raise ValueError("기하평균: 음수 포함으로 정의 불가")
if np.any(x == 0):
if allow_zero_as_zero:
return 0.0
raise ValueError("기하평균: 0 포함으로 로그 기반 해석 불가")
return stats.gmean(x)
def harmonic_mean(x):
x = drop_bad(x)
if np.any(x <= 0):
raise ValueError("조화평균: 0 또는 음수 포함으로 정의 불가")
return stats.hmean(x)
def median(x):
x = drop_bad(x)
return np.median(x)
def mode_value(x, bins=None):
x = drop_bad(x)
if bins is None:
# 범주형/이산형 가정
vals, counts = np.unique(x, return_counts=True)
return vals[np.argmax(counts)]
# 연속형: 구간화 기반 최빈 구간의 중앙값 반환
hist, edges = np.histogram(x, bins=bins)
idx = np.argmax(hist)
return 0.5 * (edges[idx] + edges[idx+1])
# 예시
data = [10, 12, 11, 13, 1000, np.nan, 9]
print("산술평균:", arithmetic_mean(data))
print("중앙값:", median(data))
try:
print("기하평균:", geometric_mean(data))
except ValueError as e:
print("기하평균 예외:", e)
산술평균은 누적합과 카운트로 O(1) 메모리의 스트리밍 평균을 만들 수 있다. 기하평균은 로그합을, 조화평균은 역수합을 축적한다. 대규모 데이터에서 중앙값은 t-digest 또는 Greenwald–Khanna 알고리즘으로 근사할 수 있으며, 대규모 범주의 최빈값에는 Count-Min Sketch 같은 확률적 요약을 도입할 수 있다.
비율 데이터에 조화평균을 적용하면 산술평균 대비 과대추정 오차가 1030%p 감소할 수 있으며, 변동성이 높을수록 효과가 커진다. 로그정규 수익률에 기하평균을 적용하면 연평균 수익률 과대평가를 13%p 줄일 수 있다. 긴 꼬리 분포에서 중앙값을 채택하면 대표값 변동폭이 IQR 기준 40~80% 감소한다.
분포와 척도에 맞는 대표값을 보고하면 해석 오류와 재작업을 최소화할 수 있다. 핵심은 특정 평균을 관성적으로 고르는 일이 아니라, 전처리·진단·선택·검증과 예외 처리를 하나의 운영 절차로 정렬하는 데 있다.