Машинное обучение в трейдинге: теория, модели, практика и алготорговля - страница 2208

 

Я попробовал расширить идею о приемлемости небольших выборок для GMM.  Трейн 6 есяцев, тест 5 лет.  Метки разбил на n частей фиксированного размера.  Для каждой части создал свою модель GMM, нагенерил с каждой по 1000 образцов сложил в кучу и обучил катбуст. Подобрал фичи и получилось вот так :

Iteration:  0 R^2:  0.9209352881222573
Iteration:  1 R^2:  0.9379233716807497
Iteration:  2 R^2:  0.94604683760217
Iteration:  3 R^2:  0.9316240202095838
Iteration:  4 R^2:  0.8813998843225924
Iteration:  5 R^2:  0.8820262895230507
Iteration:  6 R^2:  0.9068275822699385
Iteration:  7 R^2:  0.9335383124164518
Iteration:  8 R^2:  0.8960336270368543
Iteration:  9 R^2:  0.8879176417296292
Iteration:  10 R^2:  0.9143324457906077
Iteration:  11 R^2:  0.9468819523130443
Iteration:  12 R^2:  0.9058317279184074
Iteration:  13 R^2:  0.9169237743824633
Iteration:  14 R^2:  0.9004312808918618
Iteration:  15 R^2:  0.8914705535825033
Iteration:  16 R^2:  0.9303813779412192
Iteration:  17 R^2:  0.9207720444742649
Iteration:  18 R^2:  0.9508313124156939
Iteration:  19 R^2:  0.9365410846386889
Iteration:  20 R^2:  0.9227862991881809
Iteration:  21 R^2:  0.9052003797596105
Iteration:  22 R^2:  0.8975861474045481
Iteration:  23 R^2:  0.9431936051970786
Iteration:  24 R^2:  0.9147205226323929
Iteration:  25 R^2:  0.9476544304761072
Iteration:  26 R^2:  0.9333016398932669
Iteration:  27 R^2:  0.9076751168791403
Iteration:  28 R^2:  0.8697156778100353
Iteration:  29 R^2:  0.8845935705960335
Iteration:  30 R^2:  0.9159489461919911
Iteration:  31 R^2:  0.9232528133285296
Iteration:  32 R^2:  0.9465969161207943
Iteration:  33 R^2:  0.923873107775384
Iteration:  34 R^2:  0.887118901781171
Iteration:  35 R^2:  0.9077338861211618
Iteration:  36 R^2:  0.9174686253027636
Iteration:  37 R^2:  0.9293399179092457
Iteration:  38 R^2:  0.8978226916069179
Iteration:  39 R^2:  0.927290878522851
Iteration:  40 R^2:  0.9030239602884128
Iteration:  41 R^2:  0.9621423075912642
Iteration:  42 R^2:  0.9311707303177966
Iteration:  43 R^2:  0.8710910233452236
Iteration:  44 R^2:  0.9103469394662375
Iteration:  45 R^2:  0.8919753688513302
Iteration:  46 R^2:  0.948991254496016
Iteration:  47 R^2:  0.9052353780393834
Iteration:  48 R^2:  0.9512288525623317
Iteration:  49 R^2:  0.9208453469280165
Iteration:  50 R^2:  0.893737366120048
Iteration:  51 R^2:  0.928125477787328
Iteration:  52 R^2:  0.8942972434275139
Iteration:  53 R^2:  0.9199962696797981
Iteration:  54 R^2:  0.915636353356246
Iteration:  55 R^2:  0.8985519043156066
Iteration:  56 R^2:  0.9347755921190894
Iteration:  57 R^2:  0.9584552730083282
Iteration:  58 R^2:  0.9032314235396457
Iteration:  59 R^2:  0.9054094988875886
Iteration:  60 R^2:  0.9297272696445005
Iteration:  61 R^2:  0.9115802884108607
Iteration:  62 R^2:  0.9413266801702871
Iteration:  63 R^2:  0.8828780223711544
Iteration:  64 R^2:  0.8824525390982221
Iteration:  65 R^2:  0.9053951498492597
Iteration:  66 R^2:  0.8714355206255209
Iteration:  67 R^2:  0.918076158247141
Iteration:  68 R^2:  0.8364078585625844
Iteration:  69 R^2:  0.9105699936970394
Iteration:  70 R^2:  0.8964063526272564
Iteration:  71 R^2:  0.9167952116250836
Iteration:  72 R^2:  0.8755502709003292
Iteration:  73 R^2:  0.9386759877643626
Iteration:  74 R^2:  0.9111343213701268
Iteration:  75 R^2:  0.9316337347065893
Iteration:  76 R^2:  0.9491318658912862
Iteration:  77 R^2:  0.8793801507135458
Iteration:  78 R^2:  0.88457680290715
Iteration:  79 R^2:  0.9320128938747305
Iteration:  80 R^2:  0.8718850318456811
Iteration:  81 R^2:  0.9435554177361902
Iteration:  82 R^2:  0.9203305196370429
Iteration:  83 R^2:  0.9260245682457562
Iteration:  84 R^2:  0.9049805884830662
Iteration:  85 R^2:  0.9623136916438867
Iteration:  86 R^2:  0.9489381651270304
Iteration:  87 R^2:  0.9185761083088367
Iteration:  88 R^2:  0.9300874485193825
Iteration:  89 R^2:  0.9270368671164058
Iteration:  90 R^2:  0.89171822598241
Iteration:  91 R^2:  0.9442365127017215
Iteration:  92 R^2:  0.9147433442119735
Iteration:  93 R^2:  0.9466461518946063
Iteration:  94 R^2:  0.8985030583949476
Iteration:  95 R^2:  0.9227935867673295
Iteration:  96 R^2:  0.9270658994573892
Iteration:  97 R^2:  0.8861414609105617
Iteration:  98 R^2:  0.9069299245110212
Iteration:  99 R^2:  0.9381808829667341

