Вы когда-нибудь задумывались, как такие сайты, как Zillow или Redfin, оценивают цены на жилье с высокой точностью? Может показаться, что нужно много кодировать, но это еще не все. Машинное обучение - это сочетание искусства и науки. На моем пути к должности инженера по машинному обучению я увлекся поиском закономерностей в необработанных данных. В частности, мне очень любопытно находить тенденции, которые сложно обнаружить человеческим глазом. В этой статье я покажу, как мне удалось построить модель для прогнозирования цен на жилье в Эймсе, штат Айова, с использованием алгоритма линейной регрессии.

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

Нулевые значения:

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

  • Отбросьте любой текстовый столбец, содержащий одно или несколько нулевых значений
  • Отбросьте любой числовой столбец с более чем 5% нулевых значений
  • Заполните любой числовой столбец, содержащий менее 5% нулевых значений, наиболее частым значением (режимом) в этом столбце.

Создать функции:

Такие столбцы, как «Год продажи», «Год выпуска / добавление» и «Год постройки» не будут иметь никакого полезного значения, если они выбраны в качестве характеристик модели. Прежде чем отбросить эти столбцы, я решил создать из них значимые функции. Поэтому я объединил эти столбцы, чтобы создать полезные функции для модели.

  • Вычитание «Год ремонта / добавления» из «Год продажи» даст нам количество лет, прошедших с момента реконструкции дома.
  • Вычитание «Год постройки» из «Года продажи» даст нам количество лет, прошедших с момента постройки дома.

Удалите функции:

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

not_needed = ['Order', 'PID', 'Year Built', 'Year Remod/Add', 'Mo Sold', 'Yr Sold', "Sale Condition", "Sale Type", "Yr Sold"]

Порог корреляции для выбора признаков:

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

В приведенной выше таблице показана корреляция каждой функции с целевым столбцом «SalePrice». Все, что ниже 40%, бесполезно для модели и поэтому было исключено.

Категориальные значения:

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

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

Чтобы избежать избыточности функций, все функции с более чем 10 уникальными значениями были отброшены.

Любой столбец, который показывает более 95% в приведенной выше таблице, означает низкую дисперсию. Другими словами, эти столбцы не имеют различных значений, поэтому их пришлось отбросить.

Чтобы сделать значения в текстовых столбцах полезными для модели, я преобразовал эти значения в категориальный тип данных. После преобразования я создал фиктивный набор данных из этих категориальных значений и объединил его с исходным набором данных. Наконец, я удалил исходные столбцы, которые были преобразованы в фиктивный набор данных.

Проектирование модели:

После очистки данных и проектирования функций пришло время построить модель:

  • Используйте все столбцы как элементы модели
  • Используйте методы удержания и перекрестной проверки, чтобы поэкспериментировать с разным количеством складок
  • Постройте значения RMSE из разных складок (разбиений)

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

Наконец, я визуализировал значения RMSE с соответствующими номерами складок.

Среднеквадратичная ошибка (RMSE) - это стандартное отклонение остатков (ошибок прогноза). Остатки - это мера того, насколько далеко от точек данных линии регрессии. RMSE - это мера того, насколько разбросаны эти остатки. Другими словами, он говорит нам, насколько данные сконцентрированы вокруг линии наилучшего соответствия. Помимо RMSE, давайте посмотрим, насколько точна модель прогнозирования. Поскольку 20 складок выполняются относительно лучше, чем другие комбинации, давайте посмотрим на оценку точности для 20 складок.

The model is 87.4% accurate with cross-validation of 20 folds

Заключение:

Прежде чем вставлять элементы в модель, я прошел через процесс очистки данных и разработки функций. Сильно полагаясь на корреляцию между потенциальными характеристиками и целевой ценой (продажной ценой), ограниченные знания в области жилья и свою интуицию, я смог придумать набор функций для модели. Как вы можете видеть выше, модель выполняет около 33000 RMSE с методом удержания (разделение на поезд / тест). Однако по мере увеличения количества складок RMSE уменьшалась, что является хорошим показателем. Другими словами, чем больше мы используем каждую часть набора данных для обучения и тестирования, тем менее предвзятым оказывается наша модель прогнозирования. При 20-кратном увеличении RMSE упал до 27800 RMSE, что соответствует точности 87,4%. Я считаю, что при разработке функций очень важно иметь достаточные знания предметной области. Моя цель - минимизировать RMSE, узнав больше о рынке жилья, чтобы соответствовать моей модели с наиболее относительными характеристиками.

Спасибо за чтение.

Приветствуются аплодисменты.