Dmatryusофрения
42 subscribers
291 photos
10 videos
15 files
148 links
Пишу о книгах, лидерстве, технологиях, opensource, своих проектах и наверное чем-то ещё. Ну и репосты IT приколямб.
Download Telegram
#fun

Первые крашенные миньки.
🔥4
Читаю книгу про визуализацию данных... Большую часть из того, что уже прочитал, читалась с телефона. Сейчас наконец добрался до бумажной... И насколько же она в таком формате лучше идет. Графики красивые и на своих местах, заголовки цветастые. Белые страницы с телефона вообще неприятно читать, а не белые искажают цвета.

В общем, мой вывод такой: если в книге картинки и цвет - это важно, то бумага определённо лучше телефона.

Интересно еще попробовать электронную книгу с цветным e-ink, но не насколько, чтобы тратить на это 20+к, да и бумагу я все же люблю больше.
Забавно, что каждый год исследования Data Vizualization Society показывает, что самым популярным инструментом визуализации является Excel 🤪
Please open Telegram to view this post
VIEW IN TELEGRAM
😁2
#classic #ml

Сегодня буду рассказывать о том, что такое предвзятостьo градиентов, и как эту проблему решает CatBoost.

Предвзятость градиентов — это серьезная проблема в градиентном бустинге, которая приводит к переобучению модели. Суть проблемы в том, что градиенты, используемые на каждом шаге обучения, оцениваются на тех же данных, на которых строится текущая модель. Это создает смещение в распределении градиентов и ухудшает качество модели.

Классические подходы (XGBoost, LightGBM) используют двухэтапный процесс:
1. Выбор структуры дерева
2. Расчет значений в листьях

При этом значения в листьях рассчитываются как приближения градиентов или шагов Ньютона.

CatBoost предлагает принципиально иной метод борьбы с предвзятостью:

1. Отдельные модели для каждого примера:
- Для каждого обучающего примера создается отдельная модель
- Эти модели никогда не обновляются с помощью градиента этого примера
- Позволяет получить несмещенные оценки градиентов

2. Использование случайных перестановок:
- Данные случайным образом переставляются несколько раз
- Для каждой перестановки строятся отдельные модели
- Это повышает устойчивость алгоритма

3. Оптимизация вычислений:
- Все модели используют одинаковую структуру деревьев
- Используется эффективный алгоритм подсчета приближений
- Сокращается количество необходимых вычислений


Алгоритм CatBoost:
1. Создает несколько случайных перестановок данных
2. Для каждой перестановки:
- Строит отдельные модели без использования текущего примера
- Вычисляет градиенты на основе этих моделей
- Использует их для оценки результирующего дерева


Преимущества подхода CatBoost

1. Снижение переобучения:
- Несмещенные оценки градиентов
- Использование нескольких перестановок
- Более стабильная работа на разных данных

2. Эффективность:
- Оптимизированное хранение данных
- Параллельные вычисления
- Разумный баланс между качеством и скоростью

3. Универсальность:
- Работает с разными типами данных
- Адаптируется под различные задачи
- Предотвращает переобучение на сложных наборах данных

P.S. Схему рисовал сам для вас 😊
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2🤝1
#hypex

Новый релиз!
https://github.com/sb-ai-lab/HypEx/releases/tag/v1.0.2

Справедливости ради скорость АА теста совсем не только я ускорял, но и Ваня с Настей. Я больше ревьюил, замерял, рефакторил, ну и код заливал.

Но гайз, если вы пользуетесь нашей либой...

😜 Там ускорение в 2000 раз на 2 млн. записей
Долгие процессы стали гораздо более удобными, благодаря появлению прогресс баров.
👩‍💻Да и смотреть на результаты теперь приятнее благодаря форматированию в резюме
🔫Не говоря уже про исправленные ошибки

В общем, все бегом обновляться 😊
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2
#ml

Поговорим сегодня про имбалансное обучение.

Думаю, что все знакомы с проблемой: отношение 1 к 0 1/70, мажоритарный класс ломает эвристики, ломает метрики... В общем, к этому всему нужно особое внимание и особые подходы.

В общих чертах, что можно делать:
1. Оверсемплить
2. Андерсемплить
3. Комбинировать овер и андерсэмплинг
4. Использовать специальные модели со встроенным в алгоритм сэмплированием
5. Использовать метрики устойчивые к дисбалансу и дополнительные инструменты анализа
6. Настраивать лосс-функции моделей, чтобы она лучше училась на миноритарном классе.

В дальнейшем планирую больше раскрывать тему и рассказывать о практике применения различных приемов.
🤔2
Полезное
🤝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