Финансовое моделирование — это не просто таблички. Это способ прогнозировать, принимать решения и быть на шаг впереди. Мы, финансисты, любим Excel за простоту, в то же время, ненависть к этому чудесному инструменту возрастает пропорционально количеству переменных в формулах. И, когда задач становится больше, — он начинает тормозить и сильно раздражать.
Ниже я расскажу:
Почему я, как гуманитарий, начала осваивать Python.
Как связка Excel + Python работает на практике.
Как один и тот же проект ведёт себя в этих двух мирах.
Кто я?
Меня зовут Валя. Я — экономист с гуманитарным бэкграундом. В школе мечтала стать переводчиком, выучила три иностранных языка. На экономику попала почти случайно, и с тех пор моя жизнь постепенно сместилась от слов к цифрам. В университете пришлось подружиться с математикой: мат.анализ, статистика, эконометрика — всё «как у взрослых».
Дальше был SQL, после него я поняла, какое счастье подключать технические инструменты и не «перекликивать» бесконечные таблички вручную. Со временем я начала автоматизировать свою работу и дошла до Python. Мой код прост, но он решает задачи — считает метрики, собирает отчёты и строит прогнозы. Для финансов этого уровня мне хватает.
Зачем это пишу?
Финансовое моделирование — это про деньги.

В любом бизнесе есть идея, продукт, команда. Но суть предпринимательства — в прибыли. И ещё до того, как бизнес начнёт работать, нужно понять:
будет ли вообще прибыль?
когда она появится?
сколько составит?
при каких условиях?
И вот тут в дело вступают экономисты. Мы берём будущую реальность и пытаемся её «посчитать», как правило, в Excel. Если говорить просто — строим модель, например, кофейни.
Считаем, сколько будут стоить аренда, зарплата бариста, закупка кофе и булочек. Определяем, сколько клиентов должно приходить в день, чтобы бизнес хотя бы вышел в ноль, а затем начал приносить прибыль. В результате получаем ответ: через три года проект окупится, а после этого прибыль будет такой-то. Это и есть финансовое моделирование.
Но на этом никто не останавливается. Нас спрашивают: а что, если булочки делать без изюма? Себестоимость снизится, а значит — прибыль возрастёт? А если повысить зарплату? А что, если аренда увеличится? Мы меняем параметры, строим графики, проводим анализ чувствительности, определяем точку безубыточности. Всё звучит логично и понятно — пока кейс остаётся простым.
А что если это не кофейня, а завод с 1000 единицами товара? А если бизнес работает в разных регионах, у каждого свои условия — логистика, особенности рынка? Если переменных десятки, а сценариев — сотни?
В этот момент любой здравомыслящий специалист задаёт себе вопрос: как упростить работу? Как сделать модель удобной и гибкой, чтобы можно было быстро просчитать разные сценарии, города, продукты — всё сразу?
И вот тут появляется Python. Нет, он не волшебная палочка, но очень помогает. Это не замена Excel — это его сильное дополнение. Python позволяет создать модель, в которую можно загрузить любые данные, быстро изменить параметры, прогнать множество сценариев и получить понятный результат.
Кроме того, он автоматизирует рутину, ускоряет расчёты и делает работу с моделью в целом приятнее.
Вот о чём я и пишу: хочу показать, как Python может стать настоящим помощником для финансиста.
Дисклеймер: я не претендую на роль полноценного разработчика, а показываю, как с этим работаю сама и упрощаю себе жизнь будучи финансистом в ИТ. Уверена, мой опыт найдет своего читателя :)
Excel уже не справляется

