Dmatryusофрения
41 subscribers
291 photos
10 videos
15 files
148 links
Пишу о книгах, лидерстве, технологиях, opensource, своих проектах и наверное чем-то ещё. Ну и репосты IT приколямб.
Download Telegram
Полезное
🤝2
🧑‍💻 Промт дня: как находить и обрабатывать выбросы в данных

Выбросы могут быть ошибками сбора, а могут — ключом к инсайту. Главное — заметить их вовремя и обработать правильно.

🎯 Вот промт, чтобы системно подойти к проблеме:
У меня есть датафрейм с числовыми признаками. Помоги:

– Найти выбросы с помощью стандартных методов: Z-оценка, IQR, Tukey fences, modified Z-score
– Построить визуализации: boxplot, scatter, histogram, isolation forest
– Разделить признаки по плотности выбросов
– Предложить: удалять выбросы, каппировать, логарифмировать, заменять
– Проверить, влияют ли выбросы на корреляции и важность признаков
– Обнаружить мультипризнаковые выбросы (multivariate outliers) с помощью: Mahalanobis distance, One-Class SVM, Isolation Forest

Посоветуй стратегии для ML:
– оставлять как есть
– обработать в препроцессинге
– использовать модели, устойчивые к выбросам (например, robust regression)


Особенно важно в задачах регрессии и при работе с сенсорными/временными данными.

Библиотека дата-сайентиста #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Рили
💯3
#open_source #ml #classic

Сегодня узнал из поста другой DS группы, который вы уже, возможно, видели о либе interpret. Мне тот пост не понравился, поэтому я решил написать свой 😅

Из крутого:
1. Специальный интерпретируемый GBM, разработанный Microsoft и другие glass-box модели 🔮
2. Полный набор инструментов для объяснения black-box моделей в одном месте 🤔
3. Удобные встроенные интерактивные визуализации 👀

Если дойдут руки попробовать, расскажу что как. Вообще довольно давно есть мысль взять какую-нибудь интересную задачу с открытыми данными, как бенчмарк всякого MLного. Если у вас такие есть, кидайте в комменты ☺️
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from HypEx (Дмитрий Тихомиров)
🚀 Hypex 1.0.2 — он уже тут! Уже 2 недели как тут, но не было времени написать апдейт
😅

Пока вы отдыхали (а может, считали часами АА-тесты на старой версии), мы не сидели сложа руки — выпуск версии 1.0.2 оказался мощным апдейтом:

💡 Что нового:
- АА-тест теперь летает! Ускорение — от «в несколько раз» до «ого-го» на больших датасетах. (в 2000 раз быстрее на 2 млн строк)

- Т-тест стал умнее — теперь можно применять поправку Уэлча при неравных группах.

- Matching стал гибче — можно подбирать не одного, а сразу n-близнецов (наконец-то 💥).

- Результаты стали чище и понятнее — формат отчётов по АА/АБ/Matching обновили, добавили новые метрики.

🐞 Исправили баги:
- корректное сравнение в мэтчинге

- краши при константных значениях

- краши при дисбалансе

- проблема с КС-тестом


📚 Туториалы тоже не забыли — дописали, обновили, структурировали.

Да, релиз вышел 2 недели назад. Но мы — как хорошие исследователи: сначала проверим, протестим, допишем, потом и расскажем.

Пробуйте и пишите фидбек!
github.com/sb-ai-lab/hypex
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2
Channel photo updated
Полезное и актуальная, как раз думал, как по-красивее сделать иммутацию.
👍2
↔️ Как не потерять данные из-за пропусков: практические стратегии

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

Представляем три продвинутых способа иммутации пропусков с использованием Pandas и Scikit-learn:

1️⃣ Множественная иммутация с помощью цепочек уравнений (MICE)

Использует модели, например, Байесовскую регрессию или случайный лес, чтобы последовательно заполнять пропуски, обучаясь на известных данных.
from sklearn.experimental import enable_iterative_imputer
from sklearn.impute import IterativeImputer

iterative_imputer = IterativeImputer(random_state=42, max_iter=10)
df_imputed = pd.DataFrame(iterative_imputer.fit_transform(df), columns=df.columns)
print(df_imputed.isnull().sum().sum()) # Пропусков больше нет


Можно менять модель, например, использовать RandomForestRegressor для иммутации.

2️⃣ Иммутация с помощью K-ближайших соседей (KNN)

Заполняет пропуски, опираясь на похожие строки с известными значениями. Вес соседей можно задавать по расстоянию или равномерно.
from sklearn.impute import KNNImputer

knn_imputer = KNNImputer(n_neighbors=5, weights='distance')
df_knn = pd.DataFrame(knn_imputer.fit_transform(df), columns=df.columns)
print(df_knn.isnull().sum().sum())


