С помощью алгоритмов машинного обучения 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 довольно хорошо обрабатывает невидимые данные, поэтому я бы использовал ее для прогнозирования стоимости дома.
Рекомендация
Я бы порекомендовал продолжить тестирование / научиться улучшать модель:
- Возвращаясь к моему первоначальному процессу прямого отбора
- Выбор функций сильно коррелирует с продажной ценой
- Создание новых и проверка их корреляции
- Кормление модели и проверка результатов
- Отслеживание функций, которые улучшают модель, и отбрасывание (но также отслеживание) функций, которые не
Посмотрите мой код и мою презентацию. Прокомментируйте, пожалуйста, любые вопросы. Спасибо за чтение!