Lemma
수학, 거꾸로
도입 · 확률 하나 vs 모양 전체

확률 하나는 하나의 추측이다. 분포는 불확실성 전체의 모양이다.

불확실한 일에 대해 가장 그럴듯한 결과만 알면, 사실 거의 모른다. “앞면이 나올 가능성이 가장 높다”, “앞면이 99%다”, “앞면이 51%다” — 셋 다 “가장 그럴듯한 답”은 같지만, 그 셋 사이의 차이가 이야기 전체다. 올바른 대상은 가장 그럴듯한 결과도, 기대되는 결과도 아니다 — 분포다. 불확실성의 모양 전체, 가능한 결과 하나하나와 그 결과가 가진 무게. 모델이 예측하는 양, 포트폴리오가 가진 양, 이미지 히스토그램이 세는 양 — 대부분은 수가 되기 전에 분포다.

아래 바를 끌어보자 — 결과 다섯, 가중치 다섯, 자동 정규화로 확률이 된다. 평균이 움직이고 퍼짐이 늘고 줄어드는 걸 본다. 같은 수, 네 모양 — 균등, 집중, 치우침, 쌍봉. 이 모듈이 다루는 건 그 모양이다.

도구 사양
정의

의 가능한 결과들에 확률을 배분한다. 이산이면 p(x)p(x)Σp(x)=1Σ p(x) = 1을 만족한다. 연속이면 f(x)f(x)f(x)dx=1∫ f(x) dx = 1를 만족한다. 이 그 중심을, 이 그 중심으로부터의 평균 제곱 거리를 요약한다.

적용

불확실성에 모양이 있을 때 — 단일 값이 아니라. ML의 출력, 금융의 수익률 분포, 압축의 색 , bin, 텍스트의 단어 빈도. 어떤 양 뒤에 분포가 있다는 걸 알아챈 순간, 그 분포의 올바른 요약 (평균? 분산? 엔트로피? 분위?) 도 자연스럽게 결정된다.

한계

두 개의 큰 함정. (1) 변수와 그것의 분포를 혼동 — X는 알 수 없는 양이고, p(x)는 각 값이 얼마나 그럴듯한지 말해주는 규칙이다. (2) 질량밀도의 혼동 — 연속 분포의 한 점에서 확률은 0이고, 그 자리에는 밀도만이 있다. 이 두 구분이 깨끗해지면, 나머지 확률 이론은 그 위에 정리돼 얹힌다.

위젯 — 분포 모양 실험실
평균 E[X]3.00
분산 Var0.88
퍼짐 σ0.94
10.0620.1930.5040.1950.06μ = 3.00확률결과값 x
프리셋
최대 p0.50
활성 결과5
1.00
결과 다섯 개, 값 x = 1, 2, 3, 4, 5. 가중치를 끌면 위젯이 정규화해서 바의 합이 1이 된다. 균등을 누르면 각 p = 0.20, 평균은 3에 떨어지고 분산은 2로 가장 크다. 집중을 누르면 확률이 3 근처에 모이고, 평균은 여전히 3, 분산은 줄어든다. 치우침을 누르면 작은 값이 흔하고 큰 값은 드물어 평균이 3의 왼쪽으로 옮긴다. 쌍봉을 누르면 확률이 1과 5로 갈리고, 평균은 다시 3이지만 분산이 크게 뛴다. 같은 평균, 전혀 다른 모양. 그 차이가 분포가 올바른 대상이고 평균 하나만으로는 부족한 이유다.
흐름
1

분포는 가능한 결과에 확률을 배분한다

분포는 총 확률 1을 가능한 결과들에 나눠주는 규칙이다. 모델이 “이 이미지는 고양이 0.6, 강아지 0.3, 새 0.1”이라고 말하면, 모델은 세 라벨 위의 분포를 만들어낸 것이다. 합이 1이어야 하는 이유는 — 결과 중 정확히 하나는 일어나기 때문이다. 확률은 제약된 예산이지, 자유로운 점수가 아니다.

