Глава 2. ВЕРОЯТНОСТЬ И СТАТИСТИКА

2.1. Условная вероятность

\[ P(A | B) = \frac{P(A \cap B)}{P(B)}, \quad P(B) > 0 \]

Объяснение: Условная вероятность определяет вероятность наступления события A при условии, что событие B уже произошло. Это фундаментальное понятие в вероятностном мышлении и байесовском выводе.

Пример: Если \(P(A \cap B) = 0.2\) и \(P(B) = 0.5\), то \(P(A | B) = \frac{0.2}{0.5} = 0.4\).

Реализация:


P_A_and_B = 0.2
P_B = 0.5
P_A_given_B = P_A_and_B / P_B

2.2. Формула полной вероятности

\[ P(A) = \sum_{i} P(A | B_i)P(B_i) \]

Объяснение: Формула полной вероятности связывает вероятность события A с вероятностями A при условии наступления событий из разбиения \(\{B_i\}\). Используется в сценариях с условными зависимостями.

Пример: Если \(P(A | B_1) = 0.3\), \(P(A | B_2) = 0.7\), \(P(B_1) = 0.4\) и \(P(B_2) = 0.6\), то \(P(A) = 0.3 \cdot 0.4 + 0.7 \cdot 0.6 = 0.12 + 0.42 = 0.54\).

Реализация:


P_A_given_B1 = 0.3
P_A_given_B2 = 0.7
P_B1 = 0.4
P_B2 = 0.6
P_A = P_A_given_B1 * P_B1 + P_A_given_B2 * P_B2

2.3. Теорема Байеса

\[ P(A | B) = \frac{P(B | A)P(A)}{P(B)}, \quad P(B) > 0 \]

Объяснение: Теорема Байеса позволяет "обращать" условные вероятности, часто используется для обновления убеждений с учетом новых данных в МО и статистике.

Пример: Если \(P(B | A) = 0.8\), \(P(A) = 0.3\) и \(P(B) = 0.5\), то \(P(A | B) = \frac{0.8 \cdot 0.3}{0.5} = \frac{0.24}{0.5} = 0.48\).

Реализация:


P_B_given_A = 0.8
P_A = 0.3
P_B = 0.5
P_A_given_B = (P_B_given_A * P_A) / P_B

2.4. Математическое ожидание

\[ E[X] = \sum_{i} x_i P(X = x_i) \]

Объяснение: Математическое ожидание (среднее значение) случайной величины — это средневзвешенное всех возможных ее значений, где весами служат их вероятности. Это центральное понятие в теории вероятностей и статистике.

Пример: Если \(X = \{1, 2, 3\}\) с \(P(X = 1) = 0.2\), \(P(X = 2) = 0.5\) и \(P(X = 3) = 0.3\), то \(E[X] = 1 \cdot 0.2 + 2 \cdot 0.5 + 3 \cdot 0.3 = 0.2 + 1.0 + 0.9 = 2.1\).

Реализация:


X = [1, 2, 3]
P_X = [0.2, 0.5, 0.3]
expectation = sum(x * p for x, p in zip(X, P_X))

2.5. Дисперсия

\[ \text{Var}(X) = E[(X - E[X])^2] = E[X^2] - (E[X])^2 \]

Объяснение: Дисперсия измеряет разброс случайной величины относительно ее среднего значения. Широко используется в МО для оценки неопределенности и производительности модели.

Пример: Для \(X = \{1, 2, 3\}\) с \(P(X = 1) = 0.2\), \(P(X = 2) = 0.5\) и \(P(X = 3) = 0.3\), вычислим \(E[X] = 2.1\). \(E[X^2] = 1^2 \cdot 0.2 + 2^2 \cdot 0.5 + 3^2 \cdot 0.3 = 0.2 + 2.0 + 2.7 = 4.9\). Тогда \(\text{Var}(X) = 4.9 - (2.1)^2 = 4.9 - 4.41 = 0.49\). (Примечание: в исходном примере результат был 0.29, возможно, была ошибка в E[X^2]=4.7).

Реализация:


X = [1, 2, 3]
P_X = [0.2, 0.5, 0.3]
expectation = sum(x * p for x, p in zip(X, P_X))
expectation_X2 = sum(x**2 * p for x, p in zip(X, P_X))
variance = expectation_X2 - expectation**2

2.6. Стандартное отклонение

\[ \sigma(X) = \sqrt{\text{Var}(X)} \]

