Монте-Карло в Python или в Excel: что выбрать

Симуляцию Монте-Карло можно сделать формулами Excel, надстройкой для Excel или на Python с библиотекой NumPy. Python удобен аналитикам, которые пишут код, для больших объемов данных и автоматизации. Excel удобен, когда модель должны понимать и проверять финансисты, сметчики и руководство: формулы видны в ячейках. Надстройка добавляет к Excel распределения, корреляции, анализ чувствительности и отчеты без программирования. Ниже — один и тот же пример тремя способами.

Когда в компании решают начать считать риски методом Монте-Карло, первым встает вопрос инструмента. Аналитики с опытом программирования предлагают Python, финансисты — Excel. Правильный ответ зависит не от вкуса, а от того, кто будет строить модель, кто будет ее проверять и как часто она будет меняться.

Один пример — три способа

Возьмем модель из статьи «Метод Монте-Карло в Excel»: прибыль = объем × (цена − переменные затраты) − постоянные затраты, план — 1,2 млн руб., каждый фактор задан тремя оценками и PERT-распределением.

1. Формулы Excel без надстроек

Каждый фактор — формула со случайным числом, например для объема:

=БЕТА.ОБР(СЛЧИС();2,6;3,4;8000;13000)

Модель копируется на 5000 строк (по строке на итерацию), результаты собираются функциями СРЗНАЧ, ПРОЦЕНТИЛЬ.ВКЛ и СЧЁТЕСЛИ. Все видно в ячейках, но при каждом изменении книга пересчитывается заново, а корреляции и торнадо-диаграмму придется строить вручную.

2. Excel с надстройкой МоделРиск

Объем: =VoseInput("Объем продаж")+VosePERT(8000;10000;13000) Прибыль: =VoseOutput("Прибыль")+C3*(C4-C5)-C6

Модель остается в одной строке, симуляцию запускает кнопка, а окно результатов показывает гистограмму, S-кривую, статистику и торнадо-диаграмму.

3. Python с NumPy

import numpy as np rng = np.random.default_rng(2026) n = 10_000 def pert(a, m, b, size): al = 1 + 4 * (m - a) / (b - a) be = 1 + 4 * (b - m) / (b - a) return a + (b - a) * rng.beta(al, be, size) volume = pert(8_000, 10_000, 13_000, n) price = pert(900, 1_000, 1_050, n) var_cost = pert(560, 600, 700, n) fixed = pert(2.6e6, 2.8e6, 3.3e6, n) profit = volume * (price - var_cost) - fixed print(f"Средняя прибыль: {profit.mean() / 1e6:.2f} млн руб.") print(f"P10–P90: {np.percentile(profit, 10) / 1e6:.2f}–{np.percentile(profit, 90) / 1e6:.2f} млн руб.") print(f"Вероятность ниже плана: {(profit < 1.2e6).mean():.0%}") print(f"Вероятность убытка: {(profit < 0).mean():.1%}")

Результат: средняя прибыль 1,04 млн руб., P10–P90 — 0,36–1,75 млн руб., вероятность не выполнить план — 63 %, вероятность убытка — 2,0 %. Это те же выводы, что и в Excel, с точностью до случайной погрешности (в Excel-версии 5000 итераций и другие случайные числа).

Сравнение

Формулы ExcelExcel + МоделРискPython
Кто может построить модельЛюбой пользователь ExcelЛюбой пользователь ExcelАналитик, пишущий код
Кто может проверить модельФинансисты, аудиторыФинансисты, аудиторыТолько те, кто читает код
РаспределенияНесколько встроенныхБолее ста, включая подбор по даннымДесятки в NumPy и SciPy
КорреляцииВручную, громоздкоКорреляционные матрицы и копулыКод, нужна квалификация
Анализ чувствительностиВручнуюТорнадо, паук-диаграммы, рассеяниеКод
Отчеты и графикиВручнуюОкно результатов, экспорт отчетовКод (matplotlib и др.)
Размер модели и скоростьНебольшие моделиТипичные финансовые и проектные моделиЛюбые, включая большие данные
Автоматизация, интеграцияОграниченаВ рамках ExcelПолная
СтоимостьБесплатноЛицензияБесплатно, но время разработчика

Когда выбрать Python

  • Модель встроена в информационную систему и пересчитывается автоматически, например ежедневно.
  • Исходные данные — большие массивы: тысячи договоров, позиций, скважин, объектов.
  • Нужны нестандартные методы: машинное обучение, сложные стохастические процессы.
  • Модель строят и сопровождают специалисты по данным, а пользователи видят только результаты.

Когда выбрать Excel

  • Модель уже существует в Excel: бюджет, финансовая модель проекта, смета. Переписывать ее на Python — значит создать вторую модель, которую придется сверять с первой.
  • Модель должны понимать и проверять финансисты, сметчики, инвестиционный комитет, аудиторы.
  • Модель часто меняется по ходу обсуждения: «а если цена будет другой», «добавьте этот риск».
  • Результат нужно быстро превратить в отчет для руководства.

Для простых моделей хватит формул. Когда нужны корреляции, подбор распределений по данным, анализ чувствительности и воспроизводимые отчеты, удобнее надстройка: МоделРиск добавляет в Excel функции распределений, симуляцию и окно результатов, не меняя логику модели.

Типичные ошибки в обоих случаях

  • Одно случайное число на несколько величин. В Excel — ссылка на одну ячейку СЛЧИС из разных формул, в Python — повторное использование одного массива. Величины становятся полностью зависимыми.
  • Нет фиксированного начального числа генератора. Результаты меняются при каждом запуске, и невозможно воспроизвести цифры отчета.
  • Мало итераций. Для средних хватает тысяч, для хвостов (P99) нужно больше — см. статью «Метод Монте-Карло в анализе рисков».
  • Независимость по умолчанию. Связанные величины моделируются как независимые — см. «Корреляция рисков».

Обзор специализированных программ — в статье «Программы для анализа рисков методом Монте-Карло».

Частые вопросы

Какая библиотека Python нужна для метода Монте-Карло?

Для большинства задач достаточно NumPy: генераторы случайных чисел и распределения, векторные вычисления. SciPy добавляет больше распределений и подбор параметров по данным, pandas — работу с таблицами, matplotlib — графики.

Можно ли сделать Монте-Карло в Google Таблицах или LibreOffice?

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

Python быстрее Excel?

Векторные вычисления в NumPy обычно намного быстрее пересчета тысяч строк формул Excel. Но для типичной финансовой модели или сметы и надстройка Excel выполняет тысячи итераций за секунды, так что скорость редко бывает решающим фактором.

Как проверить, что модель на Python считает правильно?

Так же, как в Excel: сравнить детерминированный расчет при наиболее вероятных значениях с исходной моделью, проверить средние и диапазоны отдельных распределений, запустить симуляцию с другим начальным числом генератора и убедиться, что результаты близки.

30дней

МоделРиск

МоделРиск — надстройка Excel для анализа рисков методом Монте-Карло. Пробная версия на 30 дней без ограничений.

Скачать МоделРиск бесплатно →

Тимур Купеев

Директор ООО «Стратегия Риска»

Руководит разработкой и внедрением МоделРиск, Тамары и Пеликана и проектами по количественному анализу рисков в промышленных, энергетических и финансовых компаниях.