Играл с ChatGpt и просил сгенерировать мне Dockerfile, который устанавливал бы нужное окружение с помощью poetry.
Что интересно, так это то, что ChatGPT выдал мне такую строчку для усатновки самого poetry в image:
RUN curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python -
Ссылка недействительная. Но что мешает поискать еще битых ссылок по похожим запросам и залить туда шпионящий модифицированный вариант софта и скамить мамонтов?
ChatGPT уже генерил ненастоящие статьи. Кажется, может генерить ненастоящие ссылки.
Беглое гугление говорит, что ChatGPT вообще довольно редко генерит рабочие ссылки
Так может, пора заставить их быть рабочими?
Что интересно, так это то, что ChatGPT выдал мне такую строчку для усатновки самого poetry в image:
RUN curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python -
Ссылка недействительная. Но что мешает поискать еще битых ссылок по похожим запросам и залить туда шпионящий модифицированный вариант софта и скамить мамонтов?
ChatGPT уже генерил ненастоящие статьи. Кажется, может генерить ненастоящие ссылки.
Беглое гугление говорит, что ChatGPT вообще довольно редко генерит рабочие ссылки
Так может, пора заставить их быть рабочими?
❤5🔥4
Forwarded from (sci)Berloga Всех Наук и Технологий
🚀 @SBERLOGACOMPETE webinar on data science:
👨🔬 Dmitrii Rudenko "Kaggle competition debrief: RSNA Screening Mammography Breast Cancer Detection "
⌚️ 17 March, Friday, 19.00 (Moscow Time)
Add to Google Calendar
Discussion of the Kaggle computer vision competition "RSNA Screening Mammography Breast Cancer Detection" (link). The task formulation, input data, some domain knowledge, and ideas of some solutions will be discussed.
Zoom link will be available at
https://news.1rj.ru/str/sberlogabig shortly before the start.
Video records of the talks: https://www.youtube.com/c/SciBerloga - subscribe our channel !
📰 Telegram channel by Dmitry on Kaggle: https://news.1rj.ru/str/pseudolabeling - subscribe it !
👨🔬 Dmitrii Rudenko "Kaggle competition debrief: RSNA Screening Mammography Breast Cancer Detection "
⌚️ 17 March, Friday, 19.00 (Moscow Time)
Add to Google Calendar
Discussion of the Kaggle computer vision competition "RSNA Screening Mammography Breast Cancer Detection" (link). The task formulation, input data, some domain knowledge, and ideas of some solutions will be discussed.
Zoom link will be available at
https://news.1rj.ru/str/sberlogabig shortly before the start.
Video records of the talks: https://www.youtube.com/c/SciBerloga - subscribe our channel !
📰 Telegram channel by Dmitry on Kaggle: https://news.1rj.ru/str/pseudolabeling - subscribe it !
🔥1
Все сегодня плачут по отключению ODS. Из всех фреймворков выбрал пока singularis.ai, поддавшись на Валерину пропаганду. Хотя для меня уже давно чаты Берлоги заменили ODS, пачивший на лаврах и застывший в своей неповоротливости. Слишком много людей и мало вовлеченности, ничего не добиться нормально
UPD: чет много людей все еще не понимают, о чем речь. Я в своем контексте и введения людеям не дал. Напишу короткия и грязный пост видимо о том, что вообще случилось с одсом
UPD: чет много людей все еще не понимают, о чем речь. Я в своем контексте и введения людеям не дал. Напишу короткия и грязный пост видимо о том, что вообще случилось с одсом
👍7
Что же случилось с ODS?
ОДС начал погибать еще до ковида. Стало очень много людей. Когда становится много людей, много нерелвантных мнений. От этого средний уровень вовлеченности падал и типичным было увидеть раз в три дня одно сообщение в условном kaggle_crackers.
Коронваирус дозаправли топлива: многим людям было скучно дома и они вернулись в одс для общения. Я тоже тогда вернулся и даже стал проходить курс по графовым нейросеткам от стендфорда. Оказалось, что его проходят парни из AI лабы Сбера, которые даже сделали отдельную группу. Оказалось, что это уже тоже целое околосбер-сообщество. Люди стали привыкать к короне и одс снова стал остывать примерно через полгода-год.
В этот момент многие большие мальчики из ODS поняли, куда дует ветер и стали собирать вокруг себя комьюнити, чтобы держать людей в курсе и дальше качать личный бренд. Примеры: канал Валеры, незаслуженно непопулярный канал Сережи Колесникова (scitator). Последний кстати пытался еще и собрать людей вокруг Catalyst и контрибьюшнов в него, но почему-то история заглохла.
Когда начались боевые действия, ОДС попал под волну банов Slack для российских компаний. Как я понимаю, Slack чарджит за пользователей и раздутый (и в основном мертвый) ODS стал слишком дорого обходиться. Кто-то из основателей ODS оплатил со своей карты хост хаба, но это было временным решением. Было ясно, что ОДС умрет/var/folders/l1/b01fb2tx5l12nfvrxfmqxggh0000gn/T/TemporaryItems/NSIRD_screencaptureui_RjiDKU/Снимок экрана 2023-03-24 в 14.19.47.png не сегодня, так через пару месяцев.
Натекин решил перетащить всех в другую селф-хостед платформу даже до февраля 2022, но дело шло тухло. Я кажется даже подался на инвайт, но так в матрикс инвайта и не получил. Сейчас, когда Натекин помогает РКН строить цифровой гулаг, не сильно сожалею о отсутствии инвайта.
Более либеральным форком ОДС стал singularis.ai. В нем все по-старому с точки зрения организации, пока люди туда только подтягиваются. Можно считать его ODS 1.1.
Есть еще комьюнити NoML, которое можно занести в личные каналы, пытающиеся вырасти в сообщество.
Сберлога переродилась и перестала быть частью Сбера. Теперь она (sci) Berloga, что даже немножко смешно, но соответствует духу времени.
Алгоритм принятия решений для вас по взглядам на картинке
ОДС начал погибать еще до ковида. Стало очень много людей. Когда становится много людей, много нерелвантных мнений. От этого средний уровень вовлеченности падал и типичным было увидеть раз в три дня одно сообщение в условном kaggle_crackers.
Коронваирус дозаправли топлива: многим людям было скучно дома и они вернулись в одс для общения. Я тоже тогда вернулся и даже стал проходить курс по графовым нейросеткам от стендфорда. Оказалось, что его проходят парни из AI лабы Сбера, которые даже сделали отдельную группу. Оказалось, что это уже тоже целое околосбер-сообщество. Люди стали привыкать к короне и одс снова стал остывать примерно через полгода-год.
В этот момент многие большие мальчики из ODS поняли, куда дует ветер и стали собирать вокруг себя комьюнити, чтобы держать людей в курсе и дальше качать личный бренд. Примеры: канал Валеры, незаслуженно непопулярный канал Сережи Колесникова (scitator). Последний кстати пытался еще и собрать людей вокруг Catalyst и контрибьюшнов в него, но почему-то история заглохла.
Когда начались боевые действия, ОДС попал под волну банов Slack для российских компаний. Как я понимаю, Slack чарджит за пользователей и раздутый (и в основном мертвый) ODS стал слишком дорого обходиться. Кто-то из основателей ODS оплатил со своей карты хост хаба, но это было временным решением. Было ясно, что ОДС умрет/var/folders/l1/b01fb2tx5l12nfvrxfmqxggh0000gn/T/TemporaryItems/NSIRD_screencaptureui_RjiDKU/Снимок экрана 2023-03-24 в 14.19.47.png не сегодня, так через пару месяцев.
Натекин решил перетащить всех в другую селф-хостед платформу даже до февраля 2022, но дело шло тухло. Я кажется даже подался на инвайт, но так в матрикс инвайта и не получил. Сейчас, когда Натекин помогает РКН строить цифровой гулаг, не сильно сожалею о отсутствии инвайта.
Более либеральным форком ОДС стал singularis.ai. В нем все по-старому с точки зрения организации, пока люди туда только подтягиваются. Можно считать его ODS 1.1.
Есть еще комьюнити NoML, которое можно занести в личные каналы, пытающиеся вырасти в сообщество.
Сберлога переродилась и перестала быть частью Сбера. Теперь она (sci) Berloga, что даже немножко смешно, но соответствует духу времени.
Алгоритм принятия решений для вас по взглядам на картинке
Telegram
Sberloga in Graphs
Data Сообщество
По всем вопросам обращаться @SberlogaHelperBot
По всем вопросам обращаться @SberlogaHelperBot
👍4💩1
Сегодня закончился IceCube. Закончился на 327 месте
Разбор ждем на следующей неделе:
Почему не выиграли
Что великолепного придумали лучшие команды
Как же хендлить 400 гб графовых обучающих данных?
У авторов соревнования есть отдельный приз за лучшее описание решения, так что должно быть жирно. Постараюсь мощный разбор подготовить
Разбор ждем на следующей неделе:
Почему не выиграли
Что великолепного придумали лучшие команды
Как же хендлить 400 гб графовых обучающих данных?
У авторов соревнования есть отдельный приз за лучшее описание решения, так что должно быть жирно. Постараюсь мощный разбор подготовить
🔥10💩1
Forwarded from (sci)Berloga Всех Наук и Технологий
🚀 @SBERLOGACOMPETE webinar on data science:
👨🔬 Дмитрий Руденко: "О Каггл соревновании Neutrinos in Deep Ice"
⌚️ 28 Апреля, пятница, 18.00 (Moscow Time)
Add to Google Calendar
Join us for the follow-up session of the IceCube: Neutrinos in Deep Ice competition, where we'll be discussing the best tricks to predict azimuths and zeniths, the best approaches for detector-compensation NN, and how to handle 400 GB of graphs. This competition was extraordinary, as it offered "best write" prizes, so you can expect to hear some excellent explanations from the winners.
The goal of this competition was to predict the direction of neutrino particles using data from the IceCube detector at the South Pole. By improving the accuracy and speed of reconstructing neutrino events, we can gain a better understanding of the universe and its violent astrophysical sources. This challenge required a balance between accuracy and computational costs, as existing solutions have limitations. The winning solution will aid the international IceCube Collaboration in their research of the nearly massless and electrically neutral neutrinos.
Zoom link will be available at https://news.1rj.ru/str/sberlogabig shortly before the start. Don't forget to subscribe to our YouTube channel (https://www.youtube.com/c/SciBerloga) to watch the video recordings of the session later.
📢 Also subscribe to Dmitry's telegram-channel @pseudolabeling devoted to Kaggle and data science.
👨🔬 Дмитрий Руденко: "О Каггл соревновании Neutrinos in Deep Ice"
⌚️ 28 Апреля, пятница, 18.00 (Moscow Time)
Add to Google Calendar
Join us for the follow-up session of the IceCube: Neutrinos in Deep Ice competition, where we'll be discussing the best tricks to predict azimuths and zeniths, the best approaches for detector-compensation NN, and how to handle 400 GB of graphs. This competition was extraordinary, as it offered "best write" prizes, so you can expect to hear some excellent explanations from the winners.
The goal of this competition was to predict the direction of neutrino particles using data from the IceCube detector at the South Pole. By improving the accuracy and speed of reconstructing neutrino events, we can gain a better understanding of the universe and its violent astrophysical sources. This challenge required a balance between accuracy and computational costs, as existing solutions have limitations. The winning solution will aid the international IceCube Collaboration in their research of the nearly massless and electrically neutral neutrinos.
Zoom link will be available at https://news.1rj.ru/str/sberlogabig shortly before the start. Don't forget to subscribe to our YouTube channel (https://www.youtube.com/c/SciBerloga) to watch the video recordings of the session later.
📢 Also subscribe to Dmitry's telegram-channel @pseudolabeling devoted to Kaggle and data science.
💩1
Ключевая идея из соревнования, которую можно использовать:
Если у вас объекты в датасете переменного объема, то можно просто разделить их на несколько этапов-лоудеров и тренироват вашу модель с разным батчсайзом.
Например тут берут лоудер, в которой много 'мальенких' объектов и учатся на нем с батчсайзом в 200 каждую эпоху, а для больших объектов берут батчсайз 20.
ТАким образом за одну эпоху мы используем два Loader, проходим по полным данным один раз и максимально утилизируем и данные и GPU.
Вроде бы на поверхности, но большая часть участников в сореве большие события просто выкидывала.
Если у вас объекты в датасете переменного объема, то можно просто разделить их на несколько этапов-лоудеров и тренироват вашу модель с разным батчсайзом.
Например тут берут лоудер, в которой много 'мальенких' объектов и учатся на нем с батчсайзом в 200 каждую эпоху, а для больших объектов берут батчсайз 20.
ТАким образом за одну эпоху мы используем два Loader, проходим по полным данным один раз и максимально утилизируем и данные и GPU.
Вроде бы на поверхности, но большая часть участников в сореве большие события просто выкидывала.
👍7❤2💩1
На канал произошла атака ботов. Казалось бы, откуда столько счастья?
Вероятно с внедрением LLM эффективность труда еще больше выросла, и теперь даже каналы читают 18 ботов на одного человека.
Ваши версии произошедшего можно оставить под этим постом🔽 :
Вероятно с внедрением LLM эффективность труда еще больше выросла, и теперь даже каналы читают 18 ботов на одного человека.
Ваши версии произошедшего можно оставить под этим постом
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4👏3💩2
Участвую сейчас в соревнования Predict Student Performance from Game Play! 🤓🎮🎓
Задача: по сессиям игроков определить, смогут ли они правильно ответить на контрольные вопросы. Игра историческая и рассказывает о суфражистках Висконсина. Представляет из себя квест, в котором нужно расследовать простенькую детективную историю и отвечать на вопросы по сюжету расследования. Это помогает закрепить знания о суфражистках.
Как всегда, начал смотреть топовый паблик кернел, и там как раз было достаточно базовое и лобовое решение. Решил его допилить.
Что удалось выяснить? Кернел не работает. 😕 Он забирает слишком много памяти, а то что работает, работает медленно. Автор использует Polars и Pandas для предобработки. К слову, Polars - это Pandas на стероидах! 💪
Polars написан на Rust, что позволяет ему легко параллелизироваться на multi-CPU. И в этом плане он действительно хорош. Если заглянуть в
Более того, он не копирует объекты при изменении, а модифицирует их напрямую, экономя память. В Pandas же при изменении объекта сначала выделяется память размером этот же объект (если тип не меняется), затем осуществляются вычисления и, наконец, старая память освобождается.
Еще, в Pandas каждое значение в колонке занимает память, даже если оно Null. Для представления Null всегда хранится служебная Pandas колонка типа byte, которая как раз и показывает пустое там значение или нет. Стало быть к каждому значению таблицы добавляется этот дополнительный байт. Если вдруг вы работаете с bool значениями, то оверхед по памяти будет два раза :0
В Polars же есть отдельный validity_bitmap, который хранит один byte array для всей колонки. Это ускоряет подсчет Null и уменьшает потребление памяти в 8 раз для каждой колонки (байт -> бит)
И еще одно ключевое отличие: в Polars нет индексов! В Pandas индексы могут вызывать проблемы, но в Polars их просто нет. Когда-то коллега спросил меня, почему я всегда использую df.reset_index(drop=True) в Pandas. Я объяснил, что индексы могут быть проблематичными и что это полезная привычка на мой взгляд. Через пару недель он вернулся и сказал, что день дебага помог и ему заиметь полезную привычку.
В итоге я переписал куски Pandas полностью на Polars. В память стало влезать чуть лучше, но все еще не отрабатывало до конца.
(в этом посте будет три части: еще одна про Polars Lazy API и про то, что CatBoost- это целая скрытая метавселенная без документации)
Задача: по сессиям игроков определить, смогут ли они правильно ответить на контрольные вопросы. Игра историческая и рассказывает о суфражистках Висконсина. Представляет из себя квест, в котором нужно расследовать простенькую детективную историю и отвечать на вопросы по сюжету расследования. Это помогает закрепить знания о суфражистках.
Как всегда, начал смотреть топовый паблик кернел, и там как раз было достаточно базовое и лобовое решение. Решил его допилить.
Что удалось выяснить? Кернел не работает. 😕 Он забирает слишком много памяти, а то что работает, работает медленно. Автор использует Polars и Pandas для предобработки. К слову, Polars - это Pandas на стероидах! 💪
Polars написан на Rust, что позволяет ему легко параллелизироваться на multi-CPU. И в этом плане он действительно хорош. Если заглянуть в
htop, то сразу видно как Polars использует все ресурсы.
Более того, он не копирует объекты при изменении, а модифицирует их напрямую, экономя память. В Pandas же при изменении объекта сначала выделяется память размером этот же объект (если тип не меняется), затем осуществляются вычисления и, наконец, старая память освобождается.
Еще, в Pandas каждое значение в колонке занимает память, даже если оно Null. Для представления Null всегда хранится служебная Pandas колонка типа byte, которая как раз и показывает пустое там значение или нет. Стало быть к каждому значению таблицы добавляется этот дополнительный байт. Если вдруг вы работаете с bool значениями, то оверхед по памяти будет два раза :0
В Polars же есть отдельный validity_bitmap, который хранит один byte array для всей колонки. Это ускоряет подсчет Null и уменьшает потребление памяти в 8 раз для каждой колонки (байт -> бит)
И еще одно ключевое отличие: в Polars нет индексов! В Pandas индексы могут вызывать проблемы, но в Polars их просто нет. Когда-то коллега спросил меня, почему я всегда использую df.reset_index(drop=True) в Pandas. Я объяснил, что индексы могут быть проблематичными и что это полезная привычка на мой взгляд. Через пару недель он вернулся и сказал, что день дебага помог и ему заиметь полезную привычку.
В итоге я переписал куски Pandas полностью на Polars. В память стало влезать чуть лучше, но все еще не отрабатывало до конца.
(в этом посте будет три части: еще одна про Polars Lazy API и про то, что CatBoost- это целая скрытая метавселенная без документации)
Kaggle
Predict Student Performance from Game Play
Trace student learning from Jo Wilder online educational game
👍4❤3💩1🐳1
По заявкам из прошлого поста:
Забнчмаркал Pandas Vs Polars Vs Vaex на разных поплуярных операциях. Накатаю на выходных статью на мидиум с бенчмарками по производительности, но с вами делюсь свежайшим прямо сейчас
Polars в достаточно примитивной постановке в три раза аутперформит Pandas, и в два Vaex.
Еще и памяти меньше потребляет!
Забнчмаркал Pandas Vs Polars Vs Vaex на разных поплуярных операциях. Накатаю на выходных статью на мидиум с бенчмарками по производительности, но с вами делюсь свежайшим прямо сейчас
Polars в достаточно примитивной постановке в три раза аутперформит Pandas, и в два Vaex.
Еще и памяти меньше потребляет!
👍7❤2🔥1💩1
Фух, допилил статью на Мидиуме
В сухом остатке:
Пример достаточно синтетический, можно покритиковать в комментах и предложить, как сделать лучше.
Пандас нигде не победил (мб только по юзабилити)
Polars быстрый и меткий, но Vaex внезапно быстрее для merge и select операций. В то же время на этих операциях Vaex ест больше памяти, чем Polars.
По памяти Polars выигрывает немножко по бутылочному горлышку, но в среднем больше памяти расходует.
В сухом остатке:
Пример достаточно синтетический, можно покритиковать в комментах и предложить, как сделать лучше.
Пандас нигде не победил (мб только по юзабилити)
Polars быстрый и меткий, но Vaex внезапно быстрее для merge и select операций. В то же время на этих операциях Vaex ест больше памяти, чем Polars.
По памяти Polars выигрывает немножко по бутылочному горлышку, но в среднем больше памяти расходует.
🔥3👍2💩1
Итак, соревнование начались с серьезной проблемы: данные, с которыми мы имели дело, были событийными данными. Работа с ними требовала множества усилий, боли и духоты. И не только данные, но и сгенерированные признаки, просто не помещались в память обычных кагловских ноутбуков.
Еще и автор соревнования запилил специальный API для сабмитов, чтобы никто не подглядывал в будущее. Из-за этого гениального решения пришлось несколько раз меня тестовые данные, выкатывать несколько патчей для API, да и ноутбуки ощутимо дольше скорились.
И вот тогда я решил заняться "оверинжинирингом" и переписал всё на polars, чтобы ускорить процесс. Результаты превзошли мои ожидания: ноутбук, который раньше занимал 40 ГБ памяти и работал полчаса, теперь мощно крутился всего за минуту, потребляя всего 8 ГБ оперативной памяти.
Поздние ноутбуки этой соревы показали, что большинство проблем решались просто путем адекватного выбора полезных признаков и правильного использования типов данных в pandas, но им никогда не достигнуть величия моего полярного сияния. К сожалению к пандасу было проще вернуться, чтобы переиспользовать код других участников.
Конечно, я провел много экспериментов с использованием CatBoost, и, о удача, мой бывший коллега поделился со мной радостью: в последней версии катубста была включена его имплементация FocalLoss. Этот лосс должен был улучшить качество модели для несбалансированных задач. Он дает больше веса 'сложным' примерам и меньше фокусируется на 'простых'. Действительно, на валидации и даже на лидерборде это привело к улучшению результатов.
Однако все не так просто: отсутствие документации по этой новой функциональности, сломанная метрика для валидации и устаревшая версией CatBoost на самой платформе. Но ведь нет таких проблем, которые не решаются суицидальным превозмоганием, правда? Вот, даже у меня есть график трехмерной визуализации оценки качества FocalLoss на локальной валидации в зависимости от его гиперпараметров Alpha и Gamma (см. прикрепленный график).
Еще и автор соревнования запилил специальный API для сабмитов, чтобы никто не подглядывал в будущее. Из-за этого гениального решения пришлось несколько раз меня тестовые данные, выкатывать несколько патчей для API, да и ноутбуки ощутимо дольше скорились.
И вот тогда я решил заняться "оверинжинирингом" и переписал всё на polars, чтобы ускорить процесс. Результаты превзошли мои ожидания: ноутбук, который раньше занимал 40 ГБ памяти и работал полчаса, теперь мощно крутился всего за минуту, потребляя всего 8 ГБ оперативной памяти.
Поздние ноутбуки этой соревы показали, что большинство проблем решались просто путем адекватного выбора полезных признаков и правильного использования типов данных в pandas, но им никогда не достигнуть величия моего полярного сияния. К сожалению к пандасу было проще вернуться, чтобы переиспользовать код других участников.
Конечно, я провел много экспериментов с использованием CatBoost, и, о удача, мой бывший коллега поделился со мной радостью: в последней версии катубста была включена его имплементация FocalLoss. Этот лосс должен был улучшить качество модели для несбалансированных задач. Он дает больше веса 'сложным' примерам и меньше фокусируется на 'простых'. Действительно, на валидации и даже на лидерборде это привело к улучшению результатов.
Однако все не так просто: отсутствие документации по этой новой функциональности, сломанная метрика для валидации и устаревшая версией CatBoost на самой платформе. Но ведь нет таких проблем, которые не решаются суицидальным превозмоганием, правда? Вот, даже у меня есть график трехмерной визуализации оценки качества FocalLoss на локальной валидации в зависимости от его гиперпараметров Alpha и Gamma (см. прикрепленный график).
👍5🔥1
Вообще я накатл огромный опять какой-то пост, который мне не разрешает постить телеграм премиум. Так что вас ждет кайф отложеных сообщений и дополнительное подстегивание клипового мышления 👉️️️️️️🦍️️️️️️ 👈️️️️️️
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Однако, это счастье не продолжалось надолго. В паблик-кернелах появился Вадим Камаев с его ноутбуками, которые полностью превзошли мои и всех остальных на паблике. К сожалению, в его ноутбуке использование FocalLoss не приводило к лучшим результатам.
Конечно, я не мог остаться равнодушным и начал разбираться, что же он придумал такого интересного. И тут меня ожидало настоящее страдание: его код состоял из переменных "otvet" и "catbust" и был крайне сложным для понимания. В итоге оказалось, что он качественно отобрал признаки для каждого вопроса, что дало ему неплохие результаты.
Этот ноутбук был настолько ‘тонким’ решением, что я не мог просто взять и внедрить его в свою модель. Я приуныл и забил на соревнование на пару недель, да и личные проблемы были.
После некоторого времени моя мотивация превозмогать вернулась, вернулся и я с новой идеей: почему бы не построить эмбеддинги пользователей на основе событийных данных? Так делают в проде, это практически универсальное решение. Руководствуясь принципом ‘не покупай, возьми с улицы’, я наткнулся на ноутбук Ивана Исаева, который использовал pytorch_lifestream, рекомендованный мне для создания эмбеддингов. В его ноутбуке он жаловался на проблемы с предсказаниями во времяскорпиона скоринга и на то, что всё ломается. После множественной боли и кучи попыток я выяснил, что причиной проблемы была установка нужной версии pyarrow, которая даже не была включена в зависимости шикарного патентованного, чтобы все честно API. Причем результат был удивительный: API для сабмита просто не сабмитил часть ответов. Молча не сабмитила. К счастью, оказалось, что pyarrow на самом деле не так уж и необходим самому pytorch_lifestream. Так что вот вам секрет: если либы конфликтуют по зависимостям, то не факт, что вместе не будут работать. Экспериментируйте!
К сожалению, эта идея с эмбеддингами не принесла желаемых результатов. В локальном пайплайне данные протекали из будущего, а без будущего эмбеддинги оказались бесполезными.
Все еще говорю про Student Perfomance.
Конечно, я не мог остаться равнодушным и начал разбираться, что же он придумал такого интересного. И тут меня ожидало настоящее страдание: его код состоял из переменных "otvet" и "catbust" и был крайне сложным для понимания. В итоге оказалось, что он качественно отобрал признаки для каждого вопроса, что дало ему неплохие результаты.
Этот ноутбук был настолько ‘тонким’ решением, что я не мог просто взять и внедрить его в свою модель. Я приуныл и забил на соревнование на пару недель, да и личные проблемы были.
После некоторого времени моя мотивация превозмогать вернулась, вернулся и я с новой идеей: почему бы не построить эмбеддинги пользователей на основе событийных данных? Так делают в проде, это практически универсальное решение. Руководствуясь принципом ‘не покупай, возьми с улицы’, я наткнулся на ноутбук Ивана Исаева, который использовал pytorch_lifestream, рекомендованный мне для создания эмбеддингов. В его ноутбуке он жаловался на проблемы с предсказаниями во время
К сожалению, эта идея с эмбеддингами не принесла желаемых результатов. В локальном пайплайне данные протекали из будущего, а без будущего эмбеддинги оказались бесполезными.
Все еще говорю про Student Perfomance.
Kaggle
CatBoost new
Explore and run machine learning code with Kaggle Notebooks | Using data from multiple data sources
🔥5👍2👌1
Итак, рецепт как зафармить бронзу за последние три дня на этой сореве:
Вернулся к ноутбуку вадима (лучший воспроизводимый паблик) и осмотрел лучший невоспроизводимый паблик (там модельки были запривачены), в котором блендили Catboost, XGB и MLP из sklearn.
Эксперимент 1:
Ноутбук Вадима состоял из одной модели, обученной на всех данных для каждого вопроса, причем для каждого вопроса и фичи были отобраны отдельные. Ноутбук работает быстро, потому что данные там тоже неплохо обработаны. Если в нем немножко подвинуть трешхолд бинаризации предикта, то скор можно даже еще вверх подвинуть и гордо сидеть чуть-ли не из серебра смотреть на остальных. Более того, если долго перебирать random_seed, то можно было получить и 0.701.
Вывод 1:
Если добавить в него обучение через StratifeidKFold, то скор на публичном ЛБ драматически падает. (0.7 → 0.697, с top 20% улетаешь на top 60%). Значит ноутбук- это переобучение под паблик и шансов на хороший прайвет не очень много.
Эксперимент 2:
Если в эту схему добавить обучение MLP и XGB по схеме:
Берем train_fold как есть, берем test_fold и разбиваем его на val1_fold и val2_fold.
Учим MLP, XGB и catboost на train_fold (количество деревьев заранее уже выяснили), подбираем оптимальные трешхолды на val1_fold (просто для информации) и оптимальное соотношение для блендинга этих всех моделей по auc_score (чтобы не бинаризовывать). Затем меряем качество ансамбля на val2 и на нем же выбираем оптимальные трешхолд. Для вязкости смотрим, чтобы трешхолды по фолдам были похожие и из всех фолдов берем медиану.
Вывод 2:
MLP почти всегда (за исключением пары фолдов на некоторых вопросах) выучивается так, что оптимальный трешхолд бинаризации для него 0.0 или 1.0. Значит и учить его не надо, он деградирует в константу. Значит возможно сэкономить время и просто добавить Dummy Estimator, который в зависимости от номера вопроса возвращает оптимальную константу (методу констант меня научил один якутский мастер кагла). В свою очередь блендинг такой модели с другой означает буквально следующее:
Используя априорное знание о распределении, мы просто трешхолд занижаем или завышаем для остальных моделек.
В итоге я засабмитил 5 разных блендов:
xgb (0.2) + catboost (0.8)😶🌫️
xgb (0.1) + catboost(0.9)(вот этот бандит и победил в итоге) 😶🌫️
xgb (0.1) + catboost(0.9) с другим трешхолдом глобальным
xgb (0.05) + catboost(0.95)
(xgb (0.1) + catboost(0.9)) * (0.9) * (dummy 0.1)😶🌫️
И отобрал по скору на паблике те, что дают лучший скор и не так сильно деградируют. Они отмечены эмоджи дымного коктейля.
Вот и все, еще одна бронза в мою коллекцию Bronze56k, которая не приблизила меня к титулу мастера, но хоть в рейтинге поднимет наверно. Ну хоть гештальт по табличкам закрыт, а то я свои прошлые медальки через зрение получил. Хотя может и не закрыл, это ж не таблички, это событийка.
Вернулся к ноутбуку вадима (лучший воспроизводимый паблик) и осмотрел лучший невоспроизводимый паблик (там модельки были запривачены), в котором блендили Catboost, XGB и MLP из sklearn.
Эксперимент 1:
Ноутбук Вадима состоял из одной модели, обученной на всех данных для каждого вопроса, причем для каждого вопроса и фичи были отобраны отдельные. Ноутбук работает быстро, потому что данные там тоже неплохо обработаны. Если в нем немножко подвинуть трешхолд бинаризации предикта, то скор можно даже еще вверх подвинуть и гордо сидеть чуть-ли не из серебра смотреть на остальных. Более того, если долго перебирать random_seed, то можно было получить и 0.701.
Вывод 1:
Если добавить в него обучение через StratifeidKFold, то скор на публичном ЛБ драматически падает. (0.7 → 0.697, с top 20% улетаешь на top 60%). Значит ноутбук- это переобучение под паблик и шансов на хороший прайвет не очень много.
Эксперимент 2:
Если в эту схему добавить обучение MLP и XGB по схеме:
Берем train_fold как есть, берем test_fold и разбиваем его на val1_fold и val2_fold.
Учим MLP, XGB и catboost на train_fold (количество деревьев заранее уже выяснили), подбираем оптимальные трешхолды на val1_fold (просто для информации) и оптимальное соотношение для блендинга этих всех моделей по auc_score (чтобы не бинаризовывать). Затем меряем качество ансамбля на val2 и на нем же выбираем оптимальные трешхолд. Для вязкости смотрим, чтобы трешхолды по фолдам были похожие и из всех фолдов берем медиану.
Вывод 2:
MLP почти всегда (за исключением пары фолдов на некоторых вопросах) выучивается так, что оптимальный трешхолд бинаризации для него 0.0 или 1.0. Значит и учить его не надо, он деградирует в константу. Значит возможно сэкономить время и просто добавить Dummy Estimator, который в зависимости от номера вопроса возвращает оптимальную константу (методу констант меня научил один якутский мастер кагла). В свою очередь блендинг такой модели с другой означает буквально следующее:
Используя априорное знание о распределении, мы просто трешхолд занижаем или завышаем для остальных моделек.
В итоге я засабмитил 5 разных блендов:
xgb (0.2) + catboost (0.8)
xgb (0.1) + catboost(0.9)
xgb (0.1) + catboost(0.9) с другим трешхолдом глобальным
xgb (0.05) + catboost(0.95)
(xgb (0.1) + catboost(0.9)) * (0.9) * (dummy 0.1)
И отобрал по скору на паблике те, что дают лучший скор и не так сильно деградируют. Они отмечены эмоджи дымного коктейля.
Вот и все, еще одна бронза в мою коллекцию Bronze56k, которая не приблизила меня к титулу мастера, но хоть в рейтинге поднимет наверно. Ну хоть гештальт по табличкам закрыт, а то я свои прошлые медальки через зрение получил. Хотя может и не закрыл, это ж не таблички, это событийка.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤2🔥1🎉1
Готовлюсь к разбору соревнования Predict Student Perfomance, отчитываюсь перед подписчиками. Предварительно можно будет в понедельник меня послушать онлайн и позадавать вопросы. Я обычно оцениваю топ 10 решений, и выбираю из них интересные неповторяющиеся идеи. Думаю на поста три должно до тех пор хватить.
1 место:
Победители рассмотрели количество пользователей и событий и признали, что их было недостаточно. Длинные последовательности и небольшое количество пользователей вызвали сомнения. Поэтому они решили провести небольшой "гуглопоиск" и посмотреть, что еще существует в этой области.
И нашли то, что искали! Был найден список сессий, причем, оказалось, что тренировочный набор данных был его частью (или может быть даже тест).
Преобразовали необработанные данные в формат, соответствующий требованиям соревнования. И удивительно, но 98% сессий были идентичными, а 2% имели незначительные изменения. Просмотрев данные, cpmpml и pdnartreb обнаружили интересную особенность: некоторые люди играли несколько раз. Вместо того, чтобы удалять повторяющиеся сессии, они выбрали минимальный результат для каждого ответа. Таким образом, даже если игрок первый раз ответил неправильно на первый вопрос в своей первой сессии, а затем во второй сессии ответил правильно, мы все равно считаем, что он ответил неправильно.
Кроме того, они дополнили свои данные информацией из собственного скрапинга.
Давайте теперь ориентироваться на лучший общедоступный результат, который составляет сейчас 0.707 на паблике.
Ребята запустили локальную кросс-валидацию на этих данных и получили результат 0.718. Для сравнения, мой лучший результат при кросс-валидации составлял 0.701. Они отправили свое решение и получили оценку 0.708 на публичном лидерборде. Да да, лучше чем текущий паблик. Но нет нужды удивляться. Они рассмотрели этот результат как аномалию и обратились к организаторам. Организаторы пообещали изменить публичные и приватные наборы данных и вообще решить все проблемы, потому что оказалось, что их данные были фактически доступны публично (просто необработанные).
Но победители соревнования не унывали: они снова использовали тот же пайплайн и лучше обучили модель на новых данных + старых. И они достигли 0.72 на лидерборде. Это было странно вдвойне. Они проверили файлы и источник данных скрапинга. Оказалось, что Джо Уайлдер просто удалил часть данных из публичного набора в интернете и использовал его часть в качестве публичного/приватного набора данных для валидации. А у победителей соревнования остались эти данные. И, насколько я понимаю, набор данных больше не изменялся.
Базовая модель
Правило🥇 : верь своей валидации. Выбирайте модель, ориентируясь на результаты валидации, и уделите время для улучшения методики валидации. Победители пользовались этим правилом.
Правило 🥈 (для соревнований с кодом): подглядывайте. Стоит потратить время, чтобы узнать размер публичного и приватного наборов данных. Проведя двоичный поиск, господа установили, что приватная часть состоит из 1450-1500 сессий.
Правило 2.5: На основе локальных данных можно определить, насколько шумен приватный набор. Для этого запускаем модель на разном объеме данных (1000/2000/5000/10000 сессий) при фиксированном числе фолдов и видим, что стабильные результаты достигаются при объеме данных от 5000 сессий. Это означает, что публичный лидерборд может дезинформировать.
Правило 🥉 : Если лидерборд содержит шум, нужно быть консервативным. Победители добавляли только те признаки, которые значительно улучшали результаты кросс-валидации по сравнению с уровнем шума. Признаки, которые не улучшали результаты, были отброшены, даже если в них сильно верили.
Правило4️⃣ : Все, что связано с соревнованием, может иметь значение. О игре была опубликована статья, где четко указана цель игры: улучшение навыков чтения у игроков. Мои навыки уж точно улучшились . Следовательно, длина реплик и время их отображения на экране играют важную роль.
Правило5️⃣ : Если ресурсы ограничены, нужно экономить. Используйте Polars, чтобы добиться победы. Ну, это не прямо сказано, но Polars помог им.
1 место:
Победители рассмотрели количество пользователей и событий и признали, что их было недостаточно. Длинные последовательности и небольшое количество пользователей вызвали сомнения. Поэтому они решили провести небольшой "гуглопоиск" и посмотреть, что еще существует в этой области.
И нашли то, что искали! Был найден список сессий, причем, оказалось, что тренировочный набор данных был его частью (или может быть даже тест).
Преобразовали необработанные данные в формат, соответствующий требованиям соревнования. И удивительно, но 98% сессий были идентичными, а 2% имели незначительные изменения. Просмотрев данные, cpmpml и pdnartreb обнаружили интересную особенность: некоторые люди играли несколько раз. Вместо того, чтобы удалять повторяющиеся сессии, они выбрали минимальный результат для каждого ответа. Таким образом, даже если игрок первый раз ответил неправильно на первый вопрос в своей первой сессии, а затем во второй сессии ответил правильно, мы все равно считаем, что он ответил неправильно.
Кроме того, они дополнили свои данные информацией из собственного скрапинга.
Давайте теперь ориентироваться на лучший общедоступный результат, который составляет сейчас 0.707 на паблике.
Ребята запустили локальную кросс-валидацию на этих данных и получили результат 0.718. Для сравнения, мой лучший результат при кросс-валидации составлял 0.701. Они отправили свое решение и получили оценку 0.708 на публичном лидерборде. Да да, лучше чем текущий паблик. Но нет нужды удивляться. Они рассмотрели этот результат как аномалию и обратились к организаторам. Организаторы пообещали изменить публичные и приватные наборы данных и вообще решить все проблемы, потому что оказалось, что их данные были фактически доступны публично (просто необработанные).
Но победители соревнования не унывали: они снова использовали тот же пайплайн и лучше обучили модель на новых данных + старых. И они достигли 0.72 на лидерборде. Это было странно вдвойне. Они проверили файлы и источник данных скрапинга. Оказалось, что Джо Уайлдер просто удалил часть данных из публичного набора в интернете и использовал его часть в качестве публичного/приватного набора данных для валидации. А у победителей соревнования остались эти данные. И, насколько я понимаю, набор данных больше не изменялся.
Базовая модель
Правило
Правило 🥈 (для соревнований с кодом): подглядывайте. Стоит потратить время, чтобы узнать размер публичного и приватного наборов данных. Проведя двоичный поиск, господа установили, что приватная часть состоит из 1450-1500 сессий.
Правило 2.5: На основе локальных данных можно определить, насколько шумен приватный набор. Для этого запускаем модель на разном объеме данных (1000/2000/5000/10000 сессий) при фиксированном числе фолдов и видим, что стабильные результаты достигаются при объеме данных от 5000 сессий. Это означает, что публичный лидерборд может дезинформировать.
Правило 🥉 : Если лидерборд содержит шум, нужно быть консервативным. Победители добавляли только те признаки, которые значительно улучшали результаты кросс-валидации по сравнению с уровнем шума. Признаки, которые не улучшали результаты, были отброшены, даже если в них сильно верили.
Правило
Правило
Please open Telegram to view this post
VIEW IN TELEGRAM
Kaggle
Predict Student Performance from Game Play
Trace student learning from Jo Wilder online educational game
🔥6