Прежде чем начать, скажу пару слов про VBA. Это рабочий инструмент, и с его помощью действительно можно решать многие задачи внутри Excel. Если вы уже умеете с ним работать, — здорово. Но если вы только ищете, с чего начать, обратите внимание на Python. Он универсальнее, выходит за рамки Excel и может использоваться гораздо шире.
Python активно помогает там, где Excel начинает тормозить. Большие объемы данных, сложные условия, многократные однотипные действия — то, что в Excel каждый раз занимает часы, в Python можно автоматизировать раз и навсегда. Особенно это важно, если вы:
готовите регулярную отчетность;
работаете с несколькими источниками данных;
строите расчеты, которые нельзя уместить в одну строку формулы.
Можно, например, строить модели прогнозирования выручки не «на глазок» через линейный тренд в Excel, а с помощью библиотеки scikit-learn или statsmodels, подгрузив реальные данные. Или подключиться к базе данных ERP-системы и брать данные напрямую — без ручного копирования из выгрузок. Это дает ощущение, что модель живая. Что вы не рождены для ctrl+C и ctrl+V.
Не конкуренты, а союзники
Не подумайте, что я призываю отказаться от Excel. Я хочу показать, что Python и Excel — это мощная связка. А Excel по-прежнему идеален для:
визуализации результатов;
сбора обратной связи от коллег;
подготовки моделей к презентации.
Python же это возможность:
углубиться в аналитику;
повысить точность расчетов;
сократить время работы с данными.
Один из самых удачных рабочих процессов: черновой расчет — в Excel, автоматизация и логика — в Python, визуализация — в Power BI или снова в Excel.
На практике именно так и бывает: Excel-модель, построенная вручную, перерастает в Python скрипт, который уже не требует человеческого участия. А ты просто проверяешь корректность и обновляешь параметры при необходимости.
Почему все больше финансистов смотрят в сторону Python
Переход к Python — это не модное веяние, а отклик на реальные вызовы профессии. Все больше мировых институтов добавляют в свои учебные программы «Python для финансистов», что позволяет освоить навыки автоматизации и продвинутого анализа данных с помощью кода. А в крупных международных компаниях Python уже вошел в список требований к финансовым аналитикам и контролерам.
Что дает Python финансисту?
Если коротко, это:
Автоматизация. Устранение повторяющихся действий (копирование данных, очистка, пересчеты).
Гибкость. Возможность строить собственные функции и модели любой сложности, а не подгонять логику под ограниченный функционал Excel.
Скорость обработки данных. Особенно важно при работе с десятками тысяч строк и интеграциями из разных источников.
Повторное использование. Один раз написанный скрипт можно запускать снова и снова, получая одинаково корректный результат.
Интеграция. Прямая работа с базами данных, API, Power BI, облачными системами (а не через промежуточные выгрузки).
Предлагаю посмотреть на сравнение Excel и Python по ключевым параметрам:
Скрытый текст
Excel | Python | |
Простота начала | Очень высокая | Средняя (нужно освоить базу) |
Скорость на малых объемах | Отличная | Отличная |
Работа с большими объемами | Медленно, тормозит | Быстро, эффективно |
Автоматизация процессов | Ограничена | Практически не ограничена |
Многократное использование | Ограничено | Не ограничено |
Визуализация | Удобная и быстрая | Есть, но требует настройки |
Ошибки/человеческий фактор | Высокий риск (ручные формулы) | Ниже (при отлаженном коде) |
Командная работа | Часто конфликт версий, правки вручную | Git, версии, документация |
Обучение и доступность | Прост для новичков | Требует погружения |
Важно: Python не заменяет Excel, он расширяет его возможности. Важное уточнение — я не призываю становиться полноценным Python-разработчиком, потому что это не так просто, как кажется. Нам, финансистам, нужно понимать структуру, уметь читать код, писать простые скрипты и разбираться в логике расчетов.
Кейс: одна и та же модель в Excel и в Python
В качестве примера я построила одну и ту же финансовую модель, предположим, той же кофейни, с несложной структурой в Excel и Python.
Чтобы понять выгоден наш проект или нет, рассчитаю несколько показателей его эффективности.
Тут под спойлером важные финансовые аббревиатуры, которые буду использовать далее по тексту:
Скрытый текст
NPV — чистая приведенная стоимость. Показатель поможет понять, сколько можно заработать на проекте с учётом того, что деньги со временем теряют ценность.
Пример: мы вкладываем 1 млн, а возвращаем 1,5 млн, но через 5 лет. Сегодняшний миллион и миллион через 5 лет — не одно и то же. NPV позволяет это учесть. Если NPV положительный — проект выгоден, если отрицательный — лучше не надо.
IRR — внутренняя норма доходности. Проще говоря: какая процентная доходность у проекта. Если IRR выше, чем ставка по вкладу в банке, то проект интересен, если ниже — не очень.
PI — индекс прибыльности. Покажет, сколько рублей прибыли мы получим с каждого вложенного рубля. Если индекс больше 1, то проект прибыльный, если меньше — мы теряем деньги.
DPBP — дисконтированный срок окупаемости. Покажет, через сколько лет вернутся наши деньги с учётом их обесценивания. То есть не просто "когда верну", а "когда верну, если считать, что деньги со временем стоят меньше".
Затем я сделала анализ чувствительности — это когда мы берём важные параметры проекта (например, сколько продаём, по какой цене, сколько тратим, какие налоги платим) и по очереди меняем их. Смотрим, как это влияет на итог — например, на прибыль или на показатель NPV.
Главная цель — найти такие «граничные» значения, при которых проект уже перестаёт быть выгодным. Например: если снизить цену на капучино ниже определённого уровня — прибыль станет ноль. Или если затраты на булочки вырастут выше определённой суммы — проект больше не окупится.
Эти «пороговые» значения называются барьерными точками. Они показывают, где проходят границы допустимого, за которыми проект становится убыточным. Это помогает понять, какие параметры критичны и что нужно особенно внимательно контролировать.
В рамках проекта у нас есть базовый сценарий:
Объем выпуска, шт. | 3 000 |
Цена единицы продукции, у.е. | 890 |
Переменные затраты, у.е. | 360 |
Норма дисконта, % | 12 |
Постоянные затраты, у.е. | 10 000 |
Амортизация, у.е. | 9 000 |
Налог на прибыль, % | 30 |
Срок проекта, лет | 8 |
Остаточная стоимость, у.е. | 9 000 |
Начальные инвестиции, у.е. | 3 500 000 |
Далее необходимо рассчитать NPV. Я решила считать все одной формулой, чтобы не увеличивать масштаб работы.
В одной формуле я рассчитала:
Выручку = объем выпуска * цена единицы продукции
Переменные затраты = объем выпуска * переменные затраты на единицу
EBIT = выручка – переменные затраты – постоянные затраты – амортизация
Чистую прибыль = EBIT * 0,7 (здесь избавляюсь от налога 30%)
Денежный поток = Чистая прибыль + амортизация
Затем в этой же формуле дисконтировала, то есть перевела будущие деньги в текущую ценность, денежный поток по годам:
6. Дисконтированный денежный поток = денежный поток / (1+норма дисконта)^год инвестиций.
Протянув формулу и суммировав все результаты с учетом инвестиций, мы получили NPV.
Формула получилась объемной. Любому, кто не участвовал в создании модели, придётся потратить время, чтобы понять, что к чему. Особенно если с финансами не на "ты".
Если в формуле случайно "слетит" закрепление ячейки, можно потерять часть расчётов.
Когда подтягиваем реальные данные — из 1С, таблиц коллег и других источников — легко ошибиться просто по невнимательности. Но, если модель маленькая, такой способ вполне рабочий.
На выполнение этих вычислений со всем наведением «красоты» мне потребовалось 3 минуты.

Для вычисления внутренней нормы доходности (IRR) использовала финансовую формулу Excel – ВСД. Но имейте в виду, если NPV будет меньше нуля, то формула не сработает.
Далее для вычисления DPBP я добавила сумму дисконтированных потоков нарастающим итогом (колонка G).
Срок окупаемости (DPBP) вычислялся «на глазок». Видно, что нарастающим итогом мы приближаемся к сумме инвестиций на 4 году жизни проекта. Значит можем 4 года суммировать с «остатком до выхода в ноль», деленным на чистый дисконтированный поток 5 года.
Опять же, здесь данных мало, невооруженным взглядом видно что и куда подставить. Даже при быстрых вычислениях и выводах можно навскидку дать прогноз окупаемости в 4 года. Если данных больше, быстрых выводов не будет.
Перед тем, как переходить к анализу чувствительности, предлагаю посмотреть на код в Python для тех же вычислений.
Сначала добавим библиотеку, необходимую для финансовых вычислений:
import numpy_financial as npf
Введем исходные данные (на этом этапе мы также можем обозначить несколько сценариев и затем рассчитывать показатели опираясь на них). При смене сценариев в Excel нам нужно будет дублировать таблицу с данными и заново настраивать вычисления. Не стоит упоминать, что визуально это будет более громоздко:
Скрытый текст
# Исходные данные
volume = 3000
price_per_unit = 890
variable_cost_per_unit = 360
fixed_costs = 10000
amortization = 9000
tax_rate = 0.30
discount_rate = 0.12
initial_investment = 3500000
project_lifetime = 8
Далее идут вычисления, которые я описывала ранее. Здесь каждый показатель считаю отдельно для наглядности. Даже если вы никогда «в глаза не видели этот ваш питон», то интуитивно понятно, что вообще происходит и какая тут финансовая математика:
Скрытый текст
# Расчет денежных потоков
cash_flows = []
for year in range(1, project_lifetime + 1):
revenue = volume * price_per_unit
variable_costs = volume * variable_cost_per_unit
ebit = revenue - variable_costs - fixed_costs - amortization
tax = max(ebit, 0) * tax_rate
net_income = ebit - tax
cash_flow = net_income + amortization
cash_flows.append(cash_flow)
# Добавляем начальные инвестиции (отрицательный поток в 0-й год)
cash_flows = [-initial_investment] + cash_flows
# Расчет NPV
npv = npf.npv(discount_rate, cash_flows)
# Расчет IRR
irr = npf.irr(cash_flows)
# Расчет PI
pi = (npv + initial_investment) / initial_investment
Тут обращу внимание на расчет срока окупаемости, выглядит сильно сложнее расчета «на глаз» в Excel. Но такой расчет, очевидно, точнее. Плюс, он классно сработает при большом исходном массиве. Думаю вы также заметили, что для всех показателей эффективности в Python есть готовая функция, в которую мы просто закладываем показатели, нам не нужно проводить именно математические вычисления, либо, как в случае IRR подбирать его вручную или через анализ данных, если NPV будет меньше нуля и формула ВСД не сработает.
Скрытый текст
# Расчет DPBP
discounted_cash_flows = [cf / (1 + discount_rate) ** i for i, cf in enumerate(cash_flows)]
cumulative = 0
dpbp = None
for i in range(1, len(discounted_cash_flows)):
cumulative += discounted_cash_flows[i]
if cumulative >= -discounted_cash_flows[0]:
prev = cumulative - discounted_cash_flows[i]
dpbp = i - 1 + (-discounted_cash_flows[0] - prev) / discounted_cash_flows[i]
break
# Вывод результатов
print(f"NPV: {npv:.2f}")
print(f"IRR: {irr:.4%}")
print(f"PI: {pi:.4f}")
print(f"DPBP: {dpbp:.2f} лет")
Результат кода получили за секунду, все работает и совпадает с нашими расчетами в Excel.

