Монте-Карло простыми словами
Карьерник — квиз-тренажёр в Telegram с 1500+ вопросами для собесов аналитика. SQL, Python, A/B, метрики. Бесплатно.
Короткое объяснение
Монте-Карло (Monte Carlo simulation) — метод решения задачи через много случайных экспериментов.
Идея: вместо сложной аналитической формулы — симулировать процесс тысячи раз и взять среднее / распределение.
Классический пример — число π
Как посчитать π через Monte Carlo:
- Нарисуйте квадрат со стороной 2, центр (0,0)
- В него вписан круг радиуса 1
- Случайно бросайте точки в квадрат
- Считайте, какая доля попала в круг
- π ≈ 4 × (доля в круге)
import numpy as np
n = 1_000_000
x = np.random.uniform(-1, 1, n)
y = np.random.uniform(-1, 1, n)
inside_circle = (x**2 + y**2) < 1
pi_estimate = 4 * np.mean(inside_circle)
# ≈ 3.1416Ничего не знаем про геометрию — получили π через случайность.
Зачем нужно
Когда аналитическое решение сложное или невозможное. Monte Carlo работает для:
- Оценка неопределённости (ДИ, риск)
- Сложные распределения (где нет формулы)
- Путь через зависимые переменные
- Финансовые прогнозы
- Физика, инжиниринг
Базовый алгоритм
- Определить модель процесса
- Задать распределения для входных параметров
- Для каждой итерации:
- Сгенерировать random значения по распределениям
- Вычислить outcome
- Повторить N раз
- Анализировать распределение outcomes
Пример: прогноз revenue
У вас модель:
Revenue = Visitors × Conversion × AOVКаждая переменная имеет distribution:
- Visitors: normal, mean=10000, std=1000
- Conversion: uniform, 2-4%
- AOV: lognormal, mean=3000, std=500
Аналитически посчитать distribution revenue сложно. Monte Carlo — легко.
import numpy as np
n = 100_000
visitors = np.random.normal(10000, 1000, n)
conversion = np.random.uniform(0.02, 0.04, n)
aov = np.random.lognormal(np.log(3000), 0.2, n)
revenue = visitors * conversion * aov
# analysis
print(f"Mean: {revenue.mean():,.0f}")
print(f"P10: {np.percentile(revenue, 10):,.0f}")
print(f"P50: {np.percentile(revenue, 50):,.0f}")
print(f"P90: {np.percentile(revenue, 90):,.0f}")Получаем не только ожидаемое, но и распределение.
Применения в аналитике
1. ДИ для сложных метрик
Confidence interval для ratio, pareto, composite metric — через Monte Carlo.
2. Risk analysis
Probability что проект не уложится в бюджет / сроки.
3. Bayesian методы
MCMC (Markov Chain Monte Carlo) — для байесовских моделей.
4. A/B-test simulation
«Если бы эффект был X, сколько выборки нужно?» — симуляция.
5. Finance / portfolio
Моделирование инвестиционных результатов за 30 лет.
6. Supply chain
Прогноз спроса / запасов с uncertainty.
Преимущества
- Универсальность: работает для любой задачи
- Не требует аналитических формул
- Даёт распределение, не только точку
- Легко объясняется (просто симуляция)
Недостатки
- Медленно: тысячи итераций на большой модели
- Точность ∝ √N: для 10× точности нужно 100× итераций
- Требует правильных input distributions: «мусор на входе = мусор на выходе»
Monte Carlo vs Bootstrap
- Monte Carlo: генерирует новые данные по предположению о distribution
- Bootstrap: resample из существующих данных
Bootstrap — частный случай Monte Carlo, где distribution = emperical.
Разновидности
Standard Monte Carlo
Обычная random simulation.
MCMC (Markov Chain Monte Carlo)
Для байесовского вывода. Поддерживает правильные сложные посзадачи.
Quasi-Monte Carlo
Low-discrepancy sequences вместо pure random. Быстрее сходится.
Monte Carlo Tree Search
Для игр (AlphaGo). Не совсем тот Monte Carlo, но концепция похожа.
На собесе
«Что такое Monte Carlo?» Решение задачи через много случайных экспериментов.
«Зачем?» Когда аналитическое решение сложно / невозможно.
«Пример?» Прогноз revenue с uncertainty: симулируем тысячи сценариев.
«Monte Carlo vs Bootstrap?» MC — из предполагаемого distribution. Bootstrap — resample из данных.
Частые ошибки
1. Мало итераций
1000 — минимум. 10 000 — стандарт. 100 000+ для точных чисел.
2. Плохие input distributions
Если предположения неверны — результат бесполезен. Валидируйте inputs.
3. Independence assumption
MC обычно предполагает независимые переменные. Если есть correlation — моделируйте через multivariate distribution.
4. Deterministic thinking
Результат Monte Carlo — distribution, не одно число. Всегда репортите percentiles.
Связанные темы
FAQ
Сколько итераций?
10 000 обычно. Чем точнее — тем больше.
Можно ли на malih данных?
Можно, но bootstrap обычно удобнее.
Где применяется в RU компаниях?
Finance (портфельный анализ), retail (прогноз спроса), tech (A/B sample size).
Python или R?
Оба. В Python — numpy + scipy. В R — встроенные функции + mcmc пакеты.
Тренируйте статистику — откройте тренажёр с 1500+ вопросами для собесов.