Разговор с искусственным интеллектом (ИИ) о форексе. - страница 113

 
Lilita Bogachkova #:

Что такое "ошибка обучения модели", это метрика (loss = 0.0285, mse = 0.0007, mae = 0.0191, msle = 0.0003, rmse = 0.0252, r_square = 0.9091, 

r_squared_adj = 0.9058)? 

можно взять rmse

 
Maxim Dmitrievsky #:

можно сдвинуть график на 1 бар назад и сравнить ошибки между таким прогнозом и вашей моделью :)

Хорошо, а теперь объясни, что ты хочешь, чтобы я сделала?

1. сделать новый тренинг с данными, сдвинутыми на один бар назад? Я не понимаю смысла такого поведения.

2. запустить тест обученной модели на данных, сдвинутых на один бар назад? Я тоже не понимаю смысла такого поведения, т.к. окно тестовых данных двигается вперед с шагом в один бар. Допустим, всего имеется 6300 тестовых баров, тест начался с 1 бара до 21 бара, второй шаг — с 2 бара до 22 бара, третий шаг — с 3 бара до 23 бара и так далее - каждое такое 20-барное окно делает свой индивидуальный прогноз. 

Как сдвинуть один бар назад?


+

Как я уже сказала, всю логику делал ChatGPT. Я не сильна в машинном обучении?

+

Я добавила данные, на которых тестировалась обученная модель (например usdx)

Файлы:
test_data.zip  90 kb
 
Lilita Bogachkova #:

Хорошо, а теперь объясни, что ты хочешь, чтобы я сделала?

1. сделать новый тренинг с данными, сдвинутыми на один бар назад? Я не понимаю смысла такого поведения.

2. запустить тест обученной модели на данных, сдвинутых на один бар назад? Я тоже не понимаю смысла такого поведения, т.к. окно тестовых данных двигается вперед с шагом в один бар. Допустим, всего имеется 6300 тестовых баров, тест начался с 1 бара до 21 бара, второй шаг — с 2 бара до 22 бара, третий шаг — с 3 бара до 23 бара и так далее - каждое такое 20-барное окно делает свой индивидуальный прогноз. 

Как сдвинуть один бар назад?


+

Как я уже сказала, всю логику делал ChatGPT. Я не сильна в машинном обучении?

+

Я добавила данные, на которых тестировалась обученная модель (например usdx)

ошибка считается от разницы реальных цен и прогноза. Посчитать ее от разницы цен и сдвинутых цен на 1 бар и сравнить с ошибкой нейросети

это все можно не делать, просто для понимания, что ваш прогноз ничего не стоит и дальше с ним ничего не нужно делать :)

ушел заниматься более интересными вещами

 
Maxim Dmitrievsky #:

ошибка считается от разницы реальных цен и прогноза. Посчитать ее от разницы цен и сдвинутых цен на 1 бар и сравнить с ошибкой нейросети

это все можно не делать, просто для понимания, что ваш прогноз ничего не стоит и дальше с ним ничего не нужно делать :)

ушел заниматься более интересными вещами

Кажется, я понимаю, что вы имеете в виду, но нет, модель предсказывает следующее значение после последнего доступного значения. Модель не может заглянуть в будущее, используя проверяемые данные. Это было первое условие, которое было проверено для предотвращения подглядывания.


Если нет, подскажите, где в этом коде модель может заглянуть в будущее, используя тестовые данные?

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Разговор с искусственным интеллектом (ИИ) о форексе.

Lilita Bogachkova, 2023.04.12 12:42

Я не поняла, поясните, что именно вы хотите сравнить?


Тестирование происходит следующим образом:

"seq" - это тестовые данные.

"current_window = seq[start_index:end_index]" создает скользящее окно, которое перемещается от "0" до "len(seq)" по тестовым данным с шагом +1.

"predictions.append(round(next_number, 0))" прогнозы "next_number" записываются в "predictions" и, наконец, отображаются на графике вместе с тестовыми данными "seq".

# Define the starting index and the ending index of the current window
start_index = 0
end_index = minimum_window_size + 1

while end_index <= len(seq):
    # Get the current window of the sequence
    current_window = seq[start_index:end_index]

    # Create input/output sequences using a sliding window approach
    inputs, outputs = np.array(
        [current_window[i:i + window_size_value] for i in range(len(current_window) - window_size_value)]), \
        current_window[window_size_value:]

    # Split the data into training, validation, and test sets
    random_state_value = variables['random_state']
    X_train, X_test, y_train, y_test = train_test_split(inputs, outputs, test_size=test_size_value,
                                                        random_state=random_state_value)
    X_train, X_val, y_train, y_val = train_test_split(X_train, y_train, test_size=round(test_size_value * 0.66, 1),
                                                      random_state=random_state_value)

    # Evaluate the model on the test set
    test_loss = model.evaluate(X_test, y_test, verbose=0)

    # Use the trained model to make predictions on the sequence
    last_window = np.array(current_window[-window_size_value:]).reshape(1, window_size_value)
    next_number_scaled = model.predict(last_window)[0, 0]

    # Rescale the predicted value back to the original scale of the sequence
    next_number = scaler.inverse_transform([[next_number_scaled]])[0][0]

    # Append the rounded predicted value to the list of predictions
    predictions.append(round(next_number, 0))

    # Update the starting and ending indices for the next window
    start_index += 1
    end_index += 1

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

  • start_index и end_index - это индексы, определяющие текущее окно последовательности, которое используется для создания входных и выходных последовательностей.
  • Внутри цикла while происходит следующее:
    • Извлекается текущее окно последовательности current_window .
    • С помощью метода скользящего окна создаются входные и выходные последовательности. Интервал скользящего окна равен window_size_value , а шаг равен 1.
    • Данные разбиваются на обучающую, валидационную и тестовую выборки.
    • Модель оценивается на тестовой выборке, и значение потерь сохраняется в переменную test_loss .
    • Используя обученную модель, генерируется прогноз для следующего значения в последовательности seq . Для этого берется последнее окно длиной window_size_value и подается на вход модели. Модель выдает скалированное значение прогноза, которое затем переводится обратно в исходную шкалу последовательности с помощью объекта scaler . Результат округляется до ближайшего целого и добавляется в список прогнозов.
    • Затем индексы текущего окна сдвигаются на 1 вправо для создания следующего окна и генерации нового прогноза.

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

 
Lilita Bogachkova #:

Кажется, я понимаю, что вы имеете в виду, но нет, модель предсказывает следующее значение после последнего доступного значения. Модель не может заглянуть в будущее, используя проверяемые данные. Это было первое условие, которое было проверено для предотвращения подглядывания.


Если нет, подскажите, где в этом коде модель может заглянуть в будущее, используя тестовые данные?


Модель заглядывает в будущее в тестовых данных, если берет данные текущего значения, которое предсказывает, а не предыдущего, или еще хуже следующего значения.

В общем если это прогноз на следующую свечу то не плохо. но код надо шерстить на предмет использования текущих данных. 

И модель погонять на разных данных по времени и инструментам.

 
Lilita Bogachkova #:

Кажется, я понимаю, что вы имеете в виду, но нет, модель предсказывает следующее значение после последнего доступного значения. Модель не может заглянуть в будущее, используя проверяемые данные. Это было первое условие, которое было проверено для предотвращения подглядывания.


Если нет, подскажите, где в этом коде модель может заглянуть в будущее, используя тестовые данные?


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

  • start_index и end_index - это индексы, определяющие текущее окно последовательности, которое используется для создания входных и выходных последовательностей.
  • Внутри цикла while происходит следующее:
    • Извлекается текущее окно последовательности current_window .
    • С помощью метода скользящего окна создаются входные и выходные последовательности. Интервал скользящего окна равен window_size_value , а шаг равен 1.
    • Данные разбиваются на обучающую, валидационную и тестовую выборки.
    • Модель оценивается на тестовой выборке, и значение потерь сохраняется в переменную test_loss .
    • Используя обученную модель, генерируется прогноз для следующего значения в последовательности seq . Для этого берется последнее окно длиной window_size_value и подается на вход модели. Модель выдает скалированное значение прогноза, которое затем переводится обратно в исходную шкалу последовательности с помощью объекта scaler . Результат округляется до ближайшего целого и добавляется в список прогнозов.
    • Затем индексы текущего окна сдвигаются на 1 вправо для создания следующего окна и генерации нового прогноза.

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

А какой ТФ?

 
Valeriy Yastremskiy #:

Модель заглядывает в будущее в тестовых данных, если берет данные текущего значения, которое предсказывает, а не предыдущего, или еще хуже следующего значения.

В общем если это прогноз на следующую свечу то не плохо. но код надо шерстить на предмет использования текущих данных. 

И модель погонять на разных данных по времени и инструментам.

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

    # Get the current window of the sequence
    current_window = seq[start_index:end_index]


Но этот код хранит предсказанное значение в совершенно другом списке "predictions" и тестовые данные никак не смешивались с предсказанным:

    # Append the rounded predicted value to the list of predictions
    predictions.append(round(next_number, 0))
 
Valeriy Yastremskiy #:

А какой ТФ?

Таймфрейм только для Н1, т.к. Н1 везде одинакова, а меньше Н1 не актуально.

 
Lilita Bogachkova #:

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


Но этот код хранит предсказанное значение в совершенно другом списке "predictions" и тестовые данные никак не смешивались с предсказанным:

Можно принтовать время получения прогнозного значения и получения текущего значения. Модель же должна работать с данными последовательно. Получила последнее значение, предсказала следующее. Это надо как то увидеть. Макс и хотел посмотреть сдвинув график процент ошибок. Но тут еще и время получения прогноза важно. Или пошагово смотреть, получили прогноз, скормили значение, дальше прогноз, получи значение)))

 
Valeriy Yastremskiy #:

Можно принтовать время получения прогнозного значения и получения текущего значения. Модель же должна работать с данными последовательно. Получила последнее значение, предсказала следующее. Это надо как то увидеть. Макс и хотел посмотреть сдвинув график процент ошибок. Но тут еще и время получения прогноза важно. Или пошагово смотреть, получили прогноз, скормили значение, дальше прогноз, получи значение)))

У меня есть вывод Метрики ошибок, но я также понимаю, что модель в этих конкретных тестах выполняет более 6000 итераций, чтобы сделать прогноз для следующего числа в каждом из них. Печать ошибки для каждой итерации приводит к непропорциональному потреблению ресурсов и непостижимому количеству информации.

    # Evaluate the model on the test set
    test_loss = model.evaluate(X_test, y_test, verbose=0)
Причина обращения: