ЧАСТЬ № 01: ВВЕДЕНИЕ

это один из проектов прогнозирования временных рядов. Прежде чем мы продолжим, давайте сначала узнаем о фондовом рынке. Акция или также известная как капитал — это ценная бумага, которая представляет собой право собственности на долю корпорации-эмитента. Единицы акций называются акциями, которые дают владельцу право на долю активов корпорации и прибыли, равную количеству акций, которыми они владеют.

Сам временной ряд представляет собой данные обсерватории, собранные с определенной временной шкалы. Другим примером прогнозирования временных рядов является прогнозирование covid-19. В эпоху пандемии большинство ученых наблюдают за прогнозом пациента с covid-19, чтобы принять решение, что нам делать дальше. Прогноз может быть ежедневным или ежемесячным.

ЧАСТЬ #02: ЗАГРУЗИТЬ НАБОР ДАННЫХ

Мы не используем набор данных на kaggle, но создадим его из другого источника. В качестве примера для этого проекта я использую цену акций Google и собираю данные из API Yahoo Finance (YFinance).

Сначала мы можем установить API Yfinance.

Просто введите код на цифре 02 и подождите, пока все детали не будут установлены. Затем импортируйте библиотеку yfinance и tensorflow.

Поскольку мы хотим предсказать цену акций Google, мы загружаем исторические данные о цене акций. Давайте посмотрим на цифру 03 для кода.

Прежде чем мы перейдем к следующему шагу, давайте углубимся в код скобки. «GOOGL» — это код цены акций Google. Затем команду «старт» мы используем для определения даты начала сбора данных и «конца» для последней даты сбора данных. Команда «интервал» предназначена для определения периода времени. «Интервал» может быть ежедневным, еженедельным или ежемесячным.

Для этого случая данные, которые я использовал, начинаются с 01 января 2020 года по 28 февраля 2023 года с дневным интервалом времени. Давайте проверим форму данных, которые мы собрали.

Вы увидите, что у нас есть 794 данных с включенными 6 функциями. Мы проверим, что характерно для этого набора данных.

У нас есть 'Открыть', 'Высокий', 'Низкий', 'Закрыть' и "Громкость". Давайте узнаем каждую особенность. Предположим, у нас есть торговая сессия с 09:30 до 16:00. Цена акции в 09:30 называется Открытие, а цена акции в 16:00 называется Закрытие. High и Low зависят от общественных настроений, когда акции торгуются публично.

Представьте, что Google транслирует крупную распродажу своего продукта, и на следующий день в торговое время цена будет увеличена. В противном случае предположим, что сервер Google вышел из строя. Это заставит публику поделиться своим негативным отзывом в социальных сетях. В этом случае цена акций Google станет низкой. Таким образом, приведенные выше случаи являются примером условий, которые влияют на то, что цена становится «высокой» или «низкой».

«Adj Close» — это корректировка цены закрытия. Например, цена акций Google составляет 1750 долларов США, людям будет сложно купить 1 акцию. Таким образом, его можно разделить на 100 штук, и цена также делится на 100. Таким образом, цена будет 17,5 долларов США, и людям будет проще купить 1 акцию Google. И последнее, «Объем» — это показатель того, сколько акций продано за определенный период.

Затем мы вносим некоторые коррективы в этот набор данных.

Мы можем проверить последнюю запись в этом наборе данных, используя «хвост»

Число в «хвосте» показывает, сколько данных мы хотим видеть. Посмотрите на рисунок 08, чтобы увидеть результат.

Следующий шаг — проверка нулевых значений и описания набора данных.

Затем мы импортируем библиотеку из plotly, чтобы показать график акции. Я выбираю линии в качестве типа изображения и «Закрыть» для функции.

Мы можем видеть результат кода на графике ниже. Мы можем видеть, что «закрытие» в марте 2020 года находится на самом низком уровне, медленно увеличивается в начале 2021 года и достигает самого высокого места в июле 2021 года до января 2022 года.

Кроме того, мы можем увидеть тренд от «объема», введя код ниже.

Похоже, что «Объем» имеет одинаковые модели в некоторые периоды. Хотя мы не можем смотреть на тренд цены на основе «Объема», потому что, как мы знаем, «Объем» просто говорит нам, сколько акций было продано за определенный период.

ЧАСТЬ № 03: ПРЕДВАРИТЕЛЬНАЯ ОБРАБОТКА ДАННЫХ

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

Pickle — это модуль для создания сериалов и десериализации структуры объекта Python. Другими словами, это процесс преобразования объекта в python в поток байтов для сохранения его в базе данных.

И tqdm для создания индикатора выполнения в python. Итак, для первого шага предварительной обработки данных введите приведенный ниже код для импорта библиотек.

Затем возьмите только «Закрыть» и «Громкость». Я покажу только 5 данных, если вы хотите больше, не проблема.

Затем мы создаем тестовые данные. В качестве данных тестирования я использую данные за октябрь 2022 года. Итак, теперь у нас есть диапазон данных за 5 месяцев, начиная с октября 2022 года по февраль 2023 года.

Затем мы создаем функцию для сбора фрейма данных и длины функции и возвращаем ее «функциям» и «целям».

В первой строке «данные» — это наш набор данных, который содержит «Закрыть» и «Объем». Тогда «характеристическая длина» — это наша точка данных. Затем мы запускаем эту функцию, введя код ниже.

Не забудьте проверить форму X и Y.

У нас есть 3 измерения данных по X и 1 измерение по Y. Первое измерение — это количество нашего набора данных, второе измерение — это наша feature_length, а третье измерение — это столбец, который мы выбрали ранее. Затем мы разделяем функции с помощью разделения тестов поезда.

Затем продолжайте проверять формы.

Скалер работает только с 2 измерениями. Итак, мы создаем функцию, чтобы скалер мог работать с данными более чем с двумя измерениями.

Затем мы подгоняем наши данные обучения и тестирования.

для «цели» мы используем изменить форму, чтобы преобразовать данные в двухмерное. Далее, как обычно, мы проверяем форму.

Прежде чем мы продолжим этап моделирования, мы создадим 2 функции только для сохранения и вызова объекта.

ЧАСТЬ № 04: СОЗДАНИЕ МОДЕЛИ

Теперь переходим к этапу моделирования. На этом этапе мы добавляем ModelCheckpoint и ReduceLROnPlateau. Мы используем ReduceLROnPlateau, чтобы снизить скорость обучения, когда потери при проверке не улучшаются.

В этом случае я использую «элу» в качестве активатора. В отличие от «relu», «Elu» имеет отрицательное значение, чтобы довести среднее значение активации до 0.

Я провожу несколько экспериментов с этими данными и выбираю SGD в качестве оптимизатора, потому что они превосходят Adam.

Далее пусть подойдет наша модель. Я просто использую 10 эпох для этого случая. Опять же, если вы хотите больше, это нормально.

Потому что я использую маленькие эпохи, мой процесс не занимает много времени. После этого не забудьте загрузить модель с помощью load_weights.

После загрузки продолжим прогнозировать шаг.

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

Мы можем показать форму, набрав код на рисунке 34, форма результата 2 измерения. Затем я использую сжатие, чтобы преобразовать размер в 1.

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

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

Мы можем видеть результат кода на рисунке 38 ниже. В целом прогнозируемое значение может следовать шаблону фактического значения, но не значительно. Итак, позвольте перейти к следующей части. Я расскажу вам, как улучшить нашу модель.

ЧАСТЬ № 05: ОЦЕНКА МОДЕЛИ

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

Мы также можем получить данные от Yahoo Finance, введя код ниже.

Третий минимум объясняет нам, когда данные начинают собираться. Я начинаю с августа 2004 года. Перейдите к строке 6, она показывает период самого RSI. Лучшее значение RSI составляет около 2–6, а стандартное значение, подходящее для любой ситуации, — 14. В этом случае я уже испробовал все значения и обнаружил, что 5 — лучшее значение. Затем в строках 7–13 находятся формулы для расчета RSI. Тбх, я не очень понимаю в расчетах, поэтому не могу подробнее об этом рассказать (#ха-ха).

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

Bila kalian perhatikan, date pada RSI ini masih berisi data waktu (00:00:00–04:00), ini akan kita hapus supaya sama dengan typee data дата pada data Себелумня.

Данные изменятся, как вы видите на рисунке 43.

После этого мы объединяем первые данные и данные со значением RSI, используя слияние, и прямо сейчас данные будут иметь «Закрытие», «Объем» и «RSI» в качестве функций.

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

Я поделюсь только кодом, так как он такой же, как и раньше. Пожалуйста, сначала следуйте коду, и я объясню вывод в конце.

Описанные выше шаги — это этап перенастройки данных обучения и тестирования. Следующим шагом является воссоздание модели. Эти шаги также одинаковы. Итак, вы можете продолжать вводить код ниже.

Наконец мы доходим до конца кода. На рисунке 56 показан результат прогноза по набору данных с RSI. Для некоторых деталей я создаю сравнительную графику, как вы можете видеть на рисунке 57.

Если вы внимательно посмотрите, выделенная область (область с зеленым прямоугольником) — это область, которую мы прогнозируем. Кривая результата прогноза с данными RSI может значительно следовать шаблону, чем другая. Это говорит нам о том, что RSI оказывает большое влияние на создание модели временных рядов для цены акций, несмотря на то, что не очень похож на фактическое значение.