Две задачи HeadHunter на Data Science Week: попробуйте решить сами

    В конце августа после серии бесплатных лекций на Data Science Week 2015, организаторы решили провести двухдневный дататон (datathon) – соревнование, где команды программистов и аналитиков решали бизнес-задачи из области Data Science.

    На дататоне было три задачи, две из которых подготовила команда HeadHunter и одну компания OZON. Это было, сразу скажу, не самым простым заданием, потому как большая часть наших данных конфиденциальна. Никто не захочет, чтобы программисты и аналитики упражнялись на реальных резюме или закрытых данных по вакансиям. Но кое-что мы все же собрали. Для проверки результатов организаторы придумали метрики и написали чекеры. А победили на дататоне эти ребята:



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

    Задача 1

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

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

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

    Обработка данных на входе

    Файлы для первой задачи:
    • train.txt — содержит обучающую выборку, в которой указана информация по вакансии и ее зарплата
    • test.txt — содержит тестовую выборку, в которой указана информация по вакансии и не указана зарплата, но указано значение, которое нужно предсказать “От”, “До” или оба (по ней нужно сделать прогноз).
    • nosalary.txt — содержит только информацию по вакансиям без указания зарплаты (может использоваться для word2vec, например).

    Формат файла

    {"salary": {"predict": "from", "to": null, "from": 4124, "currency": "RUR"}, "id": "0337565"}
    


    Оценка

    Для оценки результата вашего решения используется метрика e:
    e = ABS(MIN(прогноз; реальность)/MAX(прогноз; реальность) — 1)
    Агрегирующая метрика = корень из суммы квадратов ошибок (e), деленный на количество наблюдений.

    Необходимо спрогнозировать как минимум 50% значений from и 50% значений to.


    Задача 2

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

    Для второго этапа выгрузили два датасета и предлагали воспользоваться любым или сразу двумя. В одном было 10 млн строк с сочетанием id пользователя – запрос. Во второй 60 млн строк: id пользователя, id вакансии и запрос, по которому она нашлась и была просмотрена. Id были захешированы (изменены с сохранением правильного сочетания). Тут нужно было применить свои знания по коллаборативной фильтрации.

    Формальное условие и данные
    По имеющимся данным поисковых запросов пользователей портала HeadHunter разработать алгоритм рекомендации похожих запросов.
    Как мы делали это в hh

    Обработка данных на входе

    Имеются следующие файлы:
    • tu.tar.gz — указаны поля: id пользователя, его поисковый запрос.
    • vuq.tar.gz — указаны поля: id вакансии, на которую перешел пользователь с поисковой выдачи, id пользователя, его поисковый запрос.


    Оценка

    Адекватность похожих запросов определяло жури. Всем успешно выполнившим задание предлагалось проверить его на следующем списке запросов:
    • архивариус
    • менеджер
    • повар сушист
    • начальник планового отдела
    • bigdata
    • педиатр
    • hadoop
    • кирпичный
    • политолог



    Задача 3 (от OZON)

    Рекомендации редких товаров. Хвосты распределения.

    Очень просто рекомендовать товар, который и так является популярным. Конверсия такой рекомендации будет высокая, но это будет бесполезно с точки зрения бизнеса. В литературе это зовется банановой ловушкой. Гораздо интереснее порекомендовать что-то из редко покупаемых товаров. В этом и будет состоять задача.

    Формальное условие и данные
    По имеющимся данным о товарах интернет-магазина Ozon.ru разработать content-based рекомендательную систему.

    Данные

    • ozon_train.txt — обучающая выборка строчки в json, где для товара item мы предоставляем наиболее популярные рекомендации в true_recoms (здесь словарь из айди рекомендуемого товара и веса — чем больше, тем лучше). Веса означают клики. Текущая рекомендательная система Ozon.ru: смесь content-based и коллаборативной фильтрации. Пример:
      {"item":"24798277","true_recoms":{"24798314":1,"24798279":2,"24798276":4,"24798277":1,"24798280":2}}
      В файле есть строчка с 40 000 рекомендаций — это мусор.
    • ozon_test.txt — тестовая выборка
    • item_details_full.gz — атрибуты товаров. Пример:
      {"id":"4381194","name":"Графиня де Монсоро - В двух томах - Номерованный экземпляр № 84 (подарочное издание)","annotation":"Настоящее издание отпечатано в количестве тысячи пятисот экземпляров, сто из которых изготовлены в переплетах из черной кожи с золотыми обрезами и пронумерованы.  Номер настоящего экземпляра 84.<br>\r\n\"Графиня де Монсоро\" (1846) - одно из самых значительных произведений Александра Дюма. В этом увлекательном авантюрно-историческом романе писатель с замечательным мастерством воскрешает события второй половины XVI века - эпохи религиозных войн и правления Генриха III, последнего короля династии Валуа. История трагической любви благородного графа де Бюсси и прекрасной Дианы де Монсоро развертывается на фоне придворных интриг, политических заговоров и религиозных раздоров. <br>\r\nВ настоящем издании впервые публикуются все 245 иллюстраций выдающегося французского художника Мориса Лелуара, выполненные им для парижского издания 1903 года. Книга дополнена очерком А. И. Куприна \"Дюма-отец\" и обстоятельными комментариями.","parent_id":"18255189"}
      под parent_id объединяются модификации одного товара (например, разные айфоны).
    • catalogs.gz — в каких каталогах лежит товар (может быть несколько записей). Пример:
      {"itemid":"29040016","catalogid":"1179259"}
    • catalog_path.gz — пути для каталогов нижнего уровня (в которых лежат товары) в дереве каталогов. Для каждого каталога отдается полный путь до корня. Пример:
      {"catalogid":1125630,"catalogpath":[{"1125630":"Изысканные напитки. Сигары"},{"1125623":"Книга - лучший подарок!"},{"1112250":"Архив раздела (Нехудож.лит-ра)"},{"1095865":"Нехудожественная литература"}]}
    • ratings.gz — хранится средний рейтинг (звездочки). Пример:
      {“itemid”: 2658646, “rating”:4.0}


    Формат ответа

    Файл должен иметь следующий формат (вес товара тем выше, чем выше его близость, то есть сортировка идет по убыванию):
    {"item": "28759795", "true_recoms": {"28759801": 1, "28759817": 2, "28759803": 13}}


    Оценка

    Для оценки результата вашего решения используется метрика NDCG@1000.


    Также организаторы совместно с 3data предлагали командам воспользоваться кластером со spark-ом.

    Коды чекеров, ответы и решения команд
    Чекеры первой и третьей задачи
    Данные для чекера: проверяемые зарплаты для первой задачи и проверяемые рекомендации для третьей.
    Описание решения 1-ой и 2-ой задачи от ребят, занявших второе место, и презентация по 1-ой задаче о применении в ней онлайн-обучения.

    А тут может быть ссылка на ваше решение. Присылайте и мы с удовольствием его добавим.


    Спасибо за внимание.
    • +29
    • 21,5k
    • 3
    Open Data Science 129,49
    Крупнейшее русскоязычное Data Science сообщество
    Поделиться публикацией
    Ой, у вас баннер убежал!

    Ну. И что?
    Реклама
    Комментарии 3
      +2
      Первая задача интересная и весьма актуальна (уже не первый раз встречаю такую формулировку в некоторых областях). Будет время и настроение — попробую.
        +1
        Если будут вопросы или замечания — обращайтесь ;)
        0
        couatl Очень интересные, а главное актуальные, задачи обязательно предложу их студентам.

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

        Самое читаемое