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

Димитрис Мертикас - Capstone Project для курса IBM Data Science

Введение

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

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

Система рекомендаций, предлагающая подходящие районы для новых эмигрантов, может быть добавленной функцией к существующим платформам рекомендаций, таким как Tripadvisor, Foursquare, Time Out и т. Д., Где пользователь может выбрать подходящий район, а соответствующие места могут быть предложены вокруг этого района. его профиль. Эта система также может иметь приложение в сфере услуг агентства недвижимости, где агент может предоставить более персонализированные рекомендации по недвижимости клиенту в новом городе. Владельцы бизнеса, маркетологи и городские дизайнеры также выиграют от изменения своих моделей вокруг «кластеров образа жизни», которые могут быть созданы в результате разработки этой системы, вместо того, чтобы сосредотачиваться исключительно на стандартизированной планировке центра / пригорода.

Источники данных

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

Ссылки на данные:

Список районов, упорядоченных по почтовым индексам: https://en.wikipedia.org/wiki/List_of_postal_codes_of_Canada:_M

Список координат: http://cocl.us/Geospatial_data

Для категорий площадок: Foursquare API https://developer.foursquare.com/docs/api/ sizes/explore.

Методология

Очистка данных

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

Затем мы создали наш фрейм данных:

Затем мы использовали набор инструментов Python Geocoding - GeoPy / Geolocator, чтобы установить координаты нашего центра (Торонто) и нанести на карту окрестности с помощью библиотеки Folium.

Следующим шагом был сбор данных о местах проведения и создание нового фрейма данных с категориями мест проведения для каждого района.

Foursquare имеет множество «категорий площадок», которые используются для определения каждого типа площадок. Запрос GET был отправлен на конечную точку 'api.foursquare.com/v2/ways/explore?', и результаты были добавлены в список, который использовался для начала сегментации и изучения окрестностей Торонто и места проведения.

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

Перед дальнейшей обработкой нам нужно было обнаружить любые выбросы в наборе данных, которые повлияли бы на наши дальнейшие результаты. При визуальной оценке (поскольку количество данных невелико) выделяются две категории заведений: «Кофейня» с 188 встречами и «Кафе» с 99. Чтобы проверить это визуальное предположение, мы использовали Z оценка с порогом = 3 для выявления выбросов с помощью библиотеки Python SciPy.

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

С помощью метода Z-оценки мы обнаружили, что на самом деле 3 наблюдения были выше порогового значения - «Кофейня» и «Кафе» с 11,3399 и 5,7278, за которыми следовала более низкая оценка 3,2686 для «Рестораны». Для дальнейшего выбора функций мы удалили два основных выпадающих значения и намеренно оставили категорию «Рестораны», но ограничили ее путем агрегирования выбранных функций. Причина в том, что помимо незначительно более высокого значения Z-балла, рестораны представляют собой отдельные категории заведений, которые считаются важными параметрами для сравнительного анализа образа жизни. Кофейни и кафе с другой стороны (которые практически относятся к одной категории) - это довольно общие описания категории, которая присутствует в большинстве мест города и может быть частью дальнейшего описания заведения, имеющего другое ядро. активность - т. е. ресторан, где подают кофе, также может быть помечен как кофейня в системе рекомендаций заведений.

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

Выбор функций

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

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

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

Моделирование:

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

Перед запуском алгоритма мы нормализовали наши данные с помощью StandardScaler () из библиотеки sklearn.

Для оценки оптимального K мы использовали «метод локтя». Теория, лежащая в основе этого метода, заключается в том, что мы должны выбрать количество кластеров, чтобы добавление еще одного кластера не сильно улучшило бы производительность и, следовательно, найти оптимальное количество кластеров, в которых кривизна максимальна. Мы использовали KneeLocator (https://pypi.org/project/kneed/), чтобы отметить лучший K на нашем графике, а не делать приблизительную оценку.

Мы вернули метки строкам нашего фрейма данных и соответствующим образом сопоставили окрестности:

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

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

Первым шагом было заполнить систему оценками пользователей для каждой из 12 созданных нами категорий в зависимости от того, насколько каждая важна для пользователя по шкале от 1 до 10. Для целей тестирования мы использовали «личность» пользователя, состоящего в браке с детьми, и соответственно оценили каждую категорию.

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

Результаты

Кластеризация K-средних: алгоритм дал нам 6 кластеров в соответствии с 12 созданными категориями. Кластер с наибольшим количеством микрорайонов включал в себя центр Торонто, что было ожидаемо, учитывая, что места проведения мероприятий в городе более сконцентрированы вокруг его центра. Kmeans действительно помог идентифицировать кластеры территорий на основе концентрации площадок и дать нам первое различие в областях, например, где самые загруженные места, а какие больше жилые (например, центр города или пригород).

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

Сопоставляя рекомендуемые районы, мы видим, что из 5 рекомендуемых районов 4 принадлежат одному кластеру, рассчитанному с помощью K-средних, а 1 - другому.

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

Чтобы узнать о масштабах этого проекта, мы обратимся к онлайн-справочнику по району Торонто http://www.torontoneighbourhoods.net/neighbourhoods/scarborough и посмотрим, что упоминается в каждой из 5 основных рекомендаций:

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

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

Порт-Юнион - Столетие: район, ограниченный на юге железной дорогой, а на западе - парком полковника Дэнфорта - хорошо лесистой долиной оврагов, которая открывает Хайленд-Крик на последнем этап путешествия к озеру Онтарио

Хайленд-Крик: В этом районе царит атмосфера маленького городка, которая исходит от его торгового района на главной улице, расположенного вдоль Олд Кингстон-роуд.

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

Вест-Хилл: Вест-Хилл - это культурно разнообразный семейный район, расположенный в юго-восточной части Торонто. Природная красота Вест-Хилла связана с парком Морнингсайд и парком полковника Дэнфорта. Уэст-Хилл имеет много прекрасных атрибутов, включая общественный центр, публичную библиотеку, обилие парков, оживленный торговый район и доступные дома.

Уоберн / Сидарбрэ: Уобурн - это тихий семейный район, состоящий из извилистых, обсаженных деревьями улиц с хорошим выбором домов по умеренным ценам.

Дальнейшее обсуждение

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

Например, давайте рассмотрим еще одну качественную метрику для области, которая является уровнем преступности (источник: https://www.cbc.ca/toronto/features/crimemap/).

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

Кроме того, система существенно выиграет от дальнейшего усовершенствования за счет:

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

Заключение

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

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

Для Ноутбука с полным кодом ссылка здесь

Персональный профиль в Linkedin