Получи случайную криптовалюту за регистрацию!

Data Science Private Sharing

Логотип телеграм канала @ds_private_sharing — Data Science Private Sharing D
Логотип телеграм канала @ds_private_sharing — Data Science Private Sharing
Адрес канала: @ds_private_sharing
Категории: Технологии
Язык: Русский
Количество подписчиков: 956
Описание канала:

Советы и лайфхаки для соревновательного (в основном) дата сайнса, о которых не расскажут на курсах.
Если есть идеи, которыми хотите поделиться, пишите -> @slivka_83
Tags:
#EDA
#Evaluation
#Models
#TimeSeries
#Train
#Preprocessing
#Valid

Рейтинги и Отзывы

3.00

2 отзыва

Оценить канал ds_private_sharing и оставить отзыв — могут только зарегестрированные пользователи. Все отзывы проходят модерацию.

5 звезд

1

4 звезд

0

3 звезд

0

2 звезд

0

1 звезд

1


Последние сообщения 2

2022-09-10 13:42:42
#Tip26 #EDA

Partial dependence plots (PDP) — это график, который позволяет понять, как различные значения конкретной фичи влияют на предсказания модели.
Под капотом PDP меняет исходные значения целевой фичи и смотрит как изменяются предсказания модели.
По сути PDP показывает ожидаемое среднее значение таргета при различных значения интересующей нас фичи.

Строятся PDP в двух вариантах - для одной фичи и для пары фичей. Обычно для графика выбирают наиболее значимые для модели фичи.

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

PDP можно построить либо с помощью скалерна (но на вход принимаются только родные для скалерна модели):
fig, ax = plt.subplots(figsize=(18.5,4.5))
features = ['bahrooms','sqf_living','yr_buil']
PartialDependenceDisplay.from_estimator(clf, X, features, ax=ax);

