Несколько месяцев назад, когда я был студентом Erasmus, я обнаружил, что люблю путешествовать. У меня были планы. Я хотел посмотреть спектакль в The Globe, навестить друга в Милане, поездить по Португалии, но потом… вы знаете, что произошло. Именно так большинство людей, которых я знаю, описывают текущую ситуацию. Обычно я слышу что-то вроде «У меня были планы. Я хотел сделать это и это, но потом вы знаете, что произошло».

К счастью, я могу путешествовать, используя силу своего воображения. Сегодня я решил посетить Калифорнию. Я нашел проект в разделе Практическое машинное обучение с помощью Scikit-Learn и TensorFlow, который прогнозирует цены на дома в Калифорнии. Это такой теплый край. Это замечательная идея переехать туда.

А. Бизнес-кейс

Нас просят создать модель цен на дома в Калифорнии на основе переписи населения 1990 года. Данные можно найти в репозитории StatLib. Данные состоят из такой информации, как средний доход или средняя цена дома. Эта информация закреплена за округами Калифорнии.

а) Какова цель создания модели?

Прогнозирование средней стоимости дома. Это ответит на вопрос, стоит ли инвестировать в конкретный район.

б) Каково текущее решение?

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

c) Какой метод машинного обучения мы должны использовать?

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

Б. Исследование данных

Первым шагом является изучение имеющихся у нас данных. Мы рассмотрим первые пять строк с помощью метода head(). Каждая строка представляет каждый район. На картинке видны десять атрибутов.

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

Кроме ocean_proximity, все значения являются числовыми. Изучив его, мы обнаруживаем, что значения, скрытые в этом столбце, являются категориальными.

Благодаря методу description() мы генерируем сводку числовых значений. Такие значения, как количество, среднее или минимальное и максимальное, не нуждаются в особом объяснении. Однако стандартное отклонение — это особая мера, описывающая дисперсию набора значений. Значения 25%, 50% и 75% показывают процентили, то есть значения ниже определенного порога. Например, в 25% округов медианное значение жилищного строительства ниже 18.

Еще одним быстрым способом анализа данных является создание гистограммы для каждого числового атрибута. Гистограмма показывает ряд примеров, находящихся в определенном диапазоне значений. Мы собираемся генерировать гистограммы для всех значений в наборе данных.

Есть несколько вещей, которые мы можем узнать из приведенных выше гистограмм.

  1. Средний доход не выглядит так, как если бы он был указан в долларах США. После короткой консультации мы обнаруживаем, что данные были масштабированы и ограничены максимальным значением 15 для большего медианного значения и минимальным значением 05 для меньшего медианного значения.
  2. Housing_median_age и цена также были масштабированы. Цена должна быть нашим основным ярлыком. Алгоритмы машинного обучения могут сделать вывод, что цены на жилье не превышают максимальный предел. В этом случае мы должны знать, нужны ли клиенту точные прогнозы выше 500 000$. Если да, то есть два варианта:
  • получить правильные метки для районов с отсечением верхнего предела
  • удалить эти районы из набора для обучения и тестирования

3. Каждый атрибут имеет свою шкалу.

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

С. Визуализация данных

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

Форма участка действительно похожа на Калифорнию, но очень трудно найти какую-то закономерность. После установки параметра альфа на 0,1 нам станет легче увидеть, где самые плотные области.

Теперь сюжет понятнее. Мы видим, что самыми плотными районами являются Bay Area, Лос-Анджелес, Сан-Диего, Сакраменто и Фресно.

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

Можно предположить, что цена зависит от географического района и населения.

Наш набор данных невелик, поэтому мы можем легко посчитать коэффициент корреляции Пирсона. Значения коэффициента находятся между -1 и 1. Значения, близкие к 1, имеют сильную положительную корреляцию. Например, median_house_value увеличивается вместе с median_income. Значения, близкие к -1, имеют сильную отрицательную корреляцию. Например, у нас есть небольшая отрицательная корреляция между широтой и значением median_house_value.

Другой способ проверки корреляции между атрибутами — использовать функцию scatter_matix, которая создает графики для каждого атрибута в зависимости от других атрибутов. У нас есть 11 числовых атрибутов, у нас будет 11² = 121 график. Мы собираемся сосредоточиться на наиболее перспективных атрибутах.

Наиболее многообещающим атрибутом, который поможет нам предсказать значение median_price_value, является median_income. Мы собираемся более подробно рассмотреть его корреляционный график.

Мы видим, что корреляция действительно сильная. Мы видим тенденцию к увеличению, и точки действительно близки друг к другу. Кроме того, ранее упомянутый предел цены виден в виде горизонтальной линии в точке 500 000 $. Кроме того, есть и другие менее очевидные аномалии, такие как строчка в 450 000$, в 350 000$ и еще одна в 280 000$. Их удаление улучшит качество нашего алгоритма обучения.