Возникает вопрос: потратила ли я больше времени на написание кода? Отвечу честно, да.
Но, что лучше, написать один раз и масштабировать за секунды или быстро собрать простенькую модель, которую нужно переделывать при любом изменении вводных?
Штош, пришло время хардкора и анализа чувствительности в Excel
Сначала я задала, в каком диапазоне будет меняться каждый параметр (например, цена от 80 до 120 рублей) и с каким шагом (например, по 5 рублей). Это нужно, чтобы по очереди “покрутить” разные сценарии и посмотреть, как каждый из них влияет на результат.
Ну и долго не думая, пошла «в лоб» — протянула пределы вправо, а ниже рассчитала NPV одной формулой (точно так же, как делала ранее) учитывая измененный параметр.


Невооруженным взглядом видно, что эта вакханалия цифр и формул может свести с ума. Здесь расчет чистого дисконтированного потока на каждый год суммируется, учитывая заданный параметр.
Затем глазками ищем, где знак «–» сменяется на «+» и примерно определяем диапазон, в котором находится барьерная точка по показателю.
Печально, но в расчётах получилось больше 900 столбцов. Ушло куча времени и нервов на то, чтобы протянуть и масштабировать эту сложную формулу. А результат всё равно получился сомнительный и не очень точный. Понятно, что для нормального ответа нужен график и дополнительные расчёты.
Прошу меня извинить, но строить графики для этого анализа уже выше моих сил.
А теперь посмотрим, как это можно сделать в Python:
Я подключаю библиотеку, которая помогает легко строить графики, считаю NPV, задаю диапазоны и шаги для нужных параметров - и сразу получаю наглядный график:
Скрытый текст
import matplotlib.pyplot as plt
# Функция для расчета NPV
def calculate_npv(volume, price, var_cost, fixed_cost, tax_rate):
cash_flows = []
for year in range(1, project_lifetime + 1):
revenue = volume * price
variable_costs = volume * var_cost
ebit = revenue - variable_costs - fixed_cost - amortization
tax = max(ebit, 0) * tax_rate
net_income = ebit - tax
cash_flow = net_income + amortization
cash_flows.append(cash_flow)
cash_flows = [-initial_investment] + cash_flows
return npf.npv(discount_rate, cash_flows)
# Анализ чувствительности
def sensitivity_analysis(param_name, values, base_params):
npvs = []
for val in values:
params = base_params.copy()
params[param_name] = val
npvs.append(calculate_npv(**params))
return npvs
# Базовые параметры
base_params = {
'volume': 3000,
'price': 890,
'var_cost': 360,
'fixed_cost': 10000,
'tax_rate': 0.30
}
# Диапазоны значений
volume_range = range(0, 6001, 100)
price_range = range(50, 2501, 50)
var_cost_range = range(5, 631, 5)
fixed_cost_range = range(5000, 1060001, 5000)
tax_rate_range = [i / 100 for i in range(5, 101, 5)]
# Построение графиков (пример: чувствительность к цене)
for param_name, value_range in [
('volume', volume_range),
('price', price_range),
('var_cost', var_cost_range),
('fixed_cost', fixed_cost_range),
('tax_rate', tax_rate_range)
]:
npvs = sensitivity_analysis(param_name, value_range, base_params)
plt.figure(figsize=(8, 4))
plt.plot(value_range, npvs)
plt.title(f"Чувствительность NPV к параметру: {param_name}")
plt.xlabel(param_name)
plt.ylabel("NPV")
plt.grid(True)
plt.show()
В итоге я трачу меньше времени и сразу получаю наглядный результат, который легко менять под разные сценарии или масштабировать.

Выводы
Если коротко: Excel — как кофе на бегу. Быстро, удобно, всегда под рукой. Когда нужно срочно что-то посчитать, показать, прикинуть — он отлично справляется. Но стоит сделать шаг в сторону от «просто посчитать NPV», как начинается формульная акробатика, зависимость от человеческого фактора и необходимость проверять каждый шаг. Особенно когда данных становится больше или требуется гибкость.
Python — совсем другая история. Это как собрать себе кофемашину, настроить помол, давление, а потом в любое утро получать идеальный результат нажатием одной кнопки. Нужно время, чтобы разобраться, да, но потом — удовольствие от того, как все работает. Расчеты прозрачные, масштабируются без слез, графики рисуются сами, сценарии меняются в одну строку, и ничего не «слетает», если ты подвинул ячейку.
В итоге все зависит от цели. Если задача — быстро показать результат или провести разовый расчет — Excel вполне подойдет. Но если вы хотите построить стабильную модель, развивать ее, играть с параметрами, тестировать гипотезы — код побеждает. Да, порог входа выше, но зато результат точнее, визуальнее и главное — устойчивее к ошибкам и изменениям.
Если вы финансист, работайте и с тем, и с тем. Excel — это ваш калькулятор, быстрый и понятный. Python — это ваш инженерный инструмент, мощный и гибкий. Не выбирайте между ними. Используйте оба — и станьте незаменимыми.
А вы где сейчас?
Продолжаете в Excel? Или уже в Python? Или ищете мост между ними?
Поделитесь, как вы решаете такие задачи. Интересно услышать кейсы от финансистов и аналитиков.
Если материал зайдет, у меня есть еще пару тем, которыми хочу поделиться)