순진한 질문 — 확률이 얼마인가? — 은 답 하나를 요구하고, 그 답도 한 수인 경우가 많다. 더 깊은 질문 — 분포 전체가 무엇인가? — 은 나머지 그림을 준다. 모델이 가능하다고 본 모든 결과, 각각에 얼마만큼의 확률을 썼는지. 분포는 한 결과를 특권화하지 않을 때 남는 것이다.

2

이산 분포 — 범주, 단어, 클래스

가장 단순한 경우는 결과가 유한할 때다. 동전 던지기는 둘. 주사위는 여섯. softmax 출력은 클래스 수만큼. 문서 안 한 단어는 어휘 크기만큼. 분포 전체는 (결과, 확률) 쌍의 목록이다 — 결과에서 [0, 1]로 가는 함수, 그 값을 다 더하면 1.

이 함수의 이름이 pmf다. “질량”이라는 말은 확률을 이산 칸에 나눠주는 실제 질량으로 그릴 수 있어서다. 결과 x 위 막대의 높이가 p(x). 위의 위젯은 pmf 편집기 — 가중치를 끌 때마다 총합은 그대로 두고 질량이 재배분된다.

import numpy as np

# A discrete distribution is a list of (outcome, probability) pairs that
# sum to 1. The 'outcome' can be a label, a class, a number, anything — but
# the probabilities have to add up to one because *something* must happen.
outcomes = ["cat", "dog", "bird"]
probs    = [0.6,   0.3,   0.1]
assert abs(sum(probs) - 1.0) < 1e-9

# Sampling: pick one outcome with the given probability. The law of large
# numbers says long-run sample frequencies converge to these probabilities.
rng = np.random.default_rng(0)
draws = rng.choice(outcomes, size=10_000, p=probs)
[(o, (draws == o).mean()) for o in outcomes]
# → [('cat',  0.6021),
#    ('dog',  0.2978),
#    ('bird', 0.1001)]
# Each empirical frequency ≈ the probability we set. A distribution is what
# the long-run frequency *is*; a single draw is a finite, noisy peek at it.
3

기댓값 — 질량의 중심

결과가 수일 때, 분포에는 평균이 있다. 기댓값 E[X]=Σxp(x)E[X] = Σ x · p(x)은 가중 평균 — 바 차트의 질량 중심이다. 위젯을 결과 1..5의 균등으로 끌어보자 — 평균은 3, 정중앙. 치우침으로 끌어 작은 값이 흔하고 큰 값이 드물게 만들면, 평균은 무거운 쪽으로 옮긴다.

“기대”라는 이름은 살짝 오해 소지가 있다. X{0,1000}X ∈ \{0, 1000\}, 두 결과의 확률이 같다면, 기댓값은 500 — 그런데 이 값은 X절대 가지지 못하는 값이다. 평균은 분포의 요약이지 한 번 뽑힐 값의 예측이 아니다. 독립 시행을 길게 반복했을 때 그 평균이 수렴하는 값 (큰 수의 법칙) — 그래서 E라는 이름을 받는다.

# Expected value E[X] of a numerical random variable.
# Outcomes need to be numbers (else there is no mean) — labels do not.
xs = np.array([1, 2, 3, 4, 5])
ps = np.array([0.05, 0.20, 0.50, 0.20, 0.05])  # peaked at 3, sums to 1
assert abs(ps.sum() - 1.0) < 1e-9

mu = (xs * ps).sum()
# → 3.00   the weighted average; equals the center of mass of the bars.

# Variance: weighted average of (x − μ)². Spread, in squared units.
var = (ps * (xs - mu)**2).sum()
sigma = var ** 0.5
(mu, var, sigma)
# → (3.0, 0.6, 0.7746)

# Sanity check by direct sampling:
rng = np.random.default_rng(0)
draws = rng.choice(xs, size=200_000, p=ps)
(draws.mean(), draws.var(), draws.std())
# → (2.9997, 0.6003, 0.7747)
# Same numbers, with the sampling noise you would expect at N = 200k.
#
# Two distributions can share a mean and disagree wildly on variance.
# Same μ, different shape — and the shape is what drives risk in finance,
# calibration in ML, and bits-per-symbol in compression.
4

분산 — 중심만이 아니라 퍼짐

평균이 같으면서 모양이 전혀 다른 분포 두 개가 있을 수 있다. 위젯의 집중쌍봉은 평균이 둘 다 3 — 그런데 집중은 결과 3 자체에 확률을 쌓고, 쌍봉은 1과 5에 확률을 가른다. 평균만으로는 둘을 구별할 수 없다 — 이 그 일을 한다.

Var[X]=Σp(x)(xμ)2Var[X] = Σ p(x) · (x − μ)² — 평균으로부터의 제곱 거리의 가중 평균. 제곱하는 이유는 양의 편차와 음의 편차가 서로 상쇄되지 않게 하기 위해서다. 그 제곱근, σ=Varσ = √Var표준편차 — 같은 아이디어를 X의 원래 단위로 복원한 양.

분산은 분포의 2차 요약이다. 금융에서는 리스크의 작업 정의, ML에서는 추정기 동요의 한계, 물리에서는 열적 잡음부터 측정 오차까지 어디에나. 평균도 분산도 같은 두 분포는 여전히 같은 분포는 아니지만, 평균만 일치할 때보다 둘 사이의 간극은 훨씬 좁다.

5

연속 분포 — 질량이 아니라 밀도

실세계 분포 대부분은 유한한 칸이 아니라 실수선 위에 있다. 하루치 주가 수익률, 측정 오차, 응답 시간, 비트 정밀도 아래 픽셀 밝기 — 이들은 연속체 위에 살고, 이산 질량으로는 다룰 수 없다 — 가능한 값이 비가산이라 한 값의 확률이 0이기 때문이다.

올바른 대상은 f(x)f(x)다. 밀도는 확률이 아니지만f(x)가 1을 넘을 수 있다 — x 근처에서 확률이 쌓이는 비율이다. 확률은 밀도를 구간에 적분해서 나온다: P(aXb)=abf(x)dxP(a ≤ X ≤ b) = ∫_a^b f(x) dx. 실수선 전체에 대한 적분은 1.

여기서 분포가 적분 과 만난다. 이산 분포의 기댓값은 합 — Σxp(x)Σ x · p(x). 연속 분포의 기댓값은 적분 — xf(x)dx∫ x · f(x) dx. 같은 아이디어, 다른 기계 — 적분이 합의 연속 판이고, 그것이 비율을 누적한다는 우리가 거리와 현재가치에서 본 그 일이다. 분포는 연속이 되는 순간 미적분을 상속받는다.

6

이게 어디에 나타나나 — 같은 모양, 세 필러

분포는 Lemma가 이미 다루는 수학 대부분의 타입이다. 어떤 수가 불확실한 자리마다 그 아래에 분포가 앉아 있다. 세 필러, 한 구조.

ml     : softmax는 클래스 위의 분포; calibration은 예측 분포와 실제
       빈도를 비교한다.
graphics : 색 히스토그램은 픽셀 값 위의 분포; 그 분포의 엔트로피가
         압축 한계를 정한다.
finance  : 수익률은 분포에서 뽑힌다; 리스크는 한 수익률이 아니라
         그 분포의 성질이다.

자신 있게 틀리기 — softmax는 라벨 위의 분포를 만들어내지, 진실 증명서를 만들지 않는다. 확률 합이 1인 이유는 어떤 라벨은 골라야 하기 때문이고, 각 바의 높이는 모델의 베팅이지 지식이 아니다.

모델 보정 — 보정은 예측 분포와 실제 빈도 사이의 간극이다. 신뢰도 다이어그램은 묻는다 — 모델이 p = 0.8이라고 한 bin에서 실제 정답률은 80%였는가? 보정은 분포의 성질이지 단일 예측의 성질이 아니다.

TF-IDF — 단어 빈도는 문서마다의 어휘 위 분포. 문서를 비교한다는 건 분포를 비교하는 일 — 코사인 유사도, KL 발산, BM25는 모두 다른 이름을 쓴 분포 비교 도구다.

이미지 압축 — 히스토그램은 픽셀 값 위의 분포이고, 그 위의 가 독립 인코딩에서 픽셀당 비트의 하한이다. 압축 이야기는 분포와 엔트로피가 함께 짠 직물이다.

포트폴리오 리스크 — 리스크는 최악의 경우가 아니라 수익률 분포의 성질이다. 분산, 공분산, 수익률이 평균 둘레로 흩어지는 모양 — 그게 포트폴리오 결정의 입력이지, 평균 하나가 아니다.

같은 대상, 다른 필러 — 응용 다섯 개가 받침 모듈 없이 이미 분포 언어를 쓰고 있었다. 이제 그 다섯이 한 모듈을 공유한다.

# Where this module shows up — five existing applications, one shape.

# (1) ML: softmax output is a distribution over labels.
def softmax(logits):
    e = np.exp(logits - logits.max())   # max-subtract for numerical safety
    return e / e.sum()
softmax(np.array([2.0, 1.0, 0.1]))
# → array([0.659, 0.242, 0.099])   sums to 1, is a distribution

# (2) Graphics: a color histogram is a distribution over pixel values.
img = np.array([0, 0, 0, 1, 1, 2, 2, 2, 2, 3], dtype=int)
counts = np.bincount(img, minlength=4)
hist = counts / counts.sum()
# → array([0.3, 0.2, 0.4, 0.1])   sums to 1, is a distribution

# (3) Finance: a return distribution is the input to risk.
# Two assets with identical mean but different spread.
rets_A = np.array([0.04, 0.05, 0.06])         # tight
rets_B = np.array([-0.10, 0.05, 0.20])        # wide
[(r.mean(), r.std()) for r in (rets_A, rets_B)]
# → [(0.05, 0.0081), (0.05, 0.1224)]
# Same expected return, very different distribution. *That gap is risk.*
# Portfolio variance, calibration gap, histogram entropy — all three start
# from a distribution and ask different questions of the same object.

분포는 불확실성 전체의 모양이다. 이산이든 연속이든 규칙은 같다 — 모든 결과에 대한 확률의 합 (또는 적분) 이 1. 평균이 그 중심을 요약하고, 분산이 그 퍼짐을 요약하고, 모양 전체가 나머지를 담는다. 현대 수학에서 “수”라 부르는 대부분은 그보다 먼저 분포다.

exercises · 손으로 풀기
1손으로 정규화하기계산기 없이

모델이 raw 점수 (로짓) [2.0,1.0,0.1][2.0, 1.0, 0.1]을 낸다. softmax로 분포로 바꿔라 — pi=e(xi)/Σe(xj)p_i = e^(x_i) / Σ e^(x_j). 소수 둘째 자리까지. 합이 1임을 확인하라.

2평균은 같고 분산은 다르고계산기 없이

결과 1,2,31, 2, 3의 이산 분포 둘. A: p=[0,1,0]p = [0, 1, 0]. B: p=[0.5,0,0.5]p = [0.5, 0, 0.5]. 각각의 평균과 분산을 구하고, 어느 쪽이 더 큰지 차원별로 말해라.

3밀도는 확률이 아니다

연속 분포의 밀도가 x[0,1]x ∈ [0, 1]에서 f(x)=2xf(x) = 2x이고 그 밖에서 00이다. 이게 유효한 밀도임 (적분이 1) 을 확인하라. P(X0.5)P(X ≤ 0.5)을 구하라. 그리고 f(0.5)f(0.5)의 값을 짚고, 왜 이 값 자체가 X=0.5X = 0.5의 확률이 아닌지 설명하라.

4분포 알아보기

§ 6에서 든 다섯 응용 각각에 대해, 확률변수가 무엇인지, 결과 공간이 무엇인지, 분포가 이산인지 연속인지 적어라.