Объяснение: Стандартное отклонение — это квадратный корень из дисперсии; оно предоставляет меру разброса в тех же единицах, что и случайная величина. Широко используется в анализе данных и МО для оценки изменчивости.

Пример: Если \(\text{Var}(X) = 0.49\) (из предыдущего примера), то \(\sigma(X) = \sqrt{0.49} = 0.7\).

Реализация:


import math
variance = 0.49 # Используем исправленное значение
std_dev = math.sqrt(variance) # Или variance**0.5

2.7. Ковариация

\[ \text{Cov}(X, Y) = E[(X - E[X])(Y - E[Y])] \]

Объяснение: Ковариация измеряет совместную изменчивость двух случайных величин. Положительное значение указывает, что они имеют тенденцию увеличиваться вместе, а отрицательное — на обратную зависимость.

Пример: Если \(X = \{1, 2\}\), \(Y = \{3, 4\}\), совместное распределение \(P(X=1, Y=3)=0.5, P(X=2, Y=4)=0.5\). Тогда \(E[X] = 1 \cdot 0.5 + 2 \cdot 0.5 = 1.5\), \(E[Y] = 3 \cdot 0.5 + 4 \cdot 0.5 = 3.5\). \(\text{Cov}(X, Y) = (1 - 1.5)(3 - 3.5) \cdot 0.5 + (2 - 1.5)(4 - 3.5) \cdot 0.5 = (-0.5)(-0.5) \cdot 0.5 + (0.5)(0.5) \cdot 0.5 = 0.25 \cdot 0.5 + 0.25 \cdot 0.5 = 0.125 + 0.125 = 0.25\).

Реализация:


# Для дискретного случая с заданным совместным распределением
X_values = [1, 2]
Y_values = [3, 4]
Joint_P = {(1, 3): 0.5, (2, 4): 0.5} # Пример совместного распределения

# Вычисляем маржинальные вероятности и ожидания
P_X = {x: sum(Joint_P.get((x, y), 0) for y in Y_values) for x in X_values}
P_Y = {y: sum(Joint_P.get((x, y), 0) for x in X_values) for y in Y_values}
E_X = sum(x * P_X[x] for x in X_values)
E_Y = sum(y * P_Y[y] for y in Y_values)

covariance = sum((x - E_X) * (y - E_Y) * p
                 for (x, y), p in Joint_P.items())

# Реализация из OCR (предполагает, что X, Y, P_XY - списки соответствующих значений):
# X = [1, 2]
# Y = [3, 4]
# P_XY = [0.5, 0.5] # Некорректно представляет совместное распределение
# E_X = sum(x * p for x, p in zip(X, P_XY)) # Неправильное вычисление E_X
# E_Y = sum(y * p for y, p in zip(Y, P_XY)) # Неправильное вычисление E_Y
# covariance = sum((x - E_X) * (y - E_Y) * p for x, y, p in zip(X, Y, P_XY)) # Неправильное вычисление ковариации

Примечание: Реализация из OCR некорректна для вычисления ковариации по совместному распределению. Представлен корректный подход выше.

2.8. Корреляция

\[ \rho(X, Y) = \frac{\text{Cov}(X, Y)}{\sigma(X)\sigma(Y)} \]

Объяснение: Корреляция нормализует ковариацию к шкале от [-1, 1], количественно оценивая силу и направление линейной зависимости между двумя переменными.

Пример: Если \(\text{Cov}(X, Y) = 0.25\), \(\sigma(X) = 0.5\) (\(\text{Var}(X)=0.25\)), и \(\sigma(Y) = 0.5\) (\(\text{Var}(Y)=0.25\)) (для данных из примера ковариации), то \(\rho(X, Y) = \frac{0.25}{0.5 \cdot 0.5} = \frac{0.25}{0.25} = 1\). (Примечание: в исходном примере \(\sigma(Y)=1.0\), что не соответствует данным).

Реализация:


import math
# Используем значения из примера ковариации
covariance = 0.25
variance_X = 0.25 # (1^2*0.5 + 2^2*0.5) - 1.5^2 = (0.5+2) - 2.25 = 2.5-2.25=0.25
variance_Y = 0.25 # (3^2*0.5 + 4^2*0.5) - 3.5^2 = (4.5+8) - 12.25 = 12.5-12.25=0.25
std_X = math.sqrt(variance_X)
std_Y = math.sqrt(variance_Y)

# Избегаем деления на ноль, если стандартное отклонение равно 0
if std_X > 0 and std_Y > 0:
    correlation = covariance / (std_X * std_Y)
else:
    correlation = 0 # Или другое подходящее значение (NaN, None)

2.9. Функция вероятности (PMF - Probability Mass Function)

\[ P(X = x) = \begin{cases} p_i, & \text{if } x = x_i \\ 0, & \text{otherwise} \end{cases} \]

Объяснение: PMF определяет вероятности дискретных исходов случайной величины. Это основополагающее понятие в теории вероятностей.

Пример: Если \(X = \{1, 2, 3\}\) с \(P(X = 1) = 0.2\), \(P(X = 2) = 0.5\) и \(P(X = 3) = 0.3\), то PMF определена для этих значений.

Реализация:


X_values = [1, 2, 3]
P_X_probs = [0.2, 0.5, 0.3]
# Создаем словарь для удобного доступа
pmf_dict = dict(zip(X_values, P_X_probs))

def pmf(x):
    return pmf_dict.get(x, 0) # Возвращает вероятность или 0, если значение не найдено

# Пример использования
print(pmf(2)) # Выведет 0.5
print(pmf(4)) # Выведет 0

2.10. Функция плотности вероятности (PDF - Probability Density Function)

\[ f_X(x) \ge 0, \quad \int_{-\infty}^{\infty} f_X(x)dx = 1 \]

Объяснение: PDF определяет относительную правдоподобность непрерывной случайной величины принимать определенное значение. Используется в теории вероятностей и статистике для моделирования непрерывных распределений.

Пример: Для стандартного нормального распределения PDF равна \(f_X(x) = \frac{1}{\sqrt{2\pi}} e^{-x^2/2}\).

Реализация:


import numpy as np
from scipy.stats import norm

x = 0 # пример точки
pdf_value = norm.pdf(x, loc=0, scale=1) # loc - среднее, scale - стандартное отклонение

2.11. Совместная вероятность

\[ P(A \cap B) = P(A | B)P(B) \quad (= P(B | A)P(A)) \]

Объяснение: Совместная вероятность определяет вероятность одновременного наступления двух событий. Она важна в вероятностном моделировании и понимании взаимосвязей между переменными.

Пример: Если \(P(A | B) = 0.4\) и \(P(B) = 0.5\), то \(P(A \cap B) = 0.4 \cdot 0.5 = 0.2\).

Реализация:


P_A_given_B = 0.4
P_B = 0.5
P_A_and_B = P_A_given_B * P_B

2.12. Функция распределения (CDF - Cumulative Distribution Function)

\[ F_X(x) = P(X \le x) \]

Объяснение: CDF случайной величины дает вероятность того, что переменная примет значение, меньшее или равное x. Используется для описания функции распределения как для дискретных, так и для непрерывных переменных.

Пример: Для равномерного распределения \(X \sim U(0, 1)\), \(F_X(0.5) = 0.5\).

Реализация:


from scipy.stats import uniform

x = 0.5
cdf_value = uniform.cdf(x, loc=0, scale=1) # loc - начало интервала, scale - длина интервала

2.13. Энтропия (дискретная)

\[ H(X) = - \sum_{i} P(X = x_i) \log_2 P(X = x_i) \]

Объяснение: Энтропия измеряет неопределенность дискретной случайной величины. Это фундаментальное понятие в теории информации и МО, особенно в деревьях решений и функциях потерь.

Пример: Если \(P(X) = \{0.5, 0.5\}\), то \(H(X) = -0.5 \log_2(0.5) - 0.5 \log_2(0.5) = -0.5 \cdot (-1) - 0.5 \cdot (-1) = 0.5 + 0.5 = 1\).

Реализация:


import numpy as np

P_X = [0.5, 0.5]
# Исключаем p=0, так как log2(0) не определен, но p*log2(p) стремится к 0 при p->0
entropy = -sum(p * np.log2(p) for p in P_X if p > 0)

2.14. Условное математическое ожидание

\[ E[X | Y] = \sum_{x} x P(X = x | Y) \]

Объяснение: Условное математическое ожидание — это ожидаемое значение случайной величины X при условии, что известна другая переменная Y. Критически важно в байесовском выводе и вероятностном моделировании.

Пример: Если \(X = \{1, 2\}\) с \(P(X = 1 | Y) = 0.7\) и \(P(X = 2 | Y) = 0.3\), то \(E[X | Y] = 1 \cdot 0.7 + 2 \cdot 0.3 = 0.7 + 0.6 = 1.3\).

Реализация:


