Вы собираетесь продать свой дом и хотите знать, какая у него подходящая цена? Угадаем стоимость дома с ML - как? Пожалуйста прочти :)

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

Начнем с теории. При обучении с учителем вы выбираете алгоритмы в зависимости от типа ответа:

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

Например, если вы строите модель для прогнозирования «горячо или нет» и прогнозируете значение из диапазона 1–10, то это регрессия, если ваш ответ горячий или нет - тогда это классификация.

В этом примере мы построим прогнозную модель для прогнозирования цены на жилье (цена - это число из определенного диапазона, поэтому это будет задача регрессии). Например, вы хотите продать дом, но не знаете, какую цену вы можете взять - она ​​не может быть слишком низкой или слишком высокой. Чтобы узнать цену на дом, вы обычно пытаетесь найти похожую недвижимость в вашем районе и на основе собранных данных пытаетесь оценить стоимость дома. Мы сделаем нечто подобное, но с использованием методов машинного обучения! Хорошо, давайте начнем!

Мы будем использовать набор данных Boston Housing, который вы можете скачать здесь. Однако я сделал для вас один трюк с исходным набором данных, который поможет вам лучше понять ML, я разделил его на обучающие и тестовые образцы - вы можете получить их из моего github. Мы будем использовать образцы поездов (файл data_train.csv) для обучения модели и тестовые образцы (data_test.csv) для прогнозов. Я разделил данные на два набора, чтобы показать вам, как можно использовать обученную модель для предсказания неизвестного. Если вас интересует значение каждого столбца в данных, вы можете проверить его здесь. Для обучения моделей мы будем использовать MLJAR, потому что он имеет простой веб-интерфейс (если у вас нет учетной записи, зарегистрируйтесь и получите бесплатные кредиты для начала). Приступим к новому проекту. Убедитесь, что в качестве задачи вы выбрали Регрессия. Это важно, потому что для регрессии используются разные алгоритмы, а для классификации - разные.

Хорошо, пожалуйста, добавьте наборы данных для обучения и тестирования. При добавлении тестового набора данных важно отметить следующее: Этот набор данных будет использоваться только для прогнозов (мы не будем использовать истинную цену SalesPrice из этого набора данных, мы будем его прогнозировать!).

После этого нам нужно указать использование столбцов. MLJAR пытается угадать, какой столбец следует использовать. Установите «Целевой показатель» в качестве использования столбца для SalePrice для набора данных поездов. Для тестового набора данных установите «Не использовать» в качестве использования столбца для SalePrice. Для каждого набора данных нам нужно вверху «Принять использование атрибута».

Мы готовы дать определение ML-эксперименту. В качестве входных данных мы будем использовать данные «поезда». Пожалуйста, оставьте предварительную обработку по умолчанию. Для обучения алгоритму мы будем использовать Extreme Gradient Boosting (xgboost) - он супер мощный, вы увидите! В деталях настройки выберите метрику для оптимизации: Среднеквадратическая ошибка. И жмем Пуск!

Ух ты! Но подождите, что такое среднеквадратическая ошибка (RMSE), зачем мне это? Хороший вопрос. На этапе обучения ваша модель хочет прогнозировать значения, максимально приближенные к целевым значениям. Чтобы отследить, насколько хорошо он работает, нам нужна некоторая мера - она ​​называется функцией стоимости. В нашем примере для функции стоимости мы выбрали RMSE. Когда мы перейдем на страницу результатов, мы увидим множество моделей, и каждая из них имеет различное значение RMSE (столбец Score).

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

Обучили набор моделей, выбрали лучшую. И что?

Нам нужно использовать нашу модель! Вот почему я оставил тестовые образцы, чтобы показать вам, как использовать обученную модель. В наших тестовых наборах данных есть истинные значения, но мы не будем их использовать, допустим, что их не существует. Итак, у нас есть 100 домов в наших тестовых данных, и мы хотим знать цену на них. Чтобы вычислить прогнозы, перейдите в режим Прогноз. Есть 4 шага для получения прогнозов:

  • Шаг 1 - выберите набор данных, который вы хотите использовать в качестве входных данных, в нашем случае это «тест».
  • Шаг 2 - выберите алгоритм, который вы хотите использовать для расчета прогнозов, в нашем случае мы будем использовать алгоритм с наименьшим значением оценки.
  • Шаг 3 - Нажмите кнопку «Начать прогноз»! :)
  • Шаг 4 - подождите немного, чтобы получить прогнозы, и загрузите файл с ответами модели.

Фантастика! Вы только что использовали модель машинного обучения, поэтому сейчас самое время сравнить прогнозируемые цены с истинными - это можно сделать, потому что у нас есть истинная цена SalePrice в тестовом наборе, в реальной жизни у нас нет таких значений, поэтому прогнозы проверить можно только вручную (как-то). Хорошо, давайте сравним их визуально.

В одном столбце представлен прогноз модели, а «SalePrice» - истинное значение, на картинке представлены первые несколько выборок данных (дома). Как видите, в некоторых случаях предсказания очень точны. Например, для дома с Id = 1 истинная цена составляет 208500 долларов, а прогнозируемое значение - 208352 доллара, поэтому разница всего в 148 долларов для собственности более 200 тысяч долларов - неплохо!

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

  • недостаточно данных - слишком мало выборок для их обобщения
  • беспорядочные данные - очень часто в данных есть ошибки
  • проблема с моделью - слишком простая или слишком сложная модель

Вот почему вычисление функции затрат важно для измерения точности наших прогнозов.

Хорошо, на сегодня все. Мы создали модель машинного обучения для прогнозирования цен на жилье и используем ее! :)