Подходит ли Keras.utils.timeseries_dataset_from_array для LSTM для прогнозирования цен на акции?

Вопрос или проблема

моя цель – создать LSTM, который предсказывает цену акции на один день вперед. Мои входные данные – это цены XBTC вместе с техническими индикаторами.

Эти шаги я выполняю:

  1. удалить тренд из цен, используя скользящее среднее;
  2. масштабирование данных с использованием Min Max Scaling

scaler = MinMaxScaler(feature_range=(0, 1))

scaler.fit(TechData[:num_train_samples])

TechData[:num_train_samples] = scaler.transform(TechData[:num_train_samples])
TechData[num_train_samples:num_train_samples+num_val_samples] = scaler.transform(TechData[num_train_samples:num_train_samples+num_val_samples])
TechData[num_train_samples+num_val_samples:] = scaler.transform(TechData[num_train_samples+num_val_samples:])

  1. подготовка np.array для использования в LSTM

ampling_rate = 1
sequence_length = 30
delay = (sequence_length + 1)
batch_size = 8

train_dataset = keras.utils.timeseries_dataset_from_array(
data= TechData[:-delay],
targets=price[delay:],
sampling_rate=sampling_rate,
sequence_length=sequence_length,
batch_size=batch_size,
start_index=0,
end_index=num_train_samples)

  1. использование LSTM.

Хотя я использую разные архитектуры, результат всегда один и тот же: постоянная…

Может кто-нибудь помочь мне? Спасибо

Ответ или решение

Использование Keras.utils.timeseries_dataset_from_array для создания временных рядов является популярным подходом при обработке данных для LSTM-моделей, включая прогнозирование цен на акции. Однако, возникшая у вас проблема результата в виде постоянной значения может указывать на определённые проблемы в предподготовке данных или архитектуре самой сети. Давайте рассмотрим это вопрос более подробно.

Теория

Начнем с теории: LSTM (длинные краткосрочные памяти) – это разновидность рекуррентных нейронных сетей (RNN), которая способна учитывать долгосрочные зависимости в данных благодаря своей продвинутой структуре, включающей запоминающие "ячейки", "входные", "выходные" и "забывающие" ворота. Это делает LSTM подходящим для временных рядов, таких как предсказание цен на акции.

Функция timeseries_dataset_from_array в Keras служит для создания датасета временных рядов, который удобно подавать в LSTM. Она позволяет разбивать данные на последовательности заданной длины (sequence_length) с шагом в одну точку данных, в этом случае в 30 дней, и сопоставлять эти последовательности с соответствующими целевыми значениями.

Пример

  1. Детрендинг и Min-Max нормализация: Это важные этапы предварительной обработки данных. Детрендинг помогает удалить глобальные тренды, чтобы LSTM могла лучше обнаруживать локальные изменения. Мин-макс нормализация необходима для приведения всех данных к единому масштабу, что облегчает обучение модели.

  2. Создание временных рядов: timeseries_dataset_from_array генерирует последовательности данных и соответствующие таргеты (цены после задержки). Однако, значение задержки может быть определено неверно, так как оно учитывает смещение на sequence_length + 1, а целевые значения начинаются после этой точки, что может быть ошибкой.

  3. Архитектура модели: Поскольку вы указали, что разные архитектуры приводят к одному и тому же результату, возможно проблема заключается в переобучении модели или ошибочной формулировке задачи. Часто используется Dropout для регуляризации и предотвращения переобучения. Также важен правильный выбор параметров таких как количество и размер LSTM-слоёв.

Применение

  1. Проверка масштабирования данных: Необходимо убедиться в корректности нормализации данных. Иногда MinMaxScaler может быть слишком груб, и стоит попробовать другие методы, такие как стандартизация.

  2. Временные ряды и задержки (delay): Убедитесь, что ваш параметр delay корректно отражает необходимое расстояние между входными данными и целевыми значениями. В данном контексте delay = sequence_length + 1 может быть ошибочен, если ваша цель — предсказать следующее значение после последней точки в последовательности.

  3. Модель и её параметры: Попробуйте настраивать гиперпараметры модели. Могут оказаться полезны эксперименты с числом слоёв LSTM, количеством нейронов, и функцией активации. Также можно добавить слои Dropout для борьбы с переобучением.

  4. Использование дополнительных показателей: Вы можете дополнительно использовать такие метрики, как RMSE или MAE для оценки качества модели и проверки, не является ли проблема в способе измерения ошибки.

  5. Шаги верификации: Проверьте результаты модели на менее сложных данных, чтобы доказать работоспособность модели в общем. Это может помочь выявить более фундаментальные проблемы.

Завершающим этапом решения задачи является тщательная проверка всех этапов подготовки данных и обучения модели. Каждый обработанный аспект может быть причиной текущей проблемы: от выполнения Min-Max нормализации до настроек параметров LSTM.

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

Оцените материал
Добавить комментарий

Капча загружается...