🔍 Likelihood(우도)란? – 확률과 다른 관점에서 데이터를 바라보다
Likelihood(우도)는 머신러닝과 통계학의 핵심 개념 중 하나입니다. 특히, 최대우도추정법(MLE) 을 이해하기 위해 꼭 알아야 하는 개념이죠.
이번 글에서는 확률(Probability)과의 차이점, 수학적 정의, 예제, 시각적 이해 등을 통해 Likelihood를 완전히 이해해보겠습니다.
📌 우도(Likelihood)의 직관적 정의
Likelihood는 관찰된 데이터를 기준으로, 어떤 파라미터(모델)가 얼마나 그럴듯한지를 수치로 나타낸 것입니다.
즉,
- 확률(Probability)은 “파라미터를 기준으로 데이터가 나올 확률” 이고,
- 우도(Likelihood)는 “데이터를 기준으로 파라미터가 얼마나 그럴듯한지”를 나타냅니다.
🆚 확률 vs 우도: 헷갈리지 말자!
| 입력(고정값) | 파라미터 θ | 데이터 x |
| 출력(변수) | 데이터 x | 파라미터 θ |
| 관점 | 모델이 정해진 상태에서 데이터가 나올 확률 | 데이터가 주어졌을 때 모델이 얼마나 그럴듯한지 |
| 사용 목적 | 샘플을 생성하거나 예측할 때 | 모델 파라미터를 추정할 때 |
| 표기 | P(x∣θ)P(x \mid \theta) | L(θ∣x)L(\theta \mid x) or P(x∣θ)P(x \mid \theta) |
예시
- 확률: 공정한 동전일 때 앞면이 나올 확률은 P(앞면∣p=0.5)=0.5P(\text{앞면} \mid p=0.5) = 0.5P(앞면∣p=0.5)=0.5
- 우도: 앞면이 나왔다고 할 때, 동전이 공정했을 가능성은 L(p=0.5∣앞면)L(p=0.5 \mid \text{앞면})L(p=0.5∣앞면)
🧮 수학적 정의
주어진 데이터 x1,x2,...,xnx_1, x_2, ..., x_nx1,x2,...,xn 과 확률모델 f(x∣θ)f(x \mid \theta)f(x∣θ)가 있을 때,
- 우도 함수 (Likelihood function):
L(θ)=∏i=1nf(xi∣θ)L(\theta) = \prod_{i=1}^{n} f(x_i \mid \theta)L(θ)=i=1∏nf(xi∣θ)
- 로그 우도 함수 (Log-likelihood): 계산을 단순화하기 위해 log를 취함
logL(θ)=∑i=1nlogf(xi∣θ)\log L(\theta) = \sum_{i=1}^{n} \log f(x_i \mid \theta)logL(θ)=i=1∑nlogf(xi∣θ)
이 우도 함수를 최대화하는 파라미터 θ\theta를 찾는 것이 바로 MLE (Maximum Likelihood Estimation)!
🧪 간단한 예제
예: 동전을 10번 던졌는데 7번 앞면이 나왔다면?
- 데이터: 앞면 7번, 뒷면 3번
- 동전이 앞면일 확률을 ppp라고 하면,
- 우도 함수는:
L(p)=p7(1−p)3L(p) = p^7 (1 - p)^3L(p)=p7(1−p)3
- 이 우도 함수를 최대화하는 ppp를 찾으면, 우리가 관찰한 데이터를 가장 잘 설명하는 "가장 그럴듯한 p 값"이 됩니다.
📈 우도 함수 시각화
L(θ)L(\theta)L(θ)는 다양한 θ\thetaθ 값에 대해 계산 가능하며, 그래프로 그리면 다음과 같은 곡선이 됩니다.
- 피크 지점이 우도 최대화 지점 → MLE 값
- 나머지 지점들은 상대적으로 덜 그럴듯한 파라미터
이런 시각화는 모델 튜닝이나 확률 해석에도 매우 유용합니다.
✨ 요약 정리
- 우도(Likelihood)는 “관측된 데이터를 기준으로 파라미터가 그럴듯한 정도”
- 확률과는 반대 시점에서 출발: 확률은 파라미터 → 데이터, 우도는 데이터 → 파라미터
- MLE에서 핵심 개념으로 사용되며, 머신러닝의 핵심 추정 방법에 기반이 됨
🧠 한 줄 요약
Likelihood는 “데이터를 고정하고 파라미터를 조절해 보는 관점”이다.
🐍 Python으로 살짝 구현해보기
import numpy as np
import matplotlib.pyplot as plt
# 동전 앞면 7번, 뒷면 3번
def likelihood(p):
return p**7 * (1 - p)**3
p_values = np.linspace(0.01, 0.99, 100)
likelihoods = [likelihood(p) for p in p_values]
plt.plot(p_values, likelihoods)
plt.xlabel("p (앞면이 나올 확률)")
plt.ylabel("Likelihood")
plt.title("동전 던지기 - Likelihood 곡선")
plt.show()'푸닥거리' 카테고리의 다른 글
| YOLO와 Probability Calibration: 객체 탐지 모델의 신뢰도 높이기 (0) | 2025.07.19 |
|---|---|
| 설명 가능한 인공지능(XAI): 왜, 그리고 어떻게? (0) | 2025.07.14 |
| 소버린 AI(Sovereign AI)란 무엇인가 – 기술 자립을 향한 인공지능 전략 (0) | 2025.07.12 |
| Natural Language to SQL: 자연어로 데이터베이스 조회하기 (0) | 2025.06.03 |
| Local LLM을 활용한 AI 에이전트 (0) | 2025.05.30 |
댓글