Skip to content

Топ-2 решение всероссийского чепмионата от ЦП, трек "Collector"

Notifications You must be signed in to change notification settings

sergak0/collector

Repository files navigation

Предсказание времени выполнения задачи по ее описанию

Данное решение заняло второе место в всероссйском чемпионате от Цифрового Прорыва:Сезон ИИ, трек №3 Collector.

Public score (R2): 0.269

Private score (R2): 0.226

image

Задача

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

Метрика

В качестве метрики выступает R2

image

SS res - сумма квадратов остаточных ошибок.

SS tot - общая сумма ошибок.

Данные

В данной задаче нам предоставляли 3 таблички:

  1. train/test_issues.csv - общее описание задач, время выполнения которых нам надо предсказать

  2. train/test_comments.csv - какие комментарии были сделаны к этой задаче и кем

  3. employees.csv - некоторые характеристики людей, которые выполняли и назанчали задачи

image

Решение

main_clean.ipynb - чистый блокнотик с финальным решением

main_all.ipynb - блокнотик со всем кодом: финальное решение, несработавшие гипотезами, EDA и тд.

Чистка датасета

В данном датасете было некоторое кол-во выбросов, на которые переобучался кэтбуст. Поэтому я просто убрал все такие значения из датасета df_train = df_train[df_train['overall_worklogs'] < 300000]

Текстовые признаки

В качестве текстовых признаков у на были названия задач и комментарии к ним. Для получения embedding-ов текстов я дообучил берт на задачу регресии. Использовал мультиязычную версию этой модели bert-base-multilingual-cased, так как тексты встречались как на русском, так и на английском языке. В качестве текстов подавал на вход только названия задач. Пробовал подавать <название> [SEP] <склеенные комментарии>, но это сильно ухудшало скор на паблике (хотя и поднимало на локальной валидации), так что в итоге отказался от данного подхода.

Базовые признаки

Помимо эмбеддингов текстов в модель еще подавались:

  • project_id, assignee_id, creator_id - категориальные признаки, предоставленные жюри
  • Кол-во комментариев у задачи
  • Агрегациионные признаки - среднее значение таргета по project_id, assignee_id, creator_id, hour, weekday

image

Модель

В качестве модели использовал обычный CatBoostRegressor c потюненными параметрами

params = {'n_estimators' : 3000,
          'learning_rate': .03,
          'max_depth' : 6,
          'cat_features' : cat_cols,
          'embedding_features': emb_cols,
          'l2_leaf_reg' : 2,
          'use_best_model': True,
          'task_type': 'GPU',
          'random_state': 42,
         }

Отбор признаков

После сбора признаков и тюнинга гиперпараметров модели отбирал признаки при помощи catboost_model.select_feature. В итоге оставил где-то 400 из 800 первоначальных признаков и это тоже немного улучшило показатели модели.

newplot (15)

Что не зашло

Помимо описанного выше решения еще пробовал

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

  2. Ансамбль моделей с разным random_seed - тоже показал скор хуже, чем просто одна (и на валидации, и на паблике)

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

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

  5. Гармонические признаки времени - пытался из временных фичей доставать sin/cos для часов и дней недели, но это тоже ухудшало скор.

About

Топ-2 решение всероссийского чепмионата от ЦП, трек "Collector"

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published