С помощью алгоритмов машинного обучения LassoCV, RidgeCV и линейной регрессии.

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

  • Определите проблему
  • Соберите данные
  • Очистите и исследуйте данные
  • Смоделируйте данные
  • Оцените модель
  • Ответьте на проблему

Определите проблему

Мне было поручено создать модель машинного обучения для прогнозирования стоимости дома с использованием набора данных Kaggle Ames Housing. Желая сделать проблему науки о данных более реалистичной, я добавил, что необходимо улучшить Zillow’s Zestimate precision (звездный рейтинг) для таких областей, как Ames с 3 звездами (Good Zestimate). Это может быть связано с предполагаемым увеличением пользовательского веб-трафика к объектам с 3-звездочной точностью Zestimates.

Соберите данные

Набор данных содержал информацию из Офиса оценщика, использованную при вычислении оценочной стоимости отдельных жилых объектов, проданных в Эймсе, штат Айова, с 2006 по 2010 год. Набор данных содержал 2051 строку и 81 столбец (характеристики) информации. Эти данные были собраны и предоставлены Kaggle. Если бы данные не были предоставлены, мой подход к сбору заключался бы в исследовании, чтобы узнать, доступны ли они для всех, или получить их через API Zillow.

Очистите и исследуйте данные

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

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

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

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

Я хотел исследовать эти отношения дальше, поэтому я построил графики рассеяния шести функций из тепловой карты корреляции выше.

Как вы можете видеть, total_qual, у которого была самая сильная корреляция с продажной ценой на уровне 0,80, показывает самую сильную линейную зависимость среди шести выбранных.

Смоделируйте данные

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

Я проверил корреляцию моих недавно разработанных функций с моей целевой переменной, продажной ценой. Вы можете увидеть результаты нескольких ниже.

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

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

Оцените модель

Я выбрал модель LassoCV. Он получил R-квадрат 94% на моих тренировочных данных и 86% на невидимых данных. Среднеквадратичное значение для моих данных тестирования было 37 334. Это означает две вещи: 1) 86% изменчивости данных объясняется моделью и 2) модель переобучена.

Ниже вы можете увидеть распределение моих прогнозов (yhat), наложенных на целевую переменную (y).

Последняя модель оказалась не лучшей моей моделью. Я, к сожалению, перезаписал функции из моей лучшей модели - той, в которой я был преднамеренно выбран в процессе выбора функций и разработки, - поскольку было сделано неверное предположение, что преобразование всех функций в числовые и использование полиномиальных функций даст еще лучшие результаты.

Ответьте на проблему

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

Рекомендация

Я бы порекомендовал продолжить тестирование / научиться улучшать модель:

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

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