Второй вариант, те же метки,   с таким же разбиением , но с предварительным перемешиванием:

X = X.sample(frac=1.0)
Iteration:  0 R^2:  -0.9147922986362467
Iteration:  1 R^2:  -0.8891349235839455
Iteration:  2 R^2:  -0.7756433696750841
Iteration:  3 R^2:  -0.9294701419803408
Iteration:  4 R^2:  -0.8675029639731144
Iteration:  5 R^2:  -0.9333665101462129
Iteration:  6 R^2:  -0.7215820820380785
Iteration:  7 R^2:  -0.835634878720925
Iteration:  8 R^2:  -0.8982572730634232
Iteration:  9 R^2:  -0.8433406526089088
Iteration:  10 R^2:  -0.8905214289474265
Iteration:  11 R^2:  -0.9523382605378116
Iteration:  12 R^2:  -0.9353234698827787
Iteration:  13 R^2:  -0.9255519745316118
Iteration:  14 R^2:  -0.8961044791463404
Iteration:  15 R^2:  -0.8720720502698673
Iteration:  16 R^2:  -0.7673961693909795
Iteration:  17 R^2:  -0.9178099795704201
Iteration:  18 R^2:  -0.8028458725344336
Iteration:  19 R^2:  -0.9171290688719891
Iteration:  20 R^2:  -0.8315941217013689
Iteration:  21 R^2:  -0.5070548765483025
Iteration:  22 R^2:  -0.8116346823881794
Iteration:  23 R^2:  -0.8640716653285909
Iteration:  24 R^2:  -0.8410638452155568
Iteration:  25 R^2:  -0.8840402609492392
Iteration:  26 R^2:  -0.8499245238176002
Iteration:  27 R^2:  -0.8778289064553249
Iteration:  28 R^2:  -0.9268702558814643
Iteration:  29 R^2:  -0.8925221189558847
Iteration:  30 R^2:  -0.9657842200006661
Iteration:  31 R^2:  -0.77464827311577
Iteration:  32 R^2:  -0.6464089792356508
Iteration:  33 R^2:  -0.7362468345293623
Iteration:  34 R^2:  -0.8359119411978162
Iteration:  35 R^2:  -0.8953980020172865
Iteration:  36 R^2:  -0.9643167791133879
Iteration:  37 R^2:  -0.9200720117785897
Iteration:  38 R^2:  -0.4930038499649341
Iteration:  39 R^2:  -0.8563412086058743
Iteration:  40 R^2:  -0.7534658472329049
Iteration:  41 R^2:  -0.9058712268796619
Iteration:  42 R^2:  -0.8404352444846342
Iteration:  43 R^2:  -0.8956393865296916
Iteration:  44 R^2:  -0.7697676598374891
Iteration:  45 R^2:  -0.827402321523272
Iteration:  46 R^2:  -0.7733648036339182
Iteration:  47 R^2:  -0.9094911321363413
Iteration:  48 R^2:  -0.8112209852571995
Iteration:  49 R^2:  -0.9272815570481083
Iteration:  50 R^2:  -0.9516373600713565
Iteration:  51 R^2:  -0.923161311310859
Iteration:  52 R^2:  -0.9454357553057322
Iteration:  53 R^2:  -0.8874717694423527
Iteration:  54 R^2:  -0.9442569831498039
Iteration:  55 R^2:  -0.8509749828624672
Iteration:  56 R^2:  -0.8880233388858068
Iteration:  57 R^2:  -0.829081492806442
Iteration:  58 R^2:  -0.8104288788378895
Iteration:  59 R^2:  -0.9461212586368714
Iteration:  60 R^2:  -0.9638585005999462
Iteration:  61 R^2:  -0.9331377065042211
Iteration:  62 R^2:  -0.9273729445871957
Iteration:  63 R^2:  -0.9087582575118714
Iteration:  64 R^2:  -0.9413841949907823
Iteration:  65 R^2:  -0.9322001763523151
Iteration:  66 R^2:  -0.7762699813649556
Iteration:  67 R^2:  -0.8157764341998059
Iteration:  68 R^2:  -0.8553516949784419
Iteration:  69 R^2:  -0.8892466719564891
Iteration:  70 R^2:  -0.927962172458
Iteration:  71 R^2:  -0.9155014169139781
Iteration:  72 R^2:  -0.813270189921209
Iteration:  73 R^2:  -0.8906455890506758
Iteration:  74 R^2:  -0.8515052662862699
Iteration:  75 R^2:  -0.7464436838057231
Iteration:  76 R^2:  -0.9265461731236329
Iteration:  77 R^2:  -0.9097917153476209
Iteration:  78 R^2:  -0.9320352532410676
Iteration:  79 R^2:  -0.9136167627146698
Iteration:  80 R^2:  -0.9058376874038158
Iteration:  81 R^2:  -0.9218661728537026
Iteration:  82 R^2:  -0.8761532667040411
Iteration:  83 R^2:  -0.8613901314137971
Iteration:  84 R^2:  -0.9549329316806329
Iteration:  85 R^2:  -0.9369577646891263
Iteration:  86 R^2:  -0.9088532629673239
Iteration:  87 R^2:  -0.913690880309502
Iteration:  88 R^2:  -0.9380433297279352
Iteration:  89 R^2:  -0.9022452839070761
Iteration:  90 R^2:  -0.8628005914827953
Iteration:  91 R^2:  -0.6997900178668703
Iteration:  92 R^2:  -0.9236900047877985
Iteration:  93 R^2:  -0.7743753260702735
Iteration:  94 R^2:  -0.8915162635095815
Iteration:  95 R^2:  -0.9238512868243697
Iteration:  96 R^2:  -0.7885755415193383
Iteration:  97 R^2:  -0.8691156336449682
Iteration:  98 R^2:  -0.8358956414656111
Iteration:  99 R^2:  -0.9681215417714616

В обоих случаях использовалась одна фиксированная целевая. При желании, я могу воспроизвести этот эксперимент. Я не силен в интерпретации таких явлений, возможно существует объяснение.

 
welimorn:

Я попробовал расширить идею о приемлемости небольших выборок для GMM.  Трейн 6 есяцев, тест 5 лет.  Метки разбил на n частей фиксированного размера.  Для каждой части создал свою модель GMM, нагенерил с каждой по 1000 образцов сложил в кучу и обучил катбуст. Подобрал фичи и получилось вот так :

Второй вариант, те же метки,   с таким же разбиением , но с предварительным перемешиванием:

В обоих случаях использовалась одна фиксированная целевая. При желании, я могу воспроизвести этот эксперимент. Я не силен в интерпретации таких явлений, возможно существует объяснение.

Это перемешивание перед гмм или перед бустом? Надо чекнуть баланс классов для трейн/тест. Может ноли попали в трейн а единицы в тест. Можно ещё попробовать отдельную кластеризацию по бай и селл меткам. 
 

Извините, ребята, есть вопрос.

Какое количество весовых коэффициентов в ваших сетках, и на каком количестве сделок проходит обучение?

Хочу понять соотношение между этими количествами и поразмыслить о зависимости переобучаемости от этого отношения. Спасибо.

 
Maxim Dmitrievsky:
Это перемешивание перед гмм или перед бустом? Надо чекнуть баланс классов для трейн/тест. Может ноли попали в трейн а единицы в тест. Можно ещё попробовать отдельную кластеризацию по бай и селл меткам. 

Перемешивание осуществляется перед созданием GMM.

 Перед этим дропаю метки по условию:

dataset['labels'].loc[dataset['labels'].diff(1) == 0] = np.nan


dataset = dataset.dropna()

это всегда приводит баланс классов к 1/1 с небольшими отклонениями:

count labels 0 before GMM: 57
count labels 1 before GMM: 58

В данном случае 115 меток были перемешаны, и разделены на 4 части. После на основе них было создано 4 модели GMM. C каждой семплится по 1000 меток и они объединяются в один датафрейм. После он разбивается пополам на трейн и тест. 

Баланс классов семплов при этом немного отличался от идеального. Но в выборках трейна и теста было примерно одинаковое соотношение

count labels train before train_test_split  lab0/lab1 2006/1994
count labels train before CatBoost lab0/lab1  972/1028
count labels test before CatBoost lab0/lab1  1034/966
Iteration:  0 R^2:  -0.09193595558595069

count labels train before train_test_split  lab0/lab1 1956/2044
count labels train before CatBoost lab0/lab1  968/1032
count labels test before CatBoost lab0/lab1  988/1012
Iteration:  1 R^2:  0.2187933983460144

count labels train before train_test_split  lab0/lab1 1937/2063
count labels train before CatBoost lab0/lab1  968/1032
count labels test before CatBoost lab0/lab1  969/1031
Iteration:  2 R^2:  0.07935341972355503

count labels train before train_test_split  lab0/lab1 2004/1996
count labels train before CatBoost lab0/lab1  1006/994
count labels test before CatBoost lab0/lab1  998/1002
Iteration:  3 R^2:  0.5243959241368454

count labels train before train_test_split  lab0/lab1 2002/1998
count labels train before CatBoost lab0/lab1  999/1001
count labels test before CatBoost lab0/lab1  1003/997
Iteration:  4 R^2:  -0.11495440249539668

count labels train before train_test_split  lab0/lab1 2034/1966
count labels train before CatBoost lab0/lab1  1016/984
count labels test before CatBoost lab0/lab1  1018/982
Iteration:  5 R^2:  -0.2007764868672567

...

Ниже приводится результаты моделирования с той же выборкой из 115 меток разбитой на 4 части, но без перемешивания.  Баланс классов, конечно чуть лучше, но мне кажется это не занчительно влияет на результат.

count labels train before train_test_split  lab0/lab1 2012/1988
count labels train before CatBoost lab0/lab1  1008/992
count labels test before CatBoost lab0/lab1  1004/996
Iteration:  0 R^2:  0.6604621522811843

count labels train before train_test_split  lab0/lab1 1978/2022
count labels train before CatBoost lab0/lab1  1003/997
count labels test before CatBoost lab0/lab1  975/1025
Iteration:  1 R^2:  0.9280130097632814

count labels train before train_test_split  lab0/lab1 2024/1976
count labels train before CatBoost lab0/lab1  1031/969
count labels test before CatBoost lab0/lab1  993/1007
Iteration:  2 R^2:  0.8262169779783981

count labels train before train_test_split  lab0/lab1 1980/2020
count labels train before CatBoost lab0/lab1  1010/990
count labels test before CatBoost lab0/lab1  970/1030
Iteration:  3 R^2:  0.9348696093090818

count labels train before train_test_split  lab0/lab1 2030/1970
count labels train before CatBoost lab0/lab1  1016/984
count labels test before CatBoost lab0/lab1  1014/986
Iteration:  4 R^2:  0.5284975351783288

count labels train before train_test_split  lab0/lab1 2042/1958
count labels train before CatBoost lab0/lab1  1024/976
count labels test before CatBoost lab0/lab1  1018/982
Iteration:  5 R^2:  0.9246045699747673

...

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

Про отдельную кластеризацию не подумал, вечером попробую. 

 
Сбербанк запустил сервис постановки диагноза с помощью нейросетей
Сбербанк запустил сервис постановки диагноза с помощью нейросетей
  • 2020.12.02
  • РБК
  • www.rbc.ru
Сбербанк запустил сервис, в котором диагноз по описанным пациентами симптомам будет ставить искусственный интеллект. Цифровая медицина — перспективное направление, но эксперты пока видят очень много рисков в «лечении» нейросетями Входящие в группу Сбербанка компании — «СберЗдоровье», «СберМед ИИ» и «Лаборатория по искусственному интеллекту» —...
 
welimorn:

Перемешивание осуществляется перед созданием GMM.

 Перед этим дропаю метки по условию:

это всегда приводит баланс классов к 1/1 с небольшими отклонениями:

В данном случае 115 меток были перемешаны, и разделены на 4 части. После на основе них было создано 4 модели GMM. C каждой семплится по 1000 меток и они объединяются в один датафрейм. После он разбивается пополам на трейн и тест. 

Баланс классов семплов при этом немного отличался от идеального. Но в выборках трейна и теста было примерно одинаковое соотношение

Ниже приводится результаты моделирования с той же выборкой из 115 меток разбитой на 4 части, но без перемешивания.  Баланс классов, конечно чуть лучше, но мне кажется это не занчительно влияет на результат.

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

Про отдельную кластеризацию не подумал, вечером попробую. 

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

Или сделать на каком-то простом примере (не котировках) и сравнить потом.

 
Maxim Dmitrievsky:

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

Или сделать на каком-то простом примере (не котировках) и сравнить потом.

Максим, привет. давно я не заходил сюда... по поводу твоей статьи последней) поставил я все таки питон) пытаюсь разобраться, и у меня куча вопросов))) MARKUP это я так понимаю спред? Метки ты расставляешь просто сравниваю текущее значение с текущим + какое то  рандомное число, в зависимости от знака > или < ставишь метку 1 или 0. правильно? Для теста ты ставишь markup=0.0? при трейне  MARKUP=0,00001 вроде))) правильно?

 
Александр Алексеевич:

Максим, привет. давно я не заходил сюда... по поводу твоей статьи последней) поставил я все таки питон) пытаюсь разобраться, и у меня куча вопросов))) MARKUP это я так понимаю спред? Метки ты расставляешь просто сравниваю текущее значение с текущим + какое то  рандомное число, в зависимости от знака > или < ставишь метку 1 или 0. правильно? Для теста ты ставишь markup=0.0? при трейне  MARKUP=0,00001 вроде))) правильно?

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

Я анализирую фидбэки и смотрю что можно улучшить 
 
Maxim Dmitrievsky:

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

Я анализирую фидбэки и смотрю что можно улучшить 

а ок))) просто работа работа))) + малой подрастает времени мало))) 

 

Вопрос созрел. Когда-то написал нубский пост в блоге на тему расположения OOS...

Однако, последние изуверства заставили еще раз задуматься над следующей ситуацией.


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

Делаю обучение на первых пяти годах. Получаю на них прямую на северо-восток. Запускаю на OOS (два года после) - конечно, там такая же прямая.


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

Очевидно, что это совсем дет.садовский вопрос в МО. Поэтому должен быть разобран на 100% вдоль и поперек. Кто в теме, прошу поделиться.

"Out-Of-Sample" - где расположить, справа или слева?
"Out-Of-Sample" - где расположить, справа или слева?
  • 2019.12.10
  • www.mql5.com
Когда-то в паблике столкнулся с мнением, что OOS должен располагаться только справа. Т.е. расположение его слева от интервала Оптимизации - ошибка. Я с этим был категорически не согласен, т.к. не видел разницы. Теперь вижу. Ошибался, был не прав. Представим годовой интервал, на котором есть замечательная закономерность, которую долго и успешно...