용어집 · 이 페이지에서 쓰임 · 10
distribution·분포
_불확실성의 모양_. 가능한 결과들에 확률이 어떻게 배분돼 있는가. 이산 분포는 각 결과에 수를 매긴다 — `P(X = "고양이") = 0.6, P(X = "강아지") = 0.3, P(X = "새") = 0.1`. 연속 분포는 구간 위에 *밀도*를 배분한다 — 정확히 한 점에 확률은 없고, 구간 위에서만 있다. 이산은 합이, 연속은 적분이 1이어야 한다 — _무엇인가는 일어나야_ 하니까. 확률 하나는 수 한 개이고, 분포는 그 뒤에 있는 모양 전체다. 모델이 예측하는 양, 자산이 낼 수 있는 수익, 픽셀이 가질 수 있는 값 — 대부분은 단일 수가 아니라 분포다. 그리고 그 분포의 *퍼짐*이 종종 중심값보다 더 중요하다.
random variable·확률변수
_뽑히기 전까지는 값이 정해지지 않은 양_ — 다만 가능한 값들이 어떤 분포를 이룬다. 동전 던지기는 확률변수 `X ∈ {앞, 뒤}`이고 `P(X = 앞) = 0.5`. 하루치 주가 수익률은 `(−∞, ∞)` 위의 어떤 연속 분포를 따르는 실수값 확률변수다. 확률변수는 확률 이론이 *양*을 말할 때 쓰는 도구 — 평균(기댓값)과 퍼짐(분산)을 가지고, 합·곱·비율로 다른 확률변수와 결합된다. 변수와 분포는 다르다 — 변수가 _분포를 가지는_ 것이다. 둘을 섞으면 식이 어긋난다.
probability mass·확률질량
_이산 분포가 한 결과에 부여하는 수_. 공정한 주사위에서 `P(X = 3) = 1/6` — 점 `3`의 확률질량이 `1/6`. 함수 `pmf(x) = P(X = x)`는 _확률질량함수_ — 분포 전체를 표로 펼친 것. 질량을 모든 결과에 대해 더하면 1이다. 이산 분포는 질량으로 이루어지고, 연속 분포는 *밀도*로 이루어진다. 이 구분이 중요한 이유 — 연속 분포에서 한 점의 확률은 *0*이고, 그 자리에서는 오직 밀도만이 의미 있다.
probability density·확률밀도
_연속 분포가 한 점 근처에서 확률을 쌓아 올리는 비율_. 연속 확률변수 `X`의 밀도가 `f(x)`이면, `X`가 작은 구간 `[x, x + dx]`에 들어갈 확률은 대략 `f(x) · dx`. 밀도는 확률이 _아니다_ — 1을 넘을 수 있다 — 하지만 임의 구간 위에서의 적분은 확률이 되고, 실수선 전체 위에서의 적분은 1이다. 연속 `X`에 대해 "`P(X = 3.7)`은 얼마인가?"는 범주 오류 — 올바른 질문은 "`P(3.6 ≤ X ≤ 3.8)`은 얼마인가?"이고, 그 답은 밀도 곡선 아래의 *넓이*다. 연속 분포는 밀도로 살고, 적분이 밀도를 다시 확률로 바꾼다.
expected value·기댓값
확률변수의 _가중 평균_. 이산 `X`가 `P(X = xᵢ) = pᵢ`이면 기댓값은 `E[X] = Σ xᵢ · pᵢ`. 연속 `X`의 밀도가 `f(x)`이면 `E[X] = ∫ x · f(x) dx`. `X`를 여러 번 뽑아 평균을 내면 수렴하는 값 — 분포의 *질량 중심*이다. "기대"라는 이름은 약간 오해 소지가 있다 — `X ∈ {0, 1000}`이고 `P(0) = P(1000) = 0.5`라면 기댓값은 500인데, 이건 `X`가 _절대 가지지 못하는_ 값이다. 평균은 분포의 *요약*이지 한 번 뽑힐 값의 *예측*이 아니다.
variance·분산
확률량이 평균에서 떨어진 거리의 제곱의 기대값. 평균 `μ`인 수익률 `r`에 대해 `Var(r) = E[(r − μ)²]`. 단위가 원래 단위의 *제곱*이라 보통은 그 제곱근인 *표준편차*를 쓴다. 분산은 금융에서 *위험*의 표준 척도다: "최악에 얼마나 잃을 수 있나?"가 아니라 "결과가 평균 주변에서 얼마나 흔들리나?". 같은 평균 수익률이라도 분산이 크게 다를 수 있고, 그 격차가 포트폴리오가 단순한 부분의 합 이상인 이유 전체다.
softmax·소프트맥스
로짓 벡터 `z = (z₁, …, zₙ)`을 합이 1인 양수 벡터로 바꾸는 함수: `softmax(z)ᵢ = exp(zᵢ) / Σⱼ exp(zⱼ)`. 두 가지 사실을 잊지 말 것. (1) 로짓끼리의 _차이_ `zᵢ − zⱼ`에만 의존한다 — 모든 로짓에 같은 상수를 더해도 결과는 그대로. (2) 정확히 0 또는 1을 출력하지 않는다 (극한일 뿐). 출력은 확률 분포처럼 _보이지만_, 그 확률이 실제 세계의 빈도와 일치한다는 보증은 없다.
histogram·히스토그램
데이터에서 각 *값*이 얼마나 자주 등장하는지 센 것. 이미지의 경우: 이 정도 어두운 픽셀이 몇 개, 저 정도 밝은 픽셀이 몇 개. 그 픽셀들이 그림 안 _어디에_ 있는지는 묻지 않는다. 히스토그램은 일부러 공간 구조를 버린다 — "밝기 분포는 어떤가?"에는 답하지만, "그림이 매끈한가 거친가?"에는 답하지 않는다. 히스토그램 위에서 *엔트로피*를 계산하면, 각 값을 _독립적으로_ 인코딩할 때 필요한 심볼당 비트 수의 하한이 나온다. 실제 이미지에서 이 하한은 거의 항상 *느슨한 하한*이다 — 실제 픽셀은 이웃 픽셀과 독립이 아니니까.
calibration·캘리브레이션
모델이 내놓은 *예측 확률*과 실제로 일어난 *빈도*의 일치. "70% 확신"이라고 라벨한 예제들에서 실제로 70% 가까이 맞춘다면 그 모델은 _캘리브레이트되어 있다_. 캘리브레이션은 *신뢰도 다이어그램(reliability diagram)*으로 그린다 — 가로축은 예측 확률, 세로축은 관측 정확도; 완벽한 캘리브레이션은 대각선 `y = x`. 현대의 신경망은 대부분 _과신(overconfident)_ 한다 — 높은 확률로 예측한 것이 주장만큼 자주 맞지 않는다 — 그리고 표준 처방은 _온도 스케일링(temperature scaling)_, 곡선을 대각선 쪽으로 끌어당기는 단 하나의 다이얼이다. 캘리브레이션은 정확도와 다르다: 작은 데이터셋에서 100% 정확한 분류기가 끔찍하게 미스캘리브레이트될 수도 있고, 모든 개별 예측에서 틀리는 모델이라도 *빈도*만 맞으면 캘리브레이트되어 있다.
entropy·엔트로피
`H(X) = −Σ pᵢ log₂ pᵢ`. 어떤 결과가 나왔는지 식별하는 데 평균적으로 필요한 예/아니오 질문의 수. `N`개 결과가 모두 같은 확률이면 `log₂ N`(최대)에 도달하고, 한 결과가 확률 1이면 0(불확실성 없음)으로 무너진다. 로그 밑이 단위를 정한다: log₂ → bit, ln → nat, log₁₀ → ban. `log` 위에 서 있어서 독립인 두 확률변수의 엔트로피가 더해진다: X, Y가 독립이면 `H(X, Y) = H(X) + H(Y)`.