Обсуждение статьи "Метамодели в машинном обучении и трейдинге: Оригинальный тайминг торговых приказов" - страница 12

 
Aleksey Vyazmikin #:

А как значение идекса (0,1,2) может сравниваться с календарной датой?

Они не сравниваются, просто индексной должна быть установлена колонка time, а 0,1,2 вообще не нужна

попробуйте выделенное в своем коде

def get_prices() -> pd.DataFrame:
    p = pd.read_csv('files/EURUSD_H1.csv', delim_whitespace=True)
    pFixed = pd.DataFrame(columns=['time', 'close'])
    pFixed['time'] = p['<DATE>'] + ' ' + p['<TIME>']
    pFixed['time'] = pd.to_datetime(pFixed['time'], format='mixed')
    pFixed['close'] = p['<CLOSE>']
    pFixed.set_index('time', inplace=True)
    pFixed.index = pd.to_datetime(pFixed.index, unit='s')
    pFixed = pFixed.dropna()
    pFixedC = pFixed.copy()

    count = 0
    for i in PERIODS:
        pFixed[str(count)] = pFixedC.rolling(i).mean() - pFixedC
        count += 1

    return pFixed.dropna()
 
Maxim Dmitrievsky #:

Они не сравниваются, просто индексной должна быть установлена колонка time, а 0,1,2 вообще не нужна

попробуйте выделенное в своем коде

В общем потратил уже много времени. Адаптация под данные из файла не прошла успешно.

Видимо, проще переписать с нуля.

Куда то пропадают данные после разметки на второй итерации - видимо там с книгой какая то заморочка - не знаю.

Уникальные значения в train_y (meta model): [0.]
Traceback (most recent call last):
  File "F:/FX/Python/meta_modeling_Viborka.py", line 504, in <module>
    res.append(brute_force(pr[pr.columns[1:]], bad_samples_fraction=0.5))
  File "F:/FX/Python/meta_modeling_Viborka.py", line 265, in brute_force
    meta_model.fit(train_X, train_y, eval_set=(test_X, test_y),
  File "C:\Program Files\Python38\lib\site-packages\catboost\core.py", line 5100, in fit
    self._fit(X, y, cat_features, text_features, embedding_features, None, sample_weight, None, None, None, None, baseline, use_best_model,
  File "C:\Program Files\Python38\lib\site-packages\catboost\core.py", line 2319, in _fit
    self._train(
  File "C:\Program Files\Python38\lib\site-packages\catboost\core.py", line 1723, in _train
    self._object._train(train_pool, test_pool, params, allow_clear_pool, init_model._object if init_model else None)
  File "_catboost.pyx", line 4645, in _catboost._CatBoost._train
  File "_catboost.pyx", line 4694, in _catboost._CatBoost._train
_catboost.CatBoostError: C:/Go_Agent/pipelines/BuildMaster/catboost.git/catboost/private/libs/target/target_converter.cpp:375: Target contains only one unique value
>>> 
Файлы:
 

В общем да, тут происходит обнуление

    # mark bad labels from bad_samples_book
    if BAD_SAMPLES_BOOK.value_counts().max() > 1:
        to_mark = BAD_SAMPLES_BOOK.value_counts()
        mean = to_mark.mean()
        marked_idx = to_mark[to_mark > mean*bad_samples_fraction].index
        pr2.loc[pr2.index.isin(marked_idx), 'meta_labels'] = 0.0
    else:
        pr2.loc[pr2.index.isin(BAD_SAMPLES_BOOK), 'meta_labels'] = 0.0

Я не могу понять, как можно получить значение больше единицы после первой итерации?

Соответственно, так как не получаю, то все значения "
meta_labels
" зануляются у меня.
 
Aleksey Vyazmikin #:

В общем да, тут происходит обнуление

Я не могу понять, как можно получить значение больше единицы после первой итерации?

Соответственно, так как не получаю, то все значения " " зануляются у меня.

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

 
Maxim Dmitrievsky #:

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

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

Пока считает - можно поспать...

Выборку позже попробую загрузить.
Файлы:
 
Maxim Dmitrievsky #:

Вот выборка.

Всё же, похоже с разметкой я не до конца разобрался.

 
Maxim Dmitrievsky #:

Я же правильно понимая, что мета модель классифицирует примеры классом "1", и вторая модель уже активируется только на единичках первой?

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

    p2 = [x[0] < 0.5 for x in p]
    p2_meta = [x[0] < 0.5 for x in p_meta]

В общем если я правильно восстановил метод, то результат получился такой

000

Добавил в коде проверок - иначе вылетает с ошибкой - прикладываю.

И я так понимаю, парсинг модели не работает, так как изменился код модели?

Файлы:
 
Aleksey Vyazmikin #:

Я же правильно понимая, что мета модель классифицирует примеры классом "1", и вторая модель уже активируется только на единичках первой?

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

В общем если я правильно восстановил метод, то результат получился такой

Добавил в коде проверок - иначе вылетает с ошибкой - прикладываю.

И я так понимаю, парсинг модели не работает, так как изменился код модели?

Там x[0] - это вероятности для нулевого класса, модель же выдает вероятности для двух классов. То есть если вероятность нулевого класса меньше 0.5, значит класс первый предсказывается. То есть True == 1 и наоборот. Поэтому ошибки нет.

Да, в новой версии катбуста есть изменения, скину переделки. Сейчас пока что немного не за компом, позже постараюсь помочь
 
Maxim Dmitrievsky #:
Да, в новой версии катбуста есть изменения, скину переделки. Сейчас пока что немного не за компом, позже постараюсь помочь

Спасибо.

 
Aleksey Vyazmikin #:

Спасибо.

Может в вашем датасете метки перевернутые