X_values = [1, 2]
P_X_given_Y = [0.7, 0.3] # Вероятности P(X=x | Y) для x из X_values
conditional_expectation = sum(x * p for x, p in zip(X_values, P_X_given_Y))

2.15. Закон повторных ожиданий (Law of Iterated Expectations / Law of Total Expectation)

\[ E[X] = E[E[X | Y]] \]

Объяснение: Закон повторных ожиданий утверждает, что математическое ожидание X равно средневзвешенному его условных математических ожиданий по Y. Это основополагающий закон в теории вероятностей и статистике.

Пример: Предположим, X зависит от \(Y = \{1, 2\}\), с \(E[X | Y = 1] = 3\), \(E[X | Y = 2] = 5\), и \(P(Y = 1) = 0.6\), \(P(Y = 2) = 0.4\). Тогда \(E[X] = E[X | Y=1]P(Y=1) + E[X | Y=2]P(Y=2) = 3 \cdot 0.6 + 5 \cdot 0.4 = 1.8 + 2.0 = 3.8\).

Реализация:


E_X_given_Y_values = [3, 5] # Условные ожидания E[X|Y=y]
P_Y_probs = [0.6, 0.4]     # Вероятности P(Y=y)
E_X = sum(e * p for e, p in zip(E_X_given_Y_values, P_Y_probs))

2.16. Маргинальная вероятность

\[ P(A) = \sum_{B} P(A \cap B) \quad \text{(для дискретного B)} \] \[ P(A) = \int P(A, B) dB \quad \text{(для непрерывного B)} \]

Объяснение: Маргинальная вероятность вычисляет вероятность события A путем суммирования (или интегрирования, для непрерывных случаев) по всем возможным исходам другой переменной B. Используется в вероятностном моделировании для сокращения совместных распределений.

Пример: Если \(P(A \cap B_1) = 0.3\) и \(P(A \cap B_2) = 0.4\), где \(\{B_1, B_2\}\) - разбиение, то \(P(A) = 0.3 + 0.4 = 0.7\).

Реализация:


# Если P_A_and_B - список совместных вероятностей P(A и Bi) для разбиения Bi
P_A_and_B_list = [0.3, 0.4]
P_A = sum(P_A_and_B_list)

2.17. Асимметрия (Skewness)

\[ \text{Skewness}(X) = \frac{E[(X - \mu)^3]}{\sigma^3} \]

Объяснение: Асимметрия измеряет несимметричность распределения вероятностей случайной величины относительно ее среднего. Положительная асимметрия указывает на более длинный правый хвост, а отрицательная — на более длинный левый хвост.

Пример: Для \(X = \{1, 2, 3\}\) со средним \(\mu = 2\) и стандартным отклонением \(\sigma = \sqrt{2/3} \approx 0.816\). Вычислить Асимметрию(X), используя третий центральный момент. \(E[(X - \mu)^3] = (1-2)^3 P(1) + (2-2)^3 P(2) + (3-2)^3 P(3)\). Если предположить равномерное распределение \(P(1)=P(2)=P(3)=1/3\), то \(E[(X - \mu)^3] = (-1)^3(1/3) + 0^3(1/3) + 1^3(1/3) = -1/3 + 0 + 1/3 = 0\). Асимметрия равна 0.

Реализация:


import numpy as np
from scipy.stats import skew # scipy предоставляет готовую функцию

X = np.array([1, 2, 3])
# Для данных напрямую:
skewness_val = skew(X) # По умолчанию использует скорректированную оценку

# Или по определению (используя несмещенную оценку ст.откл.):
mu = np.mean(X)
sigma = np.std(X, ddof=1) # ddof=1 для несмещенной оценки
if sigma > 0:
    skewness_def = np.mean(((X - mu) / sigma)**3)
    # Примечание: эта формула дает смещенную оценку. Для несмещенной нужны поправки.
else:
    skewness_def = 0

2.18. Эксцесс (Kurtosis)

\[ \text{Kurtosis}(X) = \frac{E[(X - \mu)^4]}{\sigma^4} \]

Объяснение: Эксцесс измеряет "островершинность" или "тяжесть хвостов" распределения вероятностей. Высокий эксцесс указывает на тяжелые хвосты, низкий — на легкие хвосты. Часто сравнивают с эксцессом нормального распределения (который равен 3), используя "избыточный эксцесс" = Эксцесс - 3.

