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

Линейная регрессия

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

Учитывая относительную простоту набора данных, содержащего только числовые значения и отсутствие пропущенных данных, этап подготовки к машинному обучению относительно прост. Мы разделяем данные на обучающий набор и тестовый набор. Мы построим модели на тренировочном наборе, а затем посмотрим, продолжит ли модель работать на нашем тестовом наборе после его завершения. Одноэтапный конвейер, который стандартизирует данные (приводя все значения к одному масштабу), является последним шагом. Затем мы можем использовать эти преобразованные значения во всех будущих моделях.

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

Глядя на среднеквадратичную ошибку (RMSE) для этой модели, мы видим, что она составляет 4,65 (в тысячах). Что кажется довольно высоким. Обычно это может быть идеей поиграть с функциями, включенными в модель, и, возможно, сделать некоторые преобразования, которые могут значительно уменьшить эту ошибку. Однако я бы предпочел пойти дальше и попробовать более продвинутые модели.

Модель случайного леса

Модель случайного леса — это когда вы берете несколько моделей Дерева решений, каждая из которых построена на случайном подмножестве данных, а затем объединяете результаты, чтобы получить окончательную модель. Было показано, что он очень эффективен и является очень популярным типом модели.

Для этой модели доступно множество гиперпараметров (настроек, управляющих моделью), поэтому для получения хорошей модели может потребоваться немного больше усилий. Эта дополнительная настройка должна быть сбалансирована с риском «переобучения» данных, другими словами, сделать модель настолько специфичной для имеющегося у нас набора данных, что она не будет обобщаться, когда мы попытаемся применить ее к новым данным.

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

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

Затем я протестировал построение модели с различными гиперпараметрами. Я ограничился тем, что попробовал разные варианты на «n_estimators», «max_features» и «bootstrap». Модель, которая работала лучше всего, имела «max_features» = 4, «n_estimators» = 1000 и «bootstrap» = False. При выполнении перекрестной проверки эта модель дала среднее значение RMSE около 3,3. Итак, у нас, похоже, есть еще одно подлинное улучшение.

На этом этапе я решил остановиться на этой модели и применить ее к тестовому набору данных, чтобы увидеть, как она работает с невидимыми данными. На самом деле это вернуло RMSE примерно 2,7, что очень необычно, поскольку это лучше, чем в обучающем наборе данных. Это заставляет меня сомневаться в том, что модель работала очень хорошо.

Глядя на распределение значений (см. ниже), кажется, что мы на самом деле довольно далеко, общая форма кривой аналогична, но пики находятся в совершенно разных местах, мы обычно прогнозируем средние цены как более высокие, чем они должны быть. в диапазоне 18–45 тыс.

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

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

Модель машинной регрессии опорных векторов

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

Подгонка базовой модели с использованием только настроек по умолчанию не сработала, начальная подгонка имеет RMSE примерно 5,1 с использованием перекрестной проверки. Итак, на первый взгляд, это не очень хорошая модель для использования. Однако после небольшой настройки гиперпараметров, в частности, изменив ядро ​​на «RBF», а не на «линейное», я смог значительно улучшить соответствие, чтобы получить ошибку примерно 2,98 на тестовом наборе, измеренном с использованием перекрестная проверка.

Как только это было оптимизировано, я применил модель к тестовому набору и вернул ошибку 3,45. Это выше, чем ошибка на тренировочном наборе, но этого следует ожидать в большинстве случаев. При взгляде на распределение цен кажется, что эта модель гораздо лучше соответствует общей форме, чем случайный лес.

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

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

Вывод

Итак, теперь у нас есть две основные модели, которые мы можем использовать для прогнозирования цен на жилье в Бостоне. То, что мы решим использовать, будет зависеть от конечного варианта использования и от того, насколько нам комфортно работать с различными моделями. Дополнительные работы, которые могут быть выполнены, заключаются в следующем:

· Обучайте и тестируйте больше моделей на данных, другие более сложные модели могут дать лучшие результаты.

· Учитывая, что только переменные LSTAT и Room кажутся значимыми в целом, мы можем сократить модель, чтобы рассматривать только их, а затем добавлять дополнительные переменные по одной за раз, чтобы увидеть, как они влияют на результат. Преимущество меньшего числа переменных также состоит в том, что при оценке новой территории требуется собирать меньше данных.

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

· Проведите дальнейший поиск гиперпараметров в выбранных нами моделях.

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

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