Ипотека или аренда в Петербурге: я посчитал на Python и вот что вышло

в 15:19, , рубрики: python, аренда, жилье, ипотека, моделирование, экономика

Привет! Я построил простую экономико‑математическую модель жилищного бюджета домохозяйства, подставил в неё актуальные данные по Санкт‑Петербургу на 2026 год и прогнал несколько сценариев. Код выложил на GitHub, а здесь — результаты, графики и все входные данные, чтобы можно было воспроизвести.

GitHub: https://github.com/CheesePunk/Housing-Budget-Model

Входные данные (Санкт‑Петербург, 2026)

Параметр

Значение

Источник / обоснование

Площадь

24 м²

базовая студия

Цена м² (вторичка)

≈ 180 000 ₽

ориентир по рынку СПб, 2026

Первоначальный взнос

20%

стандарт банков

Ставка ипотеки

18.7% годовых

средневзвешенная рыночная на середину октября 2026

Срок

20 лет

база

Доход

128 000 ₽/мес

средняя зарплата в СПб, июль 2026

Содержание (ЖКХ + ремонт + страхование)

9 000 ₽/мес

оценка для студии

Порог θ

0.45

доля платежей в доходе

Аренда

900 ₽/м²/мес

ориентир для студии в СПб

Инфляция аренды

6% годовых

исторический тренд

Доходность инвестиций

14% годовых

депозит / фонд денежного рынка

Что сразу бросается в глаза: ставка 18.7% — это не «стресс‑тест», это реальность 2026 года. Средняя зарплата 128 тыс. ₽ — тоже реальность. Вопрос в том, выдерживает ли бюджет такое сочетание.

На момент прочтения статьи данные могут оказаться неактуальны, но это не делает модель и саму программу нерабочей, в ваших нуждах вы можете использовать свои данные

Базовый расчёт

  • Цена студии: 24 × 180 000 = 4 320 000 ₽

  • Взнос 20%: 864 000 ₽

  • Кредит: 3 456 000 ₽

  • Аннуитет при 18.7% на 20 лет: ≈ 54 800 ₽/мес

  • Содержание: 9 000 ₽/мес

  • Итого платёж: ≈ 63 800 ₽/мес

Доля в доходе:

63800 / 128000 ≈0.498

Порог θ = 0.45 пробит. Даже при средней петербургской зарплате ипотека на студию 24 м² по рыночной ставке формально неустойчива: платежи занимают почти половину дохода.

Базовая траектория покупки студии 24 м² в СПб при ставке 18.7%. На графике доли платежей (M+R)/Y видно, что кривая почти сразу уходит выше порога θ=0.45 — бюджет формально неустойчив.

Базовая траектория покупки студии 24 м² в СПб при ставке 18.7%. На графике доли платежей (M+R)/Y видно, что кривая почти сразу уходит выше порога θ = 0.45 — бюджет формально неустойчив.

Что показывает Монте‑Карло (300 траекторий)

Я прогнал модель со случайным доходом (волатильность 5% в месяц) и случайной ценой м². Вот что получилось:

Метрика

Среднее

p10 (пессимист)

p90 (оптимист)

Доля месяцев с (M+R)/Y > θ

≈ 0.62

≈ 0.40

≈ 0.82

Доля месяцев с дефицитом дохода

≈ 0.12

≈ 0.04

≈ 0.22

Итоговый капитал, тыс. ₽

≈ 3 200

≈ 2 100

≈ 4 500

Расшифровка: в среднем 62% месяцев бюджет выходит за порог устойчивости. В 10% траекторий это происходит в 82% месяцев — то есть человек почти постоянно живёт на грани. Дефицит дохода (когда зарплаты не хватает на платёж + минимум на жизнь) возникает в среднем 12% месяцев, а в плохих сценариях — 22%.

Распределение доли месяцев с нарушением порога θ по 300 траекториям Монте-Карло. В среднем 62% месяцев бюджет выходит за порог; в 10% траекторий — более 82% месяцев.

Распределение доли месяцев с нарушением порога θ по 300 траекториям Монте‑Карло. В среднем 62% месяцев бюджет выходит за порог; в 10% траекторий — более 82% месяцев.

Это не риск, это системная характеристика текущей конъюнктуры.

Покупка vs аренда (на тех же шоках)

Аренда студии 24 м² по 900 ₽/м² = 21 600 ₽/мес. Покупка стоит 63 800 ₽/мес. Разница — 42 200 ₽/мес в пользу аренды. Эти деньги арендатор инвестирует.

