Go Dutch можно понимать как разделение счета в ресторане или в других случаях. Согласно Городскому словарю, голландцы, как известно, немного скупы на деньги - не так уж случайно, аспект, с которым я полностью себя идентифицирую. Это выражение появилось много веков назад; Английское соперничество с Нидерландами, особенно в период англо-голландских войн, породило несколько фраз, в том числе голландских, которые продвигают определенные негативные стереотипы.

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

В результате этапа «Получение наших данных» в нашем конвейере мы смогли получить набор данных, содержащий 1182 квартиры для аренды в Амстердаме по состоянию на февраль 2018 года в формате CSV.

Мы начинаем с создания Pandas DataFrame из этих данных.

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

Теперь перейдем к статистике - давайте посмотрим на некоторые сводные данные и меры разброса.

На данный момент мы можем сделать некоторые наблюдения по нашему набору данных:

  • Есть столбец «Безымянный: 0», который, похоже, не содержит важной информации. Мы бросим это.
  • У нас есть несколько переменных с типом данных «объект». Это может быть проблемой, если есть числовые или строковые данные, которые нам нужно проанализировать. Мы преобразуем это в соответствующие типы данных.
  • Минимальное значение для «number_of_bedrooms» - 2. В то же время минимальное значение для «apartment_size» равно 10. Выделить две спальни на 10 квадратных метров - это не так уж и сложно, не так ли? Оказывается, в Нидерландах квартиры оцениваются по количеству комнат или «камер», а не по количеству спален. Итак, для нашего набора данных, когда мы говорим, что минимальное количество спален равно 2, мы фактически имеем в виду, что минимальное количество комнат равно 2 (одна спальня и одна гостиная).
  • Некоторые столбцы, такие как name, provider_code, begin_date и city_code, не добавляют особой ценности нашему анализу, поэтому мы их отбросим.
  • У нас есть несколько полей date_time. Однако невозможно создать прогнозную модель с набором данных, содержащим этот тип данных. Затем мы преобразуем эти поля в целочисленную кодировку Unix Epoch.
  • Средняя стоимость аренды квартиры составляет ок. 2225,13 евро. Стандартное отклонение цен на аренду квартир составляет ок. 1148,40 евро. Отсюда следует, что в отношении normalized_price наши данные чрезмерно разбросаны, поскольку индекс дисперсии (среднее отклонение) составляет приблизительно 592,68.

Some Basic EDA - Исследовательский анализ данных

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

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

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

Давайте уменьшим количество выбросов, создав подмножество наших данных - возможно, хорошим пределом для normalized_price будет 3 000 евро.

Нам удалось удалить большинство выбросов. На первый взгляд, Amsterdam Zuidoost и Amsterdam Nieuw West выглядят как отличные кандидаты для нашего поиска квартир.

Теперь давайте посмотрим на распределение наших данных.

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

Однако это не значит перекос (асимметрия примерно 0,5915) или пик (эксцесс примерно 0,2774).

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

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

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

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

Некоторые интересные находки:

  1. Как было первоначально отмечено на нашем парном графике, цена за метр и размер квартиры действительно имеют значительный отрицательный индекс корреляции Пирсона (-0,7). То есть, грубо говоря, чем меньше квартира, тем выше цена за метр - около 70% увеличения цены за метр можно объяснить уменьшением площади квартиры. Это может быть связано с множеством факторов, но я лично предполагаю, что спрос на меньшие квартиры выше. Амстердам становится местом для молодых людей из ЕС и со всего мира, которые обычно не замужем или женаты без детей. Более того, даже в семьях с детьми количество детей в семье быстро сокращалось за последние годы. И, наконец, места меньшего размера более доступны для такой публики. Никаких научных или статистических оснований для этих замечаний - только чистые наблюдения и предположения.
  2. Нормализованная цена и размер квартиры имеют индекс корреляции Пирсона 0,54. Это означает, что они взаимосвязаны, но не так уж сильно. Это было ожидаемо, так как цена аренды могла иметь другие составляющие, такие как местоположение, условия квартиры и другие.
  3. Две белые линии связаны с переменной begin_date. Оказывается, значение этой переменной равно 16.02.2018 для каждого наблюдения. Очевидно, что нет линейной зависимости между begin_date и другими переменными из нашего набора данных. Следовательно, мы отбросим эту переменную.
  4. Корреляция между долготой и normalized_price незначительна, почти равна нулю. То же самое можно сказать и о корреляции между долготой и ценой_на_метр.

