Skip to main content

확률과 통계

확률과 통계(Probability & Statistics)는 데이터의 불확실성을 정량화하고, 데이터로부터 결론을 도출하는 ML의 핵심 기반입니다.

학습 목표

  • 확률의 기본 개념과 조건부 확률을 이해합니다.
  • 주요 확률 분포(정규, 베르누이, 다항)의 특성을 파악합니다.
  • 베이즈 정리(Bayes’ Theorem)의 원리와 ML 활용을 이해합니다.
  • 기술 통계량과 가설 검정의 기초를 학습합니다.

왜 중요한가

ML 모델의 예측은 본질적으로 확률적입니다. Naive Bayes 분류기는 베이즈 정리를 직접 활용하고, 로지스틱 회귀는 클래스 소속 확률을 출력하며, GMM은 가우시안 혼합 분포를 가정합니다.

핵심 개념

기술 통계 (Descriptive Statistics)

import numpy as np
import pandas as pd

data = np.array([23, 25, 28, 30, 22, 27, 35, 29, 24, 26])

# 중심 경향 측정
print(f"평균(Mean): {np.mean(data):.1f}")        # 26.9
print(f"중앙값(Median): {np.median(data):.1f}")   # 26.5

# 산포도 측정
print(f"분산(Variance): {np.var(data):.1f}")      # 14.5
print(f"표준편차(Std): {np.std(data):.1f}")        # 3.8

# pandas로 종합 통계
df = pd.DataFrame({"값": data})
print(df.describe())
통계량수식의미ML 활용
평균(1/n)sum(x_i)중심 위치결측치 대체, 정규화
분산(1/n)sum((x_i - mean)^2)흩어진 정도특성 중요도, PCA
공분산(1/n)sum((x_i - mean_x)(y_i - mean_y))두 변수의 관계PCA, 상관분석
상관계수cov(X,Y) / (std_X * std_Y)선형 관계 강도특성 선택, EDA

확률 분포 (Probability Distribution)

import numpy as np
import matplotlib.pyplot as plt
from scipy import stats

# 정규 분포 (가우시안)
x = np.linspace(-4, 4, 100)
plt.plot(x, stats.norm.pdf(x, 0, 1), label="표준 정규 분포")
plt.fill_between(x, stats.norm.pdf(x, 0, 1), alpha=0.3)
plt.title("정규 분포 (Normal Distribution)")
plt.xlabel("값")
plt.ylabel("확률 밀도")
plt.legend()
plt.show()
분포유형ML 활용관련 알고리즘
정규 분포연속데이터 가정, 이상치 판별Gaussian NB, GMM
베르누이 분포이산이진 분류 확률Bernoulli NB
다항 분포이산텍스트 분류 (단어 빈도)Multinomial NB
포아송 분포이산이벤트 횟수 모델링Poisson 회귀

베이즈 정리 (Bayes’ Theorem)

**사전 확률(Prior)**과 **우도(Likelihood)**를 결합하여 **사후 확률(Posterior)**을 계산합니다.
P(A|B) = P(B|A) * P(A) / P(B)
  • P(A|B): 사후 확률 — B가 관측된 후 A의 확률
  • P(B|A): 우도 — A가 참일 때 B를 관측할 확률
  • P(A): 사전 확률 — B를 관측하기 전 A의 확률
  • P(B): 증거 — B의 전체 확률
# 예시: 스팸 메일 필터
# P(스팸|"무료") = P("무료"|스팸) * P(스팸) / P("무료")

p_spam = 0.3           # 사전 확률: 전체 메일 중 스팸 비율
p_free_given_spam = 0.8  # 우도: 스팸 중 "무료" 포함 비율
p_free_given_ham = 0.1   # 정상 메일 중 "무료" 포함 비율

# 전체 "무료" 확률
p_free = p_free_given_spam * p_spam + p_free_given_ham * (1 - p_spam)

# 사후 확률 계산
p_spam_given_free = (p_free_given_spam * p_spam) / p_free
print(f'"무료"가 포함된 메일이 스팸일 확률: {p_spam_given_free:.2%}')
# 77.42%
Naive Bayes와의 연결: Naive Bayes 분류기는 베이즈 정리를 직접 적용합니다. “Naive”는 특성 간 독립을 가정하여 계산을 단순화한다는 뜻입니다.

조건부 확률과 독립

# 결합 확률 vs 조건부 확률 시뮬레이션
np.random.seed(42)
n = 10000

# 두 동전 던지기 (독립 사건)
coin1 = np.random.choice([0, 1], size=n)  # 0=뒷면, 1=앞면
coin2 = np.random.choice([0, 1], size=n)

# 독립 사건: P(A and B) = P(A) * P(B)
p_both_heads = np.mean((coin1 == 1) & (coin2 == 1))
print(f"두 동전 모두 앞면: {p_both_heads:.4f}")  # ~0.25

# 조건부 확률: P(A|B) = P(A and B) / P(B)
mask = coin2 == 1
p_coin1_given_coin2 = np.mean(coin1[mask] == 1)
print(f"동전2 앞면일 때 동전1 앞면: {p_coin1_given_coin2:.4f}")  # ~0.50

중심극한정리 (Central Limit Theorem)

표본의 크기가 충분히 크면, 모집단의 분포와 관계없이 표본 평균은 정규 분포에 가까워집니다.
# 균등 분포에서 추출한 표본 평균의 분포
sample_means = []
for _ in range(1000):
    sample = np.random.uniform(0, 10, size=30)  # 균등 분포
    sample_means.append(np.mean(sample))

# 표본 평균은 정규 분포를 따름
plt.hist(sample_means, bins=30, density=True, alpha=0.7)
plt.title("중심극한정리: 표본 평균의 분포")
plt.xlabel("표본 평균")
plt.ylabel("확률 밀도")
plt.show()

AI/ML에서의 활용

개념ML 활용관련 레퍼런스
베이즈 정리Naive Bayes 분류기Gaussian NB
정규 분포이상치 탐지, 가우시안 혼합 모델GMM
최대우도추정(MLE)로지스틱 회귀 파라미터 추정로지스틱 회귀
가설 검정통계 모델 유의성 판단OLS
확률은 알려진 모집단에서 특정 사건이 발생할 가능성을 계산합니다 (연역적). 통계는 관측된 데이터로부터 모집단의 특성을 추론합니다 (귀납적). ML은 주로 통계적 접근을 따릅니다.
빈도주의는 사전 확률 없이 데이터만으로 추론합니다 (p-값 기반). 베이즈 통계는 사전 지식을 결합합니다. ML에서는 정규화(regularization)가 베이즈적 사전 확률의 역할을 합니다.

체크리스트

  • 평균, 분산, 표준편차의 의미를 설명할 수 있다
  • 정규 분포의 특성을 설명할 수 있다
  • 베이즈 정리를 적용하여 사후 확률을 계산할 수 있다
  • 조건부 확률과 독립의 개념을 구분할 수 있다

다음 문서