Проект по прогнозированию стоимости аренды недвижимости с использованием линейных моделей регрессии, реализованных с нуля.
В рамках проекта выполнена полная реализация линейной регрессии, Ridge, Lasso и ElasticNet без использования готовых реализаций sklearn (за исключением сравнения результатов), а также проведён анализ переобучения, регуляризации и влияния нормализации признаков на качество модели.
Цель проекта — построить модель прогнозирования стоимости аренды квартир и глубоко понять, как работают линейные алгоритмы регрессии внутри.
Проект включает:
- Вывод аналитического решения линейной регрессии
- Реализацию градиентного спуска (SGD)
- Реализацию L1 и L2 регуляризации
- Реализацию MinMaxScaler и StandardScaler
- Анализ переобучения
- Сравнение с sklearn
- Сравнение с наивными baseline-моделями
Проект ориентирован на демонстрацию математического понимания и инженерной реализации алгоритмов машинного обучения.
Использовался датасет аренды недвижимости (Kaggle).
В рамках preprocessing выполнено:
- Загрузка train/test выборок
- Обработка признака
interest_level - Генерация дополнительных бинарных признаков из колонки
features - Выделение Top-20 наиболее популярных характеристик квартир
- Создание 20 новых бинарных признаков
- Добавление числовых признаков
bathroomsиbedrooms - Формирование итогового набора из 22 признаков
Все модели обучались строго на этих 22 признаках.
Выведена формула нормального уравнения:
w = (XᵀX)^(-1) Xᵀy
Реализована версия через матричные операции NumPy.
Реализован собственный класс линейной регрессии:
- fit()
- predict()
Использована формула обновления весов:
θᵢ₊₁ = θᵢ − γ ∇L(θᵢ)
Добавлена инициализация random seed = 21 для детерминированности.
Реализованы вручную:
- MAE
- RMSE
- R²
Проведено сравнение с реализацией sklearn. Разница в метриках минимальна, что подтверждает корректность собственной реализации.
Реализованы модели:
- Ridge (L2)
- Lasso (L1)
- ElasticNet (L1 + L2)
Функция потерь расширена:
Loss = MSE + λR(w)
где:
- L2: ||w||²
- L1: |w|
Проанализировано влияние коэффициента регуляризации α на устойчивость модели.
MinMaxScaler
x_scaled = (x − min(x)) / (max(x) − min(x))
StandardScaler
x_scaled = (x − μ) / σ
Сравнение с sklearn показало совпадение результатов.
Для демонстрации overfitting:
- Сгенерированы полиномиальные признаки степени 10
- Обучены все модели на расширенном пространстве признаков
- Проведён анализ bias-variance tradeoff
Выводы:
- Обычная линейная регрессия сильно переобучается
- Ridge и ElasticNet более устойчивы
- Lasso зануляет часть весов и выполняет отбор признаков
Добавлены baseline модели:
- Предсказание среднего значения
- Предсказание медианы
Проведено сравнение с ML-моделями для оценки реального прироста качества.
Проблема:
Матрица XᵀX может быть вырожденной или плохо обусловленной.
Как я решил:
- Добавил регуляризацию (Ridge)
- Анализировал condition number
- Сравнивал с SGD-решением
Проблема:
Модель идеально обучалась на train, но сильно теряла качество на test.
Как я решил:
- Добавил L2 и L1 регуляризацию
- Подбирал α
- Анализировал разрыв между train и test
Проблема:
L1 регуляризация не имеет классической производной в нуле.
Как я решил:
- Использовал субградиент
- Реализовал обновление весов через sign(w)
Проблема:
Небольшие расхождения в метриках.
Как я решил:
- Проверил формулы градиента
- Проверил порядок обновления весов
- Проверил нормализацию
После корректировок результаты совпали.
Проблема:
Без нормализации SGD сходился медленно и нестабильно.
Как я решил:
- Реализовал MinMaxScaler
- Реализовал StandardScaler
- Сравнил влияние нормализации на скорость сходимости
- Python 3
- NumPy
- Pandas
- Matplotlib
- Scikit-learn
- Jupyter Notebook
- Реализованы линейные модели регрессии с нуля
- Построена система прогнозирования стоимости аренды
- Реализованы регуляризации L1 и L2
- Реализованы методы нормализации
- Проведён анализ переобучения
- Выполнено сравнение с sklearn
- Получено глубокое понимание bias-variance tradeoff
Проект демонстрирует фундаментальные знания линейной регрессии и умение применять их к реальной задаче прогнозирования стоимости аренды недвижимости.