Aspiring Data Science
327 subscribers
390 photos
10 videos
6 files
1.46K links
Заметки экономиста о программировании, прогнозировании и принятии решений, научном методе познания.
Контакт: @fingoldo

I call myself a data scientist because I know just enough math, economics & programming to be dangerous.
Download Telegram
#pandas #gems

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

df[df[['DEVICE', 'READING']].apply(tuple, axis = 1).isin([('DEV1', 'READ1'), ('DEV1', 'READ2'), ('DEV2','READ1')])]
#pandas

Вот говорят, мол, пандас, взрослый мощный фреймворк, опенсорс, все дела.
Но попробуйте применить к датафрейму .query по полю с мультииндексом, окажется, что в общем случае нет способа это сделать. Запрос висит на гитхабе в открытом статусе с 2016. "Что это, глупость или предательство?"
#gpt

"Модель GPR-3.5-turbo получила расширенное контекстное окно (количество текста, учитываемое в процессе генерации). Увеличение контекстного окна позволяет модели лучше понимать смысл запросов и выдавать более соответствующие им ответы, не отклоняясь от темы. Модель GPR-3.5-turbo имеет контекстное окно в 16 тыс. токенов, что в четыре раза больше по сравнению с аналогичным показателем GPT-3.5. Также было объявлено, что в настоящее время OpenAI тестирует модель GPT-4 с контекстным окном в 32 тыс. токенов.

Стоимость использования стандартной версии GPT-3.5-turbo (без расширенного контекстного окна) снижена на 25 % до $0,0015 за 1 тыс. входных токенов и $0,002 за 1 тыс. выходных токенов, что соответствует примерно 700 страницам текста за $1. Стоимость использования модели text-embedding-ada-002, которая позволяет измерить сходство текстов, снижена на 75 % до $0,0001 за 1 тыс. токенов."

https://3dnews.ru/1088373/openai-predstavila-gpt35turbo-i-gpt4-novie-funktsii-i-snigennaya-stoimost-ispolzovaniya
#trading #ml #chan

Любопытный подход к отбору признаков: сначала схожие фичи группируются в кластера, дальнейший отбор ведётся FS-алгоритмом уже по кластерам. Видимо, это сразу решает проблему колллинеарности.

https://www.youtube.com/watch?v=2-5HYJ0HhyQ
#yandex #ml #recommenders #transformers

Лучшие результаты для рекомендации Яндекс музыки дал трансформер сразу с 3+ лоссами.
Слишком большая история оказалась вредной.

Проделана гигантская работа, при этом вероятность лайка рекомендованного трека выросла всего на ~2%.
Правда, разнообразие рекомендаций увеличилось на 6%, и вероятность лайка не слышанного ранее трека взлетела уже на 16%.

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

https://www.youtube.com/watch?v=bk7J1oZGw6A&
#numpy

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

A = np.array([1,2,3,4,5])

np.pad(A, (2, 3), 'constant')
# array([0, 0, 1, 2, 3, 4, 5, 0, 0, 0])
#irobot #news

Насосали.

"Предложенная компанией Amazon сделка по покупке за $1,7 млрд фирмы iRobot, занимающейся производством роботов-пылесосов, была полностью одобрена антимонопольным ведомством Великобритании. Положительное решение регулятора привело к резкому росту акций iRobot до начала торгов, пишет издание Bloomberg."

https://3dnews.ru/1088520/velikobritaniya-odobrila-sdelku-po-pogloshcheniyu-irobot-kompaniey-amazon
#trading #erema

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

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

Прогресс существенный:

1) благодаря библиотеке AlorPy настроил сбор стриминговых данных от брокера и сохранение в базу. Прилетают просто сотни изменений стаканов в секунду.

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

3) сегодня несколько усложнил модель с использованием своей достаточно богатой библиотечки статпризнаков над 3 группами торговых факторов. Офигел от количества требуемых расчётов. На 16 ядрах 1 торговый день будет обсчитываться около часа. И это я ещё урезал хотелки. На первых порах домашний сервер сойдёт, но для серьёзной работы только облако, только Dask/Spark. Благо бэк сервиса поиска дешёвых серверов у меня готов и работает уже 2 недели без сбоев.

На сегодня план дописать многопоточный расчёт признаков. В течение недели:
1) обсчитать хотя бы месяц торгов и построить пару моделек с разными таргетами
2) написать простой бэктестер и потестить несколько торговых политик, основанных на прогнозах
3) научиться применять лучшую модель на живом потоке рыночных данных
4) запустить робота с лучшей политикой в работу

Всё это хотел сделать за выходные к сегодняшнему утру вообще-то, но теперь не уверен, хватит ли даже недели.
#parallel #heapq #codegems

Часто, если мне надо распределить работу между узлами, я просто использую np.array_split(job_elements, ncores). Но что делать, если элементы работы содержат разное количество инструкций? Тогда на практике часто складывается ситуация, что большинство узлов завершили свои вычисления, и все дружно ждут, пока пыхтит неудачливый узел, получивший самый большой кусок работы. Давно этот вопрос не давал мне покоя, тем более, что предстоит сделать много расчётов, и я бросился изучать книги по алгоритмам гуглить. Лучшее решение очень элегантно и использует модуль heapq.

import heapq

def distribute_work(workload: Sequence, nworkers: int) -> tuple:
"""Distribute array workload into nworkers chunks of approximately same total size."""
planned_work_per_worker = [[] for _ in range(nworkers)]
workload_indices_per_worker = [[] for _ in range(nworkers)]
totals = [(0, i) for i in range(nworkers)]
heapq.heapify(totals)
for i, value in enumerate(workload):
total, index = heapq.heappop(totals)
planned_work_per_worker[index].append(value)
workload_indices_per_worker[index].append(i)
heapq.heappush(totals, (total + value, index))
return planned_work_per_worker, workload_indices_per_worker

Пример распределения вычислений по 27 тикерам с разным количеством сделок на 5 ядер:

work_by_ticker = np.array([187109,153572,128916,107183,97039,72846,60048,59418,48540,43701,41435,39218,38058,36390,31703,31466,28101,27052,23557,17699,14327,12416,12158,11787,11464,11136,3643])

sol, sol_indices = distribute_work(work_by_ticker, nworkers=5)
print(sol)
for subarr in sol:
subarr = np.array(subarr)
print(subarr.sum(), subarr.size)

[[187109, 39218, 28101, 12158], [153572, 48540, 36390, 23557, 11136], [128916, 59418, 38058, 27052, 12416, 3643], [107183, 60048, 43701, 31703, 17699, 11464], [97039, 72846, 41435, 31466, 14327, 11787]]

266586 4
273195 5
269503 6
271798 6
268900 6

https://stackoverflow.com/a/61648403/4334120
Forwarded from Dealer.AI
В своём прошлом посте говорил о слухах, что AMD будет поддерживать вычисления DL моделей на GPU и колабиться с PyTorch

И вот свершилось!

Лиза Су, также продемонстрировала, что на новой gpu для Deep learning AMD MI300X влезает фулл LLM класса Falcon40B. Звучит многообещающе. Да и в целом, конкуренция это хорошо.

З. Ы. Да я в курсе, что Лиза Су дальняя родственница Хуанга из NVIDIA. Но вы наверняка и не знали, что интел и NVIDIA были долго кормовой базой для AMD, пока правительство не врубило антимонопольные штучки и позволило уйти в свободный полёт AMD. Опять же конкуренция важная штука для капитализма.
#trading #erema

Итак, волнительный момент ) почти неделя напряжённой работы близка к завершению, на данный момент есть 2 модельки, и можно 1 вызовом получить от брокера актуальные рыночные данные по акции, и прогнозы роста/падения по ней от моделей. Хорошо бы сделать бэктест торговой политики, но очень уж хочется влезть в рынок, запустить конвейер, пусть и (поначалу) ценой качества. Есть сомнения, что формат живых данных точно совпадает с тем, на чём модели обучались... Ну да ладно, увидим в процессе.

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