Конкуренция Kaggle: прогнозирование цен продажи домов

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

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

В этой серии статей я объясню концепцию линейной регрессии через Конкурс Kaggle: «Цены на жилье — продвинутые методы регрессии», начиная с основного уравнения линейной регрессии и переходя к сложным анализ, показывающий во второй части этой статьи наиболее распространенные модели регрессоров. Кроме того, тем временем я объясню способы работы с категориальными переменными и научу использовать конвейер для их предварительной обработки.

Чтобы облегчить ваше обучение, блокнот доступен на моем GitHub и Kaggle.

Исходный код

Блокнот на Kaggle:



Блокнот на Github:



Модели классификации x модели регрессии

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

Например, в своей последней статье я построил классификационную модель, чтобы предсказать, выживет человек или нет на Титанике. В этом случае мы пытаемся предсказать два значения: 0 и 1 (выжил или не выжил), так что это алгоритм классификации. В этой статье я построю модель, предсказывающую цену продажи дома на основе данных, предоставленных Kaggle. Итак, это алгоритм регрессии, который предсказывает количество — в данном случае цену продажи дома, но может быть и зарплата, возраст и т. д.

Уравнение линейной регрессии

Уравнение линейной регрессии описывает линейную связь между независимыми переменными и зависимыми переменными. Ниже вы можете увидеть уравнение:

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

В этой серии статей я покажу общий процесс, когда мы подойдем к части построения модели.

Общие характеристики набора данных

Давайте поступим так: начнем программировать и во время анализа — когда будет удобно — остановимся, чтобы объяснить понятия, необходимые для понимания того, что мы делаем.

Сначала соберите данные. Данные обучения будут использоваться для проведения нашего анализа и обучения моделей; тестовые данные будут просто использованы в конце, чтобы предсказать целевую переменную и отправить ее в Kaggle.

Теперь давайте взглянем на набор данных:

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

Поведение целевой переменной

Выше мы можем видеть некоторые показатели центральной тенденции, теперь давайте посмотрим на распределение целевой переменной.

Очень интересно, что переменная «SalePrice» имеет правостороннее распределение. Хороший способ справиться с этим — применить метод преобразования его в нормальное распределение перед началом моделирования. Существует много методов, и лучший из них тот, который лучше преобразуется в нормальное распределение.

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

Зачем преобразовывать искаженную переменную в более нормализованную переменную? При моделировании переменных с нелинейными отношениями или не очень линейными отношениями преобразование может сделать эти отношения более линейными, улучшая соответствие модели данным. Кроме того, форма распределения играет роль в выборе подходящего метода статистического анализа; если мы выполняем статистический анализ, который предполагает нормальность, преобразование может помочь нам удовлетворить это предположение.

Такие меры, как асимметрия и эксцесс, используются для описания разброса и высоты распределения. Первый измеряет отсутствие симметрии, а второй — плоскостность кривой.

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

Обзор отсутствующих значений

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

Иногда эти значения отсутствуют не потому, что они не собраны, а потому, что они означают, что вещь не существует. Например, читая описание данных набора данных, мы видим, что переменная Аллея имеет значения Нан, потому что некоторые дома не имеют доступа к переулку. Столбцы BsmtQual и BsmtCond происходят одинаково: имеют пропущенные значения не потому, что они отсутствуют, и тот факт, что эти две переменные имеют одинаковый процент пропущенных значений, усиливает идею о том, что есть дома без подвала.

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

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

Разделите качественные и количественные переменные

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

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

Я решил сначала проанализировать количественные переменные.

Количественный анализ

Как только мы изучим данные для модели линейной регрессии, мы должны начать смотреть на корреляцию между переменными.

На изображении выше мы видим корреляцию между зависимой переменной и независимыми переменными. Давайте посмотрим на диаграмму рассеяния
, сможем ли мы увидеть линейную связь между «SalePrice» и переменными, которые имеют высокую корреляцию с ним.

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

Что ж, теперь давайте просто сохраним названия столбцов, которые мы сочли релевантными.

Качественный анализ

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

Во-первых, я хотел бы представить два общих способа работы с категориальными значениями.

Порядковое кодирование

Порядковое кодирование присваивает каждому уникальному значению другое целое число.

Этот подход предполагает упорядочивание категорий: «Никогда» (0) ‹ «Редко» (1) ‹ «Большинство дней» (2) ‹ «Каждый день» (3).

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

Одно горячее кодирование

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

В отличие от порядкового кодирования, горячее кодирование не предполагает упорядочения категорий. Таким образом, вы можете ожидать, что этот подход будет работать особенно хорошо, если нет четкого порядка в категориальных данных (например, «Красный» не больше и не меньше, чем «Желтый» ). Мы называем категориальные переменные без внутреннего ранжирования номинальными переменными.

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

Когда эти два подхода покажутся вам ясными, будет легче понять, что мы будем делать дальше.

Во-первых, давайте разделим категориальные переменные на две группы:

Следующим шагом, который мы должны сделать, является исключение переменных с высокой мощностью. Когда мы говорим о мощности переменной, мы имеем в виду количество уникальных записей категориальной переменной как мощность этой категориальной переменной. Например, переменная «Улица» имеет кардинальность 2.

Кроме того, переменные с высокой кардинальностью могут привести к слишком долгому обучению модели, если мы используем One Hot Encoder, а используемые переменные могут быть несущественными для модели. В силу этого я решил, что для переменных, классифицированных как One Hot Encoding Variables, я буду использовать только соответствующие столбцы и те, мощность которых меньше или равна шести.

После этого фильтра оставшимися переменными, которые мы будем применять One Hot Encoder, будут следующие: [‘Street’, ‘LotConfig’, ‘RoofStyle’, ‘Foundation’, ‘Heating’].

А имена переменных, которые мы будем делать порядковое кодирование, я присвою переменной ordinal_cols.

Столбец «CentralAir» является единственной категориальной переменной, которая является исключением. Мы не будем применять ни Ordinal Encoding, ни One Hot Encoder. Согласно описанию данных конкурса, эта переменная принимает только два значения.

Поэтому позже мы заменим строковые значения логическими значениями (Y: 1, N: 0).

Подготовьте набор данных

Трансформация

Вы помните, что мы видели, что целевая переменная имеет правостороннее распределение? Мы должны принять во внимание, что, возможно, выбранные нами числовые переменные могут иметь асимметричное распределение, поэтому давайте посмотрим, что мы можем найти.

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

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

Искажение «SalePrice» до трансформации было 1,88, теперь 0,12; эксцесс был 6,54, а теперь 0,81.

И независимые переменные больше похожи на нормальное распределение, чем раньше.

Теперь давайте сравним линейную зависимость переменных через диаграмму рассеяния до и после преобразования.

До преобразования

После трансформации

Глядя на переменные, которые мы сделали преобразование, мы видим, что они имеют более заметную линейную зависимость. Почему это? Потому что преобразование улучшило отношение линейности переменных.

Заключение

В этой статье мы поняли разницу между моделями классификации и регрессора; удовлетворил уравнению линейной регрессии; увидел общие характеристики набора данных и поведение целевой переменной.

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

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

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