Aspiring Data Science – Telegram
Aspiring Data Science
385 subscribers
465 photos
12 videos
12 files
2.15K links
Заметки экономиста о программировании, прогнозировании и принятии решений, научном методе познания.
Контакт: @fingoldo

I call myself a data scientist because I know just enough math, economics & programming to be dangerous.
Download Telegram
#featureselection #selectfrommodel #rfe #rfecv #diogenes

Ч. 1

Как работают embedded, filters и wrappers подходы к отбору признаков, что лучше использовать в бою, и почему sklearn-овская реализация RFECV недостаточно хороша?

embedded (встроенные) делают отбор признаков частью процесса обучения модели (к примеру, используя специализированные функции потерь). К примеру, L-1 регуляризация в Lasso и ElasticNet регресиях способна занулять коэффициент при факторах и тем самым полностью исключать их из работы.
плюсы: удобство, не надо создавать отдельный FS компонент, органичная интеграция в основной алгоритм. минусы: мало моделей с поддержкой embedded.

wrappers (обёртки) для оценки подмножеств факторов применяет отдельную предсказательную модель и внешний критерий. Критерием могут быть как непосредственно ML метрики(обычно на отложенной выборке), так и относительные важности признаков.
плюсы: позволяет оценивать большие подмножества/группы факторов; универсальность, работает со всеми базовыми моделями. минусы: большое время работы, пропорциональное количеству факторов.

filters (фильтры) вместо дорогой в обучении предсказательной модели используют более простую вычислительно оценку наличия связи между фактором (или небольшой группой факторов) и таргетом. Это может быть коэффициент линейной корреляция или взаимной информации. Фильтры могут быть простейшие, независимые по 1 переменной, или более сложные, по нескольким и даже с учётом внутренней избыточности (см #MRMR). Иногда рассматривается просто информационное содержание (энтропия) фактора, без связи с таргетом.
плюсы: быстрый; универсальный. минусы: проблемы с одновременным учётом больше 2-3 факторов.

Для полноты картины, есть ещё полный перебор подмножеств признаков, но в современных реалиях это скорее академическое упражнение, разве что у Вас в какой-то специфической задаче датасет и правда содержит не больше 5-6 факторов.

На текущий момент, по моему скромному опыту, для задач с большим (сотни,тысячи, ++) кол-вом признаков предпочтительным решением кажутся обёрточные (wrappers) методы с привлечением информации о важности признаков. Последняя зачастую довольно точна и полезна, может учитывать нелинейности и внутренние связи (особенно в современных бустингах), и позволяет заменить крайне дорогостоящий полный перебор/дообучение простым ранжированием важностей.

Давайте рассмотрим (в порядке роста изощрённости) обёрточные алгоритмы FS, использующий важности признаков.

SelectFromModel(estimator,n_features_to_select) обучает модель лишь 1 раз, и за один шаг сразу отбрасывает все низкорейтинговые признаки, чтобы оставить только нужное пользователю число фичей.

RFE(estimator,n_features_to_select) (Recursive Feature Elimination) можно рассматривать как улучшение SelectFromModel: RFE сделает то же самое, но не за 1 ход, а постепенно, итеративно отбрасывая по N самых слабых признаков и переобучая модель, чтобы использовать дальше уже новые важности признаков. Идея в том, что удаление признаков может вести к тому, что относительные важности оставшихся достаточно сильно изменятся, и RFE как раз сможет эти перетасовки учесть.

У обоих алгоритмов есть недостаток: пользователю нужно знать заранее, какое число признаков оставить, а ему это знать обычно неоткуда.

RFECV (RFE with Cross-Validation) решает эту проблему: вместо строгого n_features_to_select, у него есть параметр min_features_to_select. Входные данные RFECV разбивает на несколько train/test фолдов, и для каждого train фолда в отдельности просто запускает старого добого RFE(n_features_to_select=min_features_to_select). RFE всё так же проходится по числу оставленных признаков сверху вниз, но теперь дополнительно каждый набор признаков скорится на тестовом фолде.
По итогу, best_n_features с лучшим средним скором по всем тестовым фолдам и возвращается как ответ, а конкретные признаки выбираются финальным запуском RFE(n_features_to_select=best_n_features) уже на полном входном датасете.
#featureselection #selectfrommodel #rfe #rfecv #diogenes

Ч. 2

RFECV кажется самым продвинутым и эффективным алгоритмом отбора признаков в sklearn, что же мне в нём могло не понравиться?

1) итоговые best_n_features выбираются по всем данным и по итогам только 1 обучения модели (а именно, предыдущего с best_n_features+1 фичами).
а если я обучу модель ещё раз, точно будут отобраны те же фичи, или нет? подозреваю, что этот способ неустойчив.

2) информация о важности признаков от обученных моделек с уровней от best_n_features+1 может использоваться только косвенно, а с уровней ниже best_n_features-1 вообще никак.
А что, если бы мы могли все эти важности как-то комбинировать, ну хотя бы голосованием? (привет #votenrank)

3) все обучения моделей внутри RFE/RFECV не поддерживают раннюю остановку. все решения вы будете принимать по оверфитнутым моделям.

4) для задачи с 10_000 фичами всё ещё надо обучить 10_000 моделек. Допустим, у нас терабайтный датасет, и даже на мощном сервере обучение идёт несколько часов. Да, можно задать шаг в 200, и обучить 50 моделек за пару суток, но и придётся пожертвовать точностью в +- 200 полезных признаков. Как там говорит Хеттингер, THERE MUST BE A BETTER WAY! А нельзя ли, попробовав несколько вариантов n_features и глядя на получающийся график скоров, определять следующих кандидатов для проверки более интеллектуально? Это же задача одномерной глобальной оптимизации! см #MBHO

5) даже в случае допустимости по ресурсам шага=1 и полного перебора, признаки имеют свою стоимость: приобретения, создания, хранения в featurestore. + из-за случайностей в разбиении конкретных данных Вы на протяжении десятков и сотен избыточных (и даже совершенно нерелевантных) признаков будете видеть на графике неубывающую полезность, из которой RFECV возьмёт абсолютный максимум, тем самым завысив реально полезное число признаков. Хотелось бы ввести понятие средней стоимости 1 признака, и от непосредственного ML функционала отнимать (шкалированную) стоимость получившегося набора данных. Это создаст адекватный и чёткий глобальный экстремум полезности.

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

7) по ходу отбора признаков обучается много моделей, по идее, это даёт вал ценной информации, значительная часть которой (по старой традиции кудесников дата сайенс из sklearn) потом просто выбрасывается, несмотря на потраченные часы вычислений. Давайте не забывать, после FS мы наверняка захотим ещё затюнить гиперпараметры нашей основной модельки, и будем перебирать/переобучать ещё сотни комбинаций (причём на тех же данных, что были использованы для FS), что будет стоить нам дополнительных часов. Так а кто нам мешает задавать моделькам с шага FS разные значения гиперпараметров и тем самым выучить оптимальные ещё до этапа HPO/HPT?!

8) глупое техническое ограничение. sklearn вам не позволит использовать датасет с категориальными признаками (даже если модель их поддерживает).

Решение этих проблем и является моей мотивацией при создании модуля wrappers библиотеки отбора признаков Diogenes.

Есть у меня подозрение, что самым эффективным в итоге окажется гибрид MRMR и RFECV (+возможно, Branch & Bound), но это уже тема другого разговора.
👍2
#featureselection #diogenes

Тестирую сейчас Диогена в контролируемом эксперименте. Несмотря на ожидания, RFECV звёзд с неба не хватает: некоторые значимые группы факторов "уплывают" из зоны видимости, без шансов выйти в топ. Думаю про альтернативу, ну или как минимум предварительный шаг: просчитывать важности признаков на случайных подгруппах случайных размеров, а не просто на всех доступных одним разом.

UPD. Кстати, эксперименты на подгруппах открыли интересный факт: важности признаков катбуста могут совершенно не отражать реальный вклад факторов в результат. Пример в комментах.
👍1
#news

День добрых и полезных дел прямо сегодня. Съездил поставил подпись за Надеждина, внёс немного денег. Скорее всего, кремлёвские старцы испугаются, как и Дунцову, и найдут предлог не допустить, но хоть что-то делать надо. Приходят в основном молодые, лет 20-30.

Ещё помог забинтовать попавшего в ДТП собакена.
2
#hardware #storage

А прогресс-то идёт! можно купить 64TB NVME SSD за $4k! Я брал 8TB за $2k, и то до сих пор очень доволен.

"Компания Solidigm, по сообщению TechRadar, начала приём заказов на самый вместительный в мире QLC NVMe SSD, предназначенный для применения в СХД высокой плотности для дата-центров. Речь идёт об изделии D5-P5336, способном вмещать 61,44 Тбайт информации.

Устройство было представлено летом прошлого года. Оно имеет формат E1.L; задействован интерфейс PCIe 4.0 x4 (NVMe 1.4). В конструкции применены 192-слойные микрочипы флеш-памяти QLC 3D NAND. Стоит отметить, что данный накопитель является наиболее ёмким среди «обычных» NVMe SSD. Заявленная скорость последовательного чтения данных достигает 7000 Мбайт/с, скорость последовательной записи — 3000 Мбайт/с. Величина IOPS при произвольном чтении блоками по 4 Кбайт, согласно техническим характеристикам, составляет до 1 005 000, при произвольной записи — до 43 800."

https://servernews.ru/1099060
#featureselection

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

Вот вам пример: 246 фичей, из них на таргет влияют 11. Результаты (mean_cv_score, std_cv_score) MSE с 5-фолдовой кросс-валидацией для всех фичей и только для важных фичей показывают ОГРОМНУЮ разницу (0.0219 vs 0.0145, при dummy=0.0278). По сути, наличие/отсутствие FS может быть причиной успеха/провала проекта. Порядок разницы одинаковый для Catboost и Xgboost, кстати.
4👍1
#music #poetry #magpie

One for sorrow,
Two for joy,
Three for a girl,
Four for a boy,
Five for silver,
Six for gold,
Seven for a secret never to be told.

Eight for a wish,
Nine for a kiss,
Ten a surprise you should be careful not to miss,
Eleven for health,
Twelve for wealth,
Thirteen beware it's the devil himself.
Fourteen for love
Fifteen for a dove
Sixteen for the chime of a bell
Seventeen for the angels protection
Eighteen to be safe from hell
Nineteen to be safe from a crime
Twenty to end this rhyme.

https://www.youtube.com/watch?v=_fPbWEa1cyg
2
#yandex #google #ltr

Матрикснет, катбуст, лучшие спецы и технологии, все дела, казалось бы. Но почему меня поиск Гугла куда лучше понимает? Наверное, поэтому доля гугла в мировом поиске 91%, а Яндекса 1,61%.
#diogenes #featureselection #rfecv #mrmr

Ну и немного новостей по проекту Диоген. Собрал и потестировал на синтетике 2 полноценных отборщика признаков, filter & wrapper. мой улучшенный RFECV отлично отработал на датасете с 250+ факторами, 11k записями: из 11 значимых факторов нашёл 9, причём и нелинейные, и 2-way XOR, и 3-way XOR. Не смог найти 2 фактора с частичной зависимостью (на 10% и 30% области определения). Ну я не сильно расстроился, найди он и это на 11k записей, это было бы чудом. При росте числа записей находит и их. Что выяснилось: промежуточные модельки надо фиттить прям до упора (насколько ES позволяет).

И, кажется, оправдалась моя идея, что важности признаков надо складировать со всех запусков, а не только с самого первого. Оптимизатор мой MBHO отлично отработал - сократил время поиска вдвое. В общем, не зря пилил этот проект полгода.

В то же время, MRMR находит только 6 важных признаков из 11. Но время работы, Карл! 2 часа RFECV против 2 минут MRMR.

Мне уже стало казаться, что в бою на больших данных RFECV ну просто будет неприменим по времени. Начал тестировать на реальном датасете с 500+ столбцов общим размером 50Гб. Подождал часов 6 на сервере с 16 ядрами, за это время не обучилась полностью даже 1я FS моделька, махнул рукой. Придётся переносить тесты RFECV на GPU сервер с приличным объёмом VRAM.

Перешёл к тестированию MRMR. Тут тоже в реальности не всё гладко оказалось, биннинг датасета, который на небольшой синтетике шёл 2 секунды на 1 ядре, в реальном проекте растянулся на полчаса. Пришлось переписывать под многопоток, заодно улучшил работу с пропусками и отловил пару багов. Биннинг стал отрабатывать за 2 минуты. И снова сюрприз, который отнял полдня. Оказалось, что np.random.shuffle в многопотоке ужасно тормозит, пришлось оборачивать его в njit.

В итоге тестирую MRMR с полной загрузкой CPU на финансовом проекте, очень интересно смотреть в реальном времени, что он находит.
🔥3
#electrocars #apple

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

Неопределенность мучила проект на протяжении многих лет. Бывший руководитель Project Titan Даг Филд (Doug Field) покинул компанию в 2021 году отчасти потому, что он не верил, что высшее руководство когда-либо официально одобрит выпуск автомобиля. Даже с учетом нового плана, некоторые руководители Apple скептически относятся к тому, что автомобиль сможет когда-либо обеспечить такую прибыль, какую компания получает от iPhone. Тем не менее, автомобиль ценой около $100 000, а меньшего от Apple ждать не стоит, будет способствовать росту доходов и поможет Apple занять место в растущем секторе электрокаров.

Новый план создания автомобиля рассматривается внутри компании как продукт, похожий на Tesla. Он не откроет ничего нового, но компания надеется, что автомобиль будет выделяться элегантным дизайном, системами безопасности и уникальным пользовательским интерфейсом."

https://3dnews.ru/1099193/elektromobil-apple-zaderzhitsya-do-2028-goda-i-vyjdet-bez-polnocennogo-avtopilota
#featureengineering

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

1) их логарифмы, корни, степени (встречал рекомендацию брать преобразование, дающее максимально гауссово распределение на выходе), возможно, тригонометрику (для периодических признаков)
2) их попарные произведения (PolynomialFeatures) или частные

В реальных проектах у меня до этого ни разу не дошли руки, отчасти ещё и потому, что я сомневался: а как такие сконструированные признаки подавать, отдельно или вместе, это ж как раздует объёмы данных и время расчётов, а как потом понять, какие нерелевантны...

Но после экспериментов с отборщиком признаков MRMR кажется весьма очевидным общий подход, позволяющий найти оптимальные преобразования и основанный на теории информации:

просто для каждого сырого признака на train, прошедшего отбор MRMR,

1) индивидуально ищем преобразование (из списка стандартных), максимизирующее его взаимную информацию с таргетом (только на train!). как именно лучше делать дискретизацию, я пока не знаю. заменяем сырой признак его лучшим преобразованием (или не заменяем, если сырая форма уже самая лучшая).

2) попарно, для всех сочетаний признаков из шага 1), проверяем, какое преобразование f(A,B) из списка стандартных максимизирует MI этой пары с таргетом (только на train!). если такая максимальная MI выше условной MI(A,Y;B), пара добавляется в пул улучшений с указанием ожидаемого "улучшения" информации. После проверки всех сочетаний, пары из пула сортируются по ожидаемому улучшению и начинают формироваться. Если переменная оказывается уже задействована в другой паре, можно допускать не более N повторных использований. Оригинальные задействованные переменные из датасета удаляются.

Как думаете, стоящая идея?

UPD. могу подтвердить, что в части 2 идея работает!!! это просто фантастика. Правда, в части 1 пока облом.
Forwarded from Генерал СВР
Дорогие подписчики и гости канала! Сегодня продолжились попытки блокировки мессенджеров WhatsApp и Telegram в России. "Тренировочные" отключения коснулись нескольких регионов. Основной упор делается на возможности блокировки WhatsApp, так как этот мессенджер российское руководство считает наиболее опасным. Ближайшие четыре недели стоит ожидать более масштабных попыток отключения популярных мессенджеров и видеохостинга YouTube. Использование VPN, на данном этапе, позволяет обходить проблемы связанные с блокировкой.
🤡1
#facebook

"Стремительный рост стоимости акций компании начался в 2023 году и по итогам года достиг почти 200 %. Как сообщает CNBC, одним из основных драйверов этого роста оказалось решение генерального директора Meta Марка Цукерберга (Mark Zuckerberg) о введении мер по сокращению расходов, которые привели к увольнению из компании более 20 000 сотрудников.

Акционеры оптимистичны в отношении Meta, поскольку компания стремится укрепить свои позиции в качестве сильного игрока в области искусственного интеллекта. На прошлой неделе Цукерберг заявил, что к концу 2024 года Meta приобретёт 350 000 специализированных ИИ-ускорителей H100 от NVIDIA, а в сумме вычислительная производительность её систем будет «эквивалентна примерно 600 тыс. ускорителей H100». Всё это указывает на то, что Meta инвестирует миллиарды долларов в развитие своей инфраструктуры ИИ."

https://3dnews.ru/1099260/rinochnaya-stoimost-meta-previsila-1-trln
#featureengineering #autofeat

Вспомнил, что конструктор фичей уже реализован в библиотеке autofeat.

Давайте разбираться.

"Linear models+ non-linear features=LOVE"
"There is always enough RAM somewhere" ))

"Most existing feature construction frameworks follow the second, iterative feature engineering approach: The FICUS algorithm uses a beam search to expand the feature space based on a simple heuristic, while the FEADIS algorithm and Cognito use more complex selection strategies. A more recent trend is to use meta-learning, i.e., algorithms trained on other datasets, to decide whether to apply specific transformation to the features or not. While theoretically promising, we could not find an easy to use open source library for any of these approaches."

https://arxiv.org/pdf/1901.07329.pdf

https://www.youtube.com/watch?v=4-4pKPv9lJ4
#autofeat #featureselection #featureselection

Как работает autofeat:

1) берётся подвыборка train set, из сырых фичей генерируется много кандидатов (с помощью простых математических операций)

2) в пул "хороших" добавляются кандидаты с высокой корреляцией с необъяснённым таргетом

3) на всех "хороших" кандидатах обучается линейная модель с регуляризацией LassoLarsCV. Отбрасываются кандидаты с низкими весами в последней модели. Пересчитывается таргет, не объясняемый моделью.

4) повтор цикла до стабилизации множества хороших кандидатов

5) отсев шума. обучение на итоговом пуле+случайных признаках, отбрасываем всех кандидатов с весами, меньшими весов шумовых фичей