3️⃣ Ансамблевая иммутация разными моделями

Запускаем разные иммутационные модели, получаем несколько вариантов заполненных данных, а затем выбираем лучший результат, ориентируясь на ключевые признаки:
from sklearn.linear_model import BayesianRidge
from sklearn.ensemble import ExtraTreesRegressor, RandomForestRegressor

imputers = {
'bayesian_ridge': IterativeImputer(estimator=BayesianRidge(), random_state=42),
'extra_trees': IterativeImputer(estimator=ExtraTreesRegressor(n_estimators=10, random_state=42), random_state=42),
'rf_regressor': IterativeImputer(estimator=RandomForestRegressor(n_estimators=10, random_state=42), random_state=42)
}

imputed_datasets = {}
for name, imputer in imputers.items():
imputed_datasets[name] = pd.DataFrame(imputer.fit_transform(df), columns=df.columns)
print(f"{name}: Средний доход = {imputed_datasets[name]['income'].mean():.2f}")


➡️ Итоги:
— KNN хорошо подходит для небольших числовых датасетов, но требует ресурсов на больших.
— Ансамблевые методы дают лучшее качество, но сложнее и тяжелее в вычислениях.
— MICE — золотая середина для многих задач.

Библиотека дата-сайентиста #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
🆒2
Если руки дойдут, попробую и расскажу, что как)
создатели TikTok выкатили БЕСПЛАТНЫЙ аналог Cursor, еще и OPEN-SOURCE

ByteDance (да-да, те самые) выложили на GitHub исходники Trae Agent — ИИ-ассистента для программистов, который умеет писать код, править баги, задавать сам себе вопросы и даже запускать команды в терминале.

То есть буквально как Cursor, но с открытым кодом и без подписки на $60.

Что умеет:

- редактирует файлы и пишет коммиты,
- сам решает, что делать: рефакторить, тестить или гуглить,
- работает с GPT-4, Claude, OpenRouter и даже Doubao (внезапно),
- сохраняет «траекторию» своих действий — можно проверить, что он натворил.


Ссылка на GitHub: тык

@your_tech
#LLM

Сейчас произошел акт сравнения LLM с ризонингом.

На арене Deepseek, Алиса PRO и локально поднятая qwq с заданным системным промтом.

Запрос был про то, как можно извлечь фичи из поискового запроса.

Хуже всех оказалась Алиса. Она решила, что я делаю систему поиска и рассказала про то на каких признаках эти системы строятся. Совершенно бесполезная в рамках моего запроса информация.

На втором месте qwq. Она предложила только один способ: классификацию, но написала весь код реализации. Такой ответ может быть связан с системным промптом, в котором написано, что она помощник программиста и должна отвечать определенным образом с листингами.

Ну и Deepseek выдал большую телегу про то, что можно сделать, то есть именно то, что мне было интересно.

UPD пока писал, понял, что я Алисе не сказал пользоваться ризонингом и поиском. Запустил заново с этими атрибутами и ответ получился вполне хорошим. Не таким подробным, как у Deepseek, но коротко и по существу. Что в моем случае даже больше подходит под запрос, что выводит её в итоге на первое место.
#open_source #dmdslab

Представляю вам очередную итерацию моих попыток сделать универсальные DS утилки: DmDSLab

Залил это дело в пупи, так что без проблем можете тестить:
pip install DmDSLab


Там пока особо полезного ничего нет. Но лично мне сейчас интересны общие относительно удобные структуры данных и функции для чистки данных.

Планирую постепенно дополнять функциями репу и писать доки на wiki.

Буду рад, если кому-то окажется полезным и вдвойне рад обратной связи 😊
Библиотека дата-сайентиста | Data Science, Machine learning, анализ данных, машинное обучение
↔️ Как не потерять данные из-за пропусков: практические стратегии Пропущенные данные — распространённая проблема в реальных проектах. Причины могут быть разными: ошибки при сборе, повреждение файлов, неполные опросы и прочее. Представляем три продвинутых…
#classic

Попробовал "в бою" IterativeImputer и это немного разочаровательный опыт. На небольших данных я особого сравнения не делал, но это работало. А на больших (на самом деле не очень: в районе пары гигов) эта фигня за 7 часов не посчиталась. Тут, конечно, не без нюансов. Я не занимался особой настройкой, возможно, если более осознано заняться тонкой настройкой, то все отработало бы за более адекватное время, но что-то мне подсказывает, что заниматься тонкой настрой импутера и ждать не вразумительное количество времени без калбэков - это не то, что вы хотите при построении модели.

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

// Картинка из небольшого исследоавния со сравнением методов импутинга. Если получится, хочу тоже такое провести.
👍3
Замутил директ по минимальному прайсу. Не знаю зачем, но пусть будет)