Метрика

Покупка

Аренда

Среднее итоговое благосостояние, тыс. ₽

≈ 3 200

≈ 2 800

Средняя полезность

≈ 11 500

≈ 13 200

Среднее потребление, ₽/мес

≈ 64 200

≈ 106 400

Доля траекторий

Значение

Покупка богаче аренды

≈ 0.58

Покупка полезнее аренды

≈ 0.21

Сравнение покупки и аренды на одних и тех же шоках дохода и цены. По потреблению арендатор выигрывает с большим отрывом: среднее потребление ≈ 106 тыс. ₽/мес против ≈ 64 тыс. ₽/мес у покупателя.

Сравнение покупки и аренды на одних и тех же шоках дохода и цены. По потреблению арендатор выигрывает с большим отрывом: среднее потребление ≈ 106 тыс. ₽/мес против ≈ 64 тыс. ₽/мес у покупателя.

Вывод: покупка всё ещё чуть чаще выигрывает по деньгам (58% против 42%) — за счёт роста цены м² и амортизации долга инфляцией. Но по полезности аренда выигрывает с разгромным счётом: 79% траекторий в пользу аренды. Потребление арендатора в среднем на 42 тыс. ₽/мес выше — это разница между «жить нормально» и «жить от зарплаты до зарплаты».

Точка безубыточности

При текущих параметрах:

Метрика

Значение

r^*_{inv}​ (по благосостоянию)

≈ 9.8% годовых

r^{**}_{inv}​ (по полезности)

≈ −2% годовых

Зависимость точки безубыточности  от ставки аренды. При аренде 900 ₽/м²/мес порог ≈ 9.8% годовых; при аренде 1300 ₽/м²/мес он падает до ≈ 2.5%.

Зависимость точки безубыточности r^*_{inv} от ставки аренды. При аренде 900 ₽/м²/мес порог ≈ 9.8% годовых; при аренде 1300 ₽/м²/мес он падает до ≈ 2.5%.

Чтобы арендатор догнал покупателя по деньгам к концу срока, ему нужна доходность инвестиций ≈ 9.8%. Если у тебя есть доступ к депозиту или фонду денежного рынка под 14% (а в 2026 такие ставки реальны), аренда выгоднее по деньгам. По полезности порог отрицательный — арендатору не нужно ничего инвестировать, чтобы жить лучше; он выигрывает просто за счёт свободного кэша.

Чувствительность к ставке

Вот как меняется картина при снижении ставки (при тех же ценах и доходе):

Ставка

Аннуитет, ₽/мес

(M+R)/Y

Статус

18.7% (сейчас)

≈ 54 800

0.498

прорыв

16%

≈ 48 500

0.449

на грани

14%

≈ 42 800

0.404

устойчиво

12%

≈ 37 600

0.364

устойчиво

Тепловая карта точки безубыточности  по ставке и цене м². Чем выше цена и ниже ставка, тем ниже порог: покупка выигрывает при меньшей доходности инвестиций. При текущих параметрах СПб-2026 (ставка 18.7%, цена 180 тыс. ₽/м²) порог ≈ 9.8% годовых.

Тепловая карта точки безубыточности r^*_{inv} по ставке и цене м². Чем выше цена и ниже ставка, тем ниже порог: покупка выигрывает при меньшей доходности инвестиций. При текущих параметрах СПб-2026 (ставка 18.7%, цена 180 тыс. ₽/м²) порог ≈ 9.8% годовых.

Чтобы ипотека на студию в СПб стала формально устойчивой при доходе 128 тыс. ₽, ставка должна опуститься ниже ~16%. Пока рынок даёт 18.7% — бюджет на грани или за гранью.

Что это значит на практике

  1. Средняя зарплата не спасает. Даже при 128 тыс. ₽/мес студия 24 м² по рыночной ипотеке 2026 года забирает ~50% дохода. Это выше комфортного порога.

  2. Резерв обязателен. 12% месяцев с дефицитом дохода — это не «чёрный лебедь», это регулярное событие. Без подушки в 6+ месяцев расходов бюджет реально ломается.

  3. Аренда + инвестиции — рациональная стратегия при текущих ставках. Если есть возможность вкладывать разницу под ~14% (а такие инструменты есть), аренда выигрывает и по деньгам, и по качеству жизни.

  4. Покупка имеет смысл при трёх условиях: ставка ниже ~16%, доход выше ~140 тыс. ₽, или готовность жить с долей платежей 50%+ ради владения.

