Aspiring Data Science – Telegram
Aspiring Data Science
386 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
#ml #uncertainty #catboost #medicine #blood

Всё-таки иногда попадаются и качественные научные работы ML-тематики. Зацените строгость подхода, всё сделано по лучшим практикам.

"Code for the analysis can be found at https://github.com/oizin/glucose-data-driven-prediction.
Model validation

The dataset is randomly split into a 70% training (13 279 ICU admissions) and 30% test (5682 ICU admissions) sets. Sample splits are performed by ICU admission ID to avoid potential information leakage. We evaluate all models on the test set only after finalization of hyperparameter settings to ensure unbiased assessments of model generalizability. As the algorithms were computationally expensive to train, we perform hyperparameter tuning by randomly splitting the training set into 80% development and 20% validation sets.
"

Ну разве что до SHAP всё-таки не дотянули. А сама работа меня заинтересовала тем, что там сравнивается мультиквантильная регрессия с "регрессией с неопределённостью" :

We develop 2 ML approaches using the Catboost gradient boosting library.39 These models were chosen as they present alternative approaches to predicting both a point estimate and uncertainty quantification through probabilistic forecasting. The first is a Catboost regression model with dual estimation of the expected outcome and the standard deviation of the prediction distribution, the ‘uncertainty regression’ model.43 This form of estimation can be performed using the class CatBoostRegressor with the argument loss_function=“RMSEWithUncertainty” in the Python version of Catboost 2.4. The second model is a combination of quantile regressions with models for quantiles of 0.025, 0.5, and 0.975, the “quantile regression” model.

Квантили дали вот какое преимущество:

In order to have clinical utility, it is important that the model can detect hyperglycemia and hypoglycemia. Detection of hyperglycemia was only slightly worse than values in the ICU normal blood glucose range. However, similar to previous research, our point estimates were unable to detect hypoglycemia at 2-hour forecasts.35 However, by forecasting an interval, we increase the potential to flag circumstances in which hypoglycemia is a risk, with 41% of hypoglycemic events captured within the prediction intervals.

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


https://www.ncbi.nlm.nih.gov/pmc/articles/PMC8324237/
👍1
Forwarded from MOEX Derivatives
Рекордный объём торгов на Срочном рынке в июне с февраля 2022 года - 7 трлн руб.

Рекордное количество активных клиентов на Срочном рынке в июне - 140 тысяч

Рекордный среднедневной объём торгов вечными фьючерсами в июне - более 5.7 млрд руб.

Рекордный среднедневной объём торгов фьючерсом NASD в июне - более 1.2 млрд руб.

28 июня стартовали торги расчётными фьючерсами на золото в рублях (GL). Дневной объем торгов сегодня превысил уже 280 млн рублей.

29 июня стартовали торги фьючерсами на акции Совкомфлот (FLOT), Сегежа Групп (SGZH), Белуга Групп (BELU) и ВУШ Холдинг (WUSH).

3 июля стартовали торги опционами на валюты Si, Eu, CNY.
#ml #timeseries #transformers

↓ В моей практике был один случай, когда трансформер из торча очень элегантно решал соревнование по предсказанию продаж Сбермаркета. Автор скрипта - Павел Орлов. На сырых данных его решение давало почти такой же по МЛ качеству результат, как мой вдесятеро больший по коду скрипт со сложным FE. В том соревновании я, кстати, с изумлением узнал, что НЕЛЬЗЯ просто так взять и использовать натренированную модельку классификации, если в test пропорции классов отличаются от train. Нельзя. Вы скажете, но как же, ведь на то и обучение, чтобы по признакам научиться угадывать таргет, а вовсе не по какой-то там пропорции примеров в трейне. Нет. При достаточно отличающемся балансе в тест прогнозы будут смещены настолько, что их придётся пересчитывать по спецформуле. Этому, кстати, не учат нигде ни в книгах, ни на курсах. По кр мере, мне не попадалось. Уникальный контент для подписчиков моего блога )
👍1
#ml #timeseries #robustness

Используете ли Вы в задачах классификации рядов какие-то метрики робастности предсказаний? Одно дело, скажем, высокая точность или бриер лосс, но интуитивно неприятно, если прогноз на последовательных точках ряда часто меняется, или вероятности резко скачут туда-сюда от точки к точке. Столкнулся с этим на финансовых рядах. Думаю трекать что-то вроде preds.diff().abs().mean() для предсказаний и самих верных меток, как дополнительную меру качества моделек для TS.

