Что такое машинное обучение?

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

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

  1. Рекомендации Netflix на основе вашей истории потокового вещания.
  2. Фотографии, загруженные рецензентом на Yelp, для классификации изображений.
  3. Автомобили Waymo используют машинное обучение, чтобы понимать свое окружение.
  4. Duolingo использует машинное обучение, чтобы знать, когда пинговать пользователей, которым может быть полезно повторить старый урок.

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

Например, если бы нам нужно было предсказать жанр фильма — комедия/ужасы/драма, это была бы проблема классификации. Однако, если бы нам нужно было предсказать продажи билетов, которые могут быть получены для одного и того же фильма, это была бы проблема регрессии.

Чтобы понять, как работает рабочий процесс машинного обучения, я использовал общедоступный набор данных от Airbnb, относящийся к Сан-Франциско. Цель этого проекта — использовать машинное обучение для прогнозирования цен на свои объявления. Таким образом, это будет проблема регрессии. Блокнот для этого проекта можно найти здесь.

Рабочий процесс

Обработка данных:

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

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

Этот шаг помог мне сократить набор данных до 38 столбцов, которые, по моему мнению, имеют отношение к этому проекту.

«Данные, которые нравятся, имеют тенденцию выживать». — Курт Боллакер, ученый-компьютерщик.

Разделение данных:

Здесь я сначала разделил свои данные на целевой вектор (y) и матрицу признаков (X). Целевой вектор состоял из столбца «цена», поскольку именно его я пытался предсказать. Матрица признаков состояла из всех остальных столбцов, поскольку именно они, по моему мнению, имели отношение к прогнозам.

Затем мне нужно было разделить мои данные на набор для обучения и тестирования. Для этого я использовал функцию train_test_split для случайного разделения данных на X_train, y_train, X_test, y_test.

Установите базовый уровень:

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

Модель сборки:

Я приступил к созданию нескольких моделей, а именно — LinearRegression, RidgeRegression, RandomForestRegressor и XGBoostRegressor.

Проверить показатели:

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

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

Настройка модели:

Хотя моя модель RandomForest показала лучшие результаты из четырех моделей, которые я создал, я надеялся еще больше уменьшить MAE, настроив свою модель с помощью RandomizedSearchCV. При этом я смог уменьшить погрешность и, таким образом, получить немного лучшее соответствие.

Сообщить о результатах:

Когда моя модель была настроена, я был готов сделать свои прогнозы. Для этого я использовал тестовый набор (X_test), который представлял собой наблюдения, на которых модель не обучалась и не проверялась.

Пытаясь понять, как моя модель делает прогнозы по всему набору данных, я сделал несколько вещей:

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

Основываясь на графике важности перестановки, мы видим, что 6 наиболее важных характеристик:
- Минимальное количество ночей, необходимое для проживания
- Количество спален
- Количество людей, которые могут разместиться в списке< br /> - Количество ванных комнат
- Расположение
- Тип номера

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

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

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

Число_отзывов играет более важную роль в прогнозировании цены листинга, особенно для тех, которые вмещают более 10 человек.

3. Используя графики Шепли, я смог поднять это на более глубокий уровень и понять, как модель делает предсказание каждого наблюдения.

4. Другим графиком, который мне показался наиболее полезным, был График зависимости формы.

Это показывает 3 основные функции, которые взаимодействуют с функцией «review_scores_rating» и их взаимодействия.

Что дальше?

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