ML-ориентированный ипотечный кальтор для рынка недвижимости Москвы
Mortify — iOS-приложение на SwiftUI, которое прогнозирует рыночную стоимость квартиры с использованием Core ML и рассчитывает параметры ипотечного кредита.
Проект объединяет работу с реальными данными, feature engineering, архитектурный подход MVVM и продуманную пользовательскую логику.
- Модель Core ML обучена на реальном датасете московской недвижимости (Kaggle).
- Предсказание выполняется по цене за квадратный метр (
PricePerM2) с последующим расчётом итоговой стоимости. - Учитываемые параметры:
- площадь (общая, жилая, кухня),
- количество комнат,
- этаж и этажность,
- тип жилья (новостройка / вторичка),
- тип ремонта,
- время до метро,
- расстояние до центра (рассчитано по станции метро).
- Расчёт ежемесячного аннуитетного платежа.
- Расчёт общей переплаты.
- График зависимости платежа от срока кредита.
- Динамическое обновление при изменении входных параметров.
- Одновременный расчёт двух вариантов недвижимости.
- Отображение:
- стоимости,
- ежемесячного платежа,
- переплаты,
- разницы между вариантами.
- Бизнес-логика вынесена в сервис без дублирования кода.
- Сохранение сценариев в
UserDefaults. - Просмотр, удаление и очистка истории.
- Хранение параметров и результатов расчёта.
Архитектура предусматривает масштабирование на другие регионы.
В текущей версии реализована Москва.
2026-02-16.21.05.56.mov
Проект построен с разделением на слои:
Core/
Models/
Services/
Storage/
Utilities/
Features/
Home/
Compare/
History/
Components/
- MVVM
- Изоляция бизнес-логики в сервисах
- ObservableObject + @Published
- Дебаунс пересчётов
- Валидация пользовательского ввода
- Защита от некорректных значений
Основная логика ML и ипотечного расчёта инкапсулирована в MortgageCalculatorService.
В проекте использованы:
- Исходный датасет: Moscow Housing Price Dataset
- Данные о расстоянии станций метро до центра Москвы
В папке Data/:
raw/— оригинальные данныеexternal/— вспомогательные источникиprocessed/— итоговый датасет после очистки и feature engineering
В процессе анализа были выявлены структурные особенности:
- вторичное жильё чаще расположено ближе к центру и имеет более высокую цену за м²;
- квартиры «без ремонта» во вторичном фонде часто находятся в дорогих районах;
- новостройки преимущественно представлены в удалённых районах;
- тип жилья и ремонт сильно коррелируют с локацией.
Это приводило к неинтуитивным предсказаниям (например, вторичка дороже новостройки).
Данные эффекты обусловлены распределением исходного датасета, а не ошибкой модели.
В проекте реализованы:
- очистка выбросов по площади и цене,
- переход к target
PricePerM2, - расчёт расстояния до центра (
distance_to_kremlin_km), - создание производных признаков:
- относительный этаж,
- первый / последний этаж,
- категоризация количества комнат,
- разделение моделей по типу жилья (новостройка / вторичка).
Разделение моделей позволило снизить влияние конфликтующих закономерностей.
Тем не менее часть эффектов остаётся зависеть от качества исходных данных.
Категориальные:
- Apartment type
- Renovation
- RoomsCat
Числовые:
- Area
- Living area
- Kitchen area
- Minutes to metro
- distance_to_kremlin_km
- RelativeFloor
Бинарные:
- IsFirstFloor
- IsLastFloor
- Swift
- SwiftUI
- Core ML
- Create ML
- UserDefaults
- MVVM
- Unit-тестирование
В проекте реализованы unit-тесты:
- MortgageCalculatorServiceTests
- ContentViewModelTests
- CompareViewModelTests
Покрыта логика расчёта стоимости, ипотеки и сравнения.
- Добавление других регионов.
- Интеграция с API объявлений.
- Онлайн-обновление модели.
- Расширенная аналитика чувствительности параметров.
- Поддержка iPad / macOS.
Работу выполнила Матвеенко Эльвира, студентка 3 курса направления «Программная инженерия».