Вы находитесь на странице: 1из 26

РЕФЕРАТ

Отчет о научно-исследовательской работе бакалавра: 26 с., 17 рисунков,


10 источников.

МАТЕМАТИЧЕСКАЯ СТАТИСТИКА, МАШИННОЕ ОБУЧЕНИЕ,


МЕТОДЫ ПРОГНОЗИРОВАНИЯ, АЛГОРИТМЫ, PYTHON, ДАТАСЕТ,
ВРЕМЕННЫЙ РЯДЫ, КРИПТОВАЛЮТА.

Объектом исследования являются различные алгоритмы


прогнозирования цены за биткоин.

Целью работы является написание программного модуля для


прогнозирования цены за биткоин на основе временных рядов.

Рассмотрены такие аспекты, комплекс алгоритмов машинного обучения,


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

2
СОДЕРЖАНИЕ
Введение ................................................................................................................... 4
1 Постановка задачи................................................................................................ 5
2 Подготовка данных .............................................................................................. 6
3 Анализ моделей и библиотек для прогнозирования ........................................ 9
3.1 Метрики для оценки ................................................................................... 9
3.2 ARIMA ......................................................................................................... 9
3.3 LSTM .......................................................................................................... 11
3.4 Prophet ........................................................................................................ 14
3.5 Sktime ......................................................................................................... 15
4 Сравнение алгоритмов ....................................................................................... 18
Заключение ............................................................................................................ 23
Список использованных источников ................................................................. 24
Приложение А ....................................................................................................... 26

3
ВВЕДЕНИЕ
Данный отчет посвящен разбору методов машинного обучения для
прогнозирования основе временных рядов. Вспомним определение:
временной ряд — это последовательность упорядоченных во времени
числовых показателей, характеризующих уровень состояния и изменения
изучаемого явления. Временные ряды отлично подходят для предсказания
грядущего поведения исследуемой области на изменение своих атрибутов
(показателей).
В нашем случае требуется построить формализованный, то есть
основанный на построении модели прогнозирования, метод, который
применяется в случае невозможности применения человеком аналитического
подхода для определения влияния внешних факторов на объект изучения.
Сама реализация метода будет осуществляться на языке
программирования Python, но так как этот язык богат разными библиотеками,
направленных на решение самых различных задач, в том числе и на создание
нейронных сетей для предсказания чего-либо, нам не требуется искать именно
ту, которая работает конкретно с временными рядами, ведь логика работы у
всех похожая.
В данной работе будут рассмотрены наиболее подходящие алгоритмы
для прогнозирования временных рядов. А также будет рассмотрен краткий
процесс подготовки, разделения и оптимизации датасета для дальнейшей
работы с ним [1].

4
1 Постановка задачи
Изменяющиеся во времени объединение значений {𝑥1 , 𝑥2 , … , 𝑥𝑛 },
представляющие собой величины каких-либо атрибутов, принято называть
временным рядом. При этом, каждый отрезок времени относится к каждому
из множества значений атрибута. Целью прогнозирования является выявление
закономерности, с помощью которой можно будет определять значение 𝑥 в
момент времени 𝑡𝑛+1 , 𝑡𝑛+2 и т.д [2].

Из прошлой работы мы выяснили, что временные ряды бывают


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

На основе всего выше перечисленного можно сформулировать


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

5
2 Подготовка данных

Одна из важнейших частей подготовки качественного алгоритма –


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

В случае с временными рядами, датасетом является файлы с


расширением .xlxs или .csv – файлы хранят табличные значения, с которыми
языки программирования работают без каких-либо затруднений.

Чаще всего бывает так, что в больших компаниях период подготовки


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

В нашем случае будет предоставлен уже сформированный, но еще не


обработанный датасет со всеми выбросами, пробелами и т.п.

Первым шагом исправления датасета является его оптимизация.


Например, нам предоставили датасет, имеющий достаточно большой тип
данных, например, long integer, но, при этом, хранящих совсем небольшие
значения. Тогда будет очень кстати перевести его в более подходящий тип,
например, short, которых занимает в 4-8 раз меньше места. Таким образом мы
уже оптимизировали работу нашего алгоритма в несколько раз, освободив
оперативную память от лишней работы.

