Разработка программного обеспечения для прогнозирования финансовых показателей на основе интеллектуального анализа данных
Проблемы и возможности прогноза курса валют. Анализ финансовых временных рядов. Разработка искусственного интеллекта в виде нейронной сети для предсказания курса валют с гибкой настройкой. Архитектура, структура и компоненты программного приложения.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | дипломная работа |
Язык | русский |
Дата добавления | 07.08.2018 |
Размер файла | 1,7 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
ѕ Полностью совместим со многими средами разработки. Проекты, собираемые c помощью maven, легко открываются основными средами разработки на java. При чем, практически во всех случаях проект сразу готов к дальнейшей разработке и не требует дополнительных настроек.
В результате, при работе с проектом в разных средах разработки, maven помогает избежать специфичных файлов конфигураций для каждой из сред и позволяет использовать одни и те же файлы избегая дублирования файлов и избыточных данных.
ѕ Декларативное описание проекта.
pom.xml является основным файлом, описывающим проект. По большому счету возможны дополнительные файлы, однако играют они второстепенную роль.
Состав файла pom.xml:
· Корневой элемент и заголовок.
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.avdeeva.neural</groupId>
<artifactId>neural-networks</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
.............
</project>
· Корневой элемент <project>, схема, облегчающая редактирование и проверку, и версия POM.
· Внутри тэга project содержится основная и обязательная информация о проекте:
<!-- The Basics -->
<groupId>...</groupId>
<artifactId>...</artifactId>
<version>...</version>
В Maven каждый проект идентифицируется парой groupId artifactId. Во избежание конфликта имен, groupId - наименование организации или подразделения и обычно действуют такие же правила, как и при именовании пакетов в Java - записывают доменное имя организации или сайта проекта. artifactId - название проекта. Внутри тэга version, как можно догадаться хранится версия проекта. Тройкой groupId, artifactId, version (далее - GAV) можно однозначно идентифицировать jar файл приложения или библиотеки. Если состояние кода для проекта не зафиксировано, то в конце к имени версии добавляется "-SNAPSHOT" что обозначает, что версия в разработке и результирующий jar файл может меняться. <packaging>...</packaging> определяет какого типа файл будет создаваться как результат сборки. Возможные варианты pom, jar, war, ear
Зависимости - следующая очень важная часть pom.xml - тут хранится список всех библиотек (зависимостей) которые используюся в проекте. Каждая библиотека идентифицируется также, как и сам проект - тройкой groupId, artifactId, version (GAV). Объявление зависимостей заключено в тэг <dependencies>...</dependencies>.
Тэг <build> необязательный, т. к. существуют значения по умолчанию. Этот раздел содержит информацию по самой сборке: где находятся исходные файлы, где ресурсы, какие плагины используются. Например:
<build>
<sourceDirectory>src/main/java</sourceDirectory>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source/>
<target/>
</configuration>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.2.1</version>
<executions>
<execution>
<goals>
<goal>java</goal>
</goals>
</execution>
</executions>
<configuration>
<mainClass>com.avdeeva.neural.Test</mainClass>
</configuration>
</plugin>
</plugins>
<finalName>output.jar</finalName>
</build>
Рассмотрим пример более подробно.
<sourceDirectory> определяет, откуда maven будет брать файлы исходного кода. По умолчанию это src/main/java, но вы можете определить, где это вам удобно. Директория может быть только одна (без использования специальных плагинов)
<finalName> - имя результирующего jar (war, ear..) файла с соответствующим типу расширением, который создается на фазе package. Значение по умолчанию - artifactId-version.
Maven плагины позволяют задать дополнительные действия, которые будут выполняться при сборке. Например, в приведенном примере добавлен плагин, который автоматически делает проверку кода на наличие "плохого" кода и потенциальных ошибок.
ѕ Основные фазы сборки проекта:
ѕ Compile Компилирование проекта
ѕ Test Тестирование с помощью JUnit тестов
ѕ Package Создание .jar файла или war, ear в зависимости от типа проекта
ѕ install Копирование .jar (war , ear) в локальный репозиторий
ѕ deploy публикация файла в удаленный репозиторий
К примеру, нам нужно создать jar проекта. Чтобы его создать нужно задать команду: mvn package.
Но перед созданием jar-файла будут выполняться все предыдущие фазы compile и test, а фазы integration-test, install, deploy не выполнятся. Если набрать mvn deploy, то выполнятся все приведенные выше фазы.
Особняком стоят фазы clean и site. Они не выполняются, если специально не указаны в строке запуска.
Clean - удаление всех созданных в процессе сборки артефактов: .class, .jar и др. файлов. В простейшем случае результат - просто удаление каталога target
Site - предназначена для создания документации (javadoc+сайт описания проекта) Так как команда mvn понимает когда ему передают несколько фаз то для сборки проекта создания документации "с нуля" выполняют: mvn clean package site.
3.2 Структура и компоненты приложения
В результате проектирования прототипа в соответствии с постановкой задачей были созданы соответствующие java-файлы и отношения между ними, представленные на рис. 3.2. Диаграмма ниже и все последующие диаграммы пакетов и классов представлены в UML.
Необходимо отметить, что в результате проектирования и построения некоторые диаграммы классов и пакетов получились весьма масштабные, вследствие было принято решение разбить диаграмму на составляющие. Или сократить их вид. Следующие иллюстрации будут представлять части диаграммы для лучшего отображения.
В целом диаграмма выглядит следующим образом:
Рис. 3.2 - Диаграмма классов проекта
После проектирования классов, создание необходимой структуры проектов можно приступить непосредственно к настройке рабочего окружения, реализации и сборки проекта.
3.3 Процесс разработки
Решение было выполнено в виде standalone приложения с типичной для такого типа приложения архитектурой.
Рассмотрим классы более подробнее.
Neuron - абстрактный класс для всех нейронов, имеет входные значения, значение биаса и значение подсчитанного выхода.
Пример функции для суммирования входов:
private double summation(){ double temp = 0; for(int i = 0; i < inputValues.length; i++) temp += inputValues[i]; return temp + bias; }
Рис. 3.3 - Класс Neuron
Bias Neuron - создает Bias нейрон с фиксированным значением -1.
Рис. 3.4 - Класс BiasNeuron
Cbr - класс для получения данных с сайта cbr.ru, параметрами для получения данных является
1) Дата начала обучения
2) Дата окончания тестирования
2) Код валюты
Пример кода из класса Cbr, для получения документа с значениями валют:
public static Document readFromCbr(String dateStart, String dateEnd, String ValCode) throws ParserConfigurationException, IOException, SAXException { String apiUrl = "http://www.cbr.ru/scripts/XML_dynamic.asp?date_req1="+dateStart+"&date_req2="+dateEnd+"&VAL_NM_RQ=" + ValCode; DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); factory.setNamespaceAware(true); return factory.newDocumentBuilder().parse(new URL(apiUrl).openStream()); }
Рис. 3.5 - Класс Cbr
ContextNeuron - создает контекстный нейрон для реализации рекурентности в RNN. Для подсчета выходного значения используется следующая формула:
public void calculateOutput(){ setOutputValue(getInputValue() + memoryContents * memoryDepth); }
Где memoryContents это значение которое храниться в памяти, а memoryDepth - глубину памяти.
Рис. 3.6 - Класс ContextNeuron
ContextSynapse - используется для связки контекстных нейронов к скрытым нейронам.
Рис. 3.7 - Класс ContextSynapse
DataProcessor - класс для преобразования данных, что бы значения обучающей выборки были между 0 и 1 и нахождения минимума и максимума в выборке.
Пример кода для преобразования выборки и нахождения минимума и максимума:
public double[] scale(){ double[] temp = new double [inputs.length]; minimum = inputs[0]; maximum = inputs[0]; for(int i = 0; i < inputs.length; i++){ if (inputs[i] < minimum) minimum = inputs[i]; if (inputs[i] > maximum) maximum = inputs[i]; } for(int i = 0; i < inputs.length; i++) //temp[i] = (inputs[i] - minimum) / (maximum - minimum); //:TODO Maybe wrong formula temp[i] = inputs[i] / 100.0; return temp; }
Рис. 3.8 - Класс DataProcessor
DateUtil - класс для работы с датами, он создан из-за специфики API сайта cbr.ru, так как cbr.ru как аргументы для получения значений курсов принимает даты в формате ДД/ММ/ГГГГ, а Java работает с датами в формате ДД.ММ.ГГГГ. Из-за этого при расчете временных периодов конвертировать формат cbr.ru в формат java и после расчета периодов - обратно.
Пример кода для преобразования даты из формата ДД/ММ/ГГГГ в ДД.ММ.ГГГГ:
public static DateTime parseWithSlash(String date){ String[] dateArr = date.split("/"); return new DateTime(Integer.parseInt(dateArr[2]),Integer.parseInt(dateArr[1]),Integer.parseInt(dateArr[0]),0,1); }
Рис. 3.8 - Класс DateUtil
HiddenNeuron - класс для создания скрытого нейрона.
Пример функции для расчета выходного значения с задержкой:
public void calculateDelayedOutput(){ super.calculateOutput(); for(int i = timeDelay.length - 1; i > 0; i--) timeDelay[i] = timeDelay[i-1]; timeDelay[0] = getOutputValue(); double tempOutput = 0; for(int i = 0; i < timeDelay.length; i++){ tempOutput += timeDelay[i]; } setOutputValue(tempOutput); }
Рис. 3.9 - Класс HiddenNeuron
InputNeuron - класс для создания входных нейронов.
Пример функции для расчета выходного значения с задержкой:
public void calculateDelayedOutput(){ super.calculateOutput(); for(int i = timeDelay.length - 1; i > 0; i--) timeDelay[i] = timeDelay[i-1]; timeDelay[0] = getOutputValue(); double tempOutput = 0; for(int i = 0; i < timeDelay.length; i++){ tempOutput += timeDelay[i]; } setOutputValue(tempOutput); }
Рис. 3.10 - Класс InputNeuron
Network - класс для манипулирования нейронами и их инициализации.
Пример кода для подсчета изменения скрытых весов:
protected void calculateHiddenWeightChange(){ for (int i = 0; i < inputToHidden.length; i++){ for(int j = 0; j < inputToHidden[i].length; j++){ inputToHidden[i][j].calculateWeightChange(learningRate, momentum, hiddenErrorTerm[j]); } } for (int i = 0; i < biasToHidden.length; i++){ biasToHidden[i].calculateWeightChange(learningRate, momentum, hiddenErrorTerm[i]); } }
Рис. 3.11 - Класс Network
NumUtil - класс для работы с числами, для нахождения среднего аритмического ряда, моды ряда. Сам класс создан для удаления элементов из ряда с выбросами.
Пример кода для получения моды ряда чисел:
private double getMode(double[] numberList) { HashMap<Double,Double> freqs = new HashMap<Double,Double>(); for (double d: numberList) { Double freq = freqs.get(d); freqs.put(d, (freq == null ? 1 : freq + 1)); } double mode = 0; double maxFreq = 0; for (Map.Entry<Double,Double> entry : freqs.entrySet()) { double freq = entry.getValue(); if (freq > maxFreq) { maxFreq = freq; mode = entry.getKey(); } } return mode; }
Рис. 3.12 - Класс NumUtil
OutputNeuron - класс для создания выходного нейрона.
Рис. 3.13 - Класс OutputNeuron
RNN - класс для рекурентрой нейронной сети.
Пример кода для инициализации сети:
protected void initialise(){ for(int i = 0; i < getInputNeurons().length; i++){ getInputNeuron(i).input(getInputData((getNextInput() + i + getInputData().length)%getInputData().length)); getInputNeuron(i).calculateOutput(); } getBiasHidden().calculateOutput(); getBiasOutput().calculateOutput(); for(int i = 0; i < contextNeurons.length; i++){ contextNeurons[i].calculateOutput(); } setTargetOutput(getInputData((getNextInput() + getInputNeurons().length - 1)%getInputData().length)); }
Рис. 3.14 - Класс RNN
Synapse - класс для создания синапса, в нем происходит подсчет изменения весов во время обучения, корректировка весов.
Пример кода для передачи значения со входа нейрона на выход нейрона:
public void transferValue(){ if(inputNeuron instanceof BiasNeuron){ outputNeuron.setBias(inputNeuron.getOutputValue() * weight); } else{ outputNeuron.input(inputNeuron.getOutputValue() * weight); } }
Рис. 3.15 - Класс Synapse
Test - класс с которого начинается запуск.
Пример кода для запуска сети TDNN:
public double testTDNN(){ TDNN tdnn = new TDNN(INPUT, HIDDEN, DELAY, 1, LEARNING_RATE, MOMENTUM, EPOCH, "TDNN_" + "_"); tdnn.train(trainingData); tdnn.test(testingData); tdnn.validate(validatingData); return tdnn.getvalues(); }
Рис. 3.16 - Класс Test
CurrID - класс для работы с кодами валют с сайта cbr.ru, в нем хранится коллекция типа Ключ-Значение, ключ это название валюты - типа «BYR», а значение это кодовое имя валюты, например «R01090».
Пример кода для инициализации и добавления разных валют:
public CurrID() { currencyList = new ArrayList<Currency>(); currencyList.add(new Currency("USD","R01235")); currencyList.add(new Currency("BYN","R01090")); currencyList.add(new Currency("EUR","R01239")); currencyList.add(new Currency("CNY","R01375")); //currencyList.add(new Currency("DEM","R01510")); }
Рис. 3.17 - Класс CurID
3.4 Примеры работы
Описание работы:
При запуске, программа просит ввести число, на которую будет сделан прогноз, формат вводимой даты - ДД/ММ/ГГГГ, если нажать enter, то введется текущее число. После того как пользователь введет дату и нажмет клавишу enter. Далее программа попросит выбрать валюту для прогнозирования и предупредит что рекомендуемые параметры работают только для валюты доллар и типа сети MLP. После, программа предлагает выбрать - использовать настроенные параметры или настроить параметры сети вручную. Если пользователь выберет ручную настройку - программа попросит вести такие параметры как:
· Момент
· Уровень обучения
· Задержку
· Глубину памяти
· Количество эпох обучения
· Количество входных нейронов
· Количество скрытых нейронов
После этого, программа начинает построение пределов дат для обучения, тестирования и валидации, используя эти пределы получает значения курса белорусского рубля на данные временные промежутки. Используя полученные данные начинает процесс обучения. После процесса обучения идут стадии тестирования и валидации. После этих 3х циклов идет предсказание курса на выбранный день и результат выводиться на экран в строке типа «Forecasted value equals XX.XXXXXXXXXXXX».
В результате проектирования и реализации задачи было построено и оттестировано приложение, которое удовлетворяет условиям поставленной задачи. Скриншоты рабочего приложения с примерами, иллюстрирующими различный функционал, представлены ниже на рис. 3.18.
Рис. 3.18 - Скриншот работающей программы
Так же был произведен тест точности предсказаний который показал что если допустимой погрешностью разницы между предсказанным курсом и реальным курсом, равной меньше , то точность предсказания можно считать от 60 до 1000%; Было произведено 2 теста:
1) Тест нескольких дней
2) Тест нескольких расчетов на один день
Таблица 3.1 Результат теста на нескольких днях
Дата |
Реальный |
Предсказанный |
Разница |
|
28.05.17 |
56,76 |
56,86 |
-0,10 |
|
29.05.17 |
56,76 |
56,96 |
-0,21 |
|
30.05.17 |
56,71 |
56,95 |
-0,24 |
|
31.05.17 |
56,52 |
56,79 |
-0,27 |
|
01.06.17 |
56,69 |
56,75 |
-0,06 |
|
02.06.17 |
56,54 |
56,60 |
-0,07 |
|
03.06.17 |
56,69 |
56,65 |
0,04 |
|
04.06.17 |
56,69 |
56,68 |
0,01 |
|
05.06.17 |
56,69 |
56,72 |
-0,03 |
|
06.06.17 |
56,62 |
56,79 |
-0,17 |
|
Точность |
60,00% |
Таблица 3.2 Результат теста нескольких расчетов на один день
Реальный |
Предсказанный |
Разница |
|
56,6876 |
56,6455 |
0,0421 |
|
56,6876 |
56,6577 |
0,0299 |
|
56,6876 |
56,6802 |
0,0074 |
|
56,6876 |
56,6933 |
-0,0057 |
|
56,6876 |
56,7222 |
-0,0346 |
|
56,6876 |
56,7505 |
-0,0629 |
|
56,6876 |
56,7201 |
-0,0325 |
|
56,6876 |
56,7177 |
-0,0301 |
|
56,6876 |
56,6400 |
0,0476 |
|
56,6876 |
56,7293 |
-0,0417 |
|
Точность |
100% |
Заключение
В рамках дипломной работы было разработано приложение на Java. Данное приложение удовлетворяет поставленным требованиям и оправдывает свое назначение - предсказывает курсы валют и имеет гибкую настройку. Так же были решены следующие задачи:
1. Была изучена предметная область финансового прогнозирования, произведен поиск текущих методов для прогнозирования валютного курса.
Разработаны несколько типов нейронных сетей для прогнозирования курса валют, а именно: MLP, TDNN, RNN.
Было разработано программное обеспечение с гибкой настройкой для прогнозирования курса валют.
Были реализованы основные требования:
- Приложение содержит документацию по проекту;
- Интерфейс простой - консольный
- Присутствует детальная настройка программы
- Документация по возможности сопровождается пояснениями;
- Приложение сопровождается исходным кодом
Так же была произведена оценка точности получившейся сети, которая показала, что точность сети варьируется от 60 до 90 процентов.
Размещено на Allbest.ru
...Подобные документы
Аннуитетная схема погашения кредита. Клиент-серверные сообщения, их обработка. Хранение данных, структура базы. Алгоритм формирования цен и курса валют. Визуализация данных на стороне клиента. Результат обработки стратегии. Система администрирования.
дипломная работа [745,8 K], добавлен 08.12.2013Возможности среды программирования delphi при разработке приложения с визуальным интерфейсом. Разработка спецификации программного обеспечения и на ее основе кода программного продукта. Отладка программы "трассировкой", ее тестирование и оптимизация.
курсовая работа [501,4 K], добавлен 07.12.2016Проектирование программного модуля: сбор исходных материалов; описание входных и выходных данных; выбор программного обеспечения. Описание типов данных и реализация интерфейса программы. Тестирование программного модуля и разработка справочной системы.
курсовая работа [81,7 K], добавлен 18.08.2014Возможности среды программирования delphi при разработке приложения с визуальным интерфейсом. Отладка программных модулей с использованием специализированных программных средств. Тестирование программного обеспечения. Оптимизация программного кода.
курсовая работа [974,0 K], добавлен 21.12.2016Практические аспекты использования прикладного программного обеспечения при разработке базы данных "Аудиторный фонд ГБОУ СПО "Старооскольский педагогический колледж". Системы управления базами данных. Описание и функциональные возможности приложения.
курсовая работа [360,4 K], добавлен 07.10.2014Обзор существующих объектных архитектур. Архитектура программного обеспечения. Создание веб-сервиса "Библиотека", предоставляющего механизмы работы с данными на стороне клиентского приложения. WEB-сервис и трехуровневая архитектура в основе приложения.
лабораторная работа [1,5 M], добавлен 16.06.2013Анализ правил выбора хода на шахматной доске К. Шеннона. Характеристика программного модуля искусственного интеллекта для игры в шахматы. Контроль времени, поиск лучшего хода в шахматных алгоритмах. Разработка программы для игры с компьютерным оппонентом.
дипломная работа [3,7 M], добавлен 07.07.2012Общие принципы работы систем биометрической идентификации личности. Программные инструменты для разработки приложения, осуществляющего идентификацию пользователя на основе его клавиатурного почерка. Проектирование базы данных и структуры нейронной сети.
дипломная работа [1,3 M], добавлен 20.12.2013Разработка подсистемы отдела кадров, предназначенной для работы с базой данных в виде типизированного файла с расширением txt. Анализ возможности редактировать записи, осуществления выборки данных на основе правил отбора и построения графиков и диаграмм.
контрольная работа [125,3 K], добавлен 08.06.2011Рассмотрение методических особенностей изучения курса "Macromedia Flash" и создание электронного учебника для изучения этого курса учащимися. Достоинства и недостатки, структура учебного пособия. Принципы подготовки к созданию электронных учебников.
дипломная работа [1,9 M], добавлен 23.04.2015Анализ и разработка информационной системы, структура сети предприятия. Описание процесса разработки конфигураций и выявление потребностей в автоматизации функций. Средства разработки проектирования и архитектура базы данных. Разработка модели угроз.
дипломная работа [1,4 M], добавлен 13.07.2011Этапы разработки технического задания. Спецификация программного обеспечения при структурном подходе. Дерево диаграмм, базовые понятия сетевой модели данных. Разработка пользовательского интерфейса. Разработка сценария диалога на основе экранных форм.
курсовая работа [2,0 M], добавлен 24.06.2012Проектирование логической схемы данных для предметной области, физической модели базы данных. Разработка алгоритмов функциональных модулей программного приложения. Принципы тестирования спроектированного программного обеспечения, анализ эффективности.
курсовая работа [926,7 K], добавлен 20.05.2015Область применения и требования создаваемого Web-приложения. Требования к техническому и программному обеспечению. Разработка структуры Web-приложения и выбор средств программной реализации. Программная реализация Web-приложения. Структура базы данных.
дипломная работа [1,4 M], добавлен 03.06.2014Анализ административного программного обеспечения локальной сети. Структура сетевых операционных систем. Планирование и сетевая архитектура локальной сети. Использование сетевых ресурсов на примере предприятия, предоставляющего услуги Интернет-провайдера.
контрольная работа [112,5 K], добавлен 15.12.2010Сущность и проблемы определения искусственного интеллекта, его основных задач и функций. Философские проблемы создания искусственного интеллекта и обеспечения безопасности человека при работе с роботом. Выбор пути создания искусственного интеллекта.
контрольная работа [27,9 K], добавлен 07.12.2009Разработка программного обеспечения, предназначенного для автоматизации деятельности туристической фирмы. Анализ и проектирование базы данных предметной области. Создание концептуальной, логической и физической моделей данных и программы их обработки.
курсовая работа [816,5 K], добавлен 05.02.2018Методика исследования и анализа средств аудита системы Windows с целью обнаружения несанкционированного доступа программного обеспечения к ресурсам вычислительных машин. Анализ угрозы информационной безопасности. Алгоритм работы программного средства.
дипломная работа [2,9 M], добавлен 28.06.2011Реализация программного средства "Действия над матрицами". Разработка кода программного продукта на основе готовой спецификации на уровне модуля. Использование инструментальных средств на этапе отладки программного модуля. Выбор стратегии тестирования.
отчет по практике [296,1 K], добавлен 19.04.2015Концептуальная модель программного продукта "Оценка вариантов формирования транспортной сети Азиатской России". Структура базы данных. Возможности программы, схема работы. Модуль работы с проектом и картографическим окружением. Руководство пользователя.
дипломная работа [3,4 M], добавлен 08.12.2013