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
#trading #scalping #erema #mlops #experimenting #mlflow

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

Иногда при работе над очередным проектом думаешь: а что лучше, отдать работу с категорийкой на откуп бустингу, или попробовать что-то из category_encoders? И вообще, что считать категориальными факторами, то, что имеет тип данных categorical/object, или что имеет мало уникальных значений? А "мало" - это мало вообще, или по отношению к конкретному типу данных и диапазону? А может, вообще все непрерывные побить на с помощью KBinsDiscretizer, что тогда будет, лучше или хуже, и насколько? Или может, вообще удалить категорийку, вдруг будет не сильно хуже, но быстрее?

А пропуски как обрабатывать? А всё это вместе взятое сколько комбинаций составит?

Раннюю остановку использовать или нет, и когда?

Какая модель в итоге лучше сработает, бустинг или нейронка? Блин, а нейронке-то напрямую нельзя подать категориальные фичи, надо выкручиваться.

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

А если потом модельки от разных в групп в ансамбль объединить, лучше станет, и насколько?

А вообще, какие таргеты мы можем лучше предсказывать, что, если мы можем немного варьировать их, к примеру, предсказываем продажи на неделю или 2 или 3 вперёд. Где выше прогннозируемость и при каких условия, на чём сконцентрировать усилия? Если сравнивать в лоб, на препроцессинг уйдёт тонна времени, тут нужно умное кэширование.

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

А как всё это грамотно отобразить, чтобы не потеряться в тысячах комбинаций? А как при этом работать в команде?

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

Трейдинговый проект #erema меня просто ошеломлял количеством факторов, возможных таргетов и ML опций, которые хотелось проверить. Так что после 2 месяцев работы я получил процедуры, которые на базе mlflow как раз позволяют разбить всё многообразие опций на блоки и проверить их по отдельности.
#astronomy

"В интервью агентству Press Trust of India сотрудник ISRO Дарукеша Б.Х.М. (Darukesha B. H. M.) отметил, что полученные данные оказались полной неожиданностью для специалистов. «Мы все считали, что температура на поверхности может составлять от 20 до 30 градусов по Цельсию, но она составляет 70 градусов по Цельсию. Это на удивление выше, чем мы ожидали», — заявил он.

Индийский луноход «Прагьян» прилунился 23 августа со спускаемым модулем миссии «Чандраян-3» в районе малоизученного Южного полюса, где с его помощью будут проводиться исследования грунта и рельефа Луны, а также поиски следов тектонической активности. Предполагается, что он проработает здесь лунные сутки (около двух земных недель)."

https://3dnews.ru/1092142/hot-moon
#featureengineering #dyakonov #pzad

Понравилось:

Count Encoding+шум;

Киллер фича кодирования категориальных признаков другими категориальными, через crosstab+SVD;

Target Encoding как форма стекинга;

Target Encoding+мультипликативный шум;

"Экспертное кодирование";

Category Embeddings;

Расстояние (ядро) до какого-то "идеального"/"нормального" объекта как новая фича;

Линейная модель на признаках нелинейной модели (например, сплитах дерева, random forest-based feature induction);

Кодирование M циклических признаков (вместо последовательных возрастающих целочисленных номеров) в 2 новых вектора x,y как t=np.linspace(0,2*np.pi, M+1), x=np.sin(t), y=np.cos(t); -надо бы замутить какой-то CyclicEncoder, кстати.

https://www.youtube.com/watch?v=bTusKjEa4KE
#ds #molnar

So true )

"... famous quote by Abraham Maslow:

If the only tool you have is a hammer, it is tempting to treat everything as if it were a nail.

The quote usually comes with a negative interpretation: You are an idiot because the next problem will be a screw and you will use a hammer.

But there’s a positive side: Having a hammer allows you to become great at detecting nails and even transforming problems into nail-shaped problems.

What if the hammer is supervised machine learning?

Seeing predictions everywhere

I wrote in Modeling Mindsets about supervised learning:

Modeling requires translation into a prediction problem, strict evaluation with ground truth, and optimization.

A change for me was that now I see many, many problems as prediction or learning problems.

Prediction means inferring unavailable data from available data.

The prediction definition matches many situations and shapes how I see the world.

For example, I have become critical of TV pundits who make predictions with high confidence. Usually with little repercussions when predictions turn out to be wrong. Often you can’t evaluate their predictions anyway because they were too vague in the first place.

In general, I see professions more favorable when they have a feedback loop: Does a person who makes a decision (based on a prediction) actually see the ground truth later on? For example, I have more trust in surgeons who follow up with their patients and therefore see the results of their decision to operate.

When I read about analysis or theories, I ask myself: If these are true, what are they predicting?"

https://mindfulmodeler.substack.com/p/machine-learning-changed-how-i-see
Ishanu Chattopadhyay, Hod Lipso
Data smashing: uncovering lurking order in data

"From automatic speech recognition to discovering unusual stars, underlying almost all automated discovery tasks is the ability to compare and contrast data streams with each other, to identify connections and spot outliers. Despite the prevalence of data, however, automated methods are not keeping pace. A key bottleneck is that most data comparison algorithms today rely on a human expert to specify what ‘features’ of the data are relevant for comparison.

Here, we propose a new principle for estimating the similarity between the sources of arbitrary data streams, using neither domain knowledge nor learn ing. We demonstrate the application of this principle to the analysis of data from a number of real-world challenging problems, including the disambigua tion of electro-encephalograph patterns pertaining to epileptic seizures, detection of anomalous cardiac activity from heart sound recordings and classi fication of astronomical objects from raw photometry. In all these cases and without access to any domain knowledge, we demonstrate performance on a par with the accuracy achieved by specialized algorithms and heuristics devised by domain experts. We suggest that data smashing principles may open the door to understanding increasingly complex observations, especially when experts do not know what to look for."

https://royalsocietypublishing.org/doi/pdf/10.1098/rsif.2014.0826
#google #gcp #tpu

"На очередной ежегодной конференции Cloud Next компания Google Cloud объявила о выпуске пятого поколения своих тензорных процессоров (TPU) для обучения нейросетей — TPU v5e. Google анонсировала предыдущую, четвертую версию этих процессоров в 2021 году, но разработчикам они стали доступны только в 2022 году.

Компания не экономила на технических характеристиках TPU v5e в угоду рентабельности. Кластеры могут включать до 256 чипов TPU v5e, объединённых высокоскоростным интерконнектом с совокупной пропускной способностью более 400 Тбит/с. Производительность такой платформы составляет 100 Попс (Петаопс) в INT8-вычислениях.

"Мы предоставляем нашим клиентам возможность легко масштабировать свои модели искусственного интеллекта за пределы физических границ одного модуля TPU или одного кластера TPU. Другими словами, одна большая рабочая нагрузка искусственного интеллекта теперь может распределяться на несколько физических кластеров TPU, масштабируясь буквально до десятков тысяч чипов."

В дополнение к анонсу нового поколения TPU компания Google также объявила, что в следующем месяце сделает общедоступными для разработчиков виртуальные кластеры A3, оснащённые специализированными графическими процессорами Nvidia H100."

https://3dnews.ru/1092295/google-cloud-predstavila-pyatoe-pokolenie-svoih-tenzornih-protsessorov-dlya-obucheniya-ii
Балую я вас, ох, балую. На фоне пустых рассуждений о силе, о соле, о славе в DS-чатах, на фоне рекламно-маркетинговых набросов в духе «йоу йоу мы самые-самые» от разного рода «Лабораторий», на фоне сторителлинга и размышлений о температуре воды в Темзе и красоте местных женщин в каналах «звезд» у меня строгий, плотный, pure контент, ничего лишнего. Матаппарат, прикладной кейс, реализация метода и решения в программном коде. Увидел – купил – бери в работу, пользуйся. Подобно Пушкину – солнцу русской поззии, я, как солнце российского Data Science, согреваю вас лучами просвещения в эти последние прохладные дни уходящего лета, попивая свежий черный чай и перелистывая страницы сборника стихов Бальмонта, мирно соседствующего с книжкой Андерсона по временным рядам.
😁4
#ateev #fantasy #horror #literature #cityofshadows

"И вот мы с Воробьевым и моим помощником Николаем Беловым отправились в эту деревушку. Конечно, нашей целью были отнюдь не поиски редкой бабочки, а обнаружение реликтовых биообъектов, или, проще говоря, «живых мертвецов». Прибыли мы туда, разбили лагерь неподалеку от деревни и занялись исследованиями. Почти сразу же отыскали кладбище. Приборы зафиксировали несколько мест, где лежали предполагаемые объекты. Решили раскопать один из них. Остановились на могиле упомянутой выше девицы Суриной. К тому времени я посвятил нашего добровольного помощника Воробьева в истинные цели экспедиции. Июльским днем прибыли мы на кладбище и принялись за раскопки. До гроба докопались довольно быстро. Вскрыли его. Я ожидал увидеть нечто подобное, однако, по чести говоря, несколько опешил. В гробу лежало существо, более всего похожее на мумию. Обтянутый серо-коричневой кожей скелет, лицо – скорее маска, но, главное, имелись глаза. В них даже отражался свет. Ассистент мой, да и Воробьев несколько струхнули. Действительно, мертвое тело производило отталкивающее впечатление. Но они взяли себя в руки и принялись исследовать тело, а именно измерять его температуру. В этот момент я осознал, что за нами наблюдают, причем, видимо, с самого прибытия. Вдруг, откуда ни возьмись, появился милиционер. Довольно нелепая в подобной глуши фигура. Строгим тоном он принялся расспрашивать нас: кто мы такие, откуда сюда явились и чем занимаемся. Вначале, каюсь, я принял это существо за подлинного стража порядка, однако очень быстро понял: перед нами отнюдь не представитель органов, а оборотень. Выдали его глаза. Это были глаза древнего старика. С молодым лицом милиционера они никак не вязались. Однако я показал ему документы, разрешающие нашу деятельность, и потребовал предъявить свои. Но мнимый страж порядка ничего предъявлять не стал, а вместо этого осмотрел место раскопок и констатировал: «Дарью раскопали». Тут и вовсе стало ясным, кто перед нами. Лжемилиционер после этого удалился, на прощанье заметив: «Сегодня Дарья сама к вам в гости придет». Мой ассистент попробовал задержать оборотня, но это не удалось. Однако я понял, хозяева здешних мест просто так нас не отпустят."
#ensembling #optimization #scipy

"Machine learning practitioners rely on ensembles to improve the performance of their model. One of the methods used for ensembling multiple models is to calculate the weighted average of their predictions. The problem that rises is how to find the weights that will give us the best ensemble. In this post, I will explain how to optimize those weights using scipy."

https://guillaume-martin.github.io/average-ensemble-optimization.html
#kaggle #tricks #ml #titericz #featureengineering

Before FE, calculate corr coeff of raw features & the target; наверное, лучше всё-таки брать половину сета, чтобы не оверфитить совсем уж. С оценкой корреляций (нелинейных) и "интеракций", кстати, очень может помочь Диоген.

Combine numerical features: log(A)*log(B), A*exp(B), Rank(A)+Rank(B), sin(A)+cos(B) etc;

Use binary flag for NAs;

Do N-way nested OOF Target Encoding;

Try aggregations of one feature by another;

Try extensive target transformations (TT), as y^1/2, y^1/4,log(10+y), 10/y etc;

Try several clustering algos to create new categorical or numerical features based on cluster IDs or distances;

Trees leaves indices as weak features to the linear models (incl. factorization machines);

LOFO feature selection;

Adversarial Validation to tell train apart from test;


https://www.youtube.com/watch?v=RtqtM1UJfZc
🔥1
#trading #erema

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

Также добавил простые ансамбли (4 вида средних).

Добавил отдельный отчёт МЛ-метрик в разбивке по дням (в отличие от всего test set).

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

Некоторые вещи успростил, т.к.
1) mlflow плохо работает с большой вложенностью (иногда вылезают глюки, плюс нет кнопки expand all, а почти все питоновские веб-сервера тормозят из-за отстутствия client-side скриптов
2) время для перебора опций конвейреа требуется на текущих объёмах (десятки и сотни миллионов строк) простно неподъёмное. зря я на это замахнулся, это применимо тоько для небольших датасетов, или для командной работы в компаниях где много железа

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

У меня сейчас выбран 1 горизонт, и на нём есть 6 таргетов (классификации). Также есть 3 рынка, на каждом 1-2 десятка инструментов.
Фичерсет один, состоит из 5 групп признаков.

Попытаюсь с минимальной креативностью и максимально быстро проскорить, а где же лучшая предсказуемость (таргет, рынок, инструмент). Никаких опций конвейера, только FS. ES=True, 2 бустинга с обучением на GPU. Миссинги и категорийку на откуп моделям. Никакого CV, на это не хватит времени. SHAP-важность признаков не оценивать, только нативную. На HPT, конечно же, времени опять нет.

Хочется получить что-то минимально работающее уже, а то в стремлении к совершенству я потратил 2 месяца непонятно на что (

Пока модельки будут обучаться, попробую независимо улучшить торговую политику на этих таргетах.
1
#featureselection #rfe

Понравилась идея recursive feature elimination, решил добавить этот метод в сравнение. Идея с фиксированным количеством фичей, как в RFE, мне кажется странной. Конечно же, оптимальное число можно определить только на кросс-валидации. И тут sklearn опять обделался. RFECV не работает с датафреймами и тем более категориальными фичам. В этом фреймворке вообще хоть что-то есть для реальной жизни и рабочих нагрузок?

Бюджета времени нет. Девелоперам предлагается, видимо, на глазок манипулировать параметром min_features_to_select, или просто забить на SLA. Ну а как реализован поиск оптимального количества признаков? Лезем в код:

# Build an RFE object, which will evaluate and score each possible
# feature count, down to self.min_features_to_select

Полный перебор! А это ТОЧНО оптимальный метод, когда мы оптимизируем функцию от 1 переменной с 1 глобальным экстремумом? Нет, серьёзно, блять, в 2023-м? Да какой нам искусственный интеллект. У нас же "натурального" нету. Пишу свой RFECV, короче.
😁1
#music #wynardtage

We shall let go
Stars in front
Everything is new

We act in trance
With hungry eyes
This sound is true

https://www.youtube.com/watch?v=Dfs0r2LGvoQ
#featureselection #multicollinearity

"This difference has an impact on a corner case in feature importance analysis: the correlated features. Imagine two features perfectly correlated, feature A and feature B. For one specific tree, if the algorithm needs one of them, it will choose randomly (true in both boosting and Random Forests).

However, in Random Forests this random choice will be done for each tree, because each tree is independent from the others. Therefore, approximatively, depending of your parameters, 50% of the trees will choose feature A and the other 50% will choose feature B. So the importance of the information contained in A and B (which is the same, because they are perfectly correlated) is diluted in A and B. So you won’t easily know this information is important to predict what you want to predict! It is even worse when you have 10 correlated features…

In boosting, when a specific link between feature and outcome have been learned by the algorithm, it will try to not refocus on it (in theory it is what happens, the reality is not always that simple). Therefore, all the importance will be on feature A or on feature B (but not both). You will know that one feature has an important role in the link between the observations and the label. It is still up to you to search for the correlated features to the one detected as important if you need to know all of them."

https://cran.r-project.org/web/packages/xgboost/vignettes/discoverYourData.html
#xgboost #categoricals #featureatureimportance

Попробовал поработать в xgboost с категориальными признаками, это полный факап.

model = XGBClassifier(iterations=1000, random_seed=0, enable_categorical=True, tree_method="approx")

Категорийки, не связанные с таргетом, получают в нём САМУЮ высокую важность из всех фичей. В плане метрик результаты на порядок хуже LightGM и CatBoost. А вы найдите сейчас реальную задачу без категориек. У кого похожий опыт?

https://stats.stackexchange.com/questions/396986/feature-selection-meaning-of-importance-type-in-get-score-function-of-xgbo/625653