Для дальнейших исправлений обычно высчитывают медиану (median),


моду (mode) и среднее (mean). Медиана – это то значение, которое находится
равно по середине полученной выборки. Перед тем, как ее вычислить,
требуется отсортировать весь массив выборки. Мода – это самое часто
встречающееся значение в нашей выборке. Среднее – всем известное среднее
арифметическое – отношение значений всех объектов к их количеству.

6
Визуальный пример среднего, медианы и моды относительно набора значений
можно увидеть на Рисунке 1.
Среднее значение полезно тем, что помогает устранить множество
ошибок. Бывают ситуации, когда некоторые параметры датасета явно сильно
отличаются от всевозможных значений. Например, цена в один день цена на
биткоин поднялась не на 1-5%, а на 105 %, а потом обратно снизилась до
нормальных значений. Такого же в принципе быть не может… Подобные
случаи называют выбросами, и они сильно влияют на работу алгоритма.
Чтобы избежать дальнейшей ошибки, выбросы выявляются и заменяются на
среднее. То же самое можно сделать с пробелами – атрибуты, хранящие
значение Null – пустое значение.
Это лишь несколько основных шажков, требуемых для получения
качественного датасета. Еще данные можно разбивать на отрезки,
комбинировать атрибуты, добавлять новые секции, классифицировать и т.д.

Рисунок 1 – значения среднего, медианы и моды на графике


Для работы с данными в программе следует подключить некоторые
библиотеки:
• matplotlib – библиотека для графической визуализации данных;
• math – библиотека для подключений математических функций вроде
синуса, логарифма, экспоненты и т.д.;
7
• numpy – библиотека, упрощающая работу с различными
математическими объектами;
• pandas – библиотека для обработки и анализа данных.
На Рисунке 2 представлен пример подключения данных библиотек и их
пакетов.

Рисунок 2 – пример подключения библиотек и их пакетов в Python


Обычно, при разработке систем прогнозирования принято делить
датасет на две части в отношении 3 к 1 соответственно:
• training data – данные, используемые для тренировки алгоритма;
• test data – данные, используемые для сравнения результатов вывода
алгоритма [3].

8
3 Анализ моделей и библиотек для прогнозирования
3.1 ARIMA
Модель ARIMA – интегрированная модель авторегрессии скользящим
средним – является моделью и методологией временных рядов. Это дочерняя
версия моделей ARMA, предназначенных для интегрированных или
разностностационарных рядов. Данная модель имеет следующий вид в виде
ряда:
𝑝 𝑞

Δ𝑑 𝑋𝑡 = 𝑐 + ∑ 𝑎𝑖 Δ𝑑 𝑋𝑡−𝑖 + ∑ 𝑏𝑗 εt−j + 𝜀𝑡 ,
𝑖=1 𝑗=1

где 𝜀𝑡 – стационарный временной ряд, Δ𝑑 – оператор разности временного ряда


порядка 𝑑, 𝑎𝑖 , 𝑏𝑗 , 𝑐 –набор коэффициентов [4].
Так же модель определяется параметрами 𝐴𝑅𝐼𝑀𝐴(𝑝, 𝑑, 𝑞), где:
• p – количество наблюдений отставания или порядок отставания;
• d – степень различия, то есть сколько раз исходные наблюдения
различаются;
• q – порядок скользящей средней.
Для того, чтобы использовать ARIMA в программной реализации языка
программирования Python, следует подключить библиотеку statsmodels,
которая представляет модель следующим образом:
1. Определить модель, вызвав ARIMA() и определив параметры 𝑝, 𝑑, 𝑞.
2. Вызвать метод fit() для обучения модели.
3. Указав индекс нужного промежутка времени, вызвать метод predict() для
получения искомого значения.
Распишем данные шаги поподробнее. Сначала заполняем параметры,
например, ARIMA(5, 1, 0). Здесь мы установили значение задержки для
авторегрессии, равное 5, порядок разности взяли за 1, и, для представления
ряда как стационарный, зададим размер окна скользящего среднего, равному
0.

