← Назад к вопросам
В чем разница между вероятностью и правдоподобием?
2.0 Middle🔥 101 комментариев
#Статистика и A/B тестирование
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI28 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Разница между вероятностью и правдоподобием
Это два важных статистических концепта, которые часто путают, но они имеют принципиально разные значения.
Вероятность (Probability)
Определение: вероятность будущего события при известных параметрах модели
- Обозначение: P(данные | параметры)
- Мы знаем модель (параметры), предсказываем результат
- Вероятность всегда между 0 и 1
- Сумма вероятностей всех возможных исходов = 1
import numpy as np
from scipy.stats import binom
# Монета с вероятностью орла p=0.5
# Какова вероятность выпадения 5 орлов из 10 бросаний?
p = 0.5
n = 10
k = 5
prob = binom.pmf(k, n, p) # P(data | model)
print(f"Вероятность 5 орлов из 10: {prob:.4f}") # 0.2461
Правдоподобие (Likelihood)
Определение: вероятность наблюдаемых данных при различных значениях параметров
- Обозначение: L(параметры | данные)
- Мы знаем данные, ищем параметры модели
- Правдоподобие может быть > 1
- Нет ограничения на сумму правдоподобий
- Это функция от параметров, а не от данных
from scipy.stats import binom
# Мы наблюдали 5 орлов из 10 бросаний
# Какое значение p было вероятнее всего?
observed_heads = 5
n_trials = 10
# Вычислим правдоподобие для разных значений p
ps = np.linspace(0, 1, 100)
likelihoods = [binom.pmf(observed_heads, n_trials, p) for p in ps]
# Максимум правдоподобия при p=0.5
max_likelihood_p = ps[np.argmax(likelihoods)]
print(f"MLE оценка: p={max_likelihood_p:.2f}") # p=0.50
Наглядное объяснение
ВЕРОЯТНОСТь (Probability):
Знаем: монета честная (p=0.5)
Вопрос: какова вероятность 5 орлов из 10?
Ответ: P(5 орлов | p=0.5) = 0.246
ПРАВДОПОДОБИЕ (Likelihood):
Знаем: выпало 5 орлов из 10
Вопрос: какое значение p было вероятнее всего?
Ответ: L(p | 5 орлов) максимально при p=0.5
Практический пример с данными
import numpy as np
from scipy.stats import norm
import matplotlib.pyplot as plt
# Пример 1: ВЕРОЯТНОСТЬ
# Знаем параметры нормального распределения
mu = 100
sigma = 15
# Какова вероятность получить значение 130?
prob_value = norm.pdf(130, mu, sigma)
print(f"Плотность вероятности при x=130: {prob_value:.6f}")
# Пример 2: ПРАВДОПОДОБИЕ (MLE - Maximum Likelihood Estimation)
# У нас есть данные - выборка из распределения
data = np.array([95, 102, 108, 98, 105, 110, 99, 103])
# Оцениваем параметры по методу максимального правдоподобия
mu_mle = np.mean(data) # 103.0
sigma_mle = np.std(data, ddof=1) # выборочная дисперсия
print(f"MLE оценки: mu={mu_mle:.1f}, sigma={sigma_mle:.2f}")
Ключевые различия
| Аспект | Вероятность | Правдоподобие |
|---|---|---|
| Определение | P(data | params) | L(params | data) |
| Направление | Параметры → Данные | Данные → Параметры |
| Диапазон | [0, 1] | [0, ∞) |
| Сумма | = 1 | Не ограничена |
| Использование | Предсказание | Оценка параметров |
| Функция от | Случайной величины | Параметров |
Применение в машинном обучении
Вероятность:
from sklearn.linear_model import LogisticRegression
# Модель вычисляет P(y=1 | X)
model = LogisticRegression()
model.fit(X_train, y_train)
# Вероятность класса для новых данных
probs = model.predict_proba(X_test)
print(probs) # [[0.3, 0.7], ...] - P(y=0|X), P(y=1|X)
Правдоподобие:
from scipy.stats import norm
from sklearn.linear_model import LinearRegression
# Линейная регрессия ищет параметры, максимизирующие правдоподобие
model = LinearRegression()
model.fit(X_train, y_train)
# model.coef_ и model.intercept_ - это MLE оценки параметров
# которые максимизируют L(params | data)
Байесовский подход
Теорема Байеса связывает оба понятия:
P(params | data) = L(params | data) × P(params) / P(data)
Правдоподобие × Априорное / Свидетельство
# Байесовское обновление
# Правдоподобие = как хорошо модель объясняет данные
# Используется для обновления предположений о параметрах
from scipy.stats import beta
# Априорное распределение: Beta(10, 10)
prior_a, prior_b = 10, 10
# Наблюдаем 7 успехов из 10 попыток (данные)
successes, failures = 7, 3
# Апостериорное распределение: Beta(10+7, 10+3)
posterior_a = prior_a + successes
posterior_b = prior_b + failures
print(f"Апостериорное распределение: Beta({posterior_a}, {posterior_b})")
Итоговое резюме
Вероятность - вероятность наблюдаемого при известной модели. Используется для предсказания.
Правдоподобие - мера того, насколько хорошо модель объясняет наблюдаемые данные. Используется для оценки параметров.
В data science вы чаще работаете с правдоподобием, чем с вероятностью - максимизируя его при обучении моделей.