머신러닝을 위한 통계(Statistics for Machine Learning)

통계는 모델이 실제로 작동하는지, 아니면 운 좋게 맞은 것인지 구분하는 방법입니다.

유형: Build 언어: Python 선수 지식: Phase 1, Lesson 06(Probability and Distributions), 07(Bayes' Theorem) 예상 시간: 약 120분

학습 목표

  • 기술 통계(descriptive statistics), 피어슨/스피어만 상관(Pearson/Spearman correlation), 공분산 행렬(covariance matrix)을 처음부터 계산합니다.
  • 가설 검정(hypothesis test), t-검정(t-test), 카이제곱 검정(chi-squared test)을 수행하고 p-값(p-value)과 신뢰구간(confidence interval)을 올바르게 해석합니다.
  • 분포 가정(distributional assumption) 없이 어떤 지표(metric)에도 신뢰구간을 만들 수 있도록 부트스트랩 재표집(bootstrap resampling)을 사용합니다.
  • 효과 크기(effect size) 척도를 사용해 통계적 유의성(statistical significance)과 실무적 유의성(practical significance)을 구분합니다.

문제

두 모델을 학습했습니다. 모델 A는 테스트 셋(test set)에서 0.87을 기록했고, 모델 B는 0.89를 기록했습니다. 그래서 모델 B를 배포했습니다. 3주 뒤 운영 환경(production)의 지표는 이전보다 나빠졌습니다. 무슨 일이 있었을까요?

모델 B가 실제로 모델 A보다 나았던 것은 아닙니다. 0.02라는 차이는 잡음(noise)이었습니다. 테스트 셋이 너무 작았거나, 분산(variance)이 너무 컸거나, 둘 다였습니다. 개선처럼 보이는 무작위성(randomness)을 배포한 것입니다.

이런 일은 계속 일어납니다. 캐글 리더보드(Kaggle leaderboard)의 순위 뒤집힘, 재현되지 않는 논문, 몇백 개 표본만으로 우승자를 선언하는 A/B 테스트가 그 예입니다. 근본 원인은 늘 같습니다. 누군가 통계를 건너뛴 것입니다.

통계는 신호(signal)와 잡음을 구분하는 도구를 제공합니다. 차이가 실제인지, 얼마나 확신을 가져야 하는지, 결과를 신뢰하기 전에 데이터가 얼마나 필요한지 알려줍니다. 모든 머신러닝 파이프라인, 모델 비교, 실험에는 통계가 필요합니다. 통계가 없으면 그저 추측하고 있는 것입니다.

사전 테스트

2문제 · 이 강의를 시작하기 전에 얼마나 알고 있는지 확인해보세요

1.가설 검정(hypothesis test)에서 p-값(p-value)이 0.03이라는 것은 무엇을 의미하나요?

2.표본 분산(sample variance)을 계산할 때 n이 아니라 (n-1)로 나누는 이유는 무엇인가요?

0/2 답변 완료

개념

기술 통계(Descriptive Statistics): 데이터 요약

무언가를 모델링(modeling)하기 전에 데이터가 어떻게 생겼는지 알아야 합니다. 기술 통계(descriptive statistics)는 데이터셋(dataset)의 형태를 몇 개의 숫자로 압축합니다.

중심 경향 측도(measures of central tendency)는 "가운데가 어디인가?"에 답합니다.

평균(Mean):   모든 값의 합 / 개수
              mu = (1/n) * sum(x_i)

중앙값(Median): 정렬했을 때의 가운데 값
                이상치(outlier)에 강건합니다. [1, 2, 3, 4, 1000]에서는 평균이 202지만
                중앙값은 3입니다.

최빈값(Mode):  가장 자주 나오는 값
                범주형 데이터(categorical data)에 유용합니다.
                연속형 데이터에서는 드물게만 유용합니다.

평균은 균형점이고, 중앙값은 한가운데 지점입니다. 둘이 크게 다르면 분포(distribution)가 한쪽으로 치우쳐(skewed) 있다는 뜻입니다. 소득 분포(income distribution)는 억만장자 때문에 평균이 중앙값보다 훨씬 큽니다. 학습 중 손실 분포(loss distribution)는 쉬운 표본(sample) 때문에 평균이 중앙값보다 작은 경우가 많습니다.

산포도 측도(measures of spread)는 "데이터가 얼마나 퍼져 있는가?"에 답합니다.

분산(Variance):   평균으로부터의 편차 제곱(squared deviation) 평균
                  sigma^2 = (1/n) * sum((x_i - mu)^2)

표준편차(Standard deviation):  분산의 제곱근
                               sigma = sqrt(sigma^2)
                               데이터와 같은 단위(unit)라 더 해석하기 쉽습니다.

범위(Range):      max - min
                  이상치에 민감합니다. 단독으로는 거의 유용하지 않습니다.

사분위 범위(IQR): Q3 - Q1 (interquartile range)
                  데이터 가운데 50%의 범위입니다.
                  이상치에 강건합니다. 상자그림(box plot)과
                  이상치 탐지(outlier detection)에 쓰입니다.

백분위수(percentile)는 정렬된 데이터를 100개의 동일한 부분으로 나눕니다. 25 백분위수(Q1)는 값의 25%가 이 지점 아래에 있다는 뜻입니다. 50 백분위수는 중앙값이고, 75 백분위수는 Q3입니다.

지연 시간(latency) 모니터링:
  P50 = 중앙값 지연 시간            (일반적인 사용자 경험)
  P95 = 95 백분위수                 (나쁘지만 최악은 아닌 경우)
  P99 = 99 백분위수                 (꼬리 지연 시간, 흔히 중앙값의 10배 수준)

머신러닝(ML)에서는 추론 지연 시간(inference latency), 예측 확신도 분포(prediction confidence distribution), 오차 분포(error distribution)를 이해하기 위해 백분위수가 중요합니다. 평균 오차는 낮지만 P99 오차가 매우 나쁜 모델은 안전이 중요한 응용 영역(safety-critical application)에서 쓸 수 없을 수 있습니다.

표본 통계와 모집단 통계(sample vs population statistics). 표본에서 분산을 계산할 때는 n 대신 n-1로 나눕니다. 이것이 베셀 보정(Bessel's correction)입니다. 표본 평균(sample mean)이 실제 모집단 평균(true population mean)이 아니라는 사실을 보정해 줍니다. n으로 나누면 실제 분산을 체계적으로 과소평가합니다. n-1로 나누면 추정량(estimate)이 비편향(unbiased)이 됩니다.

모집단 분산: sigma^2 = (1/N) * sum((x_i - mu)^2)
표본 분산:   s^2     = (1/(n-1)) * sum((x_i - x_bar)^2)

실무에서 n이 크면, 예를 들어 표본이 수천 개라면 차이가 작습니다. n이 작으면, 예를 들어 수십 개라면 차이가 중요해집니다.

상관(Correlation): 변수가 함께 움직이는 방식

상관(correlation)은 두 변수(variable) 사이 선형 관계(linear relationship)의 세기와 방향을 측정합니다.

피어슨 상관계수(Pearson correlation coefficient)는 선형 연관성(linear association)을 측정합니다.

r = sum((x_i - x_bar)(y_i - y_bar)) / (n * s_x * s_y)

r = +1:  완전한 양의 선형 관계
r = -1:  완전한 음의 선형 관계
r =  0:  선형 관계 없음(비선형 관계는 있을 수 있음)

범위: [-1, 1]

피어슨은 관계가 선형이고 두 변수가 대체로 정규분포(normal distribution)를 따른다고 가정합니다. 이상치에 민감해서, 극단적인 점 하나가 r을 0.1에서 0.9로 끌어올릴 수도 있습니다.

스피어만 순위 상관(Spearman rank correlation)은 단조 관계(monotonic association)를 측정합니다.

1. 각 값을 순위(1, 2, 3, ...)로 바꿉니다.
2. 순위에 대해 피어슨 상관계수를 계산합니다.

스피어만은 선형뿐 아니라 모든 단조 관계를 잡아냅니다.
y = x^3이면 피어슨은 r < 1이지만 스피어만은 rho = 1입니다.

언제 무엇을 사용할까:

피어슨:    두 변수가 연속형(continuous)이고 대체로 정규분포에 가깝습니다.
           특히 선형 관계에 관심이 있습니다.
           극단적인 이상치가 없습니다.

스피어만:  서열형 데이터(ordinal data, 순위·평점 등)입니다.
           데이터가 정규분포를 따르지 않습니다.
           단조 관계이지만 선형은 아닐 수 있습니다.
           이상치가 있습니다.

황금 규칙(golden rule): 상관은 인과(causation)를 의미하지 않습니다. 아이스크림 판매량과 익사 사고 수는 둘 다 여름에 증가하기 때문에 상관이 있습니다. 모델의 정확도(accuracy)와 파라미터(parameter) 수가 상관관계가 있다고 해서, 파라미터를 추가한다고 자동으로 정확도가 좋아지는 것은 아닙니다. 과적합(overfitting)을 떠올리면 됩니다.

공분산 행렬(Covariance Matrix)

두 변수의 공분산(covariance)은 두 값이 함께 어떻게 변하는지를 측정합니다.

Cov(X, Y) = (1/n) * sum((x_i - x_bar)(y_i - y_bar))

Cov(X, Y) > 0:  X와 Y가 함께 증가하는 경향
Cov(X, Y) < 0:  X가 증가할 때 Y는 감소하는 경향
Cov(X, Y) = 0:  선형적인 동조 움직임이 없음

d개 특성(feature)이 있을 때 공분산 행렬 C는 d x d 크기의 행렬이며 C[i][j] = Cov(feature_i, feature_j)로 정의됩니다. 대각 원소 C[i][i]는 각 특성의 분산입니다.

C = | Var(x1)      Cov(x1,x2)  Cov(x1,x3) |
    | Cov(x2,x1)  Var(x2)      Cov(x2,x3) |
    | Cov(x3,x1)  Cov(x3,x2)  Var(x3)     |

성질:
  - 대칭(symmetric): C[i][j] = C[j][i]
  - 양의 준정부호(positive semi-definite): 모든 고윳값 >= 0
  - 대각(diagonal) = 분산
  - 비대각(off-diagonal) = 공분산

주성분 분석(PCA)과의 연결. PCA는 공분산 행렬을 고유분해(eigendecompose)합니다. 고유벡터(eigenvector)는 주성분(principal component), 즉 분산이 최대가 되는 방향입니다. 고윳값(eigenvalue)은 각 성분이 얼마나 많은 분산을 설명하는지 알려줍니다. Lesson 10에서 다룬 내용이지만, 이제 공분산 행렬이 왜 분해 대상인지가 보입니다. 모든 변수 쌍의 선형 관계를 담아내고 있기 때문입니다.

상관과의 연결. 상관 행렬(correlation matrix)은 표준화된 변수의 공분산 행렬입니다. 각 변수를 표준편차로 나누면 공분산이 [-1, 1] 범위로 정규화(normalize)됩니다.

가설 검정(Hypothesis Testing)

가설 검정은 불확실성(uncertainty) 아래에서 의사 결정을 내리는 틀입니다. 주장(claim)을 세우고 데이터를 모은 뒤, 데이터가 주장과 일관적인지 판단합니다.

구성 요소:

귀무가설(Null hypothesis, H0):     기본 가정, 보통 "효과가 없다"
대립가설(Alternative hypothesis, H1): 보여주고 싶은 것

예시:
  H0: 모델 A와 모델 B의 정확도는 같다.
  H1: 모델 B의 정확도가 모델 A보다 높다.

p-값(p-value)은 H0가 참이라고 가정했을 때, 관측한 데이터만큼 극단적인 데이터를 볼 확률입니다. H0가 참일 확률이 아닙니다. 이것이 통계에서 가장 흔한 오해입니다.

p-값 = P(이 정도로 극단적인 데이터 | H0가 참)

p-값 < alpha (보통 0.05)이면:
    H0를 기각합니다. 결과는 "통계적으로 유의(statistically significant)"합니다.
p-값 >= alpha이면:
    H0를 기각하지 못합니다. 증거(evidence)가 충분하지 않습니다.
    이것은 H0가 참이라는 뜻이 아닙니다.

신뢰구간(confidence interval)은 모수(parameter)에 대해 그럴듯한 값의 범위를 제공합니다.

평균에 대한 95% 신뢰구간:
    x_bar +/- z * (s / sqrt(n))

여기서 95% 신뢰도일 때 z = 1.96

해석: 이 실험을 여러 번 반복하면, 계산된 구간 중 95%가
참 평균(true mean)을 포함합니다. 이 특정 구간 안에 참 평균이 있을 확률이
95%라는 뜻이 아닙니다.

신뢰구간의 폭은 정밀도(precision)를 말해 줍니다. 넓은 구간은 불확실성이 크다는 뜻이고, 좁은 구간은 추정량이 정밀하다는 뜻입니다. 다만 데이터가 편향(biased)되어 있다면 정밀하더라도 정확(accurate)하지 않을 수 있습니다.

t-검정(t-test)

t-검정은 평균을 비교합니다. 몇 가지 변형이 있습니다.

일표본 t-검정(one-sample t-test): 모집단 평균이 가정한 값과 다른가?

t = (x_bar - mu_0) / (s / sqrt(n))

자유도(degrees of freedom) = n - 1

이표본 t-검정(독립, two-sample t-test): 두 집단의 평균이 다른가?

t = (x_bar_1 - x_bar_2) / sqrt(s1^2/n1 + s2^2/n2)

이것은 웰치의 t-검정(Welch's t-test)이며 두 집단의 분산이 같다고
가정하지 않습니다. 등분산을 가정할 특별한 이유가 없다면 항상
웰치의 검정을 사용합니다.

대응표본 t-검정(paired t-test): 측정값이 쌍(pair)으로 주어질 때 사용합니다. 예를 들어 같은 데이터 분할(split)에서 같은 모델을 평가한 경우입니다.

각 쌍에 대해 d_i = x_i - y_i를 계산합니다.
그다음 d_i 값에 대해 mu_0 = 0인 일표본 t-검정을 수행합니다.

머신러닝에서는 대응표본 t-검정이 흔합니다. 같은 10개 교차 검증(cross-validation) 폴드에서 두 모델을 모두 실행하고 점수를 쌍 단위로 비교하는 식입니다.

카이제곱 검정(Chi-squared Test)

카이제곱 검정은 관측 빈도(observed frequency)가 기대 빈도(expected frequency)와 맞는지 확인합니다. 범주형 데이터에 유용합니다.

chi^2 = sum((관측 - 기대)^2 / 기대)

예시: 언어 모델의 출력 분포가 범주(category)별 학습 분포와 맞는가?

범주        관측       기대
긍정         120        100
부정          80        100
chi^2 = (120-100)^2/100 + (80-100)^2/100 = 4 + 4 = 8

자유도가 1일 때 chi^2 = 8이면 p < 0.005입니다.
차이는 유의(significant)합니다.

머신러닝 모델을 위한 A/B 테스트(A/B Testing)

머신러닝의 A/B 테스트는 웹 A/B 테스트와 같지 않습니다. 모델 비교에는 고유한 어려움이 있습니다.

1. 동일한 테스트 셋:    두 모델은 반드시 동일한 데이터에서 평가되어야 합니다.
                       테스트 셋이 다르면 비교 자체가 무의미해집니다.

2. 여러 지표:           정확도(accuracy)만으로는 충분하지 않습니다. 정밀도(precision),
                       재현율(recall), F1, 지연 시간(latency), 공정성(fairness) 지표가
                       함께 필요합니다.

3. 분산:                점 추정량(point estimate)만 보지 말고 교차 검증이나
                       부트스트랩(bootstrap)으로 각 지표의 분산을 추정합니다.

4. 데이터 누수:         테스트 셋이 모델 선택(model selection)에 사용되었다면
                       비교가 편향됩니다. 최종 테스트 셋은 따로 떼어둡니다(hold out).

절차:

1. 지표와 유의수준(alpha = 0.05)을 정의합니다.
2. 같은 k-겹 교차 검증 분할(k-fold cross-validation split)에서 두 모델을 실행합니다.
3. 쌍을 이룬 점수를 수집합니다. [(a1, b1), (a2, b2), ..., (ak, bk)]
4. 차이를 계산합니다. d_i = b_i - a_i
5. 차이에 대해 대응표본 t-검정을 수행합니다.
6. 평균 차이가 0과 유의하게 다른지 확인합니다.
7. 평균 차이의 신뢰구간을 계산합니다.
8. 실무적 유의성 판단을 위해 효과 크기(Cohen's d)를 계산합니다.

통계적 유의성과 실무적 유의성(Statistical Significance vs Practical Significance)

결과가 통계적으로 유의하지만 실무적으로는 의미가 없을 수 있습니다. 데이터가 충분히 많으면 사소한 차이도 통계적으로 유의해집니다.

예시:
  모델 A 정확도: 0.9234
  모델 B 정확도: 0.9237
  n = 1,000,000 테스트 표본
  p-값 = 0.001

통계적으로 유의한가? 그렇습니다.
실무적으로 유의한가? 0.03%의 개선은 새 모델을 배포할
엔지니어링 비용을 정당화하지 못할 수 있습니다.

효과 크기(effect size)는 표본 크기와 독립적으로 차이의 크기를 정량화합니다.

Cohen's d = (mean_1 - mean_2) / pooled_std

d = 0.2:  작은 효과(small effect)
d = 0.5:  중간 효과(medium effect)
d = 0.8:  큰 효과(large effect)

항상 p-값과 효과 크기를 함께 보고합니다. p-값은 차이가 실제로 존재하는지를 알려주고, 효과 크기는 그 차이가 중요한지를 알려줍니다.

다중 비교 문제(Multiple Comparison Problem)

많은 가설을 검정하면 일부는 우연히 "유의"가 됩니다. alpha = 0.05로 20개를 검정하면 아무 효과가 없어도 거짓 양성(false positive)이 1개쯤 나올 것으로 기대됩니다.

P(거짓 양성이 적어도 하나) = 1 - (1 - alpha)^m

m = 20번 검정, alpha = 0.05:
P(거짓 양성) = 1 - 0.95^20 = 0.64

거짓 양성이 적어도 하나 생길 확률은 64%입니다.

본페로니 보정(Bonferroni correction): alpha를 검정 횟수로 나눕니다.

조정된 alpha = alpha / m = 0.05 / 20 = 0.0025

p-값 < 0.0025일 때만 H0를 기각합니다.
보수적이지만 단순합니다. 검정이 독립일 때 잘 작동합니다.

머신러닝에서는 여러 지표를 비교하거나, 많은 하이퍼파라미터(hyperparameter) 구성을 검정하거나, 여러 데이터셋에서 평가할 때 이 문제가 중요합니다.

부트스트랩 방법(Bootstrap Methods)

부트스트래핑(bootstrapping)은 데이터를 복원 추출(sampling with replacement)로 재표집(resampling)해 통계량(statistic)의 표집 분포(sampling distribution)를 추정합니다. 기저 분포(underlying distribution)에 대한 가정이 필요 없습니다.

알고리즘:

1. n개의 데이터 포인트가 있습니다.
2. 복원 추출로 n개의 표본을 뽑습니다. 어떤 점은 여러 번 나오고,
   어떤 점은 전혀 나오지 않습니다.
3. 이 부트스트랩 표본에서 통계량을 계산합니다.
4. B번 반복합니다. 보통 B = 1000에서 10000 사이입니다.
5. 부트스트랩 통계량의 분포가 표집 분포를 근사(approximate)합니다.

부트스트랩 신뢰구간(백분위수 방법):

B개의 부트스트랩 통계량을 정렬합니다.
95% 신뢰구간 = [2.5 백분위수, 97.5 백분위수]

머신러닝에서 부트스트랩이 중요한 이유:

- 테스트 셋 정확도는 점 추정량입니다. 부트스트랩은 신뢰구간을 제공합니다.
- 지표 분포가 정규분포라고 가정할 수 없습니다. 특히 AUC, F1, precision@k가 그렇습니다.
- 부트스트랩은 어떤 통계량에도 작동합니다. 중앙값, 두 평균의 비,
  두 모델 사이 AUC 차이 등.
- 닫힌 형태의 공식(closed-form formula)이 필요 없습니다.

모델 비교를 위한 부트스트랩:

1. 같은 테스트 셋에 대한 모델 A와 모델 B의 예측이 있습니다.
2. 각 부트스트랩 반복에서:
   a. 테스트 인덱스를 복원 추출로 재표집합니다.
   b. 재표집된 셋에서 metric_A와 metric_B를 계산합니다.
   c. diff = metric_B - metric_A를 저장합니다.
3. 차이에 대한 95% 신뢰구간:
   [diffs의 2.5 백분위수, diffs의 97.5 백분위수]
4. 신뢰구간에 0이 포함되지 않으면 차이는 유의합니다.

이 방법은 분포 가정이 없기 때문에 대응표본 t-검정보다 강건(robust)합니다.

모수 검정과 비모수 검정(Parametric vs Non-parametric Tests)

모수 검정(parametric test)은 특정 분포를 가정합니다. 보통 정규분포를 가정합니다.

t-검정:         데이터가 정규분포를 따른다고 가정합니다.
                또는 중심극한정리(CLT)에 의해 n이 크면 가능합니다.
ANOVA:          정규성과 등분산을 가정합니다.
피어슨 r:       이변량 정규성(bivariate normality)을 가정합니다.

비모수 검정(non-parametric test)은 분포 가정을 두지 않습니다.

만-휘트니 U(Mann-Whitney U):        두 집단 비교(독립 t-검정 대체)
윌콕슨 부호 순위(Wilcoxon signed-rank): 대응 데이터 비교(대응표본 t-검정 대체)
스피어만 rho:                       순위 기반 상관(피어슨 대체)
크러스컬-월리스(Kruskal-Wallis):    여러 집단 비교(ANOVA 대체)

비모수 검정을 사용할 때:

- 표본 크기가 작고(n < 30) 데이터가 명확히 비정규(non-normal)일 때.
- 서열형 데이터일 때. 평점, 순위 등.
- 제거할 수 없는 큰 이상치가 있을 때.
- 분포가 한쪽으로 크게 치우쳐(skewed) 있을 때.

모수 검정을 사용할 때:

- 표본 크기가 클 때. 중심극한정리 덕분에 검정 통계량이 근사적으로 정규가 됩니다.
- 데이터가 대체로 대칭이고 극단적인 이상치가 없을 때.
- 통계적 검정력(statistical power)이 더 필요할 때. 실제 차이를 더 잘 탐지합니다.

머신러닝 실험에서는 대개 n이 작습니다. 예를 들어 교차 검증 폴드가 5개 또는 10개입니다. 따라서 윌콕슨 부호 순위 검정 같은 비모수 검정이 t-검정보다 적절한 경우가 많습니다.

중심극한정리(Central Limit Theorem): 실무적 의미

중심극한정리(Central Limit Theorem; CLT)는 기저 모집단 분포와 무관하게, 표본 평균의 분포가 n이 커질수록 정규분포에 가까워진다는 정리입니다.

X_1, X_2, ..., X_n이 평균 mu, 분산 sigma^2을 가지는 독립 동일 분포(iid)라면:

    X_bar ~ Normal(mu, sigma^2 / n)    as n -> infinity

대부분의 경우 n >= 30이면 잘 작동합니다.
매우 치우친 분포에서는 n >= 100이 필요할 수 있습니다.

머신러닝에서 중요한 이유:

1. 집계된 지표에 대한 신뢰구간과 t-검정을 정당화합니다.
2. 개별 폴드(fold)가 크게 흔들려도 교차 검증 폴드 평균이 안정적인 추정량이 되는 이유를 설명합니다.
3. 미니배치 경사 하강법(mini-batch gradient descent)이 잘 작동하는 이유는 배치 평균 기울기가
   참 기울기(true gradient)를 근사하기 때문입니다. 중심극한정리가 작동하는 장면입니다.
4. 앙상블(ensemble) 방법은 많은 모델의 예측을 평균내어 단일 모델보다 안정적인 출력을 만듭니다.

중심극한정리가 하지 않는 것:

- 데이터 자체를 정규분포로 만들지 않습니다. 표본 평균을 정규분포에 가깝게 만듭니다.
- 분산이 무한한 두꺼운 꼬리 분포(heavy-tailed distribution, 예: 코시 분포)에는 작동하지 않습니다.
- 종속(dependent) 데이터에는 보정 없이 적용되지 않습니다. 시계열(time series)이 그 예입니다.

머신러닝 논문에서 흔한 통계 실수

  1. 학습 셋(training set)에서 평가하기. 과적합을 보장합니다. 모델이 학습 중 보지 않은 데이터를 반드시 따로 떼어둡니다.

  2. 신뢰구간 없음. 불확실성 없이 정확도 하나만 보고하면 결과가 재현 가능하거나 검증 가능하기 어렵습니다.

  3. 다중 비교 무시. 50개 구성을 검정하고 보정 없이 최고 결과만 보고하면 거짓 양성률이 부풀려집니다.

  4. 통계적 유의성과 실무적 유의성 혼동. 0.01% 정확도 개선에 대한 p-값 0.001은 의미가 없을 수 있습니다.

  5. 불균형 데이터에서 정확도 사용. 음성 클래스가 99%인 데이터셋에서는 자명한 분류기도 99% 정확도를 얻습니다. 정밀도, 재현율, F1, AUC를 함께 사용합니다.

  6. 유리한 지표만 골라 보고하기(cherry-picking). 모델이 이긴 지표만 보고하는 행위입니다. 정직한 평가는 관련 지표를 모두 보고합니다.

  7. 학습/테스트 분할 사이의 정보 누수. 분할 전에 정규화하거나, 미래 데이터를 사용해 과거를 예측하는 경우입니다.

  8. 분산 추정 없는 작은 테스트 셋. 100개 표본으로 평가하고 2% 개선을 주장하는 것은 신호가 아니라 잡음입니다.

  9. 독립이 아닌 데이터를 독립으로 가정. 같은 환자의 의료 영상이나 같은 문서의 여러 문장처럼, 집단 안의 관측치는 상관되어 있습니다.

  10. p-해킹(p-hacking). p < 0.05가 나올 때까지 검정, 부분집합, 제외 기준을 바꾸는 행위입니다. 결과는 탐색이 만들어 낸 인공물(artifact)일 뿐입니다.

만들어 보기

이번 강의에서는 다음을 구현합니다.

  1. 기술 통계 처음부터 구현하기: 평균, 중앙값, 최빈값, 표준편차, 백분위수, 사분위 범위
  2. 상관 함수: 피어슨, 스피어만, 공분산 행렬
  3. 가설 검정: 일표본 t-검정, 이표본 t-검정, 카이제곱 검정
  4. 부트스트랩 신뢰구간: 어떤 통계량에도 사용 가능하며 가정이 필요 없음
  5. A/B 테스트 시뮬레이터: 데이터를 생성하고 검정하며 1종(Type I)·2종(Type II) 오류를 확인
  6. 통계적 유의성과 실무적 유의성 비교 데모: 큰 n이 모든 것을 "유의"하게 만드는 모습을 확인

모두 mathrandom만 사용해 처음부터 구현합니다. NumPy와 SciPy는 사용하지 않습니다.

산출물 만들기

이 강의의 최종 산출물은 다음과 같습니다.

  • code/statistics.py: 기술 통계, 상관, 가설 검정, 부트스트랩, A/B 테스트 시뮬레이터 구현을 포함합니다.
  • outputs/skill-statistical-testing.md: 머신러닝 모델 비교와 실험 평가에서 올바른 통계 검정을 고르는 skill 문서입니다.

핵심 용어

용어정의
평균(Mean)값을 모두 더해 개수로 나눈 값입니다. 이상치에 민감합니다.
중앙값(Median)정렬된 데이터의 가운데 값입니다. 이상치에 강건합니다.
표준편차(Standard deviation)분산의 제곱근입니다. 원래 단위로 산포(spread)를 측정합니다.
백분위수(Percentile)주어진 비율의 데이터가 그 아래에 놓이는 값입니다.
사분위 범위(IQR)Q3 - Q1로 정의되며, 가운데 50%의 산포를 나타냅니다.
피어슨 상관(Pearson correlation)두 변수 사이 선형 연관성을 측정합니다. 범위는 [-1, 1]입니다.
스피어만 상관(Spearman correlation)순위를 사용해 단조 연관성을 측정합니다.
공분산 행렬(Covariance matrix)모든 특성 쌍의 공분산을 담은 행렬입니다.
귀무가설(Null hypothesis)효과나 차이가 없다는 기본 가정입니다.
p-값(p-value)귀무가설이 참일 때 이 정도로 극단적인 데이터를 볼 확률입니다.
신뢰구간(Confidence interval)주어진 신뢰 수준에서 모수의 그럴듯한 값 범위입니다.
t-검정(t-test)평균이 유의하게 다른지 검정합니다. t-분포를 사용합니다.
카이제곱 검정(Chi-squared test)관측 빈도가 기대 빈도와 다른지 검정합니다.
효과 크기(Effect size)표본 크기와 독립적인 차이의 크기입니다. Cohen's d가 흔히 사용됩니다.
본페로니 보정(Bonferroni correction)거짓 양성을 통제하기 위해 유의수준을 검정 횟수로 나눕니다.
부트스트랩(Bootstrap)복원 추출 재표집으로 표집 분포를 추정합니다.
1종 오류(Type I error)거짓 양성입니다. H0가 참인데 기각하는 경우입니다.
2종 오류(Type II error)거짓 음성입니다. H0가 거짓인데 기각하지 못하는 경우입니다.
통계적 검정력(Statistical power)거짓인 H0를 올바르게 기각할 확률입니다. 검정력 = 1 - 2종 오류율입니다.
중심극한정리(Central limit theorem)표본 크기가 커질수록 표본 평균이 정규분포에 가까워진다는 정리입니다.
모수 검정(Parametric test)데이터가 특정 분포를 따른다고 가정하는 검정입니다. 보통 정규분포를 가정합니다.
비모수 검정(Non-parametric test)분포 가정을 두지 않는 검정입니다. 순위나 부호를 사용합니다.

더 읽을거리

실습 코드

이 강의의 실습 코드 1개

statistics
Code

산출물

이 강의에서 생성된 프롬프트, 스킬, 코드 산출물 1개

skill-statistical-testing

Choose the right statistical test for comparing ML models and evaluating experiments

Skill

확인 문제

3문제 · 모두 맞추면 완료 표시가 가능합니다

1.alpha = 0.05로 20개의 서로 다른 모델 구성(configuration)을 검정했습니다. 거짓 양성(false positive)이 적어도 하나 나올 대략적인 확률은 얼마인가요?

2.모델 A가 100만 개 테스트 표본에서 0.9234, 모델 B가 0.9237을 기록했고 p-값 = 0.001입니다. 무엇을 결론내려야 하나요?

3.두 머신러닝 모델을 비교할 때 부트스트랩(bootstrap)이 대응표본 t-검정(paired t-test)보다 갖는 장점은 무엇인가요?

0/3 답변 완료