math
CHAPTER 43 / 45
읽기 약 2분
FUNCTION
통계 기초: 평균·중앙값·표준편차
핵심 개념
평균·중앙값·최빈값·분산·표준편차 — 사용자 분석·이상치 탐지·표준화의 수학.
본문
중심 경향 — 평균·중앙값·최빈값
import numpy as np
from collections import Counter
data = [1, 2, 2, 3, 4, 5, 5, 5, 100] # 100은 이상치
# 평균
mean = np.mean(data)
print(f"평균: {mean:.2f}") # 14.11 (이상치 영향 큼)
# 중앙값
median = np.median(data)
print(f"중앙값: {median:.1f}") # 4.0 (이상치 영향 적음)
# 최빈값
mode = Counter(data).most_common(1)[0][0]
print(f"최빈값: {mode}") # 5 (가장 자주 등장)
# 언제 어느 것?
# - 평균: 정규분포 + 이상치 없음
# - 중앙값: 비대칭 분포 또는 이상치 있음 (소득, 응답시간 등)
# - 최빈값: 카테고리형 (가장 인기 있는 옵션)분산과 표준편차
# 분산 = 평균과의 차이의 제곱의 평균
# 표준편차 = √분산
data = [1, 2, 3, 4, 5]
mean = np.mean(data)
variance = np.mean([(x - mean)**2 for x in data])
std = np.sqrt(variance)
print(f"분산: {variance:.2f}") # 2.0
print(f"표준편차: {std:.2f}") # 1.41
# numpy 직접
print(np.var(data)) # 2.0
print(np.std(data)) # 1.41
# 의미
# 평균만으로는 데이터 모양 모름
data1 = [4, 5, 5, 5, 6] # 표준편차 작음 (밀집)
data2 = [1, 3, 5, 7, 9] # 표준편차 큼 (분산)
print(f"data1 std: {np.std(data1):.2f}") # 0.63
print(f"data2 std: {np.std(data2):.2f}") # 2.83
# 평균은 둘 다 5정규화 vs 표준화
# 정규화 (Min-Max): [0, 1] 범위로 압축
# 표준화 (Z-score): 평균 0, 표준편차 1로 변환
import numpy as np
data = np.array([100, 200, 300, 400, 500, 1000])
# 정규화
def min_max_normalize(arr):
return (arr - arr.min()) / (arr.max() - arr.min())
# 표준화
def z_score_standardize(arr):
return (arr - arr.mean()) / arr.std()
print("원본:", data)
print("정규화:", min_max_normalize(data))
print("표준화:", z_score_standardize(data))
# 사용처:
# - 정규화: 신경망 입력 (0~1 권장)
# - 표준화: 거리 기반 알고리즘 (KNN, SVM)이상치 탐지 — Z-score
import numpy as np
# Z-score = (값 - 평균) / 표준편차
# |Z| > 3 → 이상치 (정규분포에서 0.27%)
data = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 100, 200])
mean = data.mean()
std = data.std()
z_scores = (data - mean) / std
print("Z-scores:", z_scores)
outliers = data[np.abs(z_scores) > 2]
print(f"이상치 (|Z|>2): {outliers}")
# [100 200]
# IQR 방식 — 비정규분포에 강건
def detect_outliers_iqr(data):
q1, q3 = np.percentile(data, [25, 75])
iqr = q3 - q1
lower = q1 - 1.5 * iqr
upper = q3 + 1.5 * iqr
return data[(data < lower) | (data > upper)]
print(f"IQR 이상치: {detect_outliers_iqr(data)}")실전 — 사용자 체류 시간 분석
import numpy as np
import matplotlib.pyplot as plt
# 1000명의 페이지 체류 시간 (초)
np.random.seed(42)
durations = np.concatenate([
np.random.lognormal(mean=2.0, sigma=0.5, size=950), # 일반 사용자
np.random.lognormal(mean=4.0, sigma=0.3, size=50), # 5% 헤비 사용자
])
# 통계
print(f"평균: {durations.mean():.1f}초 (이상치 영향 큼)")
print(f"중앙값: {np.median(durations):.1f}초")
print(f"표준편차: {durations.std():.1f}초")
print(f"P95: {np.percentile(durations, 95):.1f}초")
print(f"P99: {np.percentile(durations, 99):.1f}초")
# 시각화
fig, axes = plt.subplots(1, 2, figsize=(12, 4))
axes[0].hist(durations, bins=50)
axes[0].axvline(durations.mean(), color='red', label='Mean')
axes[0].axvline(np.median(durations), color='green', label='Median')
axes[0].set_xlabel('체류 시간 (초)')
axes[0].set_ylabel('빈도')
axes[0].legend()
axes[0].set_title('원본 분포')
# 로그 변환 후 분포
log_durations = np.log(durations)
axes[1].hist(log_durations, bins=50)
axes[1].set_xlabel('log(체류 시간)')
axes[1].set_title('로그 변환 — 정규분포에 가까워짐')
plt.tight_layout()
plt.show()실전 — 성능 모니터링
# 응답 시간 데이터
import numpy as np
response_times = np.random.lognormal(mean=2.0, sigma=0.5, size=10000)
# 표준 모니터링 지표
metrics = {
'avg': np.mean(response_times),
'median': np.median(response_times),
'p50': np.percentile(response_times, 50),
'p95': np.percentile(response_times, 95),
'p99': np.percentile(response_times, 99),
'p99.9': np.percentile(response_times, 99.9),
'max': np.max(response_times),
'std': np.std(response_times),
}
for name, value in metrics.items():
print(f"{name:>10}: {value:>8.2f}ms")
# SLO 위반 비율
slo_threshold = 100 # 100ms 이내 요구
violations = np.mean(response_times > slo_threshold) * 100
print(f"\nSLO 위반: {violations:.2f}%")다음 챕터
CH.44 "A/B 테스트의 수학" — p-value와 통계적 유의성.
AI 프롬프트
🤖 AI에게 잘 물어보는 법 — 모델·전략별 프롬프트
Claude
무료: Sonnet 4.6 / Pro $20/mo: Opus 4.6
내 모니터링 데이터의 평균/중앙값/P95/P99를 비교 분석해서 SLO 임계값 + 이상치 탐지 룰을 추천해줘.
ChatGPT
무료: GPT-5.5 / Plus $20/mo: GPT-5.5 Pro
한국 인기 모니터링 도구의 통계 지표 사용 패턴 5가지를 비교해줘.
Gemini
무료: 2.5 Flash / Pro $19.99/mo: 3.1 Pro
내 사용자 행동 데이터에서 평균과 중앙값 차이로 발견 가능한 인사이트 Top 10을 시각화해줘.
Grok
무료: Grok 4.1 / SuperGrok $30/mo
2026년 SRE 실무에서 평균 vs 백분위수 중심 모니터링 트렌드를 솔직히 알려줘.
⭐ 이것만 기억하세요
통계 기초: 평균·중앙값·표준편차는 이 3가지만 확실히 잡으세요
1.평균은 이상치에 민감, 중앙값은 강건 — 비대칭 데이터(소득, 응답시간)에는 중앙값 + 백분위수
2.표준편차는 데이터의 흩어짐 — 평균만으로는 분포 모양 모름
3.다음 챕터 CH.44에서 A/B 테스트 — p-value와 통계적 유의성 검정
공유하기
진행도 43 / 45