Более пристальный взгляд

Мы увидели некоторую корреляцию между некоторыми из наших переменных благодаря нашему парному графику и тепловой карте. Давайте рассмотрим эти отношения в более крупном масштабе: сначала размер по сравнению с призом, а затем размер по сравнению с ценой (логарифмическая шкала). Мы также изучим взаимосвязь между ценой и широтой (логарифмическая шкала), поскольку нам интересно узнать, какие районы являются наиболее популярными для охоты. Более того, несмотря на корреляции, полученные на последнем этапе, мы также исследуем взаимосвязь между размером и широтой (логарифмическая шкала). Верна ли Амстердаму старая и золотая мантра о недвижимости местоположение, местоположение, местоположение? Будет ли эта мантра диктовать и размеры квартир?

Мы узнаем.

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

Будет ли это концом линии?

Конец линии

Мы проверили некоторые отношения между переменными в нашей модели. Нам не удалось визуализировать какую-либо связь между normalized_price или price_per_meter и широтой и долготой.

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

Используя Folium, я смог создать визуализацию, представленную ниже.

  • Размеры круга были определены в соответствии с размерами квартир с использованием шкалы 0–1, где 1 = максимальный размер квартиры, а 0 = минимальный размер квартиры.
  • Красные кружки обозначают квартиры с высоким соотношением цены и размера.
  • Зеленые круги представляют противоположное - квартиры с низким соотношением цены к площади.
  • При нажатии на каждый кружок отображается текстовое поле, содержащее ежемесячную арендную плату в евро и размер квартиры в квадратных метрах.

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

Так, может быть, все-таки есть связь между ценой и местоположением?

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

Going Green: случайные леса

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

Случайные леса - один из моих любимых алгоритмов машинного обучения благодаря некоторым характеристикам:

  • Случайные леса почти не требуют подготовки данных. По своей логике случайные леса не требуют масштабирования данных. Это частично устраняет необходимость очистки и / или масштабирования наших данных.
  • Случайные леса можно обучить очень быстро. Поднастройка случайной функции, направленная на диверсификацию отдельных деревьев, в то же время является отличной оптимизацией производительности.
  • В случае с произвольными лесами сложно ошибиться. Они не так чувствительны к гиперпараметрам, например, в отличие от нейронных сетей.

Этот список можно продолжить. Мы воспользуемся этой возможностью и попытаемся спрогнозировать цены на аренду квартир на основе имеющихся у нас данных. Наша целевая переменная для нашего R andom Forest Regressor, то есть переменная, которую мы попытаемся предсказать, будет normalized_price.

Но перед этим нам нужно заняться разработкой функций. Мы будем использовать реализацию Random Forest в Scikit-learn, которая требует от нас некоторого кодирования для категориальных переменных. В нашем случае это район1 и адрес. Во-вторых, мы также отбросим некоторые неважные особенности. Наконец, нам нужно удалить price_per_meter созданную нами переменную, которая является прокси для normalized_price - в противном случае произойдет утечка данных, поскольку наша модель сможет накручивать и легко угадывать цены на квартиры.

Обучение и тестирование

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

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

Вскрытие

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

Из рисунка видно, что наша модель неплохо предсказывает цены на аренду квартир. С помощью нашей модели нам удалось получить 0,70 R2 Оценка, где 1 представляет наилучшую возможную оценку, а -1 - наихудшую из возможных оценок.

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

Эта история - часть 1 из двух частей. Ознакомьтесь с частью 2 здесь: