Вопрос или проблема
моя цель – создать LSTM, который предсказывает цену акции на один день вперед. Мои входные данные – это цены XBTC вместе с техническими индикаторами.
Эти шаги я выполняю:
- удалить тренд из цен, используя скользящее среднее;
- масштабирование данных с использованием 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:])
- подготовка 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)
- использование LSTM.
Хотя я использую разные архитектуры, результат всегда один и тот же: постоянная…
Может кто-нибудь помочь мне? Спасибо
Ответ или решение
Использование Keras.utils.timeseries_dataset_from_array для создания временных рядов является популярным подходом при обработке данных для LSTM-моделей, включая прогнозирование цен на акции. Однако, возникшая у вас проблема результата в виде постоянной значения может указывать на определённые проблемы в предподготовке данных или архитектуре самой сети. Давайте рассмотрим это вопрос более подробно.
Теория
Начнем с теории: LSTM (длинные краткосрочные памяти) – это разновидность рекуррентных нейронных сетей (RNN), которая способна учитывать долгосрочные зависимости в данных благодаря своей продвинутой структуре, включающей запоминающие "ячейки", "входные", "выходные" и "забывающие" ворота. Это делает LSTM подходящим для временных рядов, таких как предсказание цен на акции.
Функция timeseries_dataset_from_array в Keras служит для создания датасета временных рядов, который удобно подавать в LSTM. Она позволяет разбивать данные на последовательности заданной длины (sequence_length) с шагом в одну точку данных, в этом случае в 30 дней, и сопоставлять эти последовательности с соответствующими целевыми значениями.
Пример
-
Детрендинг и Min-Max нормализация: Это важные этапы предварительной обработки данных. Детрендинг помогает удалить глобальные тренды, чтобы LSTM могла лучше обнаруживать локальные изменения. Мин-макс нормализация необходима для приведения всех данных к единому масштабу, что облегчает обучение модели.
-
Создание временных рядов: timeseries_dataset_from_array генерирует последовательности данных и соответствующие таргеты (цены после задержки). Однако, значение задержки может быть определено неверно, так как оно учитывает смещение на
sequence_length + 1
, а целевые значения начинаются после этой точки, что может быть ошибкой. -
Архитектура модели: Поскольку вы указали, что разные архитектуры приводят к одному и тому же результату, возможно проблема заключается в переобучении модели или ошибочной формулировке задачи. Часто используется Dropout для регуляризации и предотвращения переобучения. Также важен правильный выбор параметров таких как количество и размер LSTM-слоёв.
Применение
-
Проверка масштабирования данных: Необходимо убедиться в корректности нормализации данных. Иногда MinMaxScaler может быть слишком груб, и стоит попробовать другие методы, такие как стандартизация.
-
Временные ряды и задержки (delay): Убедитесь, что ваш параметр
delay
корректно отражает необходимое расстояние между входными данными и целевыми значениями. В данном контекстеdelay = sequence_length + 1
может быть ошибочен, если ваша цель — предсказать следующее значение после последней точки в последовательности. -
Модель и её параметры: Попробуйте настраивать гиперпараметры модели. Могут оказаться полезны эксперименты с числом слоёв LSTM, количеством нейронов, и функцией активации. Также можно добавить слои Dropout для борьбы с переобучением.
-
Использование дополнительных показателей: Вы можете дополнительно использовать такие метрики, как RMSE или MAE для оценки качества модели и проверки, не является ли проблема в способе измерения ошибки.
-
Шаги верификации: Проверьте результаты модели на менее сложных данных, чтобы доказать работоспособность модели в общем. Это может помочь выявить более фундаментальные проблемы.
Завершающим этапом решения задачи является тщательная проверка всех этапов подготовки данных и обучения модели. Каждый обработанный аспект может быть причиной текущей проблемы: от выполнения Min-Max нормализации до настроек параметров LSTM.
Удачи в решении проблемы! Эффективное использование правильных инструментов и проверка всех элементов создания модели, несомненно, приведут вас к более успешным итогам в прогнозировании цен на акции.