Обзор

Дом, пожалуй, самая дорогая покупка, которую человек может сделать за свою жизнь. Наиболее важным ограничением при покупке дома является стоимость недвижимости. Таким образом, хорошая модель, которая может предсказать стоимость недвижимости, поможет пользователям выбрать и купить недвижимость своей мечты.
Кроме того, с ростом населения и урбанизации эта модель может помочь различным заинтересованным сторонам, участвующим в планировании, строительстве и расширении городов.

Постановка задачи

Здесь я пытаюсь построить модель для набора данных Ames Housing, чтобы предсказать цену дома с использованием методов регрессии. Код реализации можно найти здесь.

Мы выполним следующие шаги для построения нашей модели
1. Исследовательский анализ данных
2. Очистка данных — отсутствующие данные
3. Категориальные признаки — кодирование и макеты
4 . Числовые признаки — нормальность, перекос и эксцесс
5. Конвейеры базовых моделей
6. Поиск по сетке лучших параметров для трех лучших базовых моделей
7. Стекированные модели, объединяющие три первые модели

Метрики

Я оцениваю модели на основе среднеквадратичной ошибки между логарифмом прогнозируемого значения и логарифмом наблюдаемой цены продажи (RMSLE). Сбор логов гарантирует, что ошибки в предсказании дорогих и дешевых домов одинаково повлияют на результат.

Это измерение полезно, когда целевая переменная находится в широком диапазоне, и вы не обязательно хотите штрафовать за большие ошибки, когда прогнозируемое и целевое значения сами по себе высоки. Это также эффективно, когда мы заботимся о процентных ошибках, а не об абсолютном значении ошибок.

Исследование данных и визуализация данных

Целевая функция

SalePrice — это переменная, которую нам нужно предсказать. Давайте посмотрим его распределение

Мы видим, что распределение

  1. Отклоняется от нормального распределения.
  2. Имеет заметную положительную асимметрию.
  3. Показывает пикантность.

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

Для достижения этого мы можем использовать различные преобразования, такие как
1. Преобразование журнала
2. Преобразование Бокс-Кокса — требуется оценка лямбда-параметра
3. Преобразование квадратного корня

Здесь мы идем с преобразованиями журнала, чтобы преобразовать и нормализовать искаженные функции.

Мы видим, что преобразование журнала в значительной степени нормализовало распределение

Отсутствующие данные

Числовые характеристики

Ниже приведены асимметричные числовые признаки с абсолютной асимметрией более 0,75. Мы применим логарифмическое преобразование ко всем этим функциям, чтобы нормализовать их.

['MSSubClass', 'LotFrontage', 'LotArea', 'MasVnrArea', 'BsmtFinSF1', 'BsmtFinSF2', 'BsmtUnfSF', 'TotalBsmtSF', '1stFlrSF', '2ndFlrSF', 'LowQualFinSF', 'GrLivArea', 'BsmtHalfBath', 'KitchenAbvGr', 'WoodDeckSF', 'OpenPorchSF', 'EnclosedPorch', '3SsnPorch', 'ScreenPorch', 'PoolArea', 'MiscVal']

Категориальные признаки

Ниже приведены категориальные признаки из нашего набора данных.

['MSSubClass', 'MSZoning', 'Street', 'Alley', 'LotShape', 'LandContour', 'Utilities', 'LotConfig', 'LandSlope', 'Neighborhood', 'Condition1', 'Condition2', 'BldgType', 'HouseStyle', 'OverallQual', 'OverallCond', 'RoofStyle', 'RoofMatl', 'Exterior1st', 'Exterior2nd', 'MasVnrType', 'ExterQual', 'ExterCond', 'Foundation', 'BsmtQual', 'BsmtCond', 'BsmtExposure', 'BsmtFinType1', 'BsmtFinType2', 'Heating', 'HeatingQC', 'CentralAir', 'Electrical', 'LowQualFinSF', 'BsmtFullBath', 'BsmtHalfBath', 'FullBath', 'HalfBath', 'BedroomAbvGr', 'KitchenQual', 'TotRmsAbvGrd', 'Functional', 'Fireplaces', 'FireplaceQu', 'GarageType', 'GarageFinish', 'GarageCars', 'GarageQual', 'GarageCond', 'PavedDrive', '3SsnPorch', 'PoolArea', 'PoolQC', 'Fence', 'MiscFeature', 'MiscVal', 'MoSold', 'YrSold', 'SaleType', 'SaleCondition']

