Добро пожаловать в мою мини-серию по созданию системы рекомендаций для рекомендации стажировки. Это также главный проект моей Data Science Nanodegree. Я опубликовал сообщения по следующим темам, чтобы объяснить весь проект:

  1. Вступление
  2. Соскоб
  3. Очистка
  4. Рекомендации

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

Также вот репозиторий github для этого проекта: https://github.com/beatboxerish/Internship-Recommendation-System

Определение проблемы

После завершения всех проектов различных модулей в моем DSND (наноразмерная степень в области науки о данных) мне оставалось завершить только проект, завершающий работу, чтобы получить степень. Мне было предложено множество вариантов для проекта Capstone, включая проект по данным, предоставленным Starbucks, проект неконтролируемого обучения по беспорядочным данным, предоставленный Арвато Бертельсманом, и проект приложения CNN среди некоторых других действительно интересных вариантов. Тем не менее, мне также был предоставлен выбор сделать что-то полностью самостоятельно, и это было то, что меня очень воодушевило, так как я смогу построить что-то с самого начала до конца.

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

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

Создание системы рекомендаций по стажировкам, в которой данные будут извлекаться с портала / веб-сайта для стажировок, а конечным результатом будет приложение / интерфейс командной строки

Я уже использовал Argparse, библиотеку Python, которая делает возможным интерфейс командной строки. Я также думал о создании веб-приложения с использованием фляги и начальной загрузки, но позже эта идея оказалась невозможной за то время, которое у меня было.

Возможные модели

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

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

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

3. Основанные на содержании: эти модели используют информацию об элементе или пользователе, чтобы найти сходство между различными парами пользователей или элементов. Затем они рекомендуют пользователю похожие предметы. Основное различие между совместной фильтрацией и моделями на основе контента заключается в том, что для совместной фильтрации требуется, чтобы пользователи взаимодействовали с элементами, а модели на основе контента - нет. Им нужна некоторая справочная информация о пользователях или товарах.

Просматривая эти 3 категории и учитывая доступную информацию,

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

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

Метрика оценки

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

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

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

Однако есть два возможных способа оценить производительность модели рекомендаций, если бы я развернул ее в Интернете, были бы следующими:

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

Краткое содержание проекта

Я хотел показать ход проекта с кратким описанием шагов, чтобы дать общий обзор проекта:

  1. Сбор данных. Данные должны были быть собраны путем парсинга с использованием библиотеки Python BeautifulSoup. Данные веб-сайта должны были быть взяты с https://www.letsintern.com.
  2. Очистка данных: собранные данные нужно было очистить и подготовить для использования в модели рекомендаций. Это также будет включать его подготовку для анализа базовых данных.
  3. Анализ данных. Очищенные данные должны были использоваться для ответа на некоторые вопросы, которые позволили бы получить интересное понимание тенденций стажировки. (Для этого нет публикации, хотя целая записная книжка была посвящена этому, присутствует в моем репозитории на github для этого проекта)
  4. Создание рекомендаций. Модель рекомендаций должна была быть создана и улучшена, чтобы рекомендуемые стажировки не только соответствовали стажировке, которую просматривал пользователь, но также были уникальными и случайными. Также должно было быть создано приложение командной строки, чтобы упростить использование скриптов.

Что ж, это все, что касается вводной части. Надеюсь, вам понравилось это читать. Ссылки на другие части приведены ниже: