Основы теории вероятностей для будущих программистов и дата-аналитиков
Теория вероятностей — важный инструмент, который помогает создавать случайные числа для симуляций и криптографии, улучшать алгоритмы и структуры данных, а еще — разрабатывать точные модели для машинного обучения.
Вместе с Ильей Котовым, специалистом по Data Science в МТС Big Data, разбираемся в основных понятиях теории вероятностей и рассказываем, где и как ее используют.
Содержание
Что такое теория вероятностей
Теория вероятностей — это раздел математики, который изучает случайные события и ищет в них закономерности.
Она использует математические модели для описания случайных процессов, таких как розыгрыш лотереи или изменение погоды. С ее помощью специалисты могут анализировать и предсказывать исходы в условиях неопределенности.
Разберем основные понятия теории вероятностей.
Вероятность
Это числовая мера, которая показывает степень вероятности того, что произойдет конкретное событие. Она выражается числом от 0 до 1, где 0 — событие невозможно, 1 — событие обязательно случится.
Например, при броске монеты вероятность выпадения каждой из сторон составляет 0,5, или 50%.
Случайное событие
Это возможный исход случайного эксперимента, который может произойти или нет. Такой эксперимент — это событие или действие, результат которого нельзя точно предсказать из-за влияния случайных факторов.
Например, вероятность выпадения осадков метеорологи определяют, анализируя статистические данные.
Распределения вероятностей
Показывают, с какой вероятностью могут произойти разные исходы случайного события.
Существуют разные математические модели, или типы распределений, которые описывают эту вероятность. Выбор конкретного типа зависит от того, какие данные анализируются или какая ситуация моделируется. Они делятся на две группы: дискретные и непрерывные.
Дискретные распределения
Используются для описания событий, у которых определенное количество возможных исходов. То есть когда результаты события можно перечислить по пунктам.
Пример: бросок игральной кости может дать один из шести возможных результатов — от 1 до 6. Каждый результат можно четко определить и посчитать.
Примеры дискретных распределений:
Равномерное распределение — одно из самых простых распределений, при котором у всех исходов одинаковая вероятность.
Например, при бросании монеты вероятность выпадения орла или решки равна 0,5.
Биномиальное распределение — используется для моделирования числа успешных исходов в серии независимых испытаний с двумя возможными исходами: успех или неудача.
Пример: вероятность того, что при бросании монеты орел выпадет 3 раза из 5.
Пуассоновское распределение — применяется для определения вероятности того, сколько раз произойдет определенное событие за фиксированный период времени или в определенном пространстве.
Это распределение используется, когда события случаются независимо друг от друга и с постоянной средней частотой.
Пример — сколько звонков поступит в колл-центр за час.
Геометрическое распределение — описывает, сколько требуется попыток для достижения первого успеха. При этом вероятность успеха должна быть одинаковой.
Например, сколько раз нужно бросить монету до первого выпадения орла.
Гипергеометрическое распределение — вероятность нахождения точного числа конкретных объектов (K) в случайной выборке фиксированного размера (n) из конечной совокупности (N).
Пример: какова вероятность вытянуть ровно два туза, если мы выберем пять карт из колоды.
Непрерывные распределения
Используются для описания событий, у которых может быть бесконечно много исходов. В непрерывном распределении нельзя точно перечислить все возможные результаты, потому что они не ограничены конкретными значениями, а могут быть любым числом в заданном промежутке.
Эти распределения применяют для анализа данных и моделирования ситуаций, где результаты измеряются непрерывными величинами, такими как вес, рост, время, температура и т.д.
Примеры непрерывных распределений:
Нормальное (гауссово) распределение — данные распределяются по форме колокола. Большинство значений сгруппированы вокруг среднего.
Например, если взять рост людей, то у большинства он будет около среднего, а очень высоких или очень низких людей будет мало.
Экспоненциальное распределение — форма гауссова распределения, в которой данные описывают время между событиями, которые происходят с постоянным средним интервалом.
Например, среднее время поездки автобуса из одного пункта в другой.
Распределение хи-квадрат — используется для анализа различий между ожидаемыми и наблюдаемыми данными.
Пример: компания проводит опрос клиентов, чтобы узнать, какой двух дизайнов упаковки продукта им больше нравится, и предполагает, что новый дизайн предпочитает 70% покупателей. Если различия между ожидаемыми и фактическими значениями минимальны, компания будет выпускать товар только в новых упаковках.
Распределение Фишера (F-распределение) — помогает сравнивать группы данных и проверять, насколько их различия значимы.
Пример: университет использует две разные методики обучения и хочет узнать, есть ли статистически значимые различия между результатами двух групп учеников, каждая из которых училась по своей методике.
Случайная величина
Переменная, которая принимает одно значение в зависимости от результата случайного эксперимента. Может быть двух видов:
Дискретная — принимает конечное или бесконечное количество отдельных значений. К примеру, количество студентов на курсе — всегда целое число.
Непрерывная — может принимать любые значения в определенном диапазоне. Например, площадь участка, которая тоже может быть измерена с любой степенью точности: километры состоят из метров, метры из сантиметров и т. д.
Характеристики случайной величины
Математическое ожидание
Среднее значение случайной величины, которое она принимает в долгосрочной перспективе при многократном повторении эксперимента.
Для дискретной случайной величины
Формула:
где:
M(X) — математическое ожидание случайной величины X,
∑i=1nxi — сумма всех возможных значений случайной величины,
P(X=xi) — вероятность того, что случайная величина X примет значение xi,
n — количество различных значений случайной величины.Пример: предположим, у нас есть шестигранная игральная кость. Математическое ожидание выпадения на кости равно среднему значению всех возможных выпадающих значений.
Выглядит это так:
М Х=161+162+ 163+ 164+ 165+ 166= (1 + 2 + 3 + 4 + 5 + 6)6 = 3,5
Так как каждый бросок независим и вероятности выпадения каждого значения одинаковы, то в долгосрочной перспективе на протяжении большого количества бросков мы ожидаем, что среднее значение будет стремиться к 3,5.
В указанном примере вероятности выпадения каждого значения равны, так как распределение равномерное. В любом случае, P(X=xi) нужно рассчитывать, исходя из вида распределения вероятностей.
Для непрерывной случайной величины
Формула вычисления математического ожидания немного отличается. Вместо суммы используется интеграл, поскольку непрерывные случайные величины принимают значения на непрерывном интервале.
Формула:
где:
x — значение случайной величины,
f(x) — функция плотности вероятности (зависит от вида распределения вероятностей),
dx — обозначение бесконечно малого приращения (изменения) x.Пример: мы исследуем время ожидания автобуса на остановке. Предположим, что время ожидания до прихода следующего автобуса описывается экспоненциальным распределением с параметром интенсивности λ=0,2. Иначе говоря, в среднем каждые 5 минут приходит автобус.
Функция плотности вероятности для экспоненциального распределения:
fx;λ=λe-λx=0,2e-0.2x
Теперь вычислим математическое ожидание E(X), где X — время ожидания до прихода следующего автобуса:
EX= 0x0,2e-0.2xdx= 10,2 =5
Математическое ожидание времени до прихода следующего автобуса равно 5 минутам.
Дисперсия
Мера разброса значений случайной величины от ее среднего значения.
Пример: у нас есть случайная величина — количество посетителей магазина в день. В среднем в магазин приходит 100 человек в день, а количество посетителей может варьироваться от 80 до 120 в день.
Если представить, что вероятность посещения для 80, 100 и 120 человек одинакова, то можно рассчитать дисперсию так:
DX= ((80-100)2P80+100-1002P100+120-1002*P(120))/n=800P/3
Какие языки программирования используют для работы с теорией вероятностей
Python
Python — один из самых популярных языков для работы с теорией вероятностей. Он простой в использовании и содержит множество библиотек и фреймворков, с помощью которых можно легко работать с вероятностными и статистическими моделями.
Основные библиотеки:
NumPy — базовые математические и статистические функции;
SciPy — продвинутые математические и статистические функции;
Pandas — работа с табличными данными и временными рядами;
Matplotlib и Seaborn — визуализация данных;
Statsmodels — статистическое моделирование;
Scikit-learn — машинное обучение и моделирование.
R
R специально разработан для статистического анализа и визуализации данных.
Основные библиотеки:
dplyr и data.table — работа с данными;
ggplot2 — визуализация данных;
caret — машинное обучение.
MATLAB
MATLAB используют в инженерии и научных исследованиях для математических вычислений. Он содержит разные функции для расчета вероятностей, статистического анализа и машинного обучения. Это коммерческая платформа, которую можно использовать при покупке дорогой лицензии, поэтому начинающим программистам лучше рассмотреть более доступные варианты.
Основной инструмент — библиотека для статистического анализа и машинного обучения Statistics and Machine Learning Toolbox.
Как генерируются случайные числа
Для представления результата случайной величины нужны случайные числа. Процесс их создания называется генерацией. Генерация случайных чисел делится на два основных типа: истинно случайные и псевдослучайные числа.
Истинно случайные числа
Создаются с помощью специальных устройств, которые используют непредсказуемые физические процессы: атмосферный шум, радиоактивный распад и так далее.
Примеры генерации истинно случайных чисел (ГИСЧ):
Intel RDRAND — аппаратная инструкция, встроенная в процессоры Intel, которая генерирует числа с помощью цифрового конвертера теплового шума.
Random.org — веб-сервис, который использует атмосферный шум для генерации истинно случайных чисел. Он предоставляет API для доступа к их сервисам.
Пример использования Random.org через API на языке Python
Получим 5 истинно случайных чисел в диапазоне от 1 до 100:
import requests
def get_true_random_numbers(count, min_value, max_value):
url = f"https://www.random.org/integers/?num={count}&min={min_value}&max={max_value}&col=1&base=10&format=plain&rnd=new"
response = requests.get(url)
if response.status_code == 200:
numbers = list(map(int, response.text.strip().split()))
return numbers
else:
raise Exception("Error fetching random numbers")
true_random_numbers = get_true_random_numbers(5, 1, 100)
print(true_random_numbers)
Где используется ГИСЧ: в сферах с очень высокими требованиями к безопасности, например, для шифрования данных или точных экспериментов в ходе научных исследований.
Псевдослучайные числа
Генерируются алгоритмами и кажутся случайными, но могут быть воспроизведены, если известно исходное значение, или «семя», seed.
Примеры генерации псевдослучайных чисел (ГПСЧ):
Линейный конгруэнтный генератор (LCG) — простейший генератор с высокой скоростью получения значений.
Полезен для моделирования и математической статистики. Небезопасен для использования в криптографии. Специалисты по криптоанализу смогут восстановить последовательность случайных чисел.
Пример использования в Python:
В Python реализацию LCG можно выполнить вручную, используя базовый синтаксис языка. Вы можете определить функцию, которая будет генерировать последовательность псевдослучайных чисел.
from typing import Generator
def lcg(modulus: int, a: int, c: int, initial_value: int) -> Generator[int, None, None]:
"""Линейный конгруэнтный генератор (LCG)."""
current_value = initial_value
while True:
current_value = (a * current_value + c) % modulus
yield current_value
# Генерируем 10 псевдослучайных чисел
lcg_generator = lcg(modulus=2**32, a=1664525, c=1013904223, initial_value=42)
for _ in range(10):
print(next(lcg_generator))
Также в библиотеке NumPy есть функция numpy.random.RandomState, которая использует LCG в качестве одного из методов генерации случайных чисел:
import numpy as np
# Создаем экземпляр генератора
rng = np.random.RandomState(seed=42)
# Генерируем 10 случайных чисел
random_numbers = rng.rand(10)
print(random_numbers)
Вихрь Мерсенна (Mersenne Twister) — один из самых популярных генераторов с хорошим качеством случайности и длинным периодом до повторения последовательности.
Также не предназначен для использования в криптографии, но эффективен в моделировании, симуляции, тестировании.
Как использовать в Python: Mersenne Twister представлен в стандартной библиотеке random. Доступны функции random.random(), random.randint(), random.uniform() и другие.
Сферы применения ГПСЧ: используется в компьютерных играх, Data Science, моделировании, симуляции и других сферах.
Криптографически стойкие генераторы случайных чисел
В криптографии используются специальные криптографически стойкие генераторы случайных чисел (КСГПСЧ) для создания надежных ключей и паролей.
КСГПСЧ проходят различные проверки для того, чтобы убедиться в их надежности и безопасности:
Анализ случайности чисел: статистические тесты для проверки на равномерность распределения случайных чисел, отсутствие корреляций и предсказуемости.
Оценка в криптографических протоколах: генераторы тестируются в контексте криптографических протоколов, чтобы убедиться в их устойчивости к атакам.
Шифрование и дешифрование данных: надежность КСГПСЧ дополнительно проверяется через шифрование и дешифрование данных, чтобы оценить сохранение целостности и конфиденциальности информации.
Анализ энтропии: проверка случайности и непредсказуемости чисел, которые генерирует КСГПСЧ. Чем выше энтропия, тем труднее предсказать следующее число в последовательности, что делает систему более безопасной.
Примеры генераторов КСГПСЧ:
Алгоритм Ярроу — использует несколько пулов энтропии и механизм комбинирования, чтобы гарантировать высокую степень случайности и безопасность.
Алгоритм Ярроу можно реализовать на Python с помощью библиотеки Python Cryptography Toolkit.
Создаем генератор случайных чисел Yarrow и в бесконечном цикле генерируем и выводим случайные биты:
from PythonCryptographyToolkit import Yarrow
y = Yarrow()
while True:
print(y.next_bit())
Fortuna — устраняет некоторые недостатки Ярроу и предлагает более гибкую и безопасную архитектуру.
Можно реализовать на Python с помощью библиотеки Fortuna:
from Fortuna import RandomValue, front_linear, back_linear
random_car = RandomValue(("Toyota", "Honda", "Ford", "BMW", "Audi"), zero_cool=front_linear)
random_vehicle = RandomValue((lambda: f"Car, {random_car()}", "Bicycle", "Motorcycle", "Bus", "Train"), zero_cool=back_linear)
print(random_vehicle())
Этот код будет выводить случайное значение из набора транспортных средств и марок автомобилей. Например, возможные выходы могут быть «Car, Toyota», «Bicycle», «Motorcycle», «Bus», или «Train».
Кратко: в чем отличия между ГИСЧ и ГПСЧ
Истинно случайные | Псевдослучайные | |
Источник случайности | Физические процессы | Математические алгоритмы |
Предсказуемость | Непредсказуемы и не воспроизводимы | Воспроизводимы при известном «семени» |
Производительность | Медленнее и менее производительны | Генерируются быстрее и требуют меньше вычислительных ресурсов |
Воспроизводимость | Нельзя воспроизвести конкретный сценарий | Можно повторять одни и те же сценарии |
Степень случайности | Нельзя контролировать | Можно контролировать для большей предсказуемости |
Где применяют теорию вероятностей
Криптография
Теория вероятностей помогает обезопасить данные от взлома. Вот несколько способов, как она используется:
Создание ключей. С помощью генерации случайных чисел можно создавать уникальные и надежные ключи для шифрования сообщений.
Проверка случайности. Для проверки безопасности ключей используют вероятностные тесты. Если ключ проходит их — значит, его трудно предсказать.
Протоколы обмена ключами. При передаче ключей через интернет применяют методы, которые защищают ключи, даже если их перехватят злоумышленники.
Шифрование и дешифрование. С помощью теории вероятностей создают алгоритмы, которые изменяют данные так, что без правильного ключа их невозможно прочитать.
Машинное обучение
Теорию вероятностей используют в машинном обучении с подкреплением, чтобы найти лучшие способы действий в среде, где результаты непредсказуемы.
Пример — обучающая среда CoinRun. В ней модель испытывает разные стратегии, чтобы научиться достигать целей, например собирать монеты.
Вероятностные модели также могут предсказывать результаты тех или иных действий на основе входных данных, а еще оценивать принадлежность объекта к определенному классу и распознавать речь.
Как это работает: например, системы распознавания речи моделируют последовательность звуков как серию состояний с вероятностными переходами между ними. Так система учится предсказывать следующий звук на основе предыдущих.
Анализ данных и Data Science
Анализ данных пользователей в социальных сетях. Теория вероятностей помогает изучать поведение людей в интернете, чтобы понять, как они взаимодействуют друг с другом и какой контент будет им интересен.
Например, с помощью модели случайного блуждания можно понять, как информация перемещается от одного пользователя к другому.
Прогнозирование временных рядов в бизнес-аналитике. Это методы анализа данных, которые предсказывают будущие цены или значения таких инструментов, как акции, облигации или валюты, на основе их прошлых показателей. К ним относятся, например, модель ARIMA и метод Монте-Карло.
Анализ активности клиентов в онлайн-ритейле. Отслеживание действий клиентов на сайте помогает улучшить опыт пользования сайтом и увеличить продажи. Так, например, модель логистической регрессии оценивает вероятность того, что покупатель купит определенный товар.
Видеоигры
Многие игры используют случайные числа, чтобы сделать события непредсказуемыми, например: появление врагов, выпадение предметов или случайные игровые сценарии. Для этого применяют генератор псевдослучайных чисел.
Такие события могут быть случайными еще до того, как игрок примет решение. К примеру, расположение объектов в играх-песочницах. Другие случайные события происходят после того, как игрок сделал выбор. Например, шанс попасть по врагу или увернуться от атаки.
Как изучить теорию вероятностей
Илья Котов
Data Scientist в МТС Big Data
Сложные темы, такие как случайные процессы и моделирование, обычно изучают на технических и экономических факультетах. Во время учебы студенты не только узнают основы теории, но и учатся работать с данными, что важно для работы в области искусственного интеллекта.
Также учеба в вузе — это возможность поучаствовать в научных проектах. Это помогает лучше понять предмет и получить опыт для будущей карьеры в науке и технологиях
Полезные материалы по теме:
Probability and Statistics, Khan Academy — бесплатный курс от «Академии Хана» с интерактивными видео и викторинами. Он состоит из 16 модулей и включает такие темы, как условная вероятность, комбинаторика, распределение вероятностей, описательная статистика.
Introduction to Probability, Dimitri P. Bertsekas and John N. Tsitsiklis — Вводное пособие на английском языке, которое используют в Массачусетском технологическом институте. Здесь описаны как основы теории вероятностей: вероятностные модели, дискретные и непрерывные случайные величины, так и более продвинутые темы, например байесовский вывод, теоремы Бернулли и Пуассона.
«Теория вероятностей и математическая статистика», Н. Ш. Кремер — учебник по основам теории вероятностей и математической статистики с руководством по решению задач. Есть примеры использования в моделях финансового рынка и производственных процессах.
Глубокие знания по теории вероятностей можно получить на новой магистратуре по бизнес-информатике РУДН и Skillfactory. Студенты научатся применять математические модели для анализа данных и решения реальных задач. А еще самостоятельно проектировать корпоративные системы и настраивать под бизнес-процессы клиентов.