В чем разница между вероятностью и правдоподобием в статистике?

Ответ

Вероятность (Probability) — это мера того, насколько вероятно получить определенные наблюдаемые данные при заданных фиксированных параметрах модели. Это функция от данных.

Правдоподобие (Likelihood) — это функция от параметров модели при фиксированных наблюдаемых данных. Она показывает, насколько правдоподобны те или иные значения параметров, учитывая то, что мы уже увидели.

Ключевое отличие:

  • Вероятность: P(Данные | Параметры) — «Какова вероятность увидеть эти данные, если параметры такие-то?»
  • Правдоподобие: L(Параметры | Данные) — «Насколько правдоподобны эти параметры, если мы увидели такие данные?»

Практический пример на Python: Допустим, мы подбрасываем монету 10 раз и получаем 7 орлов. Мы хотим оценить параметр p — вероятность выпадения орла.

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

# Наши фиксированные данные: 7 успехов из 10 попыток
k, n = 7, 10

# Рассчитаем вероятность получить наши данные для разных гипотез о p
p_values = np.linspace(0, 1, 100)
likelihoods = binom.pmf(k, n, p_values)  # Это именно правдоподобие!

# Построим график функции правдоподобия
plt.plot(p_values, likelihoods)
plt.xlabel('Вероятность орла (p)')
plt.ylabel('Правдоподобие L(p | k=7, n=10)')
plt.title('Функция правдоподобия для биномиального эксперимента')
plt.grid(True)
plt.show()

# Максимум правдоподобия (MLE) будет при p = 0.7
mle = p_values[np.argmax(likelihoods)]
print(f"Оценка максимального правдоподобия (MLE) для p: {mle:.2f}")

В машинном обучении и статистике мы часто используем принцип максимального правдоподобия (MLE) для нахождения наилучших параметров модели, то есть ищем параметры, которые максимизируют функцию правдоподобия для наших данных.

Ответ 18+ 🔞

А, ну это классика, ебать мои старые костыли! Сидишь такой, пытаешься в статистику врубиться, а там эти термины — вероятность и правдоподобие. Как будто одно и то же, а нихуя не так. Сейчас на пальцах объясню, чтоб понятно было даже мартышлюшке.

Смотри, представь, что у тебя есть модель, как какая-то хрень работает. У неё есть настройки — параметры. И есть реальность — данные, которые ты насобирал.

Так вот, вероятность — это когда ты параметры зафиксировал и думаешь: «Ну окей, если моя модель с такими настройками правда, то какова вероятность, что в реальности я увижу вот эти конкретные данные?». То есть, P(Данные | Параметры). Типа: «Если монета честная (p=0.5), какова вероятность, что из 10 бросков я получу 7 орлов?» Считаешь и понимаешь — вероятность, бля, не очень высокая. Подозрение ебать чувствую.

А правдоподобие — это когда ты уже увидел данные и теперь тыкаешь пальцем в небо, пытаясь угадать параметры. Данные-то у тебя уже есть, они фиксированы! Ты смотришь на свою кучу цифр и спрашиваешь: «Насколько правдоподобно выглядит гипотеза, что параметры вот такие?». Это уже L(Параметры | Данные). Типа: «Я видел 7 орлов из 10. Насколько правдоподобно, что монета честная (p=0.5)?» А оно, бля, не очень правдоподобно. А вот гипотеза, что p=0.7 — выглядит куда как правдоподобнее!

Короче, разница в том, что меняешь местами причину и следствие:

  • Вероятность: Данные — случайная величина, параметры — фиксированы.
  • Правдоподобие: Параметры — переменные для оценки, данные — зафиксированы, как факт.

Ну а на практике все эти умники используют принцип максимального правдоподобия (MLE). Суть проста до безобразия: ты ищешь такие параметры своей модели, при которых твои реальные данные выглядят максимально правдоподобно. То есть, подбираешь настройки так, чтобы вероятность увидеть то, что ты уже увидел, была максимальной. Звучит как трюк, но он, сука, работает.

Смотри, как это в коде выглядит, на примере с той самой монеткой:

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

# Допустим, накосячили с экспериментом: 10 раз кинули, 7 раз орёл. Данные есть.
k, n = 7, 10

# Теперь перебираем кучу гипотез о том, какая же на самом деле вероятность орла (p)
p_values = np.linspace(0, 1, 100)
# И для каждой гипотезы считаем, насколько она правдоподобна с нашими данными.
# binom.pmf(k, n, p) — вот эта самая функция правдоподобия L(p | данные)!
likelihoods = binom.pmf(k, n, p_values)

# Глянем, что получилось
plt.plot(p_values, likelihoods)
plt.xlabel('Вероятность орла (p)')
plt.ylabel('Правдоподобие L(p | k=7, n=10)')
plt.title('Функция правдоподобия для биномиального эксперимента')
plt.grid(True)
plt.show()

# А теперь найдём ту самую гипотезу, где правдоподобие бьёт в потолок. Это и есть MLE!
mle = p_values[np.argmax(likelihoods)]
print(f"Оценка максимального правдоподобия (MLE) для p: {mle:.2f}")

И что ты думаешь? Программа тебе выведет, что самое правдоподобное значение p — это 0.7. Ни хуя себе, сюрприз! То есть, глядя на 7 орлов из 10, модель максимального правдоподобия говорит: «Да чувак, скорее всего, вероятность орла и есть 0.7, ёпта». Всё логично. Хуй с горы, да?

Вот и вся магия. Правдоподобие — это твой инструмент, чтобы тыкать в разные параметры и спрашивать: «Ну что, похоже на правду?», имея на руках голые факты. А MLE — это когда ты находишь тот самый параметр, который кричит: «Да это же я и есть, блядь, самая правда!».