9
Далее при запуске мы получаем сводную информацию о модели. Во-
первых, можно вывести график остаточных ошибок, с помощью которого
можно попробовать выявить информацию о тренде, ведь модель могла ее не
заметить. Далее, можно вывести еще один график плотности значений
остаточных ошибок, обычно центрированных на нуле.
Теперь с помощью метода arimaresoults() мы можем получить
прогнозируемые данные, указав индекс требуемого временного шага в качетве
аргумента. То есть, если последний временной шаг имеет индекс 100, то мы
можем получить значение при индексе временного шага, равного 101 или
102… Так же можно использовать упрощенную функцию predict() для
одношагового прогнозирования.
В результате мы можем получить набор прогнозов из k нужных шагов и
сравнить их с test data с помощью графического моделирования. Пример
такого сравнения представлен на Рисунке 3 [5].

Рисунок 3 – сравнение test и train data на графике

10
3.2 LSTM
Иной способ, с помощью которого можно прогнозировать временные
ряды – модель LSTM (долгая краткосрочная память). Данная модель была
впервые представлена в 1997 году Зеппом Хохрайтер и Юргеном
Шмидхубером.
Модель LSTM имеет структуру цепочки и в каждом звене хранит по 4
слоя функции активации, как показано на Рисунке 4. Такая структура очень
схожа со структурой модели рекуррентной нейронной сети (RNN), но
последняя имеет всего один слой функции активации.

Рисунок 4 – структура модели LSTM


Главным элементом модели является состояние ячейки – ее можно
представить в виде линии, которая каждый раз подвергается некоторым
линейным преобразованиям, проходя последовательно по каждому звену из
своей цепочки. Данную компоненту можно увидеть на Рисунке 4 – она
последовательно проходит через элементы «х» и «+». За хранение
информации в ячейке отвечают ворота (gates). Перед тем, как ячейка перейдет
ко следующему звену, ворота текущего звена, показанные на Рисунке 5,
основываясь на некоторых условиях реализуют булеву функцию, которая в
случай True решает передать дополнить ячейку новой информацией и в случае
False – удалить всю ее информацию.
𝑓𝑡 = 𝜎(𝑊𝑓 ∙ [ℎ𝑡−1 , 𝑥𝑡 ] + 𝑏𝑓 ),
11
где 𝑊𝑓 – оператор функции активации, 𝑡 - то количество, сколько раз нам
нужно обновить каждое из состояний, 𝑥𝑡 – входное значение, ℎ𝑡 – значение
после преобразования, 𝑏𝑓 – настраиваемый коэффициент, [ℎ𝑖 , 𝑥𝑖 ] – вектор
значений-кандидатов.

Рисунок 5 – сигмоидальная нейронная сеть с операцией поточного


умножения
Так как каждое звено модели хранит по 3 слоя активации, то,
соответственно, каждый слой имеет свои ворота.
Допустим, что ворота определили статус True, а значит наступил этап,
когда нужно решить, какая информация будет загружена в состояние ячейки.
Данный этап делится на два подпункта:
1. Во-первых, сигмоидальный слой 𝑖𝑡 ставит флаги та те значения, которые
следует обновить:
𝑖𝑡 = 𝜎(𝑊𝑖 ∙ [ℎ𝑡−1 , 𝑥𝑡 ] + 𝑏𝑖 )
2. После этого подключается tanh-слой, который создает новый значений-
кандидатов (𝐶𝑡 ), который добавляется в ячейку состояний:
𝐶𝑡 = tanh⁡(𝑊𝐶 ∙ [ℎ𝑡−1 , 𝑥𝑡 ] + 𝑏𝐶 )
Далее остается только сменить старое состояние ячейки на новое путем
умножения предыдущих состояний (𝑓𝑡−1 ) на старый вектор значений-
кандидатов и прибавить последнее значение:
𝐶𝑡 = 𝑓𝑡 ∙ 𝐶𝑡−1 + 𝑖𝑡 ∙ 𝐶𝑡̇