Сразу опять-таки приходит вопрос, а почему устойчивость прогнозов по изменениям входов вообще никак не учитывается в МЛ? Да, можно посчитать важности признаков, но они по большей части считаются вовсе не небольшим варьированием входов. А ведь эта дополнительная мера качества могла бы помочь сделать выбор, скажем, между 2 коррелированными фичами. Обе имеют примерно одинаковое влияние (или одиночные ML метрики на таргет), но по одной прогнозы скачут сильнее. Тогда оставляем вторую. Может, я просто не знаю, и где-то это уже учитывается?
#mlops #mlflow

Продолжаю изучать mlflow. Очень понравилась, что по обученной модели можно быстро получить список метрик и значимостей признаков. А ещё можно даже настроить критерии приёмки модели в бой, абсолютные (точность не менее X%) и относительные (точность не менее Y% лучше чем DummyClassifier). Ложка дёгтя в том, что указанный в доке вызов mlflow.models.list_evaluators() не работает.

https://mlflow.org/docs/latest/models.html#model-validation
#ml #feedback #trubrics #monitoring

Впервые вижу. Можно централизованно собирать обратную связь по вашим МЛ моделям. Развёрнутым, к примеру, в streamlit.`

Why should you monitor usage of your models?
🚨 Identify bugs - users are constantly running inference on your models, and may be more likely to find bugs than your ML monitoring system
🧑‍💻 Fine tune - users often hold domain knowledge that can be useful to fine tune models
👥 Align - identifying user preferences will help you to align models to your users

https://github.com/trubrics/trubrics-sdk
Forwarded from Neural Info
I've finally finished reading the paper called "A Cookbook of Self-Supervised Learning".

What do I want to say? It's a really good paper to start learning SSL. It has a good structure and as you read it, you start to understand how SSL works from the inside.

It has such important parts like:
1. Problem definitions.
2. Possible applications.
3. Existing approaches and their advantages / disadvantages.
4. Implementation details.
5. Training / evaluation details.
6. Existing bottlenecks.

And many other helpful subtopics with many links to other papers on SSL methods in different areas of AI.

I'd recommend this paper to anyone who wants to start learning SSL, because I think this area will be, or already is, an essential part of AI, and it's going to grow really fast.
#math #fun

Народ, подпишитесь на математический блог в ВК, больше тонких шуток вам в ленту )

https://vk.com/secxsquad
1
#mlops #tracking #mlflow

Несколько классных трюков для продуктивной работы с mlflow. Мне оч понравилась встройка кастомных веб-страничек и дочерние эксперименты (UI с прошлого года поддерживает многоуровневость).

По идее, в МЛ эксперимент может равняться фичерсету+таргету, а запуски (runs) могут соответствовать разным конвейерам обработки (с/без FS,RS,OR,ES,HPT).

Дочерние запуски нужны, если хотим логировать промежуточные модели, обученные на фолдах CV. Или если хотим на одних и тех же данных/конвейере сравнить несколько моделей разных классов (gbdt, ann). Или если включено HPT, тогда каждый запуск порождает N субмоделей с разными гиперпараметрами.

К сожалению, вложенными могут быть только запуски, но не эксперименты, хотя это вроде бы на поверхности. У нас же в рамках одного проекта может быть несколько датасетов, несколько задач, у каждой много таргетов. (+Желательны свои уровни допуска разным юзерам, но об этом умолчим). Сейчас пользователям MLFlow приходится, видимо, эту иерархию разворачивать в плоские структуры. Или как-то лепить в тэги.

https://towardsdatascience.com/5-tips-for-mlflow-experiment-tracking-c70ae117b03f
Prepping tables for machine learning

#varoquaux #inria #ml #sklearn #missingvalues #imputing #perezlebel #skrub #minhashencoder #gapencoder #datetimeencoder #tablevectorizer #fuzzy_join

Общие советы, как учиться на табличных данных в экосистеме sklearn.

Оказывается, заполнение пропусков лучше всего нативное от деревянных моделей. Потом уже идут более гораздо затратные вычислительно условные импутации. Если у вас нейросеть, используйте в конвейере add_indicator=True, чтобы обработать возможные случаи, когда пропуски не случайны.

По дефолту советуют HistGradientBoosting.
Если же нет, рекомендуют QuantileTransformer НА ПРИЗНАКАХ. Такое я чёт впервые встречаю, обычно это делают на таргете... хм... +IterativeImputer (хотя только что говорили про его затратность).

Гаель предлагает как стандарт весь препроцессинг отдать трансформеру tablevectorizer из либы skrub, который знает, как обрабатывать фичи времени, строки, категории.

Для категориальных столбцов у них реализована интересная разновидность one hot, основанная на строковой близости меток. Например, Police officer I и Police officer IV попадут в одну корзину вместо разных. Семантическая близость, к сожалению, (пока?) не учитывается.

Ещё в skrub для обогащения данных из справочных таблиц есть джойнеры, которые, как я понял, заменяют featuretools по сути. Но если в featuretools чёрт ногу сломит, тут вроде попроще. Очевидное преимущество skrub - fuzzy_join (всё по той же текстовой схожести).

Что интересно, есть несколько бэкендов - pandas, polars.

https://www.youtube.com/watch?v=I4Sksd93bZ4
#it

Читаю новость: В мае глава IBM Арвинд Кришна (Arvind Krishna)...
Блять, ну вы серьёзно? Почему главой (американской) ИТ-компании должен быть индус, мне кто-то может объяснить??
🤔2
#agronomy

"Обучаемый машинный интеллект анализирует внешний вид яблок и даёт команду на съём только тогда, если фрукт необходимой спелости и без повреждений. Работа платформы на опытном хозяйстве показала высочайшую избирательную способность системы. Она очень сильно сокращает затраты на сбор урожая, позволяя за каждый проход выбирать плоды только лучшего качества. Обычный человек с улицы на такое не способен. А специально обученные сборщики урожая — это редкое явление."

https://youtu.be/nYl_1TMVwjw

https://3dnews.ru/1089519/iskusstvenniy-intellekt-nauchili-sobirat-spelie-yabloki-roem-dronov-na-privyazi
#trading #backtesting #ml #chan

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

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

В данном случае, периоды этих 2 средних, ну ещё отступы и какие-нибудь дополнительные параметры, добавляются в обучающий набор (содержащий рыночные данные и фундаменталку), а таргетом выступет кэф Шарпа от применения этих торговых параметров на сл месяц.

Мне лично в повышенную эффективность такого МЛ слабо верится, т.к. это по сути всё равно предсказание цены, только косвенно, да ещё на сниженном на порядок датасете. Хотя с другой стороны, на этом подмножестве может меняться расклад влияющих факторов, модель в теории может не распыляться на другие ситуации и лучше понять то что ей дали. Интуитивно неясно, что перевесит, но это всё можно замерить и выяснить.

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

Конечно, это сильно снижает операционное пространство по сравнению с 1м подходом, т.к. МЛ исходы становится ограниченны конкретной торговой политикой. Но я придумал комбайн, как обойти это ограничение. Вторая модель! Пусть она даёт, как и обычно, прогнозы рынка и/или инструмента, и уже эти прогнозы будут считаться частью управляющий переменных. Тогда не надо будет ждать, условно говоря, пересечения 2 SMA, всегда будет некий прогноз и решающие пороги, по которым можно действовать. Такой своеобразный Double ML.

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


https://www.youtube.com/watch?v=sXYW0KgCKbE
👍1
#profiling #optimisation #python #speed #sklearn #bollocks

Эскалёрновские волшебники-программисты в деле. Столкнулся с неприемлемо низкой скоростью построения отчёта классификационных метрик на 8M примеров. 15 секунд, ну куда это годится? Проверил кирпичики расчётов по нисходящей. Матрица ошибок считается за полторы секунды. Это чем же надо угандошить процессор, чтобы простое деление пары чисел и упаковка в словарь выполнялись больше 10 секунд и делали расчёты в ДЕСЯТЬ раз длиннее? Такое и специально не сразу сделаешь.
😁1
#optimisation #sklearn #python #numba #codegems

Итак, то, что у кудесников машинного обучения считается 15 СЕКУНД, на самом деле должно занимать 50 МИЛЛИСЕКУНД. Но зато они сотни строк качественного кода написали, наверное, покрытого тестами, и прочим. Почему я считаю это важным? Да потому что мне предстоит обсчитывать сотни моделей, и оказалось, что качество обучения (classification report, roc auc, калибрация по всему сету + в разбивке по группам) на test set оценивается для 1 модели.. 5 минут, и основным тормозом был classification_report. Мне вовсе не улыбается платить за кластер, ожидающий сотни и тысячи раз по 5 минут. Спасибо, что у нас хотя бы есть numpy и numba. Без нумбы, кстати, этот код на языке программирования, созданном "гениальным" Ван Россумом, выполняется даже не знаю сколько, я прождал минут 5-10 и забил.

Скорее всего, напрасная трата времени, но всё же запостил issue. Как обычно, похерят, видимо.
👍1😁1