Кратко о том как работает код

Под капотом — один файл на Python. Логика такая:

  1. Задаются параметры — площадь, цена м², ставка, доход, аренда и так далее. Все они вынесены в dataclass‑параметры (HousingParams, AgentParams, RentParams), поэтому менять их можно либо флагами командной строки, либо прямо в коде.

  2. Строится базовая траектория покупки: считается аннуитет, месяц за месяцем уменьшается долг, растёт собственный капитал, пополняется резерв на содержание. На каждом шаге проверяются два условия устойчивости — доля платежей в доходе не выше θ и резерв не ниже φ месяцев расходов.

  3. Доход и цена м² моделируются как случайные процессы: доход — AR(1) с шоком, цена — инфляция или геометрическое броуновское движение. Поэтому один прогон — это одна «случайная вселенная», а Монте‑Карло — это N таких вселенных.

  4. Сравнение с арендой идёт на тех же шоках: арендатор платит аренду, а разницу между аннуитетом и арендой инвестирует. В конце сравниваются итоговое благосостояние и полезность.

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

  6. Результаты сохраняются в папку output/: PNG‑графики, CSV‑таблицы и NPZ с сырыми массивами. Всё воспроизводимо: при одном и том же --seed и одинаковых параметрах числа совпадут.

Кратко как пользоваться

Установка:

pip install numpy pandas matplotlib scipy

Запуск с параметрами (те самые, что в таблице входных данных):

python housing_budget_model.py --mode all --out output 
    --area 24 --price-m2 180000 --down-payment 0.20 
    --rate 0.187 --years 20 --income 128000 
    --maintenance 9000 --theta 0.45 --rent-m2 900 
    --rent-inflation 0.06 --investment-rate 0.14 
    --n-paths 500 --seed 2026

(здесь пришлось пожертвовать удобством копирования кода в угоду красоте, в статье на GitHub копировать код удобней)

Полный список флаги, все их можно изменить под свои нужды, кратко по ним:

Флаг

Что означает

Пример

--area

площадь квартиры, м²

--area 24

--price-m2

цена квадратного метра, ₽

--price-m2 120000

--down-payment

доля первоначального взноса (0…1)

--down-payment 0.20

--rate

годовая ставка ипотеки (0…1)

--rate 0.12

--years

срок ипотеки, лет

--years 20

--income

доход, ₽/мес

--income 80000

--maintenance

расходы на содержание, ₽/мес

--maintenance 7000

--theta

порог доли платежей в доходе (0…1)

--theta 0.45

--rent-m2

аренда, ₽/м²/мес

--rent-m2 700

--rent-inflation

годовой рост аренды (0…1)

--rent-inflation 0.06

--investment-rate

годовая доходность инвестиций (0…1)

--investment-rate 0.08

--price-mode

как меняется цена м²: deterministic или stochastic

--price-mode deterministic

--n-paths

сколько траекторий Монте‑Карло

--n-paths 300

--seed

зерно случайности (для воспроизводимости)

--seed 42

--out

папка для результатов

--out output

В конечном итоге вы получите папку output, в которой будут:

Файл

Что это

01_basic_path.png

график базового сценария

02_mc.png

гистограммы Монте‑Карло

02_mc_stats.npz

сырые массивы Монте‑Карло

03_buy_vs_rent.png

сравнение покупки и аренды

03_compare_stats.npz

сырые массивы сравнения

04_breakeven.csv

точка безубыточности

05_breakeven_grid.png

тепловая карта по ставке и цене

05_breakeven_grid.csv

таблица тепловой карты

06_breakeven_vs_rent.png

срез по ставке аренды

06_breakeven_vs_rent.csv

таблица среза

06_summary.csv

сводка ключевых метрик

Ссылки

  • GitHub: https://github.com/CheesePunk/Housing-Budget-Model

Спасибо, что дочитали. Это моя первая статья — буду рад конструктивной критике, особенно по модели и по данным. Стоит понимать, что это лишь упрощённая модель, но провести расчёты с вашими данными она может, на GitHub лежит полная статья со всеми формулами и более подробным объяснением программного кода, так же там вы найдёте полную инструкцию по эксплуатации программы. Надеюсь, статья была вам интересна, спасибо за внимание!

Автор: chees_punk

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js