Информация, которую можно извлечь из конкурентного соревнования Kaggle

Введение

В следующем документе основное внимание уделяется различным методам, используемым для решения вышеупомянутой проблемы, и выводам, сделанным на основе этих результатов при создании модели машинного обучения, которая будет точно оценивать стоимость почти 3 миллионов домов в США за шесть периодов времени. Другими словами, мы спрогнозируем, где оценка Zillow (спонсора) будет плохой, а где - хорошей. Мы выполнили задачу двумя способами. Один метод заключался в том, чтобы рассматривать эту проблему как прогнозирование временных рядов, а другой - делать прогнозы на определенный период и предполагать, что эта тенденция следует / прослеживалась в будущем / прошлом. Мы также оценили различные реализации, чтобы выбрать лучший вариант. Все методы будут обсуждаться в этом документе вместе с результатами и выводами, сделанными на их основе.

Критерий оценки:

Метрикой оценки будет средняя абсолютная ошибка. Поэтому наша цель / задача - точно предсказать ошибку. Чем ближе прогнозируемая ошибка к ошибке Зиллоу, тем точнее будут наши прогнозы.

Описание наборов данных

Ссылку на это можно найти в разделе "Ссылки".

Дизайн

Подход

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

Прогнозирование временных рядов

Поскольку проблема, с которой мы имеем дело, имеет несколько периодов времени, которые необходимо предсказать, использование одних и тех же статических функций при прогнозировании будущих ошибок в свойствах даст нам только один и тот же результат для каждого периода, поскольку нет изменяющейся во времени функции, которая могла бы способствовать реалистичная оценка. Таким образом, в этом случае у нас должны быть некоторые изменяющиеся во времени функции (функции, чувствительные ко времени), чтобы делать надежные прогнозы на будущих данных. Поэтому мы рассмотрели метод скользящего окна, основанный на функциях, рассчитанных на основе желаемой длины окна. переменные временные окна в нашем наборе данных были следующих размеров: 3-месячный период, 2-месячный период и 1-месячный период. После этого мы разработали функции для временных окон предыдущих месяцев из целевого месяца, чтобы использовать их в качестве специальных функций в наборе данных за целевой месяц. Были разработаны такие изменяющиеся во времени функции, как простые скользящие средние / среднее значение, стандартные отклонения, медианы, минимумы, максимумы и третьи квартили. В наш окончательный набор данных включены только данные за апрель, май и июнь. Это ограничение этого метода, поскольку оно приводит к значительному сокращению набора данных. Одно из решений - рассмотреть небольшое окно с небольшой шириной, но поскольку мы не знаем, какое окно дает оптимальные результаты, и выполнение перекрестной проверки для определения лучшего окна было бы утомительной задачей, мы выбрали окна с различной длиной и малой шириной, чтобы уменьшить негативное влияние небольшого размера набора данных. Но проблема с окнами меньшей ширины заключается в том, что если продажи, относящиеся к аналогичным свойствам, происходят с меньшей частотой, прогнозируемая сила спроектированных функций будет меньше из-за того, что одни и те же спроектированные функции избыточны в большинстве окон. В этом методе мы использовали другой метод для обработки категориальных значений, которые должны были заменить категорию средним значением целей для этой категории.

Метод постоянного тренда

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

Анализ данных

properties_2016.csv содержит 58 столбцов, из которых 57 столбцов могут использоваться как статические объекты, а столбец «parcelid» является уникальным идентификатором каждого Таким образом, parcel не будет использоваться в качестве объекта. train_2016.csv содержит цели, которые являются logerrors для участков, проданных в 2016 году. Функции и цели можно объединить в один файл, объединив эти два файла на основе на parcelid. Знание природы данных нашего набора данных дает нам прекрасную возможность заранее выполнить необходимые операции предварительной обработки, чтобы точность модели не была нарушена из-за эффекта смещения в наборе данных. В этом документе мы сосредоточимся только на прогнозировании октября 2016 г., ноября 2016 г. и декабря 2016 г.

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

Типы данных

После объединения двух файлов properties_2016.csv и train_2016.csv. Следующие столбцы были удалены во время этого процесса. parcelid и transactiondate, поскольку они больше не нужны.

Категориальные значения

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

Двумя категориальными столбцами были:

propertyzoningdesc - Описывает разрешенную площадь (зону) земли для использования под собственность.

propertycountylandusecode - код землепользования округа (географического подразделения).

Столбцы, содержащие значения логического типа:

hashottuborspa - есть ли в отеле гидромассажная ванна или спа.

cabinflag - есть ли у компании камин или нет.

taxdelinquecyflag - подлежат ли уплате налоги на недвижимость для этой собственности или нет.

Отсутствует процентное значение

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

Подсчет уникальных значений

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

Статистическая информация

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

Название столбца: airconditioningtypeid

счетчик 90275.000000, среднее значение 275.675262, стандартное 187.414780, мин 1.000000,

1 квартал 1.000000, 2 квартал 404,000000, 3 квартал 404,000000, максимум 404,000000.

Изучение набора данных

Частотное распределение функций

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

Распределение целевой переменной

Ясно, что целевая переменная имеет форму, близкую к нормальному распределению. Несмотря на то, что симметричная форма была потеряна с левой стороны графика, возможно, из-за того, что Kaggle сохранил больше данных из этой области для целей тестирования. Logerror варьируется примерно от -5 до +5. Кроме того, ось Y была масштабирована до логарифмической шкалы.

Изменение характеристик по сравнению с целевым

На приведенной выше диаграмме показан график разброса выбранного объекта по сравнению с целевым, который показывает изменение значений объекта по целевым значениям.

Результаты кластеризации

Вышеупомянутые результаты были получены после выполнения кластеризации k-средних с числом кластеров, равным четырем. Дальнейшая кластеризация была произведена с изменением количества кластеров на десять и три. Но лучшее разделение дает использование 4 кластеров.

Коробчатые диаграммы

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

Визуализации, связанные с временными рядами

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

График задержки

Используется для проверки случайности распределения. Если распределение отображает закономерность в распределении, такую ​​как сезонность, положительная или отрицательная корреляция, тогда распределение можно смоделировать как анализ временных рядов. самое главное проверить, является ли распределение случайным или нет. Поскольку распределение носит случайный характер, его нельзя моделировать как задачу анализа временных рядов. На этом графике ось y показывает ошибку на отметке времени t + 1, а ось x показывает ошибку на отметке времени t, которая отстает на единицу относительно t + 1. График задержки для нашего распределения выглядит следующим образом:

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

График автокорреляции

Это еще один метод проверки случайности распределения путем анализа изменения автокорреляции (корреляции между переменными запаздывания) с увеличением числа запаздываний. Корреляция может быть между -1 и +1. сильная отрицательная корреляция. Если корреляция положительная, значит сильная положительная корреляция. Если корреляция равна нулю, корреляции нет. Итак, чтобы проанализировать, является ли наше распределение случайным или нет, мы должны рассмотреть, близко ли оно к нулю или положительно / отрицательно. Поскольку распределение близко к нулю, оно является случайным. Таким образом подтверждая нашу предыдущую точку зрения.

Данные временных рядов состоят из 3 элементов. Это следующие

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

Изменения значений свойств в разных окнах

На изображении выше показано изменение средней ошибки свойств за один, два и три месяца временных окон.

Предварительная обработка данных

Вменение пропущенных значений

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

Стандартизация

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

Обработка категориальных значений

У нас было две категориальные переменные. Во-первых, нам пришлось применить кодировщик меток для преобразования категориальных значений в числовые, поскольку все преобразования могут выполняться только с числовыми данными. LabelEncoder в пакете sklearn присваивает категориальным значениям значения от 0 до number_of_labels-1. Но что мы обнаружили после этого, так это то, что это привело к созданию большого количества классов, что привело к ограничению ресурсов при применении таких методов, как одноразовое кодирование. Поэтому нам пришлось найти методы для представления категорий с минимальным количеством классов. Итак, мы рассмотрели два следующих подхода:

Один из способов заключался в использовании иерархической кластеризации, и в этом случае мы будем использовать алгоритм для выполнения кластеризации путем определения наилучшего количества кластеров, которые будут использоваться. Для этого мы использовали алгоритм среднего сдвига, который требовал больших вычислительных мощностей и мог обрабатывать только 10 000 выборок за прогон, но у нас было 80 000+ выборок. Одним из решений было бы проводить обучение на пакетах, но алгоритмы кластеризации присваивают кластерам метки случайным образом. Следовательно, мы не можем гарантировать, что в последующих итерациях будет соблюдаться тот же критерий распределения, что и в начальной итерации. Поэтому мы решили выполнить кластеризацию, следуя алгоритму плоской кластеризации, который был k-средним, что требовало объявления количества кластеров, которые нам нужны, в качестве параметра алгоритма. Поскольку нам нужно было проверить, влияет ли увеличение или уменьшение количества кластеров на метрику оценки. мы использовали разные значения для количества кластеров, такие как 3, 5 и 10. Но все же возникла проблема после того, как мы выполнили кластеризацию, мы присвоили метки кластера значениям в категориальной переменной, которые относятся к этому кластеру. Затем мы выполняем одноразовое кодирование для каждой присвоенной метки. После выполнения одного горячего кодирования закодированные двоичные значения будут разделены на отдельные столбцы, что означает увеличение количества кластеров до большого числа, например 10, в результате к текущему набору данных будет добавлено 20 новых столбцов. Поскольку каждая функция представлена ​​как измерение во входном пространстве, увеличение одного измерения может привести к экспоненциальному увеличению временной сложности. Поэтому введение двадцати дополнительных столбцов приведет к значительному увеличению сложности.

Другой метод предполагает разметку на основе частоты. Здесь мы присвоили метку 0 классам с частотой менее 50% встречаемости и 1 - более чем 50% встречаемости. Порог можно изменить, чтобы проверить, дает ли он какое-либо существенное улучшение рассматриваемой метрики. Применение этих методов не дало значительных улучшений.

Другая предварительная обработка

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

Разработка функций

Здесь мы разработали некоторые новые функции, а также использовали некоторые функции, предложенные в ядрах Kaggle. Вот некоторые из разработанных функций. Полный список доступен в моем репозитории GitHub, ссылка на который приведена в разделе ссылок,

  • Как долго подлежал уплате налог
  • Количество свойств в каждом почтовом индексе
  • Количество объектов в каждом округе,
  • Количество объектов в каждом городе
  • Полиномы стоимости недвижимости

Построение моделей и настройка параметров

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

Укладка

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

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

Результаты и обсуждение

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

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

Ссылки