Избранное трейдера yurikon
Введение
Многие datascientists, желающие использовать ML на финансовых рынках, прочитали толстые книжки об инвестировании, может даже создавали модели с учетом прочитанного. И наверняка знают как правильно оценить полученные модели с точки зрения ML. Разобраться с этим необходимо, чтобы не было мучительно больно, когда прекрасная модель на бумаге, превращается в генератор убытков при практическом использовании. Однако оценка эффективности модели ML на бирже, довольно специфическая область, тонкости которой раскрываются только когда вы погружаетесь в процесс. Под процессом я понимаю трейдинг с частотой совершения сделок гораздо чаще «пара сделок в месяц, в течении полугода». Существует множество подводных камней, о наличии которых вы даже не подозреваете, пока смотрите на трейдинг извне. Я попробую вольно изложить свои мысли на данную тему, я покажу метрики, условно разбив их на 3 группы и обьясню их смысл, покажу свои любимые и о чем нужно подумать, если вы хотите практически использовать модели, а не повесить их на стеночку в красивой рамочке. Представлю метрики в табличном и графическом виде, показав их взаимосвязь. Сравню показатели моделей в виде «какую модель выбираю я» и «что выбираете вы» и кто тут больше ошибается. Для любителей кодов, приведу реализацию всего подсчитанного, так что можно сразу применить прочитанное для оценки своих моделей. Я не буду тут говорить о борьбе с переобучением или регуляризации или стратегиях кросвалидации — оставлю это на потом. Здесь мы начинаем со списка уже спрогнозированных сделок, с помощью transformer о которой я писал в прошлой статье. Поэтому данный текст будет его логическим продолжением, где я оценю модель с точки зрения ее практического использования.
Для анализа будем использовать данные ETF c базовой валютой USD: FXCN, FXRL, FXIT, FXUS и FXRU. Временной ряд рассмотрим за три года с 2018 по 2020 года. Само исследование проведем в Google Colaboratory.
Как обычно в начале импортируем все необходимые библиотеки для дальнейшей работы.
import pandas as pd import numpy as np import matplotlib.pyplot as plt from google.colab import files import warnings warnings.filterwarnings("ignore")Сначала необходимо получить данные. Есть несколько способов. Мы воспользовались — взяли их с Finam в формате csv. Дальше написал функцию для обработки полученных данных и при помощи concat свел их в один датафрейм.
def changeDF(df): df['date'] = pd.to_datetime(df['<DATE>'].astype(str), dayfirst=True) name =[x for x in globals() if globals()[x] is df][0] df = df.drop(['<DATE>','<TIME>', '<OPEN>', '<HIGH>', '<LOW>'], axis=1) df = df.set_index(['date']) df.columns = [name+'_cl', name + '_vol'] return df fxgd_change = changeDF(fxgd) fxrl_change = changeDF(fxrl) fxit_change = changeDF(fxit) fxus_change = changeDF(fxus) fxru_change = changeDF(fxru) fxcn_change = changeDF(fxcn) etf = pd.concat([fxgd_change, fxrl_change, fxit_change, fxus_change, fxru_change, fxcn_change], axis=1) etf.head()В результате получили: