Comments (14)
Михаил, спасибо огромное!
Проговорили голосом, хочу зафиксировать ключевые моменты (как я их понял) для последователей.
Выяснили, что:
- 59 бумаг, по которым Train Size~=89000, не достаточно для используеого метода машинного обучения. Вероятный минимум Train Size - 100к, лучше 200к+ (~200 бумаг), в идеале 800к+
- для обучения вполне нормально использовать гораздо бОльшее кол-во бумаг, даже если 3//4 из них не будут покупаться в портфель.
- p-value используется не только во время оптимизации портфеля, но и при обучении. Лучше его не трогать, если не понимаешь для чего.
- на многопроцессорных/многоядерных компьютерах увеличение num_workers в файле data_loader.py совсем незначительно (незаметно) поднимает скорость прохождения Tests во время процесса эволюции . На этом этапе гораздо больше времени тратится на чтение/передачу больших объемов данных, которое идет в один поток. Предположительно тут есть возможность для оптимизации кода, которая может дать выигрыш в скорости эволюции на порядок для системы с 16core-CPU.
- использование GPU "в лоб" вероятно не принесет значительного прироста производительности во время эволюции.
from poptimizer.
- У вас там достаточно много организмов, эта ситуация штатная. Как вариант просто запускать каждый день, чтобы все пробежало на новых данных. Как популяция уменьшится, должно начать эволюционировать дальше
- Про hmean ничего не могу сказать - это патч от одного из пользователей. Про resample не до конца понимаю, что значит "часто значительно меняет предложения". Я без проблем могу проконсультировать - найдите меня в телеграмме WLMike - почти всегда свободен. Можно хоть сейчас
from poptimizer.
Столкнулся с такой же ситуацией. Организмов - 143 / Максимум оценок - 142. Часто выходит сообщение "Удаляю - Слишком большая длинна истории - 159" или "Медленный, не размножается ...". Уже неделю работает в таком режиме. Я не совсем понял рекомендацию "...Как вариант просто запускать каждый день, чтобы все пробежало на новых данных. Как популяция уменьшится, должно начать эволюционировать дальше".
Необходимо каждый день прерывать эволюцию и запускать снова?
У меня популяция не уменьшилась, наоборот, приросла на 3-4 организма за неделю.
from poptimizer.
В начале дня запускаете, дожидаетесь подобных сообщений и останавливаете. На следующий день запускаете снова.
PS: постараюсь на следующей неделе выкатить версию, где этой проблемы нет.
from poptimizer.
Спасибо!
from poptimizer.
Михаил, добрый день.
После обновлений от 3 июня три модели смогли обновится (у них изменилось кол-во tickers), часть удалились, и вторые сутки больше ничего не меняется. Всегда получаем "Слишком большая длинна истории", что сподвигло смотреть код.
Подскажите пожалуйста, нет ли ошибки в models.py?
...
n_tickers = len(self._tickers)
days, rez = divmod(len(loader.dataset), n_tickers)
if rez:
history = int(self._phenotype["data"]["history_days"])
raise TooLongHistoryError(f"Слишком большая длинна истории - {history}")
...
Мы этим условием хотим добиться, чтобы длина dataset нацело делилась на кол-во тикеров в портфеле?
Я для отладки исправил вывод raise
raise TooLongHistoryError(f"Слишком большая длинна истории - {history}; {days}, {rez} = divmod({len_loader_dataset}, {n_tickers})")
и получил:
2022-06-05 09:46 Удаляю - Слишком большая длинна истории - 357; 0, 159 = divmod(159, 227)
2022-06-05 09:46 Удаляю - Слишком большая длинна истории - 245; 0, 226 = divmod(226, 227)
2022-06-05 09:46 Удаляю - Слишком большая длинна истории - 222; 0, 226 = divmod(226, 227)
2022-06-05 09:46 Удаляю - Слишком большая длинна истории - 245; 0, 226 = divmod(226, 227)
2022-06-05 09:46 Удаляю - Слишком большая длинна истории - 249; 0, 226 = divmod(226, 227)
2022-06-05 09:47 Удаляю - Слишком большая длинна истории - 251; 0, 225 = divmod(225, 227)
2022-06-05 09:47 Удаляю - Слишком большая длинна истории - 254; 0, 225 = divmod(225, 227)
2022-06-05 09:47 Удаляю - Слишком большая длинна истории - 217; 0, 226 = divmod(226, 227)
2022-06-05 09:47 Удаляю - Слишком большая длинна истории - 243; 0, 226 = divmod(226, 227)
2022-06-05 09:47 Удаляю - Слишком большая длинна истории - 245; 0, 226 = divmod(226, 227)
2022-06-05 09:47 Удаляю - Слишком большая длинна истории - 221; 0, 226 = divmod(226, 227)
2022-06-05 09:47 Удаляю - Слишком большая длинна истории - 250; 0, 225 = divmod(225, 227)
2022-06-05 09:47 Удаляю - Слишком большая длинна истории - 245; 0, 226 = divmod(226, 227)
2022-06-05 09:47 Удаляю - Слишком большая длинна истории - 243; 0, 226 = divmod(226, 227)
2022-06-05 09:47 Удаляю - Слишком большая длинна истории - 218; 0, 226 = divmod(226, 227)
2022-06-05 09:48 Удаляю - Слишком большая длинна истории - 246; 0, 226 = divmod(226, 227)
2022-06-05 09:48 Удаляю - Слишком большая длинна истории - 249; 0, 226 = divmod(226, 227)
2022-06-05 09:48 Удаляю - Слишком большая длинна истории - 236; 0, 226 = divmod(226, 227)
2022-06-05 09:48 Удаляю - Слишком большая длинна истории - 247; 0, 226 = divmod(226, 227)
2022-06-05 09:48 Удаляю - Слишком большая длинна истории - 244; 0, 226 = divmod(226, 227)
2022-06-05 09:48 Удаляю - Слишком большая длинна истории - 243; 0, 226 = divmod(226, 227)
2022-06-05 09:48 Удаляю - Слишком большая длинна истории - 247; 0, 226 = divmod(226, 227)
2022-06-05 09:48 Удаляю - Слишком большая длинна истории - 242; 0, 226 = divmod(226, 227)
2022-06-05 09:48 Удаляю - Слишком большая длинна истории - 249; 0, 226 = divmod(226, 227)
2022-06-05 09:49 Удаляю - Слишком большая длинна истории - 214; 0, 226 = divmod(226, 227)
2022-06-05 09:49 Удаляю - Слишком большая длинна истории - 237; 0, 226 = divmod(226, 227)
2022-06-05 09:49 Удаляю - Слишком большая длинна истории - 248; 0, 226 = divmod(226, 227)
2022-06-05 09:49 Удаляю - Слишком большая длинна истории - 251; 0, 225 = divmod(225, 227)
2022-06-05 09:49 Удаляю - Слишком большая длинна истории - 242; 0, 226 = divmod(226, 227)
2022-06-05 09:49 Удаляю - Слишком большая длинна истории - 230; 0, 226 = divmod(226, 227)
2022-06-05 09:49 Удаляю - Слишком большая длинна истории - 242; 0, 226 = divmod(226, 227)
2022-06-05 09:49 Удаляю - Слишком большая длинна истории - 245; 0, 226 = divmod(226, 227)
2022-06-05 09:49 Удаляю - Слишком большая длинна истории - 217; 0, 226 = divmod(226, 227)
2022-06-05 09:49 Удаляю - Слишком большая длинна истории - 244; 0, 226 = divmod(226, 227)
2022-06-05 09:50 Удаляю - Слишком большая длинна истории - 231; 0, 226 = divmod(226, 227)
2022-06-05 09:50 Удаляю - Слишком большая длинна истории - 241; 0, 226 = divmod(226, 227)
2022-06-05 09:50 Удаляю - Слишком большая длинна истории - 218; 0, 226 = divmod(226, 227)
2022-06-05 09:50 Удаляю - Слишком большая длинна истории - 245; 0, 226 = divmod(226, 227)
2022-06-05 09:50 Удаляю - Слишком большая длинна истории - 212; 0, 226 = divmod(226, 227)
2022-06-05 09:50 Удаляю - Слишком большая длинна истории - 245; 0, 226 = divmod(226, 227)
2022-06-05 09:50 Удаляю - Слишком большая длинна истории - 246; 0, 226 = divmod(226, 227)
2022-06-05 09:50 Удаляю - Слишком большая длинна истории - 241; 0, 226 = divmod(226, 227)
2022-06-05 09:50 Удаляю - Слишком большая длинна истории - 251; 0, 225 = divmod(225, 227)
2022-06-05 09:51 Удаляю - Слишком большая длинна истории - 251; 0, 225 = divmod(225, 227)
2022-06-05 09:51 Удаляю - Слишком большая длинна истории - 245; 0, 226 = divmod(226, 227)
2022-06-05 09:51 Удаляю - Слишком большая длинна истории - 250; 0, 225 = divmod(225, 227)
2022-06-05 09:51 Удаляю - Слишком большая длинна истории - 251; 0, 225 = divmod(225, 227)
2022-06-05 09:51 Удаляю - Слишком большая длинна истории - 256; 0, 225 = divmod(225, 227)
2022-06-05 09:51 Удаляю - Слишком большая длинна истории - 251; 0, 225 = divmod(225, 227)
2022-06-05 09:51 Удаляю - Слишком большая длинна истории - 248; 0, 226 = divmod(226, 227)
2022-06-05 09:51 Удаляю - Слишком большая длинна истории - 213; 0, 226 = divmod(226, 227)
2022-06-05 09:51 Удаляю - Слишком большая длинна истории - 251; 0, 225 = divmod(225, 227)
2022-06-05 09:51 Удаляю - Слишком большая длинна истории - 250; 0, 225 = divmod(225, 227)
2022-06-05 09:52 Удаляю - Слишком большая длинна истории - 251; 0, 225 = divmod(225, 227)
2022-06-05 09:52 Удаляю - Слишком большая длинна истории - 241; 0, 226 = divmod(226, 227)
2022-06-05 09:52 Удаляю - Слишком большая длинна истории - 215; 0, 226 = divmod(226, 227)
2022-06-05 09:52 Удаляю - Слишком большая длинна истории - 260; 0, 225 = divmod(225, 227)
2022-06-05 09:52 Удаляю - Слишком большая длинна истории - 250; 0, 225 = divmod(225, 227)
2022-06-05 09:52 Удаляю - Слишком большая длинна истории - 248; 0, 226 = divmod(226, 227)
2022-06-05 09:52 Удаляю - Слишком большая длинна истории - 241; 0, 226 = divmod(226, 227)
2022-06-05 09:52 Удаляю - Слишком большая длинна истории - 215; 0, 226 = divmod(226, 227)
2022-06-05 09:52 Удаляю - Слишком большая длинна истории - 251; 0, 225 = divmod(225, 227)
2022-06-05 09:53 Удаляю - Слишком большая длинна истории - 247; 0, 226 = divmod(226, 227)
2022-06-05 09:53 Удаляю - Слишком большая длинна истории - 248; 0, 226 = divmod(226, 227)
2022-06-05 09:53 Удаляю - Слишком большая длинна истории - 239; 0, 226 = divmod(226, 227)
2022-06-05 09:53 Удаляю - Слишком большая длинна истории - 245; 0, 226 = divmod(226, 227)
2022-06-05 09:53 Удаляю - Слишком большая длинна истории - 245; 0, 226 = divmod(226, 227)
2022-06-05 09:53 Удаляю - Слишком большая длинна истории - 248; 0, 226 = divmod(226, 227)
2022-06-05 09:53 Удаляю - Слишком большая длинна истории - 255; 0, 225 = divmod(225, 227)
2022-06-05 09:53 Удаляю - Слишком большая длинна истории - 234; 0, 226 = divmod(226, 227)
2022-06-05 09:53 Удаляю - Слишком большая длинна истории - 250; 0, 225 = divmod(225, 227)
2022-06-05 09:53 Удаляю - Слишком большая длинна истории - 252; 0, 225 = divmod(225, 227)
2022-06-05 09:54 Удаляю - Слишком большая длинна истории - 245; 0, 226 = divmod(226, 227)
2022-06-05 09:54 Удаляю - Слишком большая длинна истории - 261; 0, 225 = divmod(225, 227)
2022-06-05 09:54 Удаляю - Слишком большая длинна истории - 245; 0, 226 = divmod(226, 227)
2022-06-05 09:54 Удаляю - Слишком большая длинна истории - 244; 0, 226 = divmod(226, 227)
2022-06-05 09:54 Удаляю - Слишком большая длинна истории - 242; 0, 226 = divmod(226, 227)
2022-06-05 09:54 Удаляю - Слишком большая длинна истории - 246; 0, 226 = divmod(226, 227)
2022-06-05 09:54 Удаляю - Слишком большая длинна истории - 251; 0, 225 = divmod(225, 227)
2022-06-05 09:54 Удаляю - Слишком большая длинна истории - 243; 0, 226 = divmod(226, 227)
2022-06-05 09:54 Удаляю - Слишком большая длинна истории - 250; 0, 225 = divmod(225, 227)
2022-06-05 09:54 Удаляю - Слишком большая длинна истории - 250; 0, 225 = divmod(225, 227)
2022-06-05 09:55 Удаляю - Слишком большая длинна истории - 251; 0, 225 = divmod(225, 227)
2022-06-05 09:55 Удаляю - Слишком большая длинна истории - 247; 0, 226 = divmod(226, 227)
2022-06-05 09:55 Удаляю - Слишком большая длинна истории - 251; 0, 225 = divmod(225, 227)
2022-06-05 09:55 Удаляю - Слишком большая длинна истории - 214; 0, 226 = divmod(226, 227)
2022-06-05 09:55 Удаляю - Слишком большая длинна истории - 243; 0, 226 = divmod(226, 227)
2022-06-05 09:55 Удаляю - Слишком большая длинна истории - 256; 0, 225 = divmod(225, 227)
2022-06-05 09:55 Удаляю - Слишком большая длинна истории - 249; 0, 226 = divmod(226, 227)
2022-06-05 09:55 Удаляю - Слишком большая длинна истории - 244; 0, 226 = divmod(226, 227)
2022-06-05 09:55 Удаляю - Слишком большая длинна истории - 354; 0, 159 = divmod(159, 227)
2022-06-05 09:55 Удаляю - Слишком большая длинна истории - 244; 0, 226 = divmod(226, 227)
2022-06-05 09:56 Удаляю - Слишком большая длинна истории - 251; 0, 225 = divmod(225, 227)
2022-06-05 09:56 Удаляю - Слишком большая длинна истории - 244; 0, 226 = divmod(226, 227)
2022-06-05 09:56 Удаляю - Слишком большая длинна истории - 252; 0, 225 = divmod(225, 227)
2022-06-05 09:56 Удаляю - Слишком большая длинна истории - 248; 0, 226 = divmod(226, 227)
2022-06-05 09:56 Удаляю - Слишком большая длинна истории - 251; 0, 225 = divmod(225, 227)
2022-06-05 09:56 Удаляю - Слишком большая длинна истории - 222; 0, 226 = divmod(226, 227)
2022-06-05 09:56 Удаляю - Слишком большая длинна истории - 240; 0, 226 = divmod(226, 227)
2022-06-05 09:56 Удаляю - Слишком большая длинна истории - 215; 0, 226 = divmod(226, 227)
2022-06-05 09:56 Удаляю - Слишком большая длинна истории - 208; 0, 226 = divmod(226, 227)
2022-06-05 09:57 Удаляю - Слишком большая длинна истории - 248; 0, 226 = divmod(226, 227)
2022-06-05 09:57 Удаляю - Слишком большая длинна истории - 220; 0, 226 = divmod(226, 227)
2022-06-05 09:57 Удаляю - Слишком большая длинна истории - 249; 0, 226 = divmod(226, 227)
2022-06-05 09:57 Удаляю - Слишком большая длинна истории - 246; 0, 226 = divmod(226, 227)
2022-06-05 09:57 Удаляю - Слишком большая длинна истории - 246; 0, 226 = divmod(226, 227)
2022-06-05 09:57 Удаляю - Слишком большая длинна истории - 249; 0, 226 = divmod(226, 227)
2022-06-05 09:57 Удаляю - Слишком большая длинна истории - 245; 0, 226 = divmod(226, 227)
2022-06-05 09:57 Удаляю - Слишком большая длинна истории - 216; 0, 226 = divmod(226, 227)
2022-06-05 09:57 Удаляю - Слишком большая длинна истории - 214; 0, 226 = divmod(226, 227)
2022-06-05 09:58 Удаляю - Слишком большая длинна истории - 244; 0, 226 = divmod(226, 227)
2022-06-05 09:58 Удаляю - Слишком большая длинна истории - 343; 0, 179 = divmod(179, 227)
2022-06-05 09:58 Удаляю - Слишком большая длинна истории - 244; 0, 226 = divmod(226, 227)
2022-06-05 09:58 Удаляю - Слишком большая длинна истории - 245; 0, 226 = divmod(226, 227)
2022-06-05 09:58 Удаляю - Слишком большая длинна истории - 201; 0, 226 = divmod(226, 227)
2022-06-05 09:58 Удаляю - Слишком большая длинна истории - 274; 0, 223 = divmod(223, 227)
2022-06-05 09:58 Удаляю - Слишком большая длинна истории - 250; 0, 225 = divmod(225, 227)
2022-06-05 09:58 Удаляю - Слишком большая длинна истории - 243; 0, 226 = divmod(226, 227)
2022-06-05 09:58 Удаляю - Слишком большая длинна истории - 244; 0, 226 = divmod(226, 227)
2022-06-05 09:59 Удаляю - Слишком большая длинна истории - 217; 0, 226 = divmod(226, 227)
2022-06-05 09:59 Удаляю - Слишком большая длинна истории - 251; 0, 225 = divmod(225, 227)
2022-06-05 09:59 Удаляю - Слишком большая длинна истории - 251; 0, 225 = divmod(225, 227)
2022-06-05 09:59 Удаляю - Слишком большая длинна истории - 248; 0, 226 = divmod(226, 227)
2022-06-05 09:59 Удаляю - Слишком большая длинна истории - 251; 0, 225 = divmod(225, 227)
2022-06-05 09:59 Удаляю - Слишком большая длинна истории - 233; 0, 226 = divmod(226, 227)
2022-06-05 09:59 Удаляю - Слишком большая длинна истории - 1225; 0, 140 = divmod(140, 227)
2022-06-05 09:59 Удаляю - Слишком большая длинна истории - 252; 0, 225 = divmod(225, 227)
Кажется, что никогда это условие не сможем пройти.
from poptimizer.
Ошибки тут нет. В тестовых данных примеров должно быть количество тикеров * количество тестовых дней. Если их эта зависимость нарушается, то у части тикеров слишком короткая история для тестирования. Вымирание большого числа моделей при новом подходе вполне нормально.
from poptimizer.
Спасибо!
А как добиться, чтобы "в тестовых данных примеров было количество тикеров * количество тестовых дней" ?
Я для пробы удалил из портфеля "короткие" бумаги:
Бумага Дней
REGN-RM 245
CMCSA-RM 247
GILD-RM 247
TMUS-RM 247
EBAY-RM 248
GPS-RM 248
MRNA-RM 248
ORCL-RM 248
PTR-RM 248
TTWO-RM 248
BCSB 273
FIXP 283
Следующая
ABT-RM 304
Т.е. самая "короткая" по истории бумага у меня сейчас ABT-RM 304 дня истории, но это не помогло. Стал разбираться дальше, обнаружил что:
population.count=64 (около 40 моделей умерли после нового релиза - это нормально)
64 торговых дня назад было Timestamp('2022-02-04 00:00:00')
поэтому в evolve.py цикл organism.evaluate_fitness запускается начиная с 2022-02-04
В evaluate_fitness создается Model c end = 2022-02-04, которая не проходит quality_metrics - вываливается по Exception из-за TooLongHistoryError и следующий цикл опять начинается с 2022-02-04
Вываливается в _eval_llh, так как len(loader.dataset) у меня всегда меньше n_tickers, а должно быть либо равно, либо в n-раз больше.
Здесь я уже теряюсь...
Видимо len(loader.dataset) это и есть "кол-во примеров в тестовых данных". Но не могу понять, что ему мешает стать равным n*tickers.
from poptimizer.
Допустим у вас 64 модели, прогноз делается на 21 (это дефолтная установка, не знаю как у вам), и пусть у вас самая короткая история по бумаге 245 дня.
Далее важен параметр модели history_days (он у всех моделей разный).
Собственно, чтобы все было нормально, минимальная история по бумаге (245) должна быть больше, чем 64 + 21 + history_days, то есть в этом условном случае history_days < 245 - 64 - 21 = 160.
from poptimizer.
Еще раз спасибо!
Проверил в коллекции моделей, нашел три штуки, у которых history_days был больше максимально возможного для меня по формуле из Вашего предыдущего ответа (259 -64 - 21 = 174), и удалил их.
Сейчас у всех Родителей (и в СУБД и в логе эволюции) history_days в допустимых пределах (<174 +3. т.к. три модели удалил ), но у всех Потомков history_days в диапазоне 200 - 250+ (наблюдал в течении 10 минут). Таким образом ни одна из родительских моделей не может перестроиться на изменившееся кол-во тикеров.
Нормально ли это?
Не проще начать обучение заново? Или нужно просто время, чтобы рандом попал в допустимый history_days для Потомков?
from poptimizer.
С потомками, что странное. Они должны иметь history_days в некой симметричной окрестности около history_days родителя. То есть условно, если у вас у родителя 174 дня, то примерно в половине случаев будут получаться потомки с меньшим количеством дней.
from poptimizer.
Похоже это возвращет функция _to_bounds из chromosome.py.
Для key=history_days на вход ей подается
parent1[key]=126.37099112505452,
parent2[key]=163.5959968136489,
scale=0.12803687993289598,
diff=-4.766173583851928,
raw_value=126.30325883031003,
gene.upper_bound=None,
gene.lower_bound=189,
Возвращает
child[key]=251.69674116968997
from poptimizer.
Понял, моя ошибка - запушил изменения
from poptimizer.
Спасибо, помогло.
Откатил модели на состояние "до обновлений от 3июня", запустил эволюцию, буду наблюдать.
from poptimizer.
Related Issues (20)
- poptimizer.data.app.viewers.NoDFError: ('quotes', 'POGR') HOT 4
- Ошибка при смене тикеров фондов HOT 5
- Неверный заголовок: ('ивиденд,руб',) не входит в ['Дивиденд, руб'] HOT 8
- V3. POptimizer: abnormal termination with uncaught error -> KeyError('positions') HOT 1
- Ошибка после: более жесткий отбор при превышении популяцией 100 HOT 2
- RET — 0.0000: 0.0000, 0.0000, 0.0000, -0.0000, HOT 2
- version_2. Ошибка при загрузке trading_dates HOT 6
- Нет пакетов для Nvidia Cuda HOT 2
- Нет данных для некоторых акций - ver2 HOT 4
- Деление на ноль - ver2 HOT 8
- Ошибка при загрузке. HOT 4
- KeyError: 'timer'. Ошибка при запуске эволюции. ver 2 HOT 2
- Редкая ошибка: TypeError: '<' not supported between instances of 'complex' and 'float' HOT 1
- Как восстановить данные? HOT 3
- Неверные значение price HOT 23
- Ошибка после ночной загрузки данных "cannot schedule new futures after shutdown". HOT 4
- Через какое то время получается ошибка в коде ('Connection aborted.', ConnectionResetError(10054, 'Удаленный хост принудительно разорвал существующее подключение', None, 10054, None))
- Ошибка ('Connection aborted.', ConnectionResetError(10054, 'Удаленный хост принудительно разорвал существующее подключение', None, 10054, None)) HOT 2
- version_2. "AttributeError: 'NoneType' object has no attribute 'group'" HOT 4
- ValueError: Length mismatch: Expected axis has 0 elements, new values have 4 elements HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from poptimizer.