Можете туда, например, писать интересующие Вас темы, которые я постараюсь разобрать.
😁2
🔥 Новый уровень CUDA в Python: знакомьтесь с `cuda.cccl`

Теперь не нужно писать кастомные CUDA-ядра или лезть в C++ — cuda.cccl позволяет собирать мощные алгоритмы на Python, используя CUB и Thrust под капотом.

Библиотека делится на:
parallel — высокоуровневые, компонуемые алгоритмы над массивами и итераторами.
cooperative — блок/варп-ориентированные примитивы для numba.cuda.

Почему быстрее:
Никакой лишней памяти — итераторы вместо массивов.
Один фьюзнутый kernel вместо четырёх.
Минимум overhead'а от Python.

Кому пригодится:
Тем, кто пишет кастомные алгоритмы над PyTorch или CuPy.
Тем, кто хочет тонкий контроль над CUDA без C++.
Тем, кто расширяет существующие библиотеки или разрабатывает свои.

Установка:
pip install cuda-cccl


👉 Подробнее: https://clc.to/4qFCRQ

Библиотека дата-сайентиста #свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
#classic

Открыл для себя сегодня новый пласт задач в ML. Вернее переоткрыл, так как ранее уже сталкивался и даже решал, но сейчас подхожу к вопросу более системно.

Итак, PU learning (positive-unlabeled). Это класс задач, в котором в наличии только положительно размеченные классы и куча неразмеченных, то есть таких, где могут быть, как положительные, так и отрицательные метки, но где какие непонятно.

Самое банальное, что можно сделать: это тупо разметить все, что не положительное отрицательным. По опыту такие модели в итоге не очень соответствуют реальности. Ещё вариант - взять случайную выборку и разметить её негативным классом, чтобы классов стало 3: положительный неизвестный и негативны, тогда это классика semi-supervised learning, но тоже сомнительное соответствие истине.

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

Например, я искал пользователей, которые владеют автомобилем. У меня есть достоверные единички и огромное число неразмеченных пользователей. Я сделал рандомную выборку неразмеченных, счел их ноликами и построил модель. Получилась отличная модель с отличными метриками. Случайных пользователей вне обучающей выборке отлично размечает, но есть нюанс...

Получилось, что только у 16% пользователей есть авто. Открываем социсследования, смотрим статистику. В РФ автомобиль есть у 30-50% граждан в зависимости от источника, что далеко от модельного распределения.

Эта тема точно пойдет ко мне в книгу, так что я пошел плотно исследовать её. Посты по теме еще будут 😉
Please open Telegram to view this post
VIEW IN TELEGRAM
УСКОРЕННЫЙ на 30% Python 3.14 уже можно ПОТРОГАТЬ

Все благодаря первому релиз-кандидату грядущего апдейта. С заметным ускорением и кучей оптимизаций под капотом.

Самые интересные улучшения:

- встроенный JIT (теперь по умолчанию для Windows и macOS);
- free-threaded Python — настоящая многопоточность без GIL;
- UUID генерятся до 40% быстрее;
- CLI-инструменты теперь с цветным выводом (да, наконец-то);

В продакшен проектах лучше не использовать, но вот в петах и для изучения новшеств — самое то. Финальный релиз состоится 7 октября.

@your_tech
🔥3
#open_source
#ml
#classic
#myproject@dm_projects_log

Я тут заново пересобрал либу. Очень заморочился с оформлением репы, как раньше не заморачивался. И ридми написал, и wiki замутил, все обмазано тестами и даже CICD пайплайн. Зачем я так заморочился? Наверное захотелось красоты, и в эту либу я верю примерно так же, как в HypEx.

Да от этого всего воняет нейронками, что не удивительно, ибо я их активно юзаю, но сам все ревьюю и много всего исправляю за нейронкой. Еще один косяк - почти все на русском. Меня штормило от русского к английскому, поэтому можно встретить и то и то. Забавно, что коммиты я пишу на английском, как и часть докстрингов с комментами, но все доки и описания на русском. Наверное мне просто так удобно, а пользоваться этим все равно вряд ли кто-то кроме меня будет.

Так вот... Зачем это все... Зачем вам может быть интересна эта версия либы? В целом, там в релизе все написано, но если коротко, то тут неплохая коллекция открытых данных с удобным инструментом для скачивания. Я их подбирал для одного своего конкретного исследования, но это именно отборные данные. Так что не брезгуйте юзать. Если есть желание, можно самостоятельно написать конфиг и выгрузить датасет с сайта. Правда работать будут только те, которые импортятся в Python.

P.S. Вообще есть более свежий релиз, но там я разбирался с ошибками сборки, обновлял README.md и упразднил автоматическую публикацию, так как с ней было слишком много проблем, а самому публиковать не сложно, так как есть написанный скрипт, так что функционально разницы нет.
👍2🔥2