Skip to content

Лабораторная работа №5

📌 Тема

Регрессия с применением Scikit-Learn. Предсказание стоимости недвижимости

Ссылка на ipynb-board

Google-colab notebook

Отчет

Работа с другими моделями

Наилучший результат по метрикам MAE и RMSE продемонстрировал XGBoost (MAE: 65 506.68, RMSE: 118 157.36). Ближайшим конкурентом оказался Random Forest (MAE: 70 329.49, RMSE: 133 690.16), который в базовой конфигурации уже показывает высокую точность за счёт нелинейного разбиения пространства признаков. Остальные модели значительно уступают: - Линейные модели (Linear Regression, Ridge, Lasso, ElasticNet): MAE ~126 850, RMSE ~201 883. Линейные алгоритмы предполагают аддитивную зависимость цены от признаков, тогда как стоимость недвижимости формируется сложными нелинейными взаимодействиями - Настройка гиперпараметров Random Forest через GridSearchCV (max_depth: 20, n_estimators: 150, min_samples_split: 2, min_samples_leaf: 1) не дала существенного улучшения (MAE: 70 790, RMSE: 136 222), а в отдельных случаях даже слегка ухудшила метрики. Это говорит о том, что дефолтные параметры уже находятся вблизи оптимальных для данного объёма данных, и дальнейшее усложнение дерева ведёт к переобучению на шуме и другим проьлемам - Исключение 5 наименее важных признаков (Год реновации, Количество этажей, Состояние, Спальни, Площадь подвала) привело к незначительному ухудшению качества всех моделей (+0.7–1.5% по MAE/RMSE).

Причины невозможности построения лучшей модели

  • Информационный потолок датасета: В выборке представлены только структурные и базовые географические характеристики объектов. Отсутствуют рейтинги школьных округов, удалённость до транспортных узлов/парков/центров, уровень преступности в районе, качественные параметры
  • Некачественные данные (например, признак Год реновации модержит много пропущенных значений)
  • Градиентный бустинг (XGBoost) и ансамбли деревьев (Random Forest) уже эффективно извлекают нелинейные зависимости и локальные паттерны из табличных данных.

План интеграции с веб-сервисом

  • Сериализация и подготовка артефактов модели: Сохранение обученной модели (XGBoost/Random Forest), списка признаков и объектов предобработки в едином формате (joblib или pickle). Размещение артефактов в директории models/. Исключение тяжёлых файлов из VCS через .gitignore.
  • Организация структуры проекта: Разделение кода на модули: src/preprocessing.py (валидация и трансформация признаков), src/model.py (логика инференса), app/main.py (маршрутизация API), tests/, requirements.txt/pyproject.toml. Настройка виртуального окружения для изоляции зависимостей.
  • Инициализация веб-приложения: Выбор фреймворка. Загрузка модели и пайплайна при старте сервера: Единожды загружать модель и вспомогательные объекты в память при инициализации приложения (через lifespan в FastAPI или @app.before_first_request в Flask). Реализовать проверку целостности артефактов (хэш-суммы, проверка версий зависимостей) перед запуском.
  • Валидация входных данных: Определение строгих схем JSON, допустимые диапазоны, обработка null/отсутствующих полей
  • Реализация эндпоинта предсказания: Создание маршрута POST /predict. Парсинг JSON → приведение к DataFrame → вызов model.predict() → возврат структурированного ответа {"predicted_price": float, "currency": "USD", "model_version": "xgb_v1"}. При необходимости добавление доверительных интервалов (через квантильную регрессию или бутстрэп).
  • Обработка ошибок и логирование
  • Тестирование
  • Контейнеризация и развертывание: Написание Dockerfile с минимальным образом (python-slim), настройка docker-compose.yml для локального запуска, настройка CI/CD пайплайна Мониторинг, версионирование, поддержка: Отслеживание дрейфа данных (Data Drift) и дрейфа предсказаний (Concept Drift) с помощью инструментов типа Evidently AI или WhyLabs.