Либо с помощью сторонних пакетов, например PDPbox (https://github.com/SauceCat/PDPbox):
features_to_plot = ['sqf_living','bahrooms']
inter1 = pdp.pdp_interact(model=model, dataset=X, model_features=fcols, features=features_to_plot)
pdp.pdp_interact_plot(pdp_interact_out=inter1, feature_names=features_to_plot, plot_type='contour')
plt.show()

З.Ы. У PDPbox есть еще много других интересных графиков.
871 views10:42
Открыть/Комментировать
2022-08-31 03:50:06
#Tip25 #TimeSeries #Valid

TimeSeriesSplit - известный способ разбиения временных данных для кросс-валидации из скалерна.
Метод разбиения, который в нем реализован называется Expanding window.

Но наука о временных рядах знает гораздо больше способов разбить временные данные. Основных два:
- Expanding Window
- Sliding Window

А дальше включается воображение:
- Нахлесты между периодами
- Пробел между трейном/валидом/тестом
- Способ выделения тестовой выборки

Как уже было сказано, Expanding Window можно найти в скалерне. Для Sliding Window и других ухищрений нужно либо писать свой код (основные ML-библиотеки принимают готовые сплиты в виде индексов строк), либо поискать на гитхабе:
https://github.com/WenjieZ/TSCV
https://github.com/AaronOS0/Time-series-Cross-validation
https://github.com/marmurar/jano
и прочие...
943 viewsedited  00:50
Открыть/Комментировать
2022-08-27 01:43:37
#Tip24 #Train

Для честной проверки все методы валидации включают в себя тестовую выборку. Тест при этом никак не используется для обучения. Но в нем может содержаться полезная информация.
В самом простом случаи можете просто объединить трейн и тест и обучить модель заново с лучшими гипер-праметрами. Но они были подобраны для другого датасета, и могут быть не оптимальными для нового.

Поэтому для градиентного бустинга придумали такой фокус:
1. Разбиваете датасет на трейн и тест.
2. Обучаете модель и подбираете наилучшие гипер-параметры. Проверяете модель на тесте.
3. Объединяете трейн и тест.
4. Заново обучаете модель на полном датасете с найденными гиперпарамтрами, но только увеличиваете в них количество итераций на % размера теста.
Т.е. если у вас получилось 100 итераций, а тест составляет 20% от размера трейна, то для нового обучения выставляете кол-во итераций в 120.
5. Делаете предсказание с новой моделью. При этом протестировать ее сможете только на лидерборде.

Данный фокус не имеет под собой научного обоснования, но иногда докидывает...
1.1K viewsedited  22:43
Открыть/Комментировать
2022-08-19 19:52:55
#Tip23 #Preprocessing

pipe - это метод реализации паплайна в датафреймах пандас посредством последовательной цепочки преобразований.
З.Ы. Не путать с Pipeline из скалерна - это разные вещи.

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

def normilize(df):
...
return df

def fill_null(df, method):
...
return df

def parse_time(df):
...
return df

new_df = (df
.pipe(normilize)
.pipe(fill_null, method='median')
.pipe(parse_time)
)
1.1K viewsedited  16:52
Открыть/Комментировать
2022-08-15 01:27:34
#Tip22 #Evaluation
Object Importance - это метод, который позволяет определить, насколько каждая запись тренировочного датасета влияет на оптимизируемую метрику.
А значит, он позволяет найти и избавится от бесполезных записей (шум, выбросы и т.д.).

Метод реализован в библиотеке Catboost:
train_pool = Pool(X_train, y_train)
val_pool = Pool(X_val, y_val)

cb = CatBoost({'eval_metric': 'RMSE'})
cb.fit(train_pool)

indices, scores = cb.get_object_importance(
val_pool,
train_pool,
importance_values_sign='Positive' # Negative, All
)
Отрицательные значения скора означают, что запись уменьшает значение метрики, а положительные - увеличивают.
В зависимости от оптимизируемой вами метрики нужно обратить внимание либо на отрицательные, либо на положительные значения.

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

З.Ы. В параметре update_method доступны три алгоритма расчета - можете поэксперементировать.
1.2K views22:27
Открыть/Комментировать
2022-08-06 18:51:54
#Tip21 #Train

Планировщик (scheduler) в нейронных сетях довольно обыденная вещь - он позволяет уменьшать шаг обучения (learniтп rate) с каждой эпохой (ну или раз в несколько эпох).

В бустингах такая вещь тоже встречается, но не часто ее увидишь.
Например, в LGBM динамический learning rate можно реализовать так:

model = lgb.train(
params,
train_df,
learning_rates = lambda iter: 0.5 * (0.85 ** iter),
valid_sets = eval_df)
1.4K viewsedited  15:51
Открыть/Комментировать
2022-07-23 14:12:57
#Tip20 #Train
Псевдо-лейблинг (pseudo-labeling) это метод обучения на не размеченных данных.

В соревнованиях он может использоваться так:
1. Обучаете модель на трейне
2. Делаете предсказание на тесте
3. Объединяете трейн+тест и заново обучаете модель. И тут супер важно валидироваться только на данных из трейна, поскольку в тесте будут и ошибочно размеченные данные.
4. Заново предсказать тест.

Очевидно, что при таком подходе модель увидит больше данных и закономерностей. А чем больше (хороших) данных тем точнее модель.
1.2K viewsedited  11:12
Открыть/Комментировать
2022-06-08 12:28:03
#Tip19 #Evaluation
Когда вы делаете предсказание для задачи классификации, то, помимо метрики, также визуально оцениваете качество по матрице ошибок.
А когда делаете регрессию, куда смотреть?

Тут я строю два графика:
Первый - самый очевидный - просто отложить на двух осях фактические и предсказанные значения.
Второй - подсмотрел у Дьконова - изменить координаты на True-Pred и True+Pred. По сути, тот же вариант что и первый, но растянут по одной оси и сужен по второй. Позволяет посмотреть на график под другим углом. Говорят иногда бывает полезно.
1.0K views09:28
Открыть/Комментировать
2022-05-14 14:17:23
#Tip18 #TimeSeries
Интересный пример подмены задачи.
Допустим Вам дана задача регрессия на временных рядах.
Вы можете решать ее напрямую. А можете предсказывать не абсолютные значения, а прирост значения относительно предыдущего.
Из очевидных преимуществ - меньше разброс значений целевой переменной, а значит меньше выбросов - а модели выбросы не любят :)
866 viewsedited  11:17
Открыть/Комментировать
2022-05-01 03:16:13
#Tip17 #Models
Перед построением какой-ниубдь сложной модели рекомендуется сначала построить простой бейзлайн, чтобы было с чем сравнивать повышение качества. Но какую модель выбрать? А ничего выбирать не надо - есть специальные пакеты, которые сразу строят кучу моделей.

Я знаю два таких:
- PyCaret - https://github.com/pycaret/pycaret
- Lazy Predict - https://github.com/shankarpandala/lazypredict

Но второй требует более старой версии пандаса, да и вообще похоже уже не развивается.
А вот первый довольно интересный (скрин с него). В документации вы найдете туториалы.
790 views00:16
Открыть/Комментировать