Пример: Для \(X = \{1, 2, 3\}\) со средним \(\mu = 2\) и стандартным отклонением \(\sigma \approx 0.816\). Вычислить Эксцесс(X), используя четвертый центральный момент. \(E[(X - \mu)^4] = (1-2)^4 P(1) + (2-2)^4 P(2) + (3-2)^4 P(3)\). Если \(P(i)=1/3\), то \(E[(X - \mu)^4] = (-1)^4(1/3) + 0^4(1/3) + 1^4(1/3) = 1/3 + 0 + 1/3 = 2/3\). \(\sigma^4 = (\sqrt{2/3})^4 = (2/3)^2 = 4/9\). Эксцесс \( = (2/3) / (4/9) = (2/3) * (9/4) = 18/12 = 3/2 = 1.5\). (Избыточный эксцесс = 1.5 - 3 = -1.5).

Реализация:


import numpy as np
from scipy.stats import kurtosis # Возвращает избыточный эксцесс (Fisher's definition)

X = np.array([1, 2, 3])
# Используя scipy:
kurtosis_val = kurtosis(X, fisher=True) # fisher=True (по умолч.) -> избыточный эксцесс
kurtosis_pearson = kurtosis(X, fisher=False) # fisher=False -> Эксцесс Пирсона (как в формуле)

# Или по определению (используя несмещенную оценку ст.откл.):
mu = np.mean(X)
sigma = np.std(X, ddof=1)
if sigma > 0:
    kurtosis_def = np.mean(((X - mu) / sigma)**4)
    # Примечание: это не несмещенная оценка.
else:
    kurtosis_def = 0 # Или другое значение

2.19. Бинарная перекрестная энтропия (частный случай)

\[ \text{BCE}(y, \hat{y}) = -\frac{1}{n} \sum_{i=1}^{n} [y_i \log(\hat{y}_i) + (1 - y_i) \log(1 - \hat{y}_i)] \]

Объяснение: Бинарная перекрестная энтропия — это функция потерь, используемая для задач бинарной классификации. Она измеряет расхождение между предсказанными вероятностями (\(\hat{y}\)) и истинными метками (\(y\)).

Пример: Для \(y = [1, 0]\) и \(\hat{y} = [0.8, 0.2]\), вычислить BCE \( = -\frac{1}{2} [ (1 \cdot \log(0.8) + (1-1) \log(1-0.8)) + (0 \cdot \log(0.2) + (1-0) \log(1-0.2)) ] = -\frac{1}{2} [\log(0.8) + \log(0.8)] = -\log(0.8) \approx 0.223\). (Примечание: В исходном примере формула была \(-\frac{1}{2}(\log(0.8) + \log(0.8))\), что совпадает с результатом. Если же имелось в виду \(-\frac{1}{2}(\log(0.8) + \log(1-0.2))\) по формуле, результат тот же).

Реализация:


import numpy as np

y = np.array([1, 0])
y_hat = np.array([0.8, 0.2])

# Добавляем малое число epsilon для избежания log(0)
epsilon = 1e-15
y_hat = np.clip(y_hat, epsilon, 1 - epsilon)

bce = -np.mean(y * np.log(y_hat) + (1 - y) * np.log(1 - y_hat))

2.20. Дисперсия (Альтернативная формула)

\[ \text{Var}(X) = E[X^2] - (E[X])^2 \]

Объяснение: Альтернативная формула для дисперсии использует разницу между математическим ожиданием квадрата X и квадратом математического ожидания X. Этот метод часто более эффективен вычислительно.

Пример: Для \(X = \{1, 2, 3\}\), предположим равномерное распределение \(P(i)=1/3\). Вычислить \(E[X^2] = \frac{1^2 + 2^2 + 3^2}{3} = \frac{1 + 4 + 9}{3} = \frac{14}{3} \approx 4.67\). \(E[X] = \frac{1+2+3}{3} = 2\). \((E[X])^2 = 2^2 = 4\). Тогда \(\text{Var}(X) = \frac{14}{3} - 4 = \frac{14 - 12}{3} = \frac{2}{3} \approx 0.67\).

Реализация:


import numpy as np

X = np.array([1, 2, 3])
# Для набора данных напрямую:
E_X2 = np.mean(X**2)
E_X = np.mean(X)
variance = E_X2 - E_X**2 # Это дисперсия генеральной совокупности (или смещенная выборочная)

# Для несмещенной выборочной дисперсии используйте np.var(X, ddof=1)
variance_unbiased = np.var(X, ddof=1)
Предыдущая глава    Следующая глава

Другие статьи по этой теме: