Привет, Хабр! Я построил простую экономико‑математическую модель жилищного бюджета домохозяйства, подставил в неё актуальные данные по Санкт‑Петербургу на 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 ₽/мес
Доля в доходе:
Порог θ = 0.45 пробит. Даже при средней петербургской зарплате ипотека на студию 24 м² по рыночной ставке формально неустойчива: платежи занимают почти половину дохода.

(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%.

Это не риск, это системная характеристика текущей конъюнктуры.
Покупка 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 |

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

Чтобы арендатор догнал покупателя по деньгам к концу срока, ему нужна доходность инвестиций ≈ 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 | устойчиво |

Чтобы ипотека на студию в СПб стала формально устойчивой при доходе 128 тыс. ₽, ставка должна опуститься ниже ~16%. Пока рынок даёт 18.7% — бюджет на грани или за гранью.
Что это значит на практике
Средняя зарплата не спасает. Даже при 128 тыс. ₽/мес студия 24 м² по рыночной ипотеке 2026 года забирает ~50% дохода. Это выше комфортного порога.
Резерв обязателен. 12% месяцев с дефицитом дохода — это не «чёрный лебедь», это регулярное событие. Без подушки в 6+ месяцев расходов бюджет реально ломается.
Аренда + инвестиции — рациональная стратегия при текущих ставках. Если есть возможность вкладывать разницу под ~14% (а такие инструменты есть), аренда выигрывает и по деньгам, и по качеству жизни.
Покупка имеет смысл при трёх условиях: ставка ниже ~16%, доход выше ~140 тыс. ₽, или готовность жить с долей платежей 50%+ ради владения.
Кратко о том как работает код
Под капотом — один файл на Python. Логика такая:
Задаются параметры — площадь, цена м², ставка, доход, аренда и так далее. Все они вынесены в dataclass‑параметры (
HousingParams,AgentParams,RentParams), поэтому менять их можно либо флагами командной строки, либо прямо в коде.Строится базовая траектория покупки: считается аннуитет, месяц за месяцем уменьшается долг, растёт собственный капитал, пополняется резерв на содержание. На каждом шаге проверяются два условия устойчивости — доля платежей в доходе не выше θ и резерв не ниже φ месяцев расходов.
Доход и цена м² моделируются как случайные процессы: доход — AR(1) с шоком, цена — инфляция или геометрическое броуновское движение. Поэтому один прогон — это одна «случайная вселенная», а Монте‑Карло — это N таких вселенных.
Сравнение с арендой идёт на тех же шоках: арендатор платит аренду, а разницу между аннуитетом и арендой инвестирует. В конце сравниваются итоговое благосостояние и полезность.
Точка безубыточности ищется бисекцией: подбирается такая доходность инвестиций, при которой среднее благосостояние арендатора равно среднему благосостоянию покупателя.
Результаты сохраняются в папку
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 копировать код удобней)
Полный список флаги, все их можно изменить под свои нужды, кратко по ним:
Флаг | Что означает | Пример |
|---|---|---|
| площадь квартиры, м² |
|
| цена квадратного метра, ₽ |
|
| доля первоначального взноса (0…1) |
|
| годовая ставка ипотеки (0…1) |
|
| срок ипотеки, лет |
|
| доход, ₽/мес |
|
| расходы на содержание, ₽/мес |
|
| порог доли платежей в доходе (0…1) |
|
| аренда, ₽/м²/мес |
|
| годовой рост аренды (0…1) |
|
| годовая доходность инвестиций (0…1) |
|
| как меняется цена м²: |
|
| сколько траекторий Монте‑Карло |
|
| зерно случайности (для воспроизводимости) |
|
| папка для результатов |
|
В конечном итоге вы получите папку output, в которой будут:
Файл | Что это |
|---|---|
| график базового сценария |
| гистограммы Монте‑Карло |
| сырые массивы Монте‑Карло |
| сравнение покупки и аренды |
| сырые массивы сравнения |
| точка безубыточности |
| тепловая карта по ставке и цене |
| таблица тепловой карты |
| срез по ставке аренды |
| таблица среза |
| сводка ключевых метрик |
Ссылки
GitHub:
https://github.com/CheesePunk/Housing-Budget-Model
Спасибо, что дочитали. Это моя первая статья — буду рад конструктивной критике, особенно по модели и по данным. Стоит понимать, что это лишь упрощённая модель, но провести расчёты с вашими данными она может, на GitHub лежит полная статья со всеми формулами и более подробным объяснением программного кода, так же там вы найдёте полную инструкцию по эксплуатации программы. Надеюсь, статья была вам интересна, спасибо за внимание!


