Thompson Sampling — Beta-Bernoulli · Gaussian

1933 년의 베이지안 사후 분포 샘플링이 90 년 후 표준이 되기까지

Thompson Sampling — posterior 사후 분포에서 표본 추출각 표본의 최대값에 해당하는 팔 선택. (1) Thompson (1933) 원논문의 역사, (2) Beta-Bernoulli 업데이트의 conjugate 성질, (3) Gaussian variant — 연속 reward, (4) Russo et al. (2018) 의 log N regret 정리, (5) UCB 와의 비교 — 결정론적 vs 확률적 탐색. 시뮬레이션과 실무 권고.

Experimentation
MAB
저자

Kwangmin Kim

공개

2026년 05월 09일

출처

이 글은 교재 직접 참조 없이 agent 사전학습 기반으로 작성되었다 (교재 미확인 — agent 사전학습 기반). 핵심 정리는 Thompson (1933), Russo, Van Roy, Kazerouni, Osband, Wen (2018) 등 검증 가능한 원논문에 한해 명시한다.

이 글은 Phase I 시리즈의 네 번째 글이다. UCB 의 결정론적 신뢰구간 과 다른 접근 — 베이지안 사후 분포에서 샘플링 — 인 Thompson Sampling 을 다룬다.

1 진입 직관 — “내 사후 분포에 따라 행동”

UCB 가 불확실성의 상한 을 보고 결정한다면, Thompson Sampling 은 불확실성 자체에서 한 표본을 뽑아 그것이 진실인 것처럼 행동한다.

Thompson Sampling 의 한 줄 원리: 각 팔의 진짜 평균에 대한 사후 분포에서 표본 1 개 추출, 표본이 가장 큰 팔 선택.

1.1 메커니즘

각 시점 \(t\) 마다:

  1. 각 팔 \(a\)진짜 평균 \(\mu_a\) 에 대한 베이지안 사후 분포 유지
  2. 각 팔의 사후에서 1 개 표본 \(\tilde{\mu}_a \sim P(\mu_a | \text{data})\) 추출
  3. 표본이 가장 큰\(A_t = \arg\max_a \tilde{\mu}_a\) 선택
  4. Reward 관찰, 사후 업데이트

자연스러운 탐색: 충분히 시도된 팔의 사후는 진짜 평균 근처에 좁게 — 표본이 진짜 평균에 가까움. 덜 시도된 팔의 사후는 넓게 퍼짐 — 표본이 높을 수도, 낮을 수도. 가끔 높이 나오면 그 팔이 선택됨 — 자동 탐색.

비유 — 결정 회의: 임원 5 명이 각자 다른 후보안 에 대한 직관적 평가 를 가짐. UCB 는 가장 낙관적 임원의 의견 으로 결정. Thompson 은 임원 1 명을 무작위 추첨하여 그 임원의 평가 로 결정. 평균적으로 같은 결정에 수렴하지만, 과정의 다양성 이 다름.

2 역사 — Thompson 1933

놀라운 사실: Thompson Sampling 은 1933 년 William R. Thompson 이 의학 시험 맥락에서 제안. MAB 라는 용어가 생기기 20 년 전.

2.1 Thompson (1933) 의 동기

의학 시험에서 두 처치 (A vs B) 의 효과 비교. 베이지안 관점 에서 사후 확률 P(A 가 더 좋음) 계산. 다음 환자에게 그 확률대로 A 또는 B 선택.

환자 보호 의 윤리적 동기 — 효과 좋은 약을 더 많이 받게.

2.2 잊혀진 90 년

1933 년 이후 Thompson Sampling 은 거의 사용 안 됨. 의학에서는 고정 할당 RCT 가 표준. 1980 년대 MAB 이론 발달도 frequentist (UCB 등) 중심.

2.3 2010 년대의 부활

Chapelle & Li (2011), Russo & Van Roy (2014, 2016) 등이 Thompson Sampling 의 우수성을 실증. 광고 추천, 추천 시스템 등 실무에서 놀라운 성능. UCB 와 비슷하거나 더 좋은 regret, 더 단순한 구현.

Russo et al. (2018) 의 입장: “Thompson Sampling 이 가장 추천되는 baseline. UCB 보다 자주 더 좋고, 단순함.”

3 Beta-Bernoulli — Conjugate Prior

3.1 Bernoulli reward

가장 흔한 MAB 환경: 각 팔의 reward 가 Bernoulli (0 또는 1). 클릭률, 전환율, 임상 반응 등.

3.2 Beta 분포

정의: \(\text{Beta}(\alpha, \beta)\)0~1 범위의 확률 변수 의 분포. 매개변수:

  • \(\alpha\): 성공 횟수 + 1 비유
  • \(\beta\): 실패 횟수 + 1 비유
  • 평균: \(\alpha / (\alpha + \beta)\)
  • 분산: \(\alpha\beta / ((\alpha+\beta)^2 (\alpha+\beta+1))\)

\(\text{Beta}(1, 1)\)균등 분포 (uniform)prior 정보 없음.

3.3 Conjugate 업데이트

결정적 성질: Bernoulli likelihood + Beta prior → Beta posterior. 닫힌 형태.

\[ \text{prior} = \text{Beta}(\alpha_0, \beta_0) \]

\(n_s\) 회 성공, \(n_f\) 회 실패 관찰 후:

\[ \text{posterior} = \text{Beta}(\alpha_0 + n_s, \beta_0 + n_f) \]

수식 직관: prior 의 \(\alpha, \beta\)관찰된 성공/실패 횟수 더함. 매우 단순.

3.4 Thompson Sampling for Bernoulli

알고리즘: Thompson Sampling (Beta-Bernoulli)
초기화:
  for each arm a:
    α_a = 1, β_a = 1   # uniform prior

For t = 1 to N:
  # 사후 표본 추출
  for each a:
    θ_a ~ Beta(α_a, β_a)

  # 표본 최대 팔 선택
  A_t = argmax_a θ_a

  # Reward 관찰
  X_t ~ Bernoulli(μ_{A_t})

  # 업데이트
  if X_t == 1:
    α_{A_t} += 1
  else:
    β_{A_t} += 1

매개변수: prior \(\alpha_0, \beta_0\) (보통 1, 1) — 거의 hyperparameter 없음.

단순성: 약 10 줄 코드. UCB 보다 오히려 단순.

4 Gaussian Variant — 연속 Reward

Bernoulli 가 아닌 연속 reward (예: 매출, 시간) 에 대해 Gaussian 가정.

4.1 Gaussian Reward

각 팔의 reward \(X_a \sim \mathcal{N}(\mu_a, \sigma^2)\). \(\sigma^2\)알려졌다고 가정 (또는 표본 분산으로 추정).

4.2 Conjugate

Gaussian likelihood + Gaussian prior → Gaussian posterior. 평균 \(\mu_a\) 의 사후:

\[ \mu_a | \text{data} \sim \mathcal{N}\left(\hat{\mu}_a, \frac{\sigma^2}{n_a}\right) \]

이는 Hoeffding/CLT 에서의 신뢰구간과 같은 형태.

4.3 알고리즘

For t = 1 to N:
  for each a:
    θ_a ~ Normal(μ̂_a, σ²/n_a)
  A_t = argmax_a θ_a
  Observe X_t, update sums_{A_t}, n_{A_t}

표본 분산 사용: \(\sigma^2\) 미지 시 표본 분산 \(\hat{\sigma}^2_a\) 사용. 또는 Normal-Inverse-Gamma conjugate prior 로 분산도 베이지안 처리.

5 UCB 와의 비교 — 결정론적 vs 확률적

측면 UCB1 Thompson Sampling
탐색 방식 결정론적 (신뢰구간 상한) 확률적 (사후 표본)
매 시점 행동 유일 결정 무작위
Hyperparameter 거의 없음 Prior \(\alpha_0, \beta_0\) (보통 1, 1)
Regret (이론) \(O(\log N)\) \(O(\log N)\)
실무 성능 안정 UCB 보다 약간 좋음 (실증)
코드 길이 ~15 줄 ~10 줄
Bayesian 해석 약함 자연스러움

5.1 Russo et al. (2018) 의 결과

“Thompson Sampling 이 광범위한 실증 환경에서 UCB 보다 같거나 더 좋은 regret. 광고 추천 사례에서 특히 우수.”

5.2 실무 매력

Bayesian 직관: 의사결정자에게 “이 팔이 최선일 사후 확률은 70%” 같은 해석 가능한 출력 제공. UCB 의 상한 점수 보다 직관적.

6 Probability of Being Best — 부수적 출력