12
Теперь осталось только преобразовать состояние ячейи в новое значение
𝑓𝑡 [6]:
𝑜𝑡 = (𝑊𝑜 ∙ [ℎ𝑡−1 , 𝑥𝑡 ] + 𝑏𝑜 )
𝑓𝑡 = 𝑜𝑡 ∙ tanh⁡(𝐶𝑡 )
Покажем, как модель LSTM должна быть реализована на языке Python.
Создадим класс, например, LSTM, наследуемый от класса “nn.Module”,
импортируемый из библиотеки PyTorch.
В классе LSTM нужно определить несколько параметров:
• input_size – длина массива входных данных;
• hidden_layer_size – хранит в себе количество скрытых слоев (hidden
layers) и количество нейронов для каждого слоя;
• output_size – количество элементов на выходе, то есть количество
предсказанных значений.
Алгоритм принимает на вход 3 параметра – предыдущее скрытое
состояние, предыдущее состояние ячейки и текущий вход. Реализация первого
шага продемонстрирована на Рисунке 6.

Рисунок 6 – Прогнозирование n будущих значений


Далее создается объект класса LSTM() и используется метод кросс-
энтропийных потерь, она пригодится нам при обучении модели. Чтобы
оптимизировать код, добавим функцию adam optimizer, как показано на
Рисунке 7:

13
Рисунок 7 – функции потерь и оптимизатора
И в финале собираем блок для тренировки модели. Обязательно нужно
обозначить количество эпох, то есть, сколько раз мы хотим повторить процесс
обучения. Тут тоже надо подходить с умом: если взять достаточно мало эпох,
то модель не сможет обучиться достаточно хорошо и результаты будут
недостаточно точными. Если взять слишком много эпох – произойдет
переобучение. Ни один из этих двух исходов нам не подходит… Чтобы понять,
какое количество эпох следует взять, мы и объявили функцию потерь [7].

Рисунок 8 – блок обучения модели


3.3 Prophet
Prophet (пророк) – известная библиотека с кодом в open-source,
выпущенная в 2017 году компанией Facebook и предназначенная для
прогнозирования временных рядов.

14
Данная модель оценивает параметры с помощью принципов
байесовской статистики (или путем нахождения апостериорного максимума),
применяя платформу вероятностного программирования Stan. Время
выступает в качестве регрессора и способствует модели связать между собой
линейные и нелинейные функции в качестве компонентов. По технике Холт-
Винтерса, пророк моделирует сезонность как аддитивную компоненту и
составляет задачу прогнозирования не явно “всматриваясь” в каждую
временную зависимость, в как таску по подгонке кривой.
Модель имеет слабость к оснащенности или к приспособленности по
работе с компонентом тренда, но это можно компенсировать увеличением
точек изменения, встроенных в нее.
Ее сезонные компоненты аппроксимируются следующим образом:
𝑁
2𝜋𝑛𝑡 2𝜋𝑛𝑡
𝑠(𝑡) = ∑(𝑎𝑛 𝑐𝑜𝑠 ( ) + 𝑏𝑛 𝑠𝑖𝑛 ( )),
𝑃 𝑃
𝑛=1

где 𝑃 – период, [𝑎𝑛 , 𝑏𝑛 ] – параметры для измерения сезонности модели.


Перейдем к коду… Обозначим нашу модель как M0 – изначально это
будет списком. Для получения предсказания требуется создать таблицу с
датами, для которых мы хотим найти значения (горизонт), а после – подать
таблицу с М0 в функцию predict.
На удивление, процесс предсказания новых значений умещается
буквально в пару строк, все остальное время занимает импортирование
библиотек и пакетов, подготовка датасета, графическое моделирование [8].
3.4 Sktime
Scikit-learn – один из самых популярных пакетов Python, применяемый
Machine Learning и Data Science для классификации, прогнозирования,
группировки данных с учителем и без. Данная библиотека охватывает
широкий спектр задач, например, сведение размерности к минимуму,
препроцессинг, регрессия, детектирование аномалий, кластеризация и др.

15
Специально для временных рядов у Scikit-learn есть расширение API –
Sktime, которая пользуется алгоритмами, прописанными в Scikit-learn и
тулами совместного использования моделей, основанных на строгой
таксономией задачах обучения. Sktime предоставляет метод fit для тренировки
модели и метода predict для составления будущих прогнозов. Метод transform
преобразовывает данные разными способами:
• изменение таблиц методом главных компонент,
функционирующие с вариациями случайных величин;
• переработка рядов в примитивы, то есть данный просто
переводятся в числовой формат;
• ряды к рядам, например, преобразование Фурье;
• детрендинг – возвращают временной ряд в том же домене, что и
входной ряд.
Перед началом работы с Sktime, следует импортировать несколько
функций, которые смогут быстро разделить датасет на тестовый и
тренировочный, а также построит наглядный график. Демонстрация и работа
кода представлены на Рисунках 9 и 10 соответственно.

Рисунок 9 – импортирование функций в код

Рисунок 10 – графическое представление разделенного датасета

16
Далее, чтобы произвести прогнозирование Sktime подключает свой
метод AutoARIMA – он проводит множество дифференциальных тестов для
определения порядка дифференцирования, а потом подбирает модель в
пределах фиксированных диапазонов. Для выбора наиболее подходящей
модели метод оптимизирует заданный информационный критерий (например,
информационный критерий Akaike, скорректированный информационный
критерий Akaike, Байесовский информационный критерий, информационный
критерий Ханнана-Куинна) и возвращает условие, минимизирующее
значение. Важно знать, что есть вероятность, что AutoARIMA может не найти
подходящую сходящуюся модель из-за проблем со стационарностью. В таком
случае, придется исправлять все вручную.
Запишем код и сравним прогнозы метода AutoARIMA с ранее
выведенным тестовым набором – Рисунки 11 и 12 [9].

Рисунок 11 – реализация метода AutoARIMA

Рисунок 12 –визуальное сравнение работы метода AutoARIMA с тестовым


набором

17
4 Сравнение алгоритмов
Для того, чтобы понять, насколько хорошо работает ваша модель
принято использовать специальные оценки эффективности.
Часто бывает трудно определить, какие показатели наиболее подходят
для оценки алгоритмов из-за больших отклонений, которые часто возникают
между прогнозируемым и фактическим значением или иным образом. Оценка
производительности алгоритмов машинного обучения оценивается на основе
точности прогнозирования, которая часто неуместна в случае
несбалансированных данных, а затраты на ошибки значительно различаются.
Наиболее популярные метрики:
Средняя ошибка (ME) – показывает среднее значение разницы между
фактическими и прогнозируемыми значениями.
Средняя процентная ошибка (MPE) – показывает среднее значение
процентной разницы между фактическими и прогнозируемыми значениями. И
ME, и MPE помогут указать, являются ли прогнозы предвзятыми, чтобы быть
непропорционально положительными или отрицательными.
Среднеквадратичная ошибка (RMSE) – стандартное отклонение
выборки различий между прогнозируемыми значениями и наблюдаемыми
значениями. Это отличное измерение для сравнения моделей, поскольку оно
показывает, сколько отклонений от среднего прогнозируемые значения
падают.
Средняя абсолютная процентная ошибка (MAPE) –часто полезна для
целей отчетности, поскольку она выражается в общих процентах, это будет
иметь смысл даже для тех, кто понятия не имеет, что представляет собой
“большая” ошибка с точки зрения потраченных долларов или проданных
виджетов.
Accuracy – сравнивает, насколько близко новое тестовое значение к
предсказанному и вычисляется по следующей формуле:

18
𝑇𝑃 + 𝑇𝑁
𝐴𝑐𝑐𝑢𝑟𝑎𝑐𝑦 = ∙ 100%,
𝑇𝑃 + 𝑇𝑁 + 𝐹𝑃 + 𝐹𝑁
где 𝑇𝑃 – true positive, 𝑇𝑁⁡– true negative, 𝐹𝑃⁡– false positive, 𝐹𝑁 – false negative
error rates.
Recall– измеряет способность теста быть положительным, когда условие
действительно присутствует.
𝑇𝑃
𝑅𝑒𝑐𝑎𝑙𝑙 = ∙ 100%
𝑇𝑃 + 𝐹𝑁
Precision – измеряет способность теста быть отрицательным, когда
условие действительно присутствует.
𝑇𝑁
𝑃𝑟𝑒𝑐𝑖𝑠𝑖𝑜𝑛 = ∙ 100%
𝑇𝑁 + 𝐹𝑃
В разных статьях используют разные метрики, поэтому будем для
сравнения вышеупомянутых алгоритмов будем опираться на них [10].
В результате поиска мы обозначили 4 модели, которые имеют свои
преимущества и недостатки. Так как все эти модели имеют некую схожесть,
имея нужные метрики, давайте сравним их и выявим самую наиболее
подходящую нам и в следующем семестре будем строить программную
реализацию на ее основе.
Так как у нас еще нет готового датасета и кода, будем производить
сравнения из ранее написанных статей и блогов (GitHub, Kaggle, Habr).
В одной из работ сравниваются алгоритмы ARIMA и LSTM для
предсказания различных трендов. Ниже на Рисунке 13 приведен код
реализации модели ARIMA.

Рисунок 13 – метод predict для ARIMA

19
Для модели LSTM код тот же, за исключением последней строчки –
вместо arima_model сделали lstm_model. Для сравнения моделей посмотрим на
графики Рисунков 14 и 15, и на полученные метрики:

Рисунок 14 – график с предсказаниями модели ARIMA

Рисунок 15 – график с предсказаниями модели LSTM


Данные показывают, что модели вели себя очень похоже, да так, что
accuracy получилась примерно одинаковая, но суда по среднеквадратичному
отклонению (RMSE) ARIMA показала себя лучше, чем LSTM: ARIMA –
45.495, LSTM – 46.671. таким образом LSTM отпадает из списка
исследований. Сравнение по трем метрикам можно увидеть в Таблице 1:
Таблица 1 – сравнение метрик LSTM и ARIMA

20
Модели Accuracy Precision Recall

LSTM 99.48 0.99 0.99

LSTM 99.72 1 1

Далее сравним библиотеки Prophet и Sktime. В их случае


рассматривалось изменение количества запросов в Google для мониторинга
цен на MacBook Pro. Разработчики взяли данные объемом в 5 лет и
предсказали будущие значения еще на год вперед.
Использую библиотеку Prophet были получены следующие оценки.

Рисунок 16 – результат работы Prophet


Библиотека Sktime сработала заметно хуже. Вот, с каких значений
начинались метрики Sktime: MSE ≈ 0.57, RMSE ≈ 0.81, MAE ≈ 0.57, MAPE
≈ 0.77.
Таким образом, осталось выбрать между ARIMA и Prophet. В одной
работе прогнозировали ежемесячное производство алкоголя.

21
После прогноза модели получили следующие показатели,
продемонстрированные на Рисунке 17.

Рисунок 17 – сравнение моделей ARIMA и Prophet


Получается, на первом месте по всем показателям у нас выходит ARIMA
– ее RMSE была на 3-4% ниже, чем у Prophet. Эту модель мы будем
использовать в дальнейшей работе по разработки приложения для
предсказания криптовалюты.

22
ЗАКЛЮЧЕНИЕ
В ходе данной работы мы познакомились с несколькими моделями и
библиотеками, нацеленных на прогнозирование временных рядов, разобрали
их основные методы и шаги реализации, провели несколько программных
реализаций для наглядных примеров, вывели наиболее оптимальную модель
из этого набора. Так же была частично затронута тема конфигурации и
обработки датасета. В следующей работе мы начнем программную
реализацию нашего алгоритма по следующему плану:
1. Первым делом – сбор данных. В случае прогнозирования
временных рядов за данными можно обратиться к платформе Kaggle, так как
она является одной из самых популярных платформ для проведения
соревнований на тему Machine Learning.
2. Далее, как было упомянуто в разделе 2 – наш датасет подвергнется
обработке дабы избежать проблем с обучением. В Приложении А хранится
упрощенный блок кода для оптимизации датасета.
3. Создание самой модели.
4. Обучение модели. Для этого следует подключит несколько
функций, например, функцию потерь, оптимизации. Так же передаем массив
с данными, количество эпох обучения, данные для валидационной метрики –
с ее помощью мы поймем насколько хорошо обучается наша модель.
5. Возможно придется подключить метод регуляризации – он
понадобится в случае переобучения модели.
6. Проведение анализа полученных прогнозов и составление
итогового вывода.

23
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

1 Stewart, M. The Limitations of Machine Learning [Электронный


ресурс] / M. Stewart // towards data science. – 2019. – URL.:
https://towardsdatascience.com/the-limitations-of-machine-learning-a00e0c3040c6
(дата обращение 21.05.2022).

2 Котенко А. П. Эконометрика. Временные ряды: метод. указания к


лабораторным работам / сост. А.П. Котенко, О.А. Кузнецова. – Самара:
Издательство Самарского университета, 2016. – 20 с.

3 Machine learning [Электронный ресурс] // 2020. – URL:


http://www.machinelearning.ru (дата обращения: 22.05.2022).
4 Журавлев Ю.И. Об алгебраическом подходе к решению задач
распознавания и классификации // Проблемы кибернетики. Вып. 33 М.: Наука,
1978, С. 5-68.
5 Рудаков К.В. О применении универсальных ограничений при
исследовании алгоритмов классификации //Кибернетика. 1988. № 1. с. 1-5.
6 Illustrated Guide to LSTM’s and GRU’s: A step by step explanation
[Электронный ресурс] // 2018. – URL: https://towardsdatascience.com/illustrated-
guide-to-lstms-and-gru-s-a-step-by-step-explanation-44e9eb85bf21 (дата
обращения: 01.06.2022).
7 Understanding LSTM Networks [Электронный ресурс] // 2015. –
URL: https://colah.github.io/posts/2015-08-Understanding-LSTMs (дата
обращения: 04.06.2022).
8 Yenidogan, I. Bitcoin Forecasting Using ARIMA and PROPHET
[Электронный ресурс] / A. Cayir, O. Kozan, T. Dag, C. Arslan // IEEE. – 2018. –
URL: https://ieeexplore.ieee.org/abstract/document/8566476/authors#authors (дата
обращения 04.06.2022).
9 Rokatansky, M. Sktime: унифицированная библиотека Python для
машинного обучения и работы с временными рядами [Электронный ресурс] /
M. Rokatansky // Habr. – 2020. – URL:
https://habr.com/ru/company/otus/blog/511782/ (дата обращения 07.06.2022).
24
10 Violino, B. When to use each method and technique? [Электронный
ресурс] / B. Violino // InfoWorld. – 2018. – URL:
https://www.infoworld.com/article/3300618/machine-learning-when-to-use-each-
method-and-technique.html (дата обращения 07.06.2022).

25
ПРИЛОЖЕНИЕ А

Подготовка датасета

import pandas as pd

path=" "

df = pd.read_csv(path)

df = pd.read_csv(path,header=None)

path = " "

df.to_excel(path)

df.dropna()

df.replace(missing value, new value)

mean=df["attribute name"].mean()

df["attribute name"].replace(np.nan,mean)

pandas.get_dummies(df["attribute-name"])

bin = np.linspace(min(df["attribute-name"]),max(df["attribute-name"]),4)

cat_names=["low-price","mid-price","high-price"]

df["bin_name"]=pd.cut(df["attribute-name"],bin,labels=cat_names)

df_att=df[['attribute1', 'attribute2', 'attribute3']]

df_g=df_att.groupby(['attribute1', 'attribute2'], as_index=False).mean()

df_g

pearson_coef,p_value=stats.pearsonr(df["attribute1"],df["attribute2"])

scipy.stats.chi2_contingency(cont_table, correction=True)

26

Вам также может понравиться