4/4
В день перед ML контестом, мы собрались на General Assembly обсудить предстоящий контест. Аналогично прошлому разу, голосованием перевод задач по ML перенесли на утро в день контеста. Однако, организаторы предложили тим лидерам решить, как нормировать баллы на ML контесте. Что считать за 0, что считать за 100 баллов?
Было несколько предложений, в том числе такое: поскольку бейзлайн организаторов давал примерно 0.6 (нам назвали число), было предложение вычесть 0.5 и считать это 0 - чтобы любой, кто зашлет базовое решение (оно же sample_submission.csv), получит баллы:) Было также предложение ограничить скор сверху (кто достигает авторского решения, получает 100 баллов). 💡 Логика такая: на мат.туре тоже есть авторское решение, и оно набирает полный балл. К счастью, это предложение тоже не приняли.
В общем, не хочу ничего плохого сказать про scientific comittee, они проделали колоссальную работу и чуть не умерли в процессе (как и мы), но опыта в организации ML контестов у них как будто почти нет (надеюсь, ситуация исправится в следующем году, потому что к Scientific Committee в этом году присоединились люди, которые шарят в соревах 🤞 🙏 🍀 ).
В глубокой ночи мы согласовали такую схему: 0 баллов - это скор, который получает худшая модель с дефолтными параметрами (KNN, линейные модели, RF). Чтобы дать баллов любому, кто умеет импортировать модели из склерна и делать fit-predict, мы договорились прогнать эти модели с 10 разными рандом сидами и выбрать наихудшую. 100 баллов - это максимум из лучшего скора на ЛБ и авторского скора. К этому моменту Scientific committee уже протестил задачу (аж в течении половины одного дня с помощью агентов) и показал нам, что там есть достаточный разброс в метриках. Скажу честно, что я не хотел узнавать какие решения Scientific committee пробовал (опять же, тим лидеры этого не должны знать), да и время было уже к полночи (думаю мы бы все равно уже не сделали другую таску).
К этому моменту все, мы знали про таску совсем немного: табличные данные, три таргета, три метрики. Метрики нормируются отдельно, потом складываются.
Когда все (и я) ушли спать, я понял, что у нас есть еще одна беда: мы обсуждали нормировку по метрикам (каждая метрика приводится к значению от 0 до 1, затем считается среднее), но специалист из http://Zindi.africa/ (платформа для сорев) упомянул, что Zindi так не работает. Во время ассамблеи мы как-то упустили эту тему, и я честно думал, что эти две вещи эквивалентны (сказались несколько ночей, в которые я спал по 4-5 часов - я стал тупить). На самом деле, это не так: например, если одна метрика принимает сырые значения от 0 до 100, а другая от 0 до 1, то первая метрика будет доминировать, если сначала считать среднее, а потом усреднять.
Не знаю, переживал ли про это кто-то еще, но я объяснил проблему Scientific Committee, и утром они выпустили пояснительную записку, в которой было написано что-то вроде “Don’t trust leaderboard, use the following formulas” (и целый лист формул). К счастью, на ЛБ было видно значения отдельных метрик, так что можно было в целом стремиться максимизировать каждую отдельно (но лб действительно доверять было нельзя).
Когда переводы с утра закончились, я попробовал поспать, а тренеры съездили отдохнуть на озеро Блэд (теперь у Тани есть магнитик Bled Slovenia). Когда ML тур закончился, Миша сказал, что выбил свой максимальный скор своим первым сабмитом, где просто завел катбуст (представляете наши лица 👀 ), и потом оставшиеся четыре часа не мог побить этот результат (и закончил 2м на финальном ЛБ МЛ таски). В общем, в качестве межнара получился дорогой тест, школьники-математики какой страны лучше имеют импортировать катбуст:)
Пару часов я на серьезных щас думал, что мы неправильно готовились: надо было брать математиков и учить их импортировать катбуст. Пока один из оргов не сказал нам, что у них изначально была таска на DL! Которую они в последний момент решили поменять на ML, потому что на компах у всех были разные GPU!
Тогда я понял, что мы просто неудачно сыграли в лотерею:)
Directed by Robert B. Weide:)