Мы используем pandas get_dummies для быстрого кодирования категориальных функций. Всего существует 554 функции, включая функции Id и SalesPrice после одного горячего кодирования функций. Мы откажемся от функции Id, так как она нам не нужна.

Реализация модели

Давайте создадим конвейеры базовой модели для следующих регрессоров
и посмотрим на их производительность:

  1. Лассо
  2. Эластичная сеть
  3. ЛассоЛарсИК
  4. КернелРидж
  5. GradientBoostingRegressor
  6. XGBRegressor
  7. ЛГБМРегрессор

Мы используем MinMaxScaler в качестве средства масштабирования функций в пайплайнах. Как указано в начале, нашей метрикой будет среднеквадратическая логарифмическая ошибка. Мы используем перекрестную проверку KFold с 5 кратностями для проверки наших моделей. Оценки RMSLE для базовых моделей показаны ниже.

GBoost          0.133
XGB             0.135
LGB             0.138
KRR             0.153
Random_Forest   0.153
LaLasso         0.155
Lasso           0.399
Enet            0.399

Уточнение

Мы уточняем наши модели с помощью GridSearchCV для трех основных базовых моделей — GBoost, XGB и LGB. Оценки RMSLE для базовых моделей после использования настроенных параметров поиска по сетке показаны ниже.

GBoost   0.132
XGB      0.130
LGB      0.134

Мы видим, что среднеквадратичное отклонение значительно уменьшилось. Обратите внимание, что метрикой ошибки является RMSLE, и, следовательно, уменьшение ошибки реальной цены будет экспоненциальным фактором этого уменьшения ошибки.

Окончательная оценка и проверка модели

Мы строим нашу окончательную модель, складывая три лучшие настроенные базовые модели и принимая их среднее значение в качестве конечного значения.

Мы получаем оценку RMSLE 0,127 для нашей модели с накоплением.

Результаты и обоснование

С многоуровневой моделью мы достигли еще более высоких показателей. Обратите внимание, что метрикой ошибки является RMSLE, и, следовательно, уменьшение ошибки реальной цены будет экспоненциальным фактором этого уменьшения ошибки.

С помощью вышеуказанных моделей мы достигли следующих целей:

  1. Мы успешно проанализировали, очистили и масштабировали наш набор данных.
  2. Создайте базовые модели, чтобы исследовать интересующую нас метрику, то есть среднеквадратичную логарифмическую ошибку (RMSLE).
  3. Используя gridsearch и наложение моделей для новой модели (RMSLE 0,127), удалось добиться снижения ошибки на 0,006 по сравнению с лучшей базовой моделью (GBoost RMSLE 0,133).

Размышления и совершенствование

Наша модель дает нам довольно хорошие оценки, основанные на наших метриках.
Однако есть больше возможностей для точной настройки и улучшения модели:

  1. Мы использовали Log Transformation для нормализации искаженных функций в нашем наборе данных. Иногда для нормализации лучше подходит преобразование Бокса-Кокса. Однако преобразование Бокса-Кокса требует оценки его значений лямбда в качестве входного параметра. Улучшенная нормализованная ата увеличит возможности для уменьшения ошибок и улучшения нашей метрики RMSLE.
  2. Мы сделали поиск по сетке по некоторым важным и основным параметрам. Мы обнаружили, что использование настроенных параметров для нашего конвейера уменьшает нашу ошибку. Однако, учитывая большую вычислительную мощность, можно выполнить более тщательный поиск по сетке для дальнейшей точной настройки модели и уменьшения ошибки.
  3. Мы можем использовать различные стратегии стекирования, такие как взвешенное стекирование, и добавлять более настроенные базовые модели в наш список стека, чтобы уменьшить нашу ошибку.

Наконец, мы увидели, что суммирование и использование комбинированных моделей может значительно уменьшить нашу ошибку и улучшить нашу модель и окончательные прогнозы.

Благодарности

Большое спасибо всем замечательным ядрам Kaggle за этот набор данных, особенно тому, что принадлежит Serigne.

Спасибо. Удачного кодирования!!!