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

[Удален]
Aleksey Vyazmikin #:

Вроде не должно

ну аrr data load всю историю содержит? значит кластеризация на всей истории проводится

проницателен как ванга

Maxim Dmitrievsky #:

ну аrr data load всю историю содержит? значит кластеризация на всей истории проводится

меня не на..шь, проницателен как ванга

# Функция для загрузки выборки - можно выбрать тип файлов CSV или feather
def f_Load_Data(Work_Dir,Name_File,Use_feather,Save_feather):
    # Булева переменная, которая определяет способ загрузки данных
    #Use_feather = True  # Измените на False, если хотите использовать CSV

    if Use_feather:
        feather_file_Load = Work_Dir+'\\'+Name_File+'.feather'
        # Чтение данных из файла Feather
        Load_data=feather.read_feather(feather_file_Load)
        # Вывод информации о типах данных для каждого столбца
        print(Load_data.dtypes)
        # Разделение на предикторы и целевой столбец
        x_Load = Load_data.drop(columns=['Time','Target_P','Target_100','Target_100_Buy','Target_100_Sell'])
        y_Load = Load_data['Target_100']
        Target_Info_Load=Load_data[['Time', 'Target_P', 'Target_100', 'Target_100_Buy', 'Target_100_Sell']].copy()
        del Load_data
    else:
        # Чтение данных из файла CSV
        csv_file_Load = Work_Dir+'\\'+Name_File+'.csv'
        with open(csv_file_Load, 'r', newline='', encoding='utf-8') as file:
            # Создаем объект чтения CSV файла
            csv_reader = csv.reader(file, delimiter=';')
            # Читаем только первую строку (заголовки)
            headers = next(csv_reader)
            # Находим индекс столбца "Время"
            index_of_time_column = headers.index("Time")
            # Подсчитываем количество столбцов до столбца "Time"
            num_columns_before_time = index_of_time_column
        # Теперь переменная num_columns_before_time содержит количество столбцов до столбца "Время"
        print(f"Количество столбцов до 'Время': {num_columns_before_time}")
        # Удалим ссылку/закроем файл
        del file

        # Определение типов данных для бинарных столбцов
        LAST_BINARY_COLUMN_INDEX = num_columns_before_time
        dtype_dict = {i: 'int8' for i in range(LAST_BINARY_COLUMN_INDEX)}#Указывается значение от 0 до числа, но не включительно!
        dtype_dict.update({'Time': 'object', 'Target_P': 'int8', 'Target_100': 'int8', 'Target_100_Buy': 'float64', 'Target_100_Sell': 'float64'})

        # Загрузка данных из файла CSV с указанием типов данных и срезом столбцов
        #Load_data = pd.read_csv(csv_file_Load, sep=';',decimal='.', dtype=dtype_dict, usecols=range(LAST_BINARY_COLUMN_INDEX + 5))
        Load_data = pd.read_csv(csv_file_Load, sep=';',decimal='.')
        # Преобразование столбца "Time" в тип данных datetime64
        Load_data['Time'] = pd.to_datetime(Load_data['Time'], errors='coerce')
        # Вывод информации о типах данных для каждого столбца
        print(Load_data.dtypes)

        # Сохраняем в формате Feather
        if Save_feather:
            feather.write_feather(Load_data, Work_Dir+'\\'+Name_File+'.feather')

        # Разделение на предикторы и целевой столбец
        x_Load = Load_data.drop(columns=['Time','Target_P','Target_100','Target_100_Buy','Target_100_Sell'])
        y_Load = Load_data['Target_100']
        Target_Info_Load=Load_data[['Time', 'Target_P', 'Target_100', 'Target_100_Buy', 'Target_100_Sell']].copy()
        print('Target_Info_Load=',Target_Info_Load)
        del Load_data
    return x_Load,y_Load,Target_Info_Load

Нет, данные из файлов, разбитых на подвыборки ранее.

[Удален]
Aleksey Vyazmikin #:

Нет, данные из файлов, разбитых на подвыборки ранее.

А где тогда аплай на другой подвыборке (тест, экзам) того же скалера

Maxim Dmitrievsky #:

А где тогда аплай на другой подвыборке (тест, экзам) того же скалера

Вроде как это же

arr_data_load = scaler.transform(arr_data_load)
На первой выборке считаем, и на всех применяем в цикле.
[Удален]
Maxim Dmitrievsky #:

А где тогда аплай на другой подвыборке (тест, экзам) того же скалера

типа здесь

n_Set = len(arr_Set_Viborka)
for Set in range(n_Set):   
    if Use_Load_CSV == True:
        arr_data_load,arr_Target,arr_Info=f_Load_Data(dir_cb+'\\Setup',arr_Set_Viborka[Set],True,False)#Открыть файл в формате feather

        if Set == 0:#Нормализая - для не бинарной выборки
            scaler.fit(arr_data_load)
        arr_data_load = scaler.transform(arr_data_load)

а, ну допустим норм

тогда не понимаю почему такая разница в результатах

Maxim Dmitrievsky #:

тогда не понимаю почему такая разница в результатах

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

А вот как проверить - что важней из этих вариантов - загадка.

[Удален]
Aleksey Vyazmikin #:

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

А вот как проверить - что важней из этих вариантов - загадка.

я пробовал на своих данных - у меня любые нормализации ухудшают результат )

потом перепроверю, если не забуду
Maxim Dmitrievsky #:

я пробовал на своих данных - у меня любые нормализации ухудшают результат )

потом перепроверю, если не забуду

Отмечу, что использовал последовательную кластеризацию - дерево глубиной 3 уровня по 3 кластера на лист - может и это как то влияет, но не уверен.

Комментарии, не относящиеся к этой теме, были перенесены в "Напишу вам советник бесплатно".

Ниже на графике по оси x - смещение вероятности в целом для кластера на выборке train, а по оси y - финансовый результат в кластере для трёх выборок. Для выборки train фин результат уменьшен в 3 раза, так как она содержит в три раза больше примеров, а хотелось сопоставимости на графике,

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