Skip to content

AlishAzimov/Rental_Price_Prediction_with_Linear_Regression

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 

Repository files navigation

Rental_Price_Prediction_with_Linear_Regression

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

В рамках проекта выполнена полная реализация линейной регрессии, 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 признаках.


Реализация линейной регрессии

1. Аналитическое решение

Выведена формула нормального уравнения:

w = (XᵀX)^(-1) Xᵀy

Реализована версия через матричные операции NumPy.


2. Стохастический градиентный спуск (SGD)

Реализован собственный класс линейной регрессии:

  • fit()
  • predict()

Использована формула обновления весов:

θᵢ₊₁ = θᵢ − γ ∇L(θᵢ)

Добавлена инициализация random seed = 21 для детерминированности.


3. Метрики качества

Реализованы вручную:

  • MAE
  • RMSE

Проведено сравнение с реализацией 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-моделями для оценки реального прироста качества.


Основные сложности и как я их решал

1. Нестабильность матричного решения

Проблема:
Матрица XᵀX может быть вырожденной или плохо обусловленной.

Как я решил:

  • Добавил регуляризацию (Ridge)
  • Анализировал condition number
  • Сравнивал с SGD-решением

2. Переобучение на полиномиальных признаках

Проблема:
Модель идеально обучалась на train, но сильно теряла качество на test.

Как я решил:

  • Добавил L2 и L1 регуляризацию
  • Подбирал α
  • Анализировал разрыв между train и test

3. L1 не дифференцируема в 0

Проблема:
L1 регуляризация не имеет классической производной в нуле.

Как я решил:

  • Использовал субградиент
  • Реализовал обновление весов через sign(w)

4. Разница между моей реализацией и sklearn

Проблема:
Небольшие расхождения в метриках.

Как я решил:

  • Проверил формулы градиента
  • Проверил порядок обновления весов
  • Проверил нормализацию

После корректировок результаты совпали.


5. Масштаб признаков

Проблема:
Без нормализации SGD сходился медленно и нестабильно.

Как я решил:

  • Реализовал MinMaxScaler
  • Реализовал StandardScaler
  • Сравнил влияние нормализации на скорость сходимости

Используемые технологии

  • Python 3
  • NumPy
  • Pandas
  • Matplotlib
  • Scikit-learn
  • Jupyter Notebook

Результат

  • Реализованы линейные модели регрессии с нуля
  • Построена система прогнозирования стоимости аренды
  • Реализованы регуляризации L1 и L2
  • Реализованы методы нормализации
  • Проведён анализ переобучения
  • Выполнено сравнение с sklearn
  • Получено глубокое понимание bias-variance tradeoff

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

About

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

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors