МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ
Федеральное государственное бюджетное образовательное учреждение
высшего образования
«КУБАНСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ»
(ФГБОУ ВО «КубГУ»)
Кафедра прикладной математики
КУРСОВАЯ РАБОТА
ПРИМИНЕНИЕ ТЕХНОЛОГИЙ АНАЛИЗА «BIG DATA» ДЛЯ ВРЕМЕННЫХ РЯДОВ ФИНАНСОВЫХ ДАННЫХ
Работу выполнил ______________________________________ Р.А. Хагур
(подпись, дата) (инициалы, фамилия)
Факультет компьютерных технологий и прикладной математики
Направление 01.04.02 Прикладная математика и информатика
Научный руководитель,
к-т физ. – мат. наук, доц. ________________________________ О.В. Дорошенко
(подпись, дата) (инициалы, фамилия)
Нормоконтролер,
к-т физ. – мат. наук, доц. ________________________________ Г.В. Калайдина
(подпись, дата) (инициалы, фамилия)
Краснодар 2018
РЕФЕРАТ
Отчет 43 с., 3 ч., 14 рис., 3 табл., 12 источников, 1 прил.
BIG DATA, DATA SCIENCE, HADOOP, NOSQL, MAPREDUCE, SHUFFLE, HADOOP DISTRIBUT FILE SYSTEM, ДИСКРИМИНАНТНЫЙ АНАЛИЗ, ЛОГИСТИЧЕСКАЯ РЕГРЕССИЯ, ПРОГНОЗИРОВАНИЕ
Объектами исследований являются технологий анализа Big Data и данные курса акций предприятий.
Цель работы – изучение технологий Big Data и статистических методик для анализа одномерных временных рядов курсов ценных бумаг.
Во время выполнения курсовой работы были изучены статистические методы анализа Data Science для моделирования временных рядов и реализованы методы логистической регрессии и дискриминантного анализа.
СОДЕРЖАНИЕ
Введение 3
Технологии Big Data и сферы применения 5
Алгоритмы прогнозирования временных рядов финансовых данных 17
Логистическая регрессия 17
Линейный дискриминантный анализ 21
Квадратичный дискриминантный анализ 27
Прогнозирование курса акций с использованием библиотеки Scikit-Learn языка программирования Python 29
Заключение 36
Список использованных источников 37
Приложение А Код реализации статистических методов в Python 39
ВВЕДЕНИЕ
В XXI веке самым ценным ресурсом стала информация, использование которой позволяет достичь новых в1ысот во всех областях человеческой деятельности. Информации стало настолько много, что хранить и обрабатывать ее традиционными способами стало очень сложно, к тому же данные, обработанные традиционно, появляются, как правило, с опозданием, следовательно будут уже не актуальны. Кроме того, что различные организации создают огромые объемы данных, большая часть которых представлена в различных форматах (текстовые документы, видеофайлы, машинные коды и т.д.), локализованных в разнообразных хранилищах, эти данные весьма часто обновляются.
Термин «большие данные» (Big Data) существует уже почти двадцать лет, став за это время всемирно обсуждаемым. За историю своего недолгого существования он успел получить широкую популярность – с одной стороны эти технологии вызывают некоторый скепсис, с другой стороны большое число компаний уже внедрили Big Data в свою деятельность, что позволило оптимизировать работу с данными.
Цель данной работы изучение технологий Big Data и статистических методик для анализа одномерных временных рядов курсов ценных бумаг.
Для достижения поставленной цели необходимо решить следующие задачи:
– сделать обзор сфер применимости технологий «больших данных»;
– рассмотреть инструменты Data Science;
– изучить некоторые алгоритмы машинного обучения, используемые для моделирования временных рядов;
– протестировать изученные алгоритмы на реальных данных и построить прогнозы.
В качестве одномерных рядов финансовых данных использовались курсы акций ПАО «Сбербанк» и ПАО «Норникель», которые были взяты с интернет-ресурса Финам [1].
Наиболее распространенными инструментами для работы с «большими данными», а именно, их обработкой и анализом (Data Science) на сегодняшний день являются язык программирования для обработки статистических данных R и высокоуровневый язык Phyton. Поскольку существует библиотека Scikit-Learn, в которой реализовано достаточное количество алгоритмов машинного обучения, то в качестве среды реализации был выбран Phyton.
Курсовая работа состоит из введения, трех глав, заключения и списка использованных источников.
В первой главе курсовой работы описывается определения Big Data и обзор технологии обработки больших данных.
Вторая глава содержит описание статистических методов прогнозирования Big Data логистической регрессии и дискриминантного анализа.
Результаты логистического и дискриминантных анализов на примере ПАО «Сбербанк» и ПАО «Норникель» представлены в третьей главе.
Технологии Big Data и сферы применения
Big Data – это новые возможности, ставшие доступными, благодаря новым технологиям или подходам к обработке больших объемов данных и использованию вычислительных мощностей.
Хотя термин «большие данные» является относительно новым, процесс сбора и хранения больших объемов информации для последующего анализа имеет давнюю историю. Концепцию определения больших данных можно сформулировать как совокупность следующих факторов [2, 3]:
Объем. Организации собирают данные из различных источников, включая бизнес-транзакции, социальные сети и информацию от датчиков или машинных данных. В прошлом хранить его было бы проблемой, но новые технологии (такие как Hadoop) облегчили бремя.
Скорость. Потоки данных происходят с беспрецедентной скоростью и должны обрабатываться своевременно. RFID-метки, датчики и интеллектуальный учет управляют необходимостью иметь дело с потоками данных в близком к реальному времени.
Разновидность. Данные поступают во всех типах форматов – от структурированных, числовых данных в традиционных базах данных до неструктурированных текстовых документов, электронной почты, видео, аудио, биржевых данных и финансовых транзакций.
Так же к предыдущем свойствам можно добавить еще два:
Изменчивость. В дополнение к возрастающим скоростям и разновидностям данных потоки данных могут быть сильно несовместимы с периодическими пиками. Ежедневные, сезонные и вызванные событиями пиковые нагрузки данных сложны в обработке. Тем более при работе с неструктурированными данными.
Сложность. Сегодняшние данные поступают из нескольких источников, что затрудняет связь, сопоставление, очистку и преобразование данных между системами. Однако необходимо соединять и коррелировать связи, иерархии и множественные связи данных, иначе данные могут быстро выйти из-под контроля.
Сами по себе алгоритмы Big Data возникли при внедрении первых высокопроизводительных серверов (мэйнфреймов), обладающих достаточными ресурсами для оперативной обработки информации и пригодных для компьютерных вычислений и для дальнейшего анализа.
Сам термин Big Data впервые был озвучен в 2008 году на страницах спецвыпуска журнала Nature в статье главного редактора Клиффорда Линча. Этот номер издания был посвящен взрывному росту глобальных объемов данных рисунок 1 и их роли в науке.
Рисунок 1 – Прогнозируемый график роста объемов данных в мире к 2025 году по данным компании Seagate[4]
Big Data – серия подходов, инструментов и методов обработки структурированных и неструктурированных данных огромных объемов и значительного многообразия. Данные технологии применяются для получения воспринимаемых человеком результатов, эффективных в условиях непрерывного прироста, распределения информации по многочисленным узлам вычислительной сети [5].
Исходя из определения Big Data, можно сформулировать основные принципы работы с такими данными:
Горизонтальная масштабируемость. Поскольку данных может быть сколь угодно много – любая система, которая подразумевает обработку больших данных, должна быть расширяемой.
Отказоустойчивость. Принцип горизонтальной масштабируемости подразумевает, что машин в кластере может быть много. Следовательно, часть машин будут выходить из стоя, поэтому методика работы с большими данными должны учитывать возможность таких сбоев.
Локальность данных. Это один из важнейших принципов проектирования Big Data – решений является принцип локальности данных – по возможности обрабатываем данные на той же машине, на которой их храним.
Традиционным методом работы с массивами информации являются реляционные базы данных. Однако работа с реляционной базой данных на сотни терабайт - это еще не Big Data. В таблице 1 представлены характеристики и из отличия в традиционных БД и Big Data.
Таблица 1 – Характеристики традиционной БД и больших БД
Характеристика
|
Традиционные БД
|
Большие БД
|
Объем информации
|
От (1Gb 109байт) до 1Tb (1012байт)
|
От 1Pb 1015 байт до 1Eb (1018 байт)
|
Способ хранения
|
Централизованный
|
Децентрализованный
|
Структурированность данных
|
Структурирована
|
Полуструктурирована или неструктурирована
|
Модель хранения и обработки данных
|
Вертикальная модель
|
Горизонтальная модель
|
Взаимосвязь данных
|
Сильная
|
Слабая
|
В реляционных БД информация распределена дисперсионно, т.е. имеет место изначально заданная четкая структура, изменение которой в уже работающей базе связано с множеством проблем. Таким образом, в силу своей архитектуры, реляционные БД лучше всего подходят для коротких быстрых запросов, идущих однотипным потоком. Сложный же запрос либо потребует перестройки структуры БД, либо, в угоду быстродействию, увеличения вычислительных мощностей. Это указывает на еще одну проблему традиционных баз данных, а именно на сложность их масштабируемости.
Таким образом, для работы со сложными гибкими запросами необходима среда, позволяющая хранить и обрабатывать неструктурированные данные, поддающаяся масштабированию и допускающая применения распределенных вычислений, где для обработки данных используется не одна высокопроизводительная машина, а целая группа таких машин, объединенных в кластер.
Термин «NoSQL» возник в июне 2009 года и был расшифрован как «Not Only SQL» – «не только SQL». Таким термином обозначают нереляционные БД, в которых нет внутренних связей. БД NoSQL могут использовать различные модели представления данных в зависимости от своего назначения.
Технология NoSQL убирает все ограничения реляционной модели (например, трудоемкость горизонтального масштабирования, недостаток производительности в кластере), а также облегчает способы хранения и доступа к данным. Такие БД используют неструктурированный подход, организуя данные специфических типов за малый промежуток времени и предлагая различные типы доступа к ним [6].
NoSQL база данных предоставляет механизм для хранения и извлечения данных, который моделируется средствами, отличными от табличных отношений, используемых в реляционных базах данных. Такие базы данных существовали с конца 1960-х годов, но не получили прозвище "NoSQL" до всплеска популярности в начале двадцать первого века, вызванного потребностями компаний Web 2.0, таких как Facebook, Google и Amazon. базы данных NoSQL все чаще используются в больших данных и веб-приложениях реального времени. системы NoSQL также иногда называют "Not only SQL", чтобы подчеркнуть, что они могут поддерживать SQL-подобные языки запросов.
Вместо этого большинство баз данных NoSQL предлагают концепцию "окончательной согласованности", в которой изменения базы данных распространяются на все узлы "в конечном счете" (обычно в течение миллисекунд), поэтому запросы данных могут не возвращать обновленные данные немедленно или могут привести к чтению данных, которые не являются точными, проблема, известная как устаревшие чтения. Кроме того, некоторые системы NoSQL могут демонстрировать потерянные записи и другие формы потери данных. Некоторые системы NoSQL предоставляют такие понятия, как ведение журнала с опережением записи, чтобы избежать потери данных. Для распределенной обработки транзакций в нескольких базах данных, согласованность данных является еще более сложной задачей, которая является сложной как для NoSQL, так и для реляционных баз данных. Даже текущие реляционные базы данных не позволяют ограничениям ссылочной целостности охватывать базы данных. Существует мало систем, которые поддерживают как транзакции ACID, так и стандарты x/Open XA для распределенной обработки транзакций.
Базы данных NoSQL-это нереляционные базы данных, которые являются масштабируемыми, оптимизированными для использования моделей данных без единой схемы. Базы данных NoSQL широко используются, потому что они упрощают разработку, обеспечивают отказоустойчивость и обеспечивают низкую задержку. Такие базы данных могут использовать различные модели данных, включая столбчатые, документальные, графические данные и хранить пары "ключ-значение" в памяти.
Системы базы данных NoSQL используются для управления данными различных моделей, в том числе для хранения пар "ключ-значение" в памяти графовых моделей данных и хранения документов. Эти типы баз данных оптимизированы для приложений, которым требуются большие объемы данных, низкая задержка и гибкие модели данных. Все это достигается за счет смягчения жестких требований к согласованности традиционных реляционных баз данных.
Базы данных NoSQL отлично подходят для приложений, требующих более высокой масштабируемости и меньшего времени отклика, чем традиционные реляционные базы данных. Среди них много больших приложений для передачи данных, мобильных и интернет-приложений. Благодаря использованию упрощенных структур данных и горизонтального масштабирования базы данных NoSQL обычно обеспечивают меньшее время отклика, чем реляционные базы данных, и их легче масштабировать.
Как нереляционные базы данных (NoSQL), так и реляционные системы управления базами данных (РСУБД) имеют свои преимущества и недостатки. СУБД позволяют гибко запрашивать данные, но запросы являются довольно дорогими и плохо масштабируемыми при увеличении трафика. Базы данных NoSQL позволяют эффективно запрашивать данные ограниченным числом способов. Все остальные методы, как правило, дороги и имеют низкую скорость выполнения.
Существует четыре популярных типа баз данных NoSQL:
Базы данных столбцов оптимизированы для чтения и записи данных в виде столбцов, а не строк. Столбчатый подход к хранению таблиц базы данных важен для производительности аналитических запросов, поскольку он значительно снижает Общие требования к дисковому вводу-выводу и объем данных, которые необходимо загрузить с диска.
База данных документов предназначена для хранения полуструктурированных данных в документах, обычно JSON или XML. В отличие от традиционных реляционных баз данных, каждый из документов NoSQL может иметь свою собственную схему, которая обеспечивает большую гибкость в организации и хранении данных приложения и уменьшает объем хранилища для необязательных значений.
Графовые базы данных хранят вершины и направленные связи, называемые ребрами. Графовыми могут быть и базы данных SQL, и базы данных NoSQL. Каждая вершина или ребро может обладать набором собственных свойств.
Хранилище типа «ключ-значение» - это база данных NoSQL, предназначенная для нагрузок с большим количеством операций чтения или нагрузки с высокими требованиями к вычислительной мощности. Преимущества NoSQL:
Возможность хранения больших объемов неструктурированной информации;
NoSQL – базы лучше поддаются масштабированию. Хотя масштабирование поддерживается и в SQL-базах, это требует гораздо больших затрат человеческих и аппаратных ресурсов;
Горизонтальное масштабирование (несколько независимых машин соединяются вместе, и каждая из них обрабатывает свою часть запросов) позволяет увеличить емкость кластера за счет добавления нового сервера. Предназначенное для работы в распределенных системах NoSQL, хранилище спроектировано таким образом, чтобы все процедуры распределения данных и отказоустойчивости выполнялись базой данных NoSQL;
Ключевые преимущества NoSQL баз в распределенных системах заключаются в процедурах шаринга и репликации;
Репликация — это копирование обновленных данных на другие сервера. Это позволяет добиться большей отказоустойчивости и масштабируемости системы;
Шаринг — это разделение информации по разным узлам сети. Каждый узел отвечает только за определенный набор данных и обрабатывает запросы, относящиеся только к этому набору данных. NoSQL предполагает, что шаринг реализует сама база данных, он будет производиться автоматически.
Использование облачных вычислений и хранилищ. Использование для тестирования и разработки локального оборудования, а затем перенос системы в облако;
Быстрая разработка. NoSQL базы данных не требуют большого объема подготовительных действий;
Собственные языки запросов современных NoSQL хранилищ гораздо больше подходят для выполнения простых манипуляций с базой данных.
Недостатки NoSQL:
Приложение сильно привязывается к конкретной СУБД. Язык SQL универсален для всех реляционных хранилищ и поэтому в случае смены СУБД не придётся переписывать весь код;
Ограниченная емкость встроенного языка запросов. SQL имеет очень богатую историю и множество стандартов. Это очень мощный и сложный инструмент для операций с данными и составления отчетов. Практически все языки запросов и методы API хранилищ NoSQL были созданы на основе тех или иных функций SQL, но они имеют куда меньшую функциональность;
Трудности быстрого перехода с одной нереляционной базы данных на другую;
Приходится разрабатывать собственные инструменты для работы с БД.
Различие между этими базами данных заключается главным образом в способах хранения и структурирования данных, а также доступа к ним. Разные типы баз данных оптимизированы для разных приложений и примеров использования.
MapReduce – это модель программирования и связанная с ней реализация для обработки и создания больших наборов данных с параллельным распределенным алгоритмом в кластерах.
MapReduce предполагает, что данные организованы в виде некоторых записей. Обработка данных происходит в 3 стадии [7].
Обработка данных в фреймворке MapReduce производится в три шага:
Map: каждый рабочий узел применяет функцию map к локальным данным и записывает Выходные данные во временное хранилище. Главный узел обеспечивает обработку только одной копии избыточных входных данных.
Shuffle: рабочие узлы перераспределяют данные на основе выходных ключей (созданных функцией map) таким образом, чтобы все данные, принадлежащие одному ключу, находились на одном рабочем узле.
Reduce: рабочие узлы теперь обрабатывают каждую группу выходных данных по ключу параллельно.
Плюсы и минусы технологии MapReduce:
Все запуски функции map работают независимо и могут работать параллельно, в том числе на разных машинах кластера.
Все запуски функции reduce работают независимо и могут работать параллельно, в том числе на разных машинах кластера.
Shuffle внутри себя представляет параллельную сортировку, поэтому также может работать на разных машинах кластера. Пункты 1-3 позволяют выполнить принцип горизонтальной масштабируемости.
Функция map, как правило, применяется на той же машине, на которой хранятся данные – это позволяет снизить передачу данных по сети (принцип локальности данных).
MapReduce – это всегда полное сканирование данных, никаких индексов нет. Это означает, что MapReduce плохо применим, когда ответ требуется очень быстро.
Hadoop – представляет собой набор утилит с открытым исходным кодом, которые облегчают использование сети из многих компьютеров для решения проблем, связанных с большими объемами данных и вычислений. Он обеспечивает программную основу для распределенного хранения и обработки больших данных с использованием модели программирования MapReduce. Все модули в Hadoop разработаны с фундаментальным предположением, что аппаратные сбои являются общими вхождениями и должны автоматически обрабатываться платформой [8].
Платформа Hadoop позволяет сократить время на обработку и подготовку данных, расширяет возможности по анализу, позволяет оперировать новой информацией и неструктурированными данными.
Главные задачи платформы Hadoop — хранение, обработка и управление данными.
Базовая платформа Hadoop состоит из следующих модулей:
Hadoop Common - содержит библиотеки и утилиты, необходимые другим модулям Hadoop;
Hadoop Distributed File System (HDFS) - распределенная файловая система, которая хранит данные на обычных машинах, обеспечивая очень высокую совокупную пропускную способность кластера;
HADOOP YARN – введенная в 2012 году Платформа, отвечающая за управление вычислительными ресурсами в кластерах и их использование для планирования приложений пользователей;
Hadoop MapReduce-реализация модели программирования MapReduce для крупномасштабной обработки данных.
Решения, построенные на базе технологии Hadoop, обладают рядом существенных преимуществ. Основные из них приведены в таблице 2.
Таблица 2 – Преимущества решения на базе Hadoop
Преимущество
|
Краткое описание
|
Снижение времени на обработку данных
|
При обработке данных на кластере можно существенно сократить время на обработку данных
|
Снижение стоимости оборудования
|
Применение технологии Hadoop позволяет сократить затраты на оборудование, требуемое для хранения и обработки данных, в десятки раз
|
Повышение отказоустойчивости.
|
Выход из строя одного или нескольких узлов кластера влияет только на производительность системы, при этом система продолжает корректно
|
Продолжение таблицы 2
Преимущество
|
Краткое описание
|
|
работать и предоставлять сервис конечным пользователям
|
Линейная масштабируемость
|
Решение позволяет наращивать производительность просто за счет добавления новых узлов кластера. При этом производительность кластера возрастает линейно
|
Работа с неструктурированными данными
|
Технология позволяет осуществлять сложную обработку любых файлов, в том числе неструктурированных, благодаря чему такие данные могут быть эффективно обработаны и использованы
|
Вот некоторые методы анализа, которые используются для анализа больших данных:
Интеллектуальный анализ данных включает поиск структуры и смысла в больших объемах неструктурированных данных;
Машинное обучение является одним из видов искусственного интеллекта в области информатики. Это научная дисциплина, которая занимается проектированием и разработкой алгоритмов, которые позволяют компьютерам разрабатывать поведение на основе эмпирических данных. Алгоритмы используются для распознавания и прогнозирования корреляций и закономерностей в данных. Машинное обучение распознает закономерности в данных и соответствующим образом корректирует действия программы.
Другие методы анализа включают A/B тестирование, классификацию, Кластерный Анализ (кластеризацию), естественный языковая обработка (NLP), (социальные) нейронные сети, Оптимизация, пространственный Анализ, Моделирование, анализ и визуализация временных рядов.
Сфера применения Big Data достаточно широка. В частности, эти технологии активно применяются в сфере коммуникаций, СМИ и индустрии развлечений. Организации в этой отрасли одновременно анализируют данные о клиентах и поведенческие данные для создания подробных профилей клиентов, которые можно использовать, для:
Создание контента для разных целевых аудиторий;
Рекомендовать Контент по запросу;
Измерения эффективности Контента.
Примером является Чемпионат Уимблдона, который использует большие данные для предоставления подробного анализа настроений на теннисные матчи для ТВ, мобильных и веб-пользователей в режиме реального времени.
Реализация технологий Big Data не обошла стороной и медицинскую сферу. Примером тому является использование университетом Флориды свободных данных из больниц общественного здравоохранения и карты Google для создания визуальных данных, которые позволяли бы быстрее идентифицировать и эффективнее анализировать медицинскую информацию, для отслеживания распространения хронических заболеваний.
Анализ данных также применяется для улучшения ряда аспектов жизнедеятельности городов и стран. Например, зная точно, как и когда использовать технологии Big Data, можно оптимизировать потоки транспорта. Для этого берется в расчет передвижение автомобилей в режиме онлайн, анализируются социальные медиа и метеорологические данные. Сегодня ряд городов взял курс на использование анализа данных с целью объединения транспортной инфраструктуры с другими видами коммунальных услуг в единое целое. Это концепция «умного» города, в котором автобусы ждут опаздывающий поезд, а светофоры способны прогнозировать загруженность на дорогах, чтобы минимизировать пробки.
Фондовый рынок не стал исключением для применения технологий Big Data. Комиссия по ценным бумагам (SEC) использует большие данные для мониторинга деятельности фондового рынка. В настоящее время они используют сетевую аналитику и обработчики естественного языка, чтобы поймать незаконную торговую деятельность на фондовых рынках.
Розничные трейдеры, крупные банки, хедж-фонды и другие на фондовых рынках используют большие данные для анализа торговли, используемые в высокочастотной торговле, аналитике поддержки принятия решений до торговли, измерении настроений, прогнозной аналитике и т. д.
Технологии Big Data позволили разработать более сложные алгоритмы прогнозирования и контролировать их эффективность в реальном времени. Сбор, фильтрация, углубленный анализ с использованием сложных статистических моделей и удобная визуализация огромного объема данных, генерируемых фондовым рынком, создают конкурентное преимущество для инвесторов, использующих технологии Big Data в формировании успешных торговых стратегий.
Алгоритмы прогнозирования временных рядов финансовых данных
2.1 Логистическая регрессия
Логистическая регрессия — это статистическая модель, которая обычно применяется к двоичной зависимой переменной. В регрессионном анализе логистическая регрессия или логит регрессия оценивает параметры логистической модели. Более формально логистическая модель - это модель, в которой логарифмические коэффициенты вероятности события представляют собой линейную комбинацию независимых или предикторных переменных.
Для подтверждения обоснованности использования метода бинарной логистической регрессии, необходимо сравнить его с другими популярными методами по их основным параметрам, включающим в себя не только показатели, отражающие качество модели, но и перспективность использования результатов анализа в дальнейшей работе таблица 3.
Таблица 3 – Сравнительный анализ метода бинарной логистической регрессии с наиболее популярными методами
Критерий сравнения
|
Множественный дискриминантный анализ
|
Нейронные сети
|
Бинарная логистическая регрессия
|
Точность модели
|
Высокая
|
Самая высокая
|
Высокая
|
Степень сложности интерпретации результатов
|
Высокая
|
Самая высокая
|
Низкая
|
Степень сложности использования модели
|
Низкая
|
Высокая
|
Низкая
|
Логистическая регрессия позволяет находить взаимосвязь между зависимой и независимыми переменными [9]. Подобный тип регрессии является подтипом множественной регрессии. Бинарная логистическая система нашла свое применение в различных областях, таких как: медицина, банковский скоринг, прогнозирование динамики курса акций и т. д. Благодаря своей универсальности данный тип регрессии, несмотря на его «происхождение», часто используется в наборах Data Mining алгоритмов.
При множественной линейной регрессии предполагается, что зависимая переменная является линейной функцией независимых переменных формула (1):
(1)
где – коэффициенты регрессии;
– независимые переменные;
y – уравнение регрессии;
– ошибка регрессии.
При использовании моделей с дискретными зависимыми переменными есть формальная возможность применить метод наименьших квадратов, однако результаты являются неудовлетворительными с содержательной точки зрения. Интерпретация оценок коэффициентов логистической регрессии, затруднена при использовании порядковых переменных так-как при увеличении порядковой переменной на единицу, происходит переход к следующей альтернативе, однако эквивалентность такого перехода не всегда сохраняется, то есть переход от первой альтернативе ко второй не всегда численно равен переходу от второй к третьей. В случае, когда альтернатив больше двух и зависимая переменная является номинальной, в связи с произвольностью нумерации, результаты оценивания теряют смысл. Из того следует, что в случае эндогенных переменных стандартная регрессионная схема нуждается в существенной корректировке.
Например, если рассматривается исход роста или падения цен акций, то задается переменная y со значениями 1 и 0, где 1 означает, что курс будет расти, а 0, что снижения курса акций. Однако здесь возникает проблема интерпретации результата: расчетное значение зависимой переменной обозначает вероятность наступления события при данном наборе переменных:
(2)
Это неизбежно приведет к модели с предсказываемыми значениями большими 1 и меньшими 0. Но для первоначальной задачи такие значения недопустимы. Следовательно, не учитываются ограничения для диапазона значений y.
Переформулировка задачи регрессии помогает решить данную проблему. И звучит она так: предсказываем непрерывную переменную (3) со значениями на отрезке [0,1] при любых значениях независимых переменных т.е.
(3)
где, в частности, в качестве F(z) можно взять функцию распределения некоторой случайной величины, например, функцию (4) логистического распределения,
плотность вероятности которого вычисляется по формуле:
где – вероятность того, что произойдет интересующее событие.
Зависимость, связывающая вероятность события и величину y, показана на следующем графике рисунка 2:
Рисунок 2 – Логистическая кривая
Простота численной реализации процедуры оценивания параметров во многом объясняет применение функции логистического распределения на практике. Для оценки параметров логит регрессии в большинстве случаев применяют метод максимального правдоподобия.
Поскольку модель (3) нелинейна по параметрам β, то их интерпретация отличается от обычной интерпретации коэффициентов линейных регрессионных моделей. Предположим, что у функции распределения F(z) есть плотность p(z). Дифференцируя по векторному аргументу х и опуская нижний индекс номера наблюдения, получаем:
Таким образом, предельный эффект (маржинальный эффект) каждого объясняющего фактора является переменным и зависит от значений всех остальных факторов При использовании этой модели для получения представления о «среднем» предельном эффекте вычисляют производные (5) для средних по выборке значений независимых переменных х.
Линейный дискриминантный анализ
Дискриминантный анализ включает в себя методы классификации многомерных наблюдений по принципу максимального сходства при наличии обучающих функций и является разделом многомерного статистического анализа [10].
Линейный дискриминантный анализ (LDA), нормальный дискриминантный анализ (NDA) или дискриминантный анализ функций — это обобщение линейного дискриминанта Фишера, метода, используемого в статистике, распознавании образов и машинном обучении, чтобы найти линейную комбинацию объектов, которая характеризует или разделяет два, или более класса объектов или событий. Полученная комбинация может быть использована в качестве линейного классификатора или, чаще всего, для уменьшения размерности перед последующей классификацией.
Дискриминантный анализ определяет правило, в соответствии с которым объекты подмножества предметной классификации принадлежат к одному из имеющихся подмножеств. На основе сопоставления дискриминантной функции группируемого объекта, вычисленной согласно дискриминантным переменным, с некоторой константой дискриминации.
Формулировка задачи дискриминации в общем случае звучит следующим образом. Пусть результатом наблюдения над объектом является реализация k - мерного случайного вектора . Требуется установить правило, согласно которому по наблюденному значению вектора х объект относят к одной из возможных совокупностей Для построения правила дискриминации все выборочное пространство R значений вектора х разбивается на области так, что при попадании х в объект относят к совокупности .
Правило дискриминации выбирается в соответствии с определенным принципом оптимальности на основе априорной информации о совокупностях извлечения объекта из . При этом следует учитывать размер убытка от неправильной дискриминации. Предопределенная информация может быть представлена как в виде некоторых сведений о функции мерного распределения признаков в каждой совокупности, так и в виде выборок из этих совокупностей. Априорные вероятности могут быть либо заданы, либо нет. Очевидно, чем полнее исходная информация, тем точнее будут и рекомендации.
С точки зрения использование дискриминантного анализа считается более значимой, если начальные сведения о распределении представлены выборками из них. В таком случае цель дискриминации формулируется следующим способом.
Пусть выборка из совокупности
, причем каждый j – й объект выборки представлен k – мерным вектором параметров . Совершено дополнительное наблюдение над объектом, принадлежащим одной из совокупностей . Требуется построить правило отнесения наблюдения к одной из этих совокупностей.
В большинстве случаев в задачах различения переходят от вектора признаков, характеризующих объект, к линейной функции от них, дискриминантной функции гиперплоскости, наилучшим образом разделяющей совокупность выборочных точек.
В случае, когда нет информации о параметрах распределения векторов признаков, но известно, что распределение векторов признаков в каждой совокупности нормально. В такой ситуации естественно замена неизвестных параметров распределения в дискриминантной функции их наилучшими оценками. Так как можно основывать на отношении правдоподобия правила дискриминации.
Непараметрические методы дискриминации не требуют знаний о точном функциональном виде распределений и позволяют решать задачи дискриминации на основе незначительной априорной информации о совокупностях, что особенно ценно для практических применений.
Для оценки параметров статистических функций распределения в параметрических методах используются эти точки. Как правило, в параметрических методах построения функции используется нормальное распределение.
Для построения линейной дискриминантной модели выдвигаются предположения:
имеются разные классы объектов;
каждый класс имеет нормальную функцию плотности от k переменных формула (11):
(11)
где – вектор математических ожиданий переменных размерности k;
– ковариационная матрица при n=n;
– обратная матрица.
Матрица – положительно определена.
В случае, когда параметры известны дискриминацию можно провести следующим образом.
Имеются функции плотности нормально распределенных классов. Задана точка в пространстве измерений. Предполагая, что имеет наибольшую плотность, необходимо отнести точку к -му классу. Существует доказательство, что если априорные вероятности для определяемых точек каждого класса одинаковы и потери при неправильной классификации -й группы в качестве -й не зависят от и , то решающая процедура минимизирует ожидаемые потери при неправильной классификации.
Приведем пример оценки параметра многомерного нормального распределения µ и . µ и могут быть оценены по выборочным данным: и для классов. Задано выборок из некоторых классов. Математические ожидания могут быть оценены средними значениями формула (12):
. (12)
Несмещенные оценки элементов ковариационной матрицы Σ формула (13):
. (13)
Используя (12), (13) можно определить оценки и по выборкам в каждом классе, получив оценки, точку х необходимо отнести к классу, для которой функция максимальна.
Предположим, что все классы, среди которых должна проводиться дискриминация, имеют нормальное распределение с одной и той же ковариационной матрицей .
В результате получим упрощенное выражение для дискриминантной функции. На основе неравенства (14) можно определить класс, к которому должна принадлежать точка х:
. (14)
В случая, когда их ковариационные матрицы равны , а – вектор математических ожиданий класса , необходимо воспользоваться формулой (11). Тогда (14) можно представить неравенством их квадратичных форм формула (15):
. (15)
Если имеется два вектора Z и W, то скалярное произведение можно записать . В выражении (15) необходимо исключить и справа и слева, поменять у всех членов суммы знаки. Теперь преобразовать в (16):
. (16)
Аналогично проводятся преобразования по индексу . Необходимо сократить правую и левую часть неравенства (15) на 2 и, используя запись квадратичных форм, получается (17):
. (17)
Необходимо ввести обозначения в выражение (17):
Тогда выражение (17) примет вид (18):
. (18)
Затем проверяемая точка х относится к классу i, для которого линейная функция (19):
. (19)
Преимущество метода линейной дискриминации Фишера заключается в линейности дискриминантной функции (19) и надежности оценок ковариационных матриц классов.
Квадратичный дискриминантный анализ
Квадратичный дискриминантный анализ(QDA), как и линейный дискриминантный анализ представляет из себя классический классификатор, который, представляет из себя квадратичную поверхность решения соответственно.
Этот классификатор привлекателен, тем что у него есть решения с замкнутой формой, которое может быть легко вычислено, по сути своей многоклассовыми, и хорошо зарекомендовал себя на практике и не имеет гиперпараметров для настройки.
На рисунке 3 показаны границы решения для линейного дискриминантного анализа и квадратичного дискриминантного анализа. Нижняя строка демонстрирует, что линейный дискриминантный анализ может только изучать линейные границы, а квадратичный дискриминантный анализ может изучать квадратичные границы и, следовательно, более гибкий.
Рисунок 3 – Границы решения для линейного дискриминантного анализа и квадратичного дискриминантного анализа[11]
QDA может быть получен из простой вероятностной модели, который моделирует условное распределение данных по каждому классу k. Затем предсказания можно получить, используя правило Байеса формула (20):
; (20)
и мы выбираем класс k, который максимизирует эту условную вероятность.
Более конкретно, для линейного и квадратичного дискриминантного анализа моделируется, как многомерное гауссовское распределение с плотностью формула (21):
. (21)
Чтобы использовать эту модель в качестве классификатора, нам просто нужно оценить из данных обучения приоритет класса (по доле экземпляров класса ), средство класса (посредством эмпирического образца класса) и ковариационные матрицы (либо эмпирическими образцы ковариационных матриц классов или регуляризованной оценкой.
В случае QDA нет предположений о ковариационных матрицах гауссиана, что приводит к квадратичным поверхностям решения [12].
Если в модели QDA предполагается, что матрицы ковариации являются диагональными, то входы считаются условно независимыми в каждом классе, а полученный классификатор эквивалентен гауссову классификатору Наивного Байеса.
Прогнозирование курса акций с использованием библиотеки Scikit-Learn языка программирования Python
Scikit-Learn – это известная библиотека Python, содержащая широкий спектр самых разнообразных алгоритмов машинного обучения, имеет различные алгоритмы классификации, регрессии и кластеризации, случайные деревья решений, K-средние и DBSCAN, и предназначена для взаимодействия с числовыми и научными библиотеками Python NumPy и SciPy, что позволяет решать нестандартные и сложные проблемы. Эта библиотека предназначена главным образом для людей, не являющиеся специалистами в области анализа данных и машинного обучения, о чем говорят достаточно простые названия всех структурных элементов библиотеки и удобство их использования в общем, а также их сочетания с элементами (объектами и методами) других программных модулей Python.
Библиотека Numpy используется для реализации базовой структуры данных, используемая для параметров модели. Входные данные представлены в виде массивов Numpy, поэтому они легко интегрируются с другими библиотеками Python. Библиотека Numpy также обеспечивает поддержку основных арифметических и матричных операций.
Библиотека Scipy поддерживает эффективные алгоритмы линейной алгебры, специальные функции, обработку сигналов и изображений. Scipy имеет привязку ко многим стандартным числовым пакетам на основе языка программирования Fortran, таких как LAPACK, что является важным аспектом
для упрощения установки.
Данные курса акций на момент закрытия торгов ПАО «Сбербанк» и ПАО «Норникель» за период с 01.01.2009 по 14.06.2018 год для прогнозирования были взяты с сайта Финам.ru [1]. Всего в выборке участвовало 2368 наблюдений, из которых 2268 были обучающей выборкой, а оставшиеся 100 наблюдений тестовой. Данные для анализа загружаются из csv файла рисунки 4 и 5.
Рисунок 4 – Данные курса акций ПАО «Сбербанк»
Рисунок 5 – Данные курса акций ПАО «Норникель»
Графики курса акций ПАО «Сбербанк» и ПАО «Норникель» представлены на рисунках 5 и 6. Ось абсцисс – даты котировок, а ось ординат это цены акций на момент закрытия торгов в соответствующий день.
Рисунок 5 – График курса акций ПАО «Сбербанк»
Рисунок 6 – График курса акций ПАО «Норникель»
Добавили к набору данных 2 столбца, которые будут хранить задержанные цены закрытия, сдвинутые на 1 день (столбец Lag1) и на 2 дня (Lag2) рисунок 7 и 8.
Рисунок 7 – Добавление столбцов с лагами ПАО «Сбербанк»
Рисунок 8 – Добавление столбцов с лагами ПАО «Норникель»
Результаты прогнозирования логистической регрессии для курса акций ПАО «Сбербанк» и ПАО «Норникель» представлены на рисунках 9 и 10.
Рисунок 9 – Логистическая регрессия ПАО «Сбербанк»
Рисунок 10 – Логистическая регрессия ПАО «Норникель»
Логистическая регрессия для акций ПАО «Сбербанк» предсказывает в 51 случаях из 100 правильную тенденцию, роста акций и в 52 случаях для ПАО «Норникель».
Результаты прогнозирования линейного дискриминантного анализа для курса акций ПАО «Сбербанк» и ПАО «Норникель» представлены на рисунках 11 и 12.
Рисунок 11 – Линейный дискриминантный анализ ПАО «Сбербанк»
Рисунок 12 – Линейный дискриминантный анализ ПАО «Норникель»
Логистическая регрессия для акций ПАО «Сбербанк» предсказывает в 51 случаях из 100 правильную тенденцию, роста акций и в 52 случаях для ПАО «Норникель».
Результаты прогнозирования квадратичного дискриминантного анализа для курса акций ПАО «Сбербанк» и ПАО «Норникель» представлены на рисунках 13 и 14.
Рисунок 13 – Квадратичный дискриминантный анализ ПАО «Сбербанк»
Рисунок 14 – Квадратичный дискриминантный анализ ПАО «Норникель»
Из результатов квадратичного дискриминантного анализа, можно сделать выводы о том, что прогнозирование роста или падения цен акций на закрытие торгов для 53 случаем из 100 мы правильно предсказали роста или падения для акций ПАО «Сбербанк» и это лучшая модель из всех трех моделей. Ну а что же касается прогнозов акций ПАО «Норникель», то мы в 49 случаях из 100 правильно предсказали направление роста акций, но в общем случае для ПАО «Норникель» эта модель прогнозирования худшая из всех.
Из полученных результатов, следует, что не существует универсального метода прогнозирования тенденции роста акций. Каждый отдельный случай должен рассматриваться в отдельности, так как для разного рода акций разные модели показали разный результаты: для ПАО «Сбербанк» это линейный или квадратичный дискриминантный анализы, а для ПАО «Норникель» это линейный дискриминантный анализ.
ЗАКЛЮЧЕНИЕ
В ходе выполнения курсовой работы были разработана статистические модели прогнозирования тенденции временного ряда на основе логистической регрессии, линейного и квадратичного дискриминантного анализа с помощью библиотеки Scikit-Learn языка программирования Python.
В результате анализа результатов изученных и построенных методов статистических анализа временного ряда были выявлены следующие задачи, требующие дальнейшего изучения:
более точных методов статистического анализа временных рядов;
построение нейронных сетей для анализа и прогнозирования временных рядов.
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
Финам.ru – инвестиционная компания, брокер, Фондовая биржа ММВБ и РТС, стоимость, котировки, курс акций URL: http://finam.ru/ (дата обращения 10.06.2018)
Douglas, L. 3D Data Management: Controlling Data Volume, Velocity and Variety, L. Douglas, – Gartner, 2001.
Christy Pettey, Gartner Says Solving 'Big Data' Challenge Involves More Than Just Managing Volumes of Data / Christy Pettey, Laurence Goasduff, – Gartner, 2011.
Data Age 2025: The Evolution of Data to Life-Critical URL: https://www.seagate.com/www-content/our-story/trends/files/Seagate-WP-DataAge2025-March-2017.pdf (дата обращения 10.06.2018)
Натан Марц, Большие данные. Принципы и практика построения масштабируемых систем обработки данных в реальном времени / Натан Марц, Джеймс Уоррен, – М.: Вильямс. -2016. -292 c.
Haihong, E., Survey on NoSQL database, Pervasive Computing and Applications (ICPCA) / E. Haihong, Le Guan, Du Jian, – 2011 6th International Conference on 26-28 Oct. 2011, p. 363-366
Ghemawat, S., MapReduce: Simplified Data Processing on Large Clusters Proc. of the Sixth Symposium on Operating System Design and Implementation / S. Ghemawat, J. Dean, – San Francisco, USA, 2004. Vol. 6, N 10. P. 137-150.
White, T., Hadoop: The definitive guide / T. White, – 3rd -O’Reilly Media, 2012. 688 p.
Цыплаков, А.А., Некоторые эконометрические методы. Метод максимального правдоподобия в эконометрии / А.А. Цыплаков, – Учебное пособие. - Новосибирск: НГУ, 1997, 129 с.
Дубров, А.М., Многомерные статистические методы / А.М. Дубров, В.С. Мхитарян, Л.И. Трошин, – Москва. 2003г., 352 с.
Linear and Quadratic Discriminant Analysis URL: http://scikit-learn.org/stable/modules/lda_qda.html#id1 (дата обращения 10.06.2018)
Hastie, T., The Elements of Statistical Learning / T. Hastie, R. Tibshirani, J. Friedman, – Section 4.3, 2008, p.106-119.
ПРИЛОЖЕНИЕ А
Код реализации статистических методов в Python
import datetime
import datetime
import numpy as np
import pandas as pd
import sklearn
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LogisticRegression
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis as lda
from sklearn.discriminant_analysis import QuadraticDiscriminantAnalysis as qda
def xrange(a, x):
return iter (range (a, x))
pd.set_option ('display.max_columns', 50)
pd.set_option ('display.width', 500)
symbol = "SBRCY" # Код финансового инструмента на сайте Yahoo Finance
start_date = datetime.datetime (2009, 1, 1) # Начальная дата - 1 июля 2013
end_date = datetime.datetime (2018, 6, 14) # Конечная дата - 30 апреля 2014
ts1 = pd.read_csv ('../OpenCV/nornik.csv', delimiter=',')
# ts1 = pd.read_csv('../OpenCV/sber.csv', delimiter=',')
# ts1 = DataReader(symbol, "Finam", start_date, end_date)
print (ts1.head (3)) # Вывод первых трёх строк таблицы
print (ts1.tail (2)) # Вывод последних двух строк таблицы
ts2 = pd.DataFrame (index=ts1.index)
ts2["Today"] = ts1["Close"]
# ts2["Volume"] = ts1["Volume"]
print (ts2.head (3))
count = 2
for i in xrange (0, count):
ts2["Lag%s" % str (i + 1)] = ts1["Close"].shift (i + 1)
print (ts2.head (3))
ts = pd.DataFrame (index=ts2.index)
# ts["Volume"] = ts2["Volume"]
ts["Today"] = ts2["Today"].pct_change () * 100.0
for i, x in enumerate (ts["Today"]):
if (abs (x) < 0.0001):
ts["Today"][i] = 0.0001
# print (ts.head(3))
for i in xrange (0, count):
ts["Lag%s" % str (i + 1)] = ts2["Lag%s" % str (i + 1)].pct_change () * 100.0
ts["Direction"] = np.sign (ts["Today"])
ts = ts[count + 1:] # Пропустили первые count дней, т.к. для них некоторые данные не определены (NaN)
print (ts.head (7))
# start_test = datetime.datetime(2014,1,1)
# start_test = 2268
xin = ts.count () * 0.8
start_test = 2268
cols = []
for i in xrange (0, count):
cols.extend (["Lag%s" % str (i + 1)])
# print (cols)
x = ts[cols] # Входные данные для обучения
y = ts["Direction"] # Целевые значения
x_train = x[x.index < start_test] # Входные данные для обучения (март)
print (x_train[0:5]) # Вывели для проверки первые 5 строк обучающей выборки
x_test = x[x.index >= start_test] # Входные данные для теста (апрель)
print (x_test[0:5]) # Вывели для проверки первые 5 строк тестовой выборки
y_train = y[y.index < start_test] # Целевые значения для обучения (март)
print (y_train[0:5])
y_test = y[y.index >= start_test] # Целевые значения для теста (апрель)
print (y_test[0:5])
# scaler = preprocessing.StandardScaler().fit(x_train)
# x_train = scaler.transform(x_train)
# x_test = scaler.transform(x_test)
# print x_train[0:5] # Вывели для проверки первые 5 строк обучающей выборки после масштабирования
d = pd.DataFrame (index=y_test.index) # Набор данных для проверки модели
d["Actual"] = y_test
x_tr = x_train.values[:]
y_tr = y_train.values[:]
print (x_tr[0:5])
print (y_tr[0:5])
xs = x_tr[:, 0][y_tr == 1]
ys = x_tr[:, 1][y_tr == 1]
plt.scatter (xs, ys, c="green")
xs = x_tr[:, 0][y_tr == -1]
ys = x_tr[:, 1][y_tr == -1]
plt.scatter (xs, ys, c="red")
plt.legend (["Up", "Down"])
plt.xlabel ('Lag1')
plt.ylabel ('Lag2')
plt.savefig ('lags_Nornik.png', transparent=False)
# plt.show()
model1 = LogisticRegression ()
model1.fit (x_train, y_train) # Обучение (подбор параметров модели)
d['Predict_LR'] = model1.predict (x_test) # Тест
# Считаем процент правильно предсказанных направлений изменения цены:
d["Correct_LR"] = (1.0 + d['Predict_LR'] * d["Actual"]) / 2.0
print (d.tail (10))
hit_rate1 = np.mean (d["Correct_LR"])
print ("Процент верных предсказаний LR: %.1f%%" % (hit_rate1 * 100))
model2 = lda ()
model2.fit (x_train, y_train) # Обучение (подбор параметров модели)
d['Predict_LDA'] = model2.predict (x_test) # Тест
# Считаем процент правильно предсказанных направлений изменения цены:
d["Correct_LDA"] = (1.0 + d['Predict_LDA'] * d["Actual"]) / 2.0
print (d.tail (10))
hit_rate2 = np.mean (d["Correct_LDA"])
print ("Процент верных предсказаний LDA: %.1f%%" % (hit_rate2 * 100))
model3 = qda ()
model3.fit (x_train, y_train) # Обучение (подбор параметров модели)
d['Predict_QDA'] = model3.predict (x_test) # Тест
# Считаем процент правильно предсказанных направлений изменения цены:
d["Correct_QDA"] = (1.0 + d['Predict_QDA'] * d["Actual"]) / 2.0
print (d.tail (10))
hit_rate3 = np.mean (d["Correct_QDA"])
print ("Процент верных предсказаний QDA: %.1f%%" % (hit_rate3 * 100))
Do'stlaringiz bilan baham: |