Выбор модели в машинном обучении и результаты моего первого конкурса Kaggle.

Известный статистик Джордж Бокс сделал часто цитируемое наблюдение: «Все модели ошибочны». Основываясь на моем опыте создания и интерпретации финансовых моделей, я вынужден согласиться. Модели - это ошибочная попытка описать сложные отношения простыми терминами, при этом делая ряд предположений. Однако модели тоже полезны. У них есть сила сделать нашу жизнь лучше.

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

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

Постоянная тема в Data Science заключается в том, что мы пытаемся выбрать модель (или несколько моделей), соответствующую нашим целям. Одной из наиболее часто применяемых моделей прогнозирования машинного обучения является линейная регрессия. Чтобы сформировать модель линейной регрессии, мы вручную выбираем ряд переменных или «характеристик», при этом предполагается, что каждая характеристика имеет поддающееся количественной оценке (скалярное) прямое влияние на конечное значение, «цель». Начиная с одной линейной зависимости, Постепенное увеличение функции связано с пропорциональным увеличением или уменьшением цели. Взаимосвязь может быть положительной - каждый дополнительный квадратный фут в вашем доме увеличивает свою дополнительную ценность - или отрицательной - каждая дополнительная кредитная деятельность снижает ваш общий кредитный рейтинг.

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

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

На этой неделе я применил свои знания о линейной регрессии, разработав прогностическую модель для участия в конкурсе Kaggle для набора данных о ценах на жилье в Эймсе, штат Айова, ссылка на который приведена здесь: https://www.kaggle.com/c/house-prices- продвинутые методы регрессии . В оставшейся части этого поста я дам обзор проблемы, опишу свой подход и проанализирую свои результаты.

Обзор:

Kaggle.com предоставил «обучающий» набор данных для 1500 домов, проданных в 2006–2010 годах. Для каждой продажи дома в обучающем наборе нам дается продажная цена вместе с 79 другими потенциальными битами информации, которые могут повлиять на эту продажную цену. Вот некоторые из этих характеристик: общая пригодная для жизни площадь, размер участка в квадратных футах, количество спален, год постройки, тип облицовки кладки, тип отделки подвала и т. Д.

В этом упражнении вся моя работа велась в Jupyter Notebook с использованием Python и библиотек Pandas и Scikit-Learn. Для получения дополнительных сведений ознакомьтесь с файлом Ames-Submit.ipynb Jupiter Notebook на моем общедоступном GitHub здесь: https://github.com/eversdyk/kaggle-linreg-ames-housing.

Шаг 1. Исследование данных.

Прежде чем импортировать данные в свой блокнот jupyter, я потратил около часа на чтение документации от автора набора данных, что дало мне хороший обзор возможных значений для каждой функции и того, как они могут повлиять на продажную цену. Затем я вытащил обучающий файл .csv в Pandas DataFrame в своей записной книжке и выполнил некоторый исследовательский анализ. За это время я понял, что многие столбцы имеют нулевые значения, которые необходимо исправить. Я также сделал быструю тепловую карту корреляций функций, чтобы дать мне представление о движущих характеристиках, которые влияют на продажную цену.

Шаг 2: Очистите тестовые данные.

Сначала я переставил 79 функций, чтобы сгруппировать их по типам переменных: непрерывные, дискретные, порядковые и категориальные. Затем я проверил нулевые значения каждой переменной и заполнил их соответствующим образом. Для числовых значений я заполнил небольшое количество пропущенных точек средним значением для этого столбца. Для других я сделал предположение, основанное на других столбцах. Например, заполнить недостающий год «Построен гараж» тем же годом, когда был построен дом. Отсутствующие категориальные значения я в основном заполнил режимом или наиболее часто встречающимся значением для этой категории. Для двух заключительных шагов очистки я создал «фиктивные» логические столбцы для категориальных переменных и, наконец, нормализовал значения для всех столбцов, чтобы они оставались в пределах -1 и 1. Эта нормализация - отличный способ сохранить окончательные коэффициенты или веса для каждая особенность более сбалансирована.

Шаг 3: Создайте модель и проверьте, работает ли она.

Сначала я попробовал простую модель линейной регрессии, которую я обучил и подогнал с помощью метода KFolds с 10 сгибами. Эта стратегия KFold - распространенный способ разбить данные на фрагменты для быстрого обучения и прогнозирования, а также уменьшает влияние выбросов в обучающих данных. Быстрая проверка моего значения R-квадрата показала, что это ... полная чушь. Метрика R-квадрат - это мера отношения изменчивости данных ответа, которая объясняется данной моделью. Ожидается, что он будет находиться в диапазоне от 0% до 100%, где 0% означает, что ваша модель работает не лучше, чем случайное предположение о среднем значении ответа, а 100% означает, что ваша модель будет идеально определять правильную цену продажи каждого дома каждый раз. время. Мое значение было очень маленьким числом, близким к нулю, а это означало, что мне нужно было больше поработать, чтобы найти полезную модель.

Шаг 4: Улучшите модель или попробуйте другую технику.

К счастью, на этой неделе мы узнали о технике под названием «лассо». Как следует из названия, метод лассо немного упрощает линейную регрессию, фокусируясь на меньшем подмножестве переменных. Вкратце, лассо приведет к обнулению весов избыточных функций, что устранит некоторые проблемы коллинеарности, которые могут нарушить наше приближение линейной регрессии. На этот раз оценки R-квадрат показали, что прогнозируемая цена продажи была около 90%, что означает, что наша модель очень хороша и объясняет 90% изменчивости в тестовых данных. Используя функцию Scikit-Learn под названием GridSearch, я также внес некоторые изменения в самый важный параметр Лассо, значение штрафа, известное как альфа. Это улучшило мою оценку примерно до 91%. К этому моменту я был достаточно уверен, чтобы сделать некоторые прогнозы на основе тестовых данных, которых я еще не касался.

Шаг 5: Посмотрите, работает ли модель на тестовых данных, и отправьте результаты в Kaggle.

До этого момента я работал только с обучающими данными. Данные обучения содержат как характеристики (79 переменных для каждого проданного дома), так и ответ (его продажную цену). Пришло время проверить мою модель на тестовых данных. Набор тестовых данных содержит информацию (те же 79 функций) для более чем 1000 новых экземпляров домов, проданных в Эймсе, на этот раз без цены продажи. Я взял эти новые данные и преобразовал их точно так же, как я очищал данные обучения ранее: путем организации функций, заполнения их нулевых значений, создания фиктивных переменных и нормализации всех значений. Поскольку модель уже была подогнана под данные обучения, она была готова делать прогнозы продажной цены для каждого наблюдения в наборе тестовых данных. Модель выдвинула свои прогнозы, и я провел им быструю проверку зрения, чтобы убедиться, что они верны. Затем я загрузил прогнозируемые цены продажи в Kaggle для оценки.

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

Я все еще новичок в моделях Data Science и Machine Learning, но этот первый конкурс был ценным опытом, который позволил мне отточить свои навыки. Я доволен своим процессом, хотя я буду первым, кто укажет на улучшения, которые я мог бы сделать при очистке и организации данных, например, написание функций для обработки операций массовой очистки или иное заполнение нулевых значений. Вместо использования подхода Лассо я мог бы использовать подходы Ridge или Elastic Net для штрафных коэффициентов. Я также ожидаю, что существуют и другие, более сложные модели для непрерывного прогнозирования стоимости, которые мне еще предстоит изучить.

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