Файл: Анализ и оценка средств реализации структурных методов анализа и проектирования экономической информационной системы (Анализ предметной области)..pdf
Добавлен: 02.04.2023
Просмотров: 96
Скачиваний: 2
Под осциллятором понимают индикатор технического анализа, характеризующий состояние перекупленности или перепроданности рынка.
Осциллятор наиболее эффективен при сравнительно узком рыночном коридоре, то есть при относительно небольшой волатильности. Существует большое множество различных осцилляторов, однако один из наиболее успешных и популярных является MACD (Moving Average Convergence/Divergence, схождение/ расхождение скользящих средних).
Moving Average Convergence/Divergence представляет собой разность двух скользящих средних (короткого с окрестностью сглаживания n1 и длинного с окрестностью сглаживания n2 > n1). Разность строится в открытой шкале околонулевой линии. Точки на нулевой линии соответствуют ситуациям, при которых скользящие средние пересекаются. Рассматриваемый осциллятор подает следующие сигналы: в ситуации, когда Moving Average Convergence/Divergence поднимается выше нулевой линии – сигнал к покупке; когда MACD опускается ниже нулевой линии – к продаже. Пример осциллятора Moving Average Convergence/Divergence изображен ниже на рис. 2.4:
Рисунок 2.4 Осциллятор MACD
Использование методов машинного обучения в прогнозировании
Машинное обучение на сегодняшний день является очень перспективным и популярным методом. Данный метод используют в различных областях для достижения определенных целей, не исключением является и прогнозирование финансовых временных рядов.
Автор статьи «Прогнозирование финансовых временных рядов с MLP в Keras» - выпускник магистр University of Verona по специальности "прикладная математика" озадачился целью проведения всего процесса работы с временными рядами от обработки исходных данных до постройки нейронных сетей и валидации результатов[6, 9, 10].
В качестве исходных данных автором были рассмотрены цены на акции Apple с 2005 года по дату исследования. Данные были скачены из официальных источников, подготовлены для обучения нейронных сетей; нейронные сети были настроены и в итоге был получен определенный результат. Результатом является определение тренда на 5 дней вперед с вероятностью 60-70%%, что, в целом, под цели автора является неплохим результатом. Однако, под поставленную цель в начале работы, т.е. представление прогноза на следующий день, результат с определением тренда с точностью 60-70%% является неудовлетворительным.
Таким образом, необходимо рассмотреть другие методы машинного обучения, позволяющие дать конкретный прогноз. Однако стоит понимать, что нет какого-то универсального алгоритма, который подходит под все случаи и даст наиболее точный результат. Следовательно, необходимо применить разные алгоритмы прогнозирования, поскольку каждый алгоритм обладает своим уникальным принципом работы и может подойти под конкретные данные лучше, чем какой-либо другой.
Для использования алгоритмов прогнозирования, дающих конкретный результат прогноза необходимо использовать обогащенные данные. Т.е. математическими методами получить промежуточные результаты на завтрашний день, и уже на этих результатах опираться при выполнении алгоритма прогнозирования [11].
Для обогащения данных были выбраны уже описанные ранее математические методы, а именно методы: скользящие средние, полосы Боллинджера, осцилляторы скользящих средних. Также на основе полученных методами результатов предполагается выделить индикаторы по выполнению методов [12, 13, 14]. Например, если цена верхней скользящей средней стала меньше цены временного ряда в конкретной точке, то индикатор меняется с 0 на 1, и обратно. Для каждого метода предполагается использовать свои индикаторы. Более подробно обогащение данных и использование индикаторов будет описано в техническом задании.
Линейная регрессия – метод, используемый для моделирования отношений между одной или несколькими входными переменными и выходной зависимой переменной. Результат представляет собой конкретное значение, являющееся линейной комбинацией входных значений. Линейная регрессия относится к классу задач обучения с учителем [12].
Линейную регрессию можно представить в виде уравнения, которое описывает прямую, наиболее точно иллюстрирующую взаимосвязь между входными переменными «Х» и выходными переменными «Y». Для составления этого уравнения нужно найти определенные коэффициенты «B» для входных переменных.
Например: Y = a + bx.
Зная значение переменной «X», необходимо найти значение переменной «Y», цель линейной регрессии заключается в поиске значений коэффициентов «a» и «b».
«X» называется независимой переменной или предиктором.
«Y» - зависимая переменная или переменная отклика.
«a» - свободный член (пересечение» линии оценки; это значение «Y» при «X»=0 (рис. 2.5).
«b» - угловой коэффициент или градиент оцененной линии; она представляет собой величину, на которую «Y» увеличивается в среднем, если «X» увеличивается на одну единицу.
Рисунок 2.5 Линия линейной регрессии, показывающая пересечение "а" и угловой коэффициент "b" (величину возрастания "Y" при увеличении "X" на одну единицу)
Алгоритм работы (обучения) линейной регрессии наглядно представлен на рисунке (см. рис. 2.6).
Рисунок 2.6 Обучение алгоритма линейной регрессии
Коэффициент ошибки в процессе обучения алгоритма представлен на рис. 2.7:
Рисунок 2.7 Коэффициент ошибки при обучении алгоритма линейной регрессии
Основными преимуществами данного метода является:
- Быстрое моделирование.
- Алгоритм работы рассматриваемой модели доступен для понимания. Модель может быть использована для различных бизнес-решений.
К недостаткам метода можно отнести:
- Данные должны быть взаимосвязаны.
- На практике, линейная регрессия становится неэффективной при больших объемах и сложных взаимосвязях данных.
Возможные варианты по улучшению результата прогнозирования:
- Упростить данные (т.е. избавиться от похожих переменных).
- По возможности сгладить шумы.
Градиентный бустинг – один из наиболее популярных и часто применяемых на практике алгоритмов машинного обучения. Данный алгоритм также относится к классу задач обучения с учителем. Данный алгоритм часто применяется в ML соревнованиях и зачастую является рецептом победы в них. Во многих поисковых системах также используется рассматриваемый алгоритм.
История появления градиентного бустинга начинается с вопроса о том, можно ли из большого количества относительно слабых и простых моделей получить одну сильную. В данном случае, под слабыми моделями подразумевают произвольные алгоритмы машинного обучения, точность которых может быть лишь немногим выше случайного угадывания.
Ответ на поставленный вопрос нашелся удивительно быстро в виде теоретической математической модели. Однако для реализации алгоритма потребовалось несколько лет. Общий подход алгоритма заключался в жадном построении линейной комбинации простых моделей (базовых алгоритмов) путем перевзвешивания входных данных. Каждая последующая модель (как правило, дерево решений) строилась таким образом, чтобы придавать больший вес и предпочтение ранее некорректно предсказанным наблюдениям.
Алгоритм Adaboost работал достаточно хорошо, но из-за малого количества обоснований работы алгоритма, вокруг него возник полный спектр спекуляций: кто-то считал его сверх алгоритмом, кто-то был скептически настроен и разделял мнение, что это малоприменимый подход с жесткой переподгонкой (overfitting). Особенно сильно это мнение закреплялось на данных с большими выбросами, на которых алгоритм оказался неустойчив. Однако в 1999 году появилось обобщение наработок алгоритмов бустинга – градиентный бустинг.
Переход к алгоритму градиентного бустинга является переходом от инженерно-алгоритмических изысканий в построении алгоритмов к полноценной методологии, как такие алгоритмы строить и изучать. С математической точки зрения изменилось не так много: алгоритм построен на всё том же добавлении (бустинге) слабых алгоритмов, с каждой последующей итерацией улучшая те участки данных, которые не были отработаны должным образом предыдущими моделями. Но при применении каждой последующей простой модели, она строится не просто на перевзвешанных наблюдениях, а так, чтобы лучшим образом приближать общий градиент целевой функции [12].
Со временем, алгоритм градиентного бустинга совершенствовался и уже в 2011 нашел популярность на соревнованиях по ML.
В данной главе были проанализированы одни из самых популярных, эффективных методов, используемых при прогнозировании временных рядов. Если рассматривать каждый метод в отдельности, то в целом, результаты работы метода не вызывают уверенности в успешности их использования, однако, при использовании всех этих методов одновременно, вероятность пронозирования может значительно повыситься и использование рассмотренных ранее методов могут весьма облегчить работу трейдера, и более того, сделать её более эффективной и прибыльной.
Таким образом, следующим шагом является проектирование информационной системы, которая будет тем или иным образом объединять в себе все описанные ранее алгоритмы. Следующим этапом после проектирования ИС, последует этап разработки, тестирования и применения полученного продукта на реальных данных. После реализации ИС можно будет говорить об успешности использования в совокупности описанных методов.
Глава III. Разработка требований к информационной системе
В данной главе будут определены требования, предъявляемые к разрабатываемой информационной системе, определены инструменты проектирования и дано описание реализации выбранных на предыдущем этапе методов. Также будет рассмотрена структура разрабатываемой информационной системы.
3.1. Функциональные требования к системе
Информационная система должна обеспечить следующий функционал:
- Загрузку исходных данных в формате «.csv».
- Обогащение загруженных данных.
- Подготовку данных для использования алгоритмов планирования.
- Поочередное выполнение алгоритмов планирования.
- Предоставление пользователю результатов прогнозирования.
- Предоставление пользователю загруженных и обогащенных данных.
- Предоставление пользователю построенных графиков на основе выполнения математических методов.
3.2. Модуль «Подготовка и обогащение данных»
Данные поступают в виде «.csv» файла. Необходимо реализовать возможность выбора необходимого «.csv» файла в оконном режиме для последующей обработки и анализа данных. Файл выглядит следующим образом (рис. 3.1):
Рисунок 3.1 Пример файла с входными данными
В файле имеется 8 столбцов:
- «updated» – дата записи;
- «high» – наибольшая цена за текущую дату;
- «low» – наименьшая цена за текущую дату;
- «open» – цена открытия торгов за текущую дату;
- «close» – цена закрытия торгов за текущую дату;
- «volume» – объемы за текущую дату;
- «average» – средняя цена цена за текущую дату;
- «MiningDifficulty» – сложность майнинга за текущую дату.
Данные поступают уже в отсортированном виде, порядок сортировки от ранней даты к более поздней.
Необходимо обогатить полученные данные математическими методами, для этого необходимо добавить столбцы, описанные в таблице ниже и заполнить их значениями, по указанным в таблице правилам (табл. 3.1):
Таблица 3.1 Наименования столбцов и правила их заполнения для обогащения данных
Наименование столбца |
Правило заполнения |
1st_zkolz_sredn |
Рассчитывается как среднее значение цены закрытия за 2 предыдущих дня. |
2nd_zkolz_sredn |
Рассчитывается как среднее значение цены закрытия за 6 предыдущих дней. |
TrandChange |
Если 1st_zkolz_sredn > 2nd_zkolz_sredn, тогда присваивается значение «1», иначе присваивается значение «0». |
Central_line |
Рассчитывается как среднее значение цены закрытия за 20 предыдущих дней. |
Standard_Deviation |
Рассчитывается как среднее отклонение цены закрытия за 20 предыдущих дней. |
Upper_Bound |
Central_line - Standard_Deviation * 2 |
Bottom_Bound |
Central_line + Standard_Deviation * 2 |
IndicatorOnTop |
Если цена закрытия за предыдущий день > Upper_Bound, тогда присваивается значение «0», иначе присваивается значение «1». |
BottomIndicator |
Если цена закрытия за предыдущий день > Bottom_Bound, тогда присваивается значение «0», иначе присваивается значение «1». |
MovingAverageOscillators |
1st_zkolz_sredn - 2nd_zkolz_sredn |
IndicMov |
Если MovingAverageOscillators > 0, тогда присваивается значение «1», иначе присваивается значение «0». |