Thompson Sampling 의 자연스러운 부산물:

각 팔이 최선일 사후 확률 \(P(\mu_a = \max_a' \mu_{a'} | \text{data})\)몬테카를로 로 추정 가능.

6.1 알고리즘

m_iter = 10000
counts = [0] * K
for _ in range(m_iter):
  samples = [Beta(α_a, β_a).sample() for each a]
  best = argmax(samples)
  counts[best] += 1
prob_best = counts / m_iter

6.2 응용

A/B test 의 p-value 대신 비즈니스 친화 출력:

  • “처치 A 가 최선일 확률 87%”
  • “처치 B 가 최선일 확률 11%”

의사결정자가 직접 해석 가능. Bayesian A/B testing 의 핵심 도구.

Phase F 와의 연결: Bayesian A/B testing (Phase F-7) 에서 동일 도구 사용. Thompson Sampling 의 posterior 직관 은 더 광범위.

7 시뮬레이션 — Thompson vs UCB vs ε-Greedy

import numpy as np

np.random.seed(42)

K = 5
true_means = np.array([0.30, 0.50, 0.70, 0.40, 0.60])
mu_star = true_means.max()
N = 5000

def thompson_bernoulli(true_means, N):
    K = len(true_means)
    alpha = np.ones(K)   # uniform prior
    beta = np.ones(K)
    rewards = np.zeros(N)

    for t in range(N):
        # Sample from posterior
        theta = np.random.beta(alpha, beta)
        a = theta.argmax()
        r = np.random.binomial(1, true_means[a])
        rewards[t] = r
        if r == 1:
            alpha[a] += 1
        else:
            beta[a] += 1
    return rewards

def ucb1(true_means, N):
    K = len(true_means)
    pulls = np.zeros(K)
    sums = np.zeros(K)
    rewards = np.zeros(N)
    for a in range(K):
        r = np.random.binomial(1, true_means[a])
        pulls[a] = 1
        sums[a] = r
        rewards[a] = r
    for t in range(K, N):
        means = sums / pulls
        ucb = means + np.sqrt(2 * np.log(t + 1) / pulls)
        a = ucb.argmax()
        r = np.random.binomial(1, true_means[a])
        pulls[a] += 1
        sums[a] += r
        rewards[t] = r
    return rewards

def epsilon_greedy(true_means, N, epsilon=0.1):
    K = len(true_means)
    pulls = np.zeros(K)
    sums = np.zeros(K)
    rewards = np.zeros(N)
    for a in range(K):
        r = np.random.binomial(1, true_means[a])
        pulls[a] = 1
        sums[a] = r
        rewards[a] = r
    for t in range(K, N):
        if np.random.random() < epsilon:
            a = np.random.randint(K)
        else:
            means = sums / pulls
            a = means.argmax()
        r = np.random.binomial(1, true_means[a])
        pulls[a] += 1
        sums[a] += r
        rewards[t] = r
    return rewards

def cumulative_regret(rewards, mu_star):
    return np.arange(1, len(rewards) + 1) * mu_star - np.cumsum(rewards)

n_sim = 500
ts_regrets = np.zeros((n_sim, N))
ucb_regrets = np.zeros((n_sim, N))
eg_regrets = np.zeros((n_sim, N))

for s in range(n_sim):
    ts_regrets[s] = cumulative_regret(thompson_bernoulli(true_means, N), mu_star)
    ucb_regrets[s] = cumulative_regret(ucb1(true_means, N), mu_star)
    eg_regrets[s] = cumulative_regret(epsilon_greedy(true_means, N), mu_star)

print(f"[Thompson vs UCB1 vs ε-Greedy(0.1) — N={N}, 500 sims]\n")
for t_check in [100, 500, 1000, 2000, 5000]:
    if t_check <= N:
        print(f"  t={t_check:>4}: TS={ts_regrets[:, t_check-1].mean():>6.1f}, "
              f"UCB={ucb_regrets[:, t_check-1].mean():>6.1f}, "
              f"εG={eg_regrets[:, t_check-1].mean():>6.1f}")

# Probability of being best
print("\n[최종 시점에 각 팔이 최선일 사후 확률 — Thompson 의 부산물]")
np.random.seed(42)
alpha = np.ones(K)
beta = np.ones(K)
# 한 번의 Thompson sampling 시뮬레이션
for t in range(N):
    theta = np.random.beta(alpha, beta)
    a = theta.argmax()
    r = np.random.binomial(1, true_means[a])
    if r == 1:
        alpha[a] += 1
    else:
        beta[a] += 1

# 사후 확률 추정
m = 10000
counts = np.zeros(K)
for _ in range(m):
    s = np.random.beta(alpha, beta)
    counts[s.argmax()] += 1
prob_best = counts / m
print(f"각 팔의 사후 P(best): {dict(enumerate(prob_best))}")
print(f"진짜 최선의 팔: {true_means.argmax()} (mean = {mu_star})")

결과 해석:

  1. Thompson 이 보통 UCB 보다 약간 작은 regret.
  2. ε-greedy (fixed 0.1) 은 N 증가 시 선형 누적 — 다른 둘과 격차 커짐.
  3. 최종 사후 확률진짜 최선의 팔에 거의 1. 의사결정자에게 직접 의미 있는 출력.

8 Bayesian 해석 — Phase F 와의 연결

8.1 Frequentist vs Bayesian

관점 Frequentist Bayesian
모수 \(\mu_a\) 고정된 미지 분포를 가진 random variable
추론 도구 표본 평균, 신뢰구간 사후 분포, credible interval
MAB 알고리즘 UCB Thompson Sampling

8.2 A/B Testing 에서

Phase F-7 (Bayesian A/B Testing) 에서 Thompson 과 같은 도구 사용:

  • 사전 분포 → 데이터 → 사후 분포 → “B 가 A 보다 클 확률” 계산

Bayesian 추론의 광범위한 활용 의 일부.

반사실: Frequentist 에서 p-value 0.04 는 “귀무가설 하 데이터 확률 4%” — 직관적이지 않음. Bayesian 의 “B가 더 클 확률 96%”직접 해석 가능. 의사결정자에게 매력.

9 실무 권고

9.1 Thompson 을 권장하는 경우

  • Bayesian 직관 이 익숙한 팀
  • probability of being best 같은 출력 가치
  • 단순 코드 + 안정 성능
  • Russo et al. 2018 의 실증 — 광고 추천, 콘텐츠 personalization

9.2 UCB 를 권장하는 경우

  • 결정론적 행동 필요 (재현성 등)
  • 이론 분석이 우선 (KL-UCB, MAB 변형 깊이)
  • Hyperparameter (prior) 결정 부담 회피

9.3 실무 절충

기본: Thompson Sampling (Beta(1,1) prior). 변경 이유 가 명확하면 UCB 또는 변형.

10 결론

Thompson Sampling 은 1933 년 발명되어 90 년간 잊혀졌다가, 2010 년대에 MAB 의 표준 baseline 으로 부활. UCB 만큼 좋고 더 단순하며, Bayesian 해석을 자연스럽게 제공.

핵심 메시지:

  1. 사후 분포 샘플링: 단순한 베이지안 원리
  2. Beta-Bernoulli conjugate: 닫힌 형태 업데이트
  3. Gaussian variant: 연속 reward 처리
  4. Probability of being best: 부수적 출력의 가치
  5. UCB 와 비슷하거나 더 좋음: 실증 (Russo 2018)
  6. Phase F-7 과 연결: Bayesian A/B testing 의 형제

다음 글: MAB vs A/B Test 의 종합 비교.

11 관련 주제

선행 지식

Phase I 후속 글

다른 카테고리 연결

  • (Phase F-7) Bayesian A/B Testing — 동일 사후 분포 도구
  • Statistics — Beta 분포, Conjugate priors

12 참고문헌

  • Thompson, W. R. (1933). On the likelihood that one unknown probability exceeds another in view of the evidence of two samples. Biometrika 25, 285-294.
  • Chapelle, O. & Li, L. (2011). An empirical evaluation of Thompson sampling. NIPS.
  • Russo, D. & Van Roy, B. (2014). Learning to optimize via posterior sampling. Math. Oper. Res. 39, 1221-1243.
  • Russo, D., Van Roy, B., Kazerouni, A., Osband, I., Wen, Z. (2018). A tutorial on Thompson sampling. Foundations and Trends in Machine Learning 11, 1-96.
  • Lattimore, T. & Szepesvári, C. (2020). Bandit Algorithms. Cambridge University Press. (교재 미확인 — agent 사전학습 기반)

Subscribe

Enjoy this blog? Get notified of new posts by email: