Запрети мне псевдолейблить
3.41K subscribers
199 photos
3 files
185 links
Канал о пути к Kaggle competitions (теперь уже) GrandMaster и поте, которым обливаешься в процессе

Последний авторский канал про мл, претендующий на искренность и позволяющий ставить клоунов

Для контакта пишите в сообщения канала, они бесплатные
Download Telegram
Однажды я убил два месяца, пытаясь понять, как писать из Spark, который управляется Airflow в Redis Cluster (101) и в итоге справился. Смешно, но я видимо был первым и последним человеком, который столкнулся с этой проблемой на всем stack overflow.

В итоге, через 23 дня я просто руками перебрал все варианты и сам себе ответил. Проект тот кстати помер, так и не дойдя до релиза, так что о эффективности связки я так и не узнал.

С тех пор я совершенно не перестал дружить разные инструменты в очень странных конфигурациях и встречайте:
Я взял коннектор датадога для Dagster и расширил его функционал так, чтобы он работал ну хотя бы так же гибко, как оригинальный Datadog.
Вы тоже так можете.

Dagster — это оркестратор дата-процессов: штука, которая превращает «кучу джобов/скриптов» в нормальную систему с графом зависимостей, ретраями, расписаниями, параметрами и понятным UI. Нужен, чтобы пайплайны не были магией на кронах: быстро понять, что упало, что именно пересчитать, и чтобы прод не держался на вере и одном человеке. А, ну или если коротко- это Airflow здорового человека и сразу на стерройдах

Datadog — это наблюдаемость “всё в одном”: метрики, логи, трейсы, алерты и дашборды, которые склеивают картину от «почему сервис тормозит» до «вот конкретный запрос и вот строчка лога». Нужен, чтобы дебажить и мониторить прод не по ощущениям, а по телеметрии. Вот мы его и используем, чтобы понять, что какие-то важные продовые джобы померли.

Это наверно не самая горячая связка из двух инструментов, но надеюсь кому-то кроме меня будет полезна. Опять же, изи вклад в популярный инструмент. У меня кстати есть бывший коллега, который в дагстере успел поработать: @nadya_nafig

Делитесь своими изи-контрибьюшнами в комментах. А я пойду убежу 5 немцев подписать петицию о признании вклада в open source как службу обществу.
🔥116🍌4
С Новым годом, подписчики! Благодаря вам могу гордо занимать топ-1 в тг каналах про софт в Германии
9🔥3🍌2
Forwarded from TGStat Bot
Summary of the year for the channel "Запрети мне псевдолейблить" from @TGStat
4🔥4💩1🤡1🆒1
Люкс войскам приготовиться
Вытянули с гранд мастером бронзу на соревновании по фин рынкам. Мелочь, а не лишнее.

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

От этого @pseudolabeling немножко меньше утонул в глобальном ладдере
16👍6🔥3🤡2🍌1
Посвещается @ArtemVeshkin @markdjadcnhenko @artyomjk которых шейкнуло с 10 места на 38 в CSIRO - Image2Biomass Prediction сегодня ночью и которые не все стали кагл мастерами
220🔥8🍌8😭2🤣11
Если со мной часто пить кофе, то можно получить бесплатные идеи
13🤡3
Forwarded from Борис опять
На днях обсуждали с админом @pseudolabeling, что автоматические фильтры резюме совсем оборзели. Некоторые ребята которых я менторил из-за этого вручную оптимизировали резюме под каждую вакансию. Почему бы не автоматизировать?

Навайбкодил за два вечера hr-breaker:

1. Загружаете резюме
2. Даете ссылку на вакансию
3. LLM вооруженная тулколами генерирует оптимизированное резюме (в том числе по советам из методички)
4. Делаются стандартные проверки: keyword matching, vector similarity, проверка LLM-кой (в том числе визуально, что всё не поехало), проверка на галлюцинации, проверка на очевидный AI-generated текст
5. Если хотя бы одна проверка не пройдена оптимизация продолжается

Важно, что всё сконфигурировано не врать и не изобретать опыта которого нет, поэтому получается очень неплохо. Но если у вас нет совести ничто не мешает форкануть поиграться с промптами и отключить пару проверок 🤗

UX сделан для массовой подачи: кладет оптимизированные PDF в папку с указанием роли и компании, чтобы вы не забыли какое резюме куда отправляли.

Скачиваете, подставляете свой ключ Gemini API, uv run и уничтожаете скрининг как явление. Добейте выживших

@boris_again
Please open Telegram to view this post
VIEW IN TELEGRAM
41🔥18🍌8🤡4👎2😁2
https://huggingface.co/spaces/AlexWortega/hr-breaker

HR-breaker теперь в общем доступе
25🔥8🍌3
Заняли 47 место в упаковке елок в квадрат. Вернулся на 4 страницу рейтинга (382 место) в компетишнах, но как-то не ощутимо приблизился к гранд мастеру.

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

В жизни пару раз встречался с задачами упаковки объектов и всегда казалось, что каждый раз нужно изобретать костыли и писать очередной Branch & Bound. Ну так вот вывод: надо!
1🔥345🍌2
#santa2025
И так, наша первая идея для решения санты 2025, которая до сих пор работает, но почему-то не очень популярна в комьюнити. Ну или Вехденская правда придумал ее едиственный.

TLDR: сведем задачу упаковки к LP

Перва проблема сведения- это то, что ёлки то сами по себе не очень-то и выпуклые фигуры, а для решения LP надо фигуры иметь выпуклые. Тогда представим елку как минимальный набор выпуклых фигур (на рисунке), относительно которых можно собрать систему уравнений: порежем елку на фигуры и сделаем вид, что они друг к другу приклеены.
Для пары елок будем иметь 16 ограничивающих уравнений, но нам елки нужно сравнивать только попарно, так что количество уравнений не станет запредельным.
Тогда для каждой прямой описывающей каждый многоугольник будем иметь
a x + b y + c = 0


Т.е. линейное ограничение. Если вдруг мы елку хотим двигать на (d_i, d_j), то каждое индивидуальное уравнение приобретет вид
a·dx_i + b·dy_i − a·dx_j − b·dy_j ≤ k

Где k будет как раз нашим зазором между елками. Чем больше зазор- те больше 'воздуха' в нашем квадрате.

Тогда сведение к LP будет:
1. Как переменные иметь сдвиги всех фигур + сторона квадрата
2. Сторону квадрата мы минимизируем
3. Каждую фигуру можно двигать так, чтобы она все еще находилась в квадрате и не пересекалась с другими ёлками.

Какие тут минусы? Ну мы вообще не учитываем, что елки можно повернуть, так что для малых поворотов приходится играть с шумом на угол, чтобы мочь найти хороший вариант в окрестности.

Опять же, не надо шагать в глобальный оптимум сразу. Лучше применить алгоритм несколько раз и делать сдвиги на какой-то коэффициент [0, 1], чтобы найти более глобальный оптимум. Тут аналогия как с другими оптимизаторами, где не надо торопиться.

Таким образом команда @pseudolabeling примерно каждое решение могла немного улучшить в ~четвертом знаке

Код можно вот тут потыкать и обойти текущий лучший паблик, чтобы поднять чсв

Еще Вехденская правда планирует стрим с объяснением обсуждением этого в 21:00 по мск.
21😱4🔥3🤯2🍌2
Вот бы сейчас узнать мнение @silicon_bangalore о всех ситуациях, которые он не комментил
🥰7🤡1
3 Место от Santa 2025

Сетап соревнования кратко описан тут: https://t.me/pseudolabeling/327

Задача чуть меньше, чем NP-полная (∃R), а для таких пока не найдено одного оптимального алгоритма, так что все лучшие решения будут иметь несколько этапов. В этом случае этапы следующие:
1. Берем хорошее решение меньшего размера и 'наращиваем' на него прямоугольники
2. Собираем из этих запчастей кубик
3. Отжигаем получившеся решение с помощью SA. Вообще каждый Санта решается с помощью SA, так что запомните эти две буквы на следующий год
4. Модификацией sparrow важимаем последние соки

Для начала про sparrow- это такой алгоритм двумерной упаковки, основанный на эвристиках и написанный на Rust 🦀. О нем все узнали из того, что его автор занял 6 место, ставил синичку на аватарку и вообще везде указал, что он такой вот молодец и придумал новый алгортим. Я его понимаю, это его творение и его успех. По умолчанию он решает задачу 'утрамбовки' в прямоугольник известной высоты, передвигая объекты и оптимизируя длину прямоугольника.

В райтапе первый пункт описан плохо, но я додумаю для вас:
Берем пазл меньшего размера с высокой эффективностью. Эффективность определяем так: делим площадь квадрата на число деревьев и получаем условную 'плотность'. Чем плотнее- тем эффективнее. Логика простая- если такой коэф низкий, то и 'воздуха' в решении мало.
Дальше с помощью ванильного sparrow решаем две подзадачи в виде двух прямоугольников, достраиващих решение до квадрата большей площади. Можно конечно разбить и на два идентичных прямоугольника + маленький квадрат, но кажется особого смысла в таком лишнем ограничении нет и оно только испортит.

Пункт второй: SA
Строго и формально лучше всего читать на сайте ммп
Обычно алгоритм на основе SA это смесь с ILS: отжиг из SA и kick из ILS

Отжиг на пальцах:
1.Фиксируем температуру T.
2. Берем случайное дерево, его немного поворачиваем и шевелим. Если из-за этого деревья пересекаются- начинаем с начала.
3. Если скор (размер описанного вокруг елок квадрата) после такого шевеления улучшился- это наше новое базовое решение.
4. Если не улучшился- то делаем это решение базовым только с вероятностью обратно пропорциональной изменению площади (-delta(space) / T)

ILS-Kick еще проще:
Чтобы не застояться в локально минимуме, иногда применяем шаг kick- каждое дерево случайно смещаем в одну из сторон и если не случился overlap, то оставляем как новое базовое решение.

Пункт третий:
Для sparrow придумали тоже пару модификаций, чтобы побить автора:
1. Переписали его под прямую оптимизацию стороны квадрата
2. Написали свою версию warm-start, чтобы не начинать каждый раз с начала. Хотя вормстарт не надо было писать самим, а надо было подтянуть мастер.
3. Дописали доп ограничения для солвера: решение должно быть либо зеркально симметричным, либо 4-симметричным (по вертикали и горизонтали). Так получается больше ограничений и можно отметать слабые решения раньше.
4. Так же добавили специальный параметр регуляризации, заставляющий выстраивать решения вдоль какой-нибудь заранее заданной оси:
P(thetta) = w * B(c) * delta(thetta, thetta*) ^ 2.

Тут w, thetta*- это гиперпараметры силы регуляризации и угла оси, вдоль которой надо выстраиваться
B(c) = 1 + (b - 1)(1 - r) ^ p.

B(c) нужен, чтобы от центра решения к краям регуляризация слабела: r- расстояние до центра паззла, а b и p- тоже гиперпараметры.

Из еще приколов:
1. Написали себе слак бота с апдейтами их прогресса на лб и автосабмитом
2. Решали все с помощью кагл ноутбуков. Кажется, даже не использовали дополнительные машины. Я в это не очень верю, ресурсы кагла все же очень ограничены. Но уличать их во лжи не на чем.

Соревнование в этот раз на мой взгляд чуть менее веселое, чем было в прошлом году с Геммой, но кагл стаф мне и не должен угождать.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥167🍌3🙏1
Сейчас на каггле затишье и из интересных соревнований есть только NLP сорева по переводу с Аккадского, на которой у меня ничего не заводится.

Но в скором времени будет:
1. Баскетбол, для которого я выкачу гайдлайн как в нем +- эффективно участвовать.
2. Новый BirdClef++

А вот Lux 4 (RL-соревнование) кажется задерживается

unfortunately there isn't a specific timeline. When the time is right and the volunteers have time to work on this properly we will announce more details.
A big blocker is unfortunately my own time to build out the game engine + make a research proposal to Kaggle. I am currently finishing up my phd and closing out some projects so that is taking up a big chunk of my time. I hope to eventually come back to co-running this competition with bovard but there just isn't a time budget from me for it right now. While I could dedicate some time now it wouldn't be sufficient imo to make and maintain high quality competition similar to our first 2 seasons.
🔥139👍3🍌1
Не прошло и дня, а баскетбол на месте 🏀

https://www.kaggle.com/competitions/march-machine-learning-mania-2026

Всем зарегаться, всем взять билетик в сологолд и ждать розыгрыш

Предыдущие посты по теме баскета, чтобы примерно проникнуться духом

Вайбчек победителей соревы прошлых лет:
https://t.me/pseudolabeling/245

Финальные ставки:
https://t.me/pseudolabeling/248

Вот тут я позерствую на кажущемся успехе:
https://t.me/pseudolabeling/249

Вот здесь я узнал про специфичные для домена метрики не на уровне команд, а на уровне игроков:
https://t.me/pseudolabeling/251

А здесь подводим ботомлайн и пытаемся понять, почему не удалось всех победить в лоторее:
https://t.me/pseudolabeling/259
🔥112🍌1
Как взять золото в March Mania? 🏀

В прошлом году анализировал то, как выигрывается March Mania и самая надежная стратегия- это модифицировать Raddar notebook. Я долго ждал, пока Raddar его выложит, но сколько можно? Я сам сделал вам Raddar Notebook.

Raddar- это такой кагл грандмастер, который был 10 лет назад топ 4 каглла, но сейчас подзабил на соревы и в основном лудит в March Mania. Прямо как мы с вами! Форки его ноутбука стабильно появлятеся в топ 10 уже 5 лет, но не он. Ему не везет настолько, что приходится жаловаться на форуме, что его жена стибильно выше него в ладдере March Mania.

База отработана почти с самого начала сорев по NCAA:
1. Берем фичи повторяющиеся из года в год
2. Берем XGBoost
3. Завышаем вероятности в 'неравных схватках'
4. Руками фиксим вероятности для самых первых матчей, чтобы хакнуть Brier Score.

Этот подход как автомат Калашникова, попадал в топ 10 каждый год. Весь секрет в том, чтобы изменить базовый ноутбук и тем самым стать чуть-чуть лучше или хуже, чем все остальные. Ну и молиться, конечно!

А вот если не модифицировать и ничего не крутить, то получишь скор как все те люди, что скопировали/сабмитнули и уж точно не выиграешь. Я об этом за вас подумал, и добавил к сабмитам чуть-чуть шума, чтобы скоры отличались. Вы можете сами это отключить, можете сами оверрайднуть матчи, можете выкинуть/добавить какие-то фичи. Рекомендую посмотреть новости о том, как изменятся составы прямо перед матчами и оверрайдить на их основе.

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

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

🏀🏀🏀
https://www.kaggle.com/code/asimandia/this-year-s-raddar-notebook?scriptVersionId=300874279
Please open Telegram to view this post
VIEW IN TELEGRAM
238🍌6🔥1😁1
Дополнительный пост к второму месту на #santa2025. Это решил вынести в отдельный пост, потому что в одно тг сообщение просто не лезет.

Как трясти задачу упаковки? Авторы решения это называют 'Large neighborhood'
Как создать какое-то глобальное изменение для хорошего решения, но при этом контролируемо его испортить и не слишком сильно потерять глобальную структуру?

Все 4 шага есть картинками по порядку (картинки соответствуют этапам)
1. Удалим N случайных смежных деревьев
2. Выберем точку в получившемся пустом пространстве и растолкаем деревья в разны стороны от нее. При этом решение может испортиться и стать чуть-чуть больше
3. Рядом с точкой расталкивания вернем N деревьев случайным образом, лишь бы без коллизий
4. 'Ужмем' деревья назад

Теперь про каждый пункт по порядку.
Чтобы решить, какие деревья выбирать надо решить две вещи: целевую точку и количество деревьев.
Количество выбираем из равномерного распределения от 1 до 4.
Чтобы решить, какую точку 'ломать' все еще сложнее:
С вероятностью 0.1 выбираем один из углов
Чаще семплируем те места, где больше дисперсия направляющих углов елок

Чтобы 'растолкать деревья':
1. Увеличиваем квадрат немного с ближайшей стороны
2. Запускаем SA, который пытается сдвинуть каждое дерево от точки

Ну и конечно решение написано на rust + python. Причем на python по большей части графики.
🦀😡🦀

Прошлыt куски тут:
https://t.me/pseudolabeling/371
https://t.me/pseudolabeling/368
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍53🔥1🥰1🍌1