Ранее в разделе "Как разрабатывать":

Если вы хотите максимизировать производительность разработки и кодирования, пожалуйста, прочитайте Как спроектировать торгового бота с машинным обучением — Часть 2: Анализ данных перед тем, как продолжить.

Далее посмотрим на развитие.

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

Анализ данных:

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

На этом этапе нам понадобятся исторические данные, для которых мы используем следующий репозиторий: 1H.csv

В файле CSV вы найдете Binance 1 час OHLCV, который начинается 05.09.2017 и заканчивается 01.06.2021.

На этот раз мы изучаем код в Jupyterlab. Jupyterlab обеспечивает лучшую среду для образовательных и исследовательских целей.

crypto_data_analysis и analysis.ipynb

Блок [1–3]

Во-первых, давайте посмотрим, что у нас есть в наших данных. Мы просто покажем таблицу данных из файла CSV. Обратите внимание, что нам нужно переформатировать дату из строки в DateTime и установить ее как индекс.

Блок [4–6]

У нас есть два участка с близкими ценами. Первый показывает весь фрейм данных. Второй отображает график цены закрытия с 2021–04–30 08:00:00 до 2021–05–21 03:00:00. Это поможет вам понять, как работает набор данных.

Не бойтесь визуализировать свои данные. Это поможет вам в вашем анализе. Вот две наиболее полезные библиотеки Python, которые мы будем использовать для построения графиков:

Матплотлиб: https://matplotlib.org

Сиборн: https://seaborn.pydata.org

Блок [7–8]:

Здесь мы используем очищенные данные, а отсутствующие данные были исправлены ранее. Прежде чем продолжить, вы должны просмотреть свои данные и исправить все неверные и отсутствующие данные. Например, мы просто проверяем, есть ли в столбце Close пустые значения.

Блок [9–11]:

Давайте добавим во фрейм данных несколько скользящих средних Close (SMA9, SMA20, SMA50, SMA200). Визуализируйте график с включенными SMA50 и SMA200.

Теперь давайте рассмотрим два основных ключевых слова в анализе данных:

1- Особенность

2- Этикетка

В следующей статье мы обсудим метки более подробно. На этот раз мы сосредоточимся на функциях.

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

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

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

Цена — это наш ярлык, а год, модель и бренд — наши особенности.

Вернемся к нашим данным, нам нужно найти некоторые функции, чтобы накормить нашу машину.

Включена ли функция, которая нам нужна, в наш набор данных, или мы должны ее создать?

Является ли скорость закрытия полезной функцией для выбора?

Что с Лейблом? Планируем ли мы прогнозировать цену? Есть ли другие планы?

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

анализ.ipynb

Блок [12–13]

Ни Close, ни Open не могут быть функцией. Даже если вы нормализуете скорость, вы все равно можете получить скорость, отличную от той, с которой обучена машина.

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

Блок [14–20]

Ни один из этих столбцов в нашем фрейме данных не может быть для нас потенциальной функцией. Это приводит нас к созданию одного. Давайте добавим новый столбец для разницы между закрытием и SMA 20. Из гистограммы видно, что она гораздо больше похожа на нормальное распределение, чем раньше. Но, тем не менее, здесь что-то не так. Закрытие и SMA 20 имеют дисперсию от -2000 до +2000. Это указывает на то, что наша обновленная функция по-прежнему зависит от цены закрытия. Итак, разделив результат на показатель закрытия, мы можем изменить дисперсию на -0,1 и +0,1. И машина любит этот диапазон чисел :)

Блок [21–24]

Прежде чем закончить этот раздел, рассмотрим несколько полезных функций:

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

Подробнее о этикетке мы поговорим в следующей статье, но чтобы было практичнее, учтите следующее правило для этикетки:

Цена закрытия, превышающая SMA50, помечается как 1, и наоборот, помечается как 0.

Используя Pairplot, мы можем увидеть, как функции покрывают цель.

Присоединяйтесь к Coinmonks Telegram Channel и Youtube Channel, узнайте о криптотрейдинге и инвестировании

Также читайте