Перевод. Оригинал: Machine Learning Classification Strategy In Python
В этом посте мы шаг за шагом реализуем алгоритм классификации машинного обучения на S&P500 с использованием классификатора опорных векторов (SVC). SVC - это алгоритм классификации с учителем. Алгоритму классификации предоставляется набор обучающих данных, которые относится к одной из известных категорий. Например, категориями могут быть либо покупка, либо продажа акций. Алгоритм классификации строит модель на основе обучающих данных, а затем классифицирует тестовые данные в одну из категорий.
Шаг 1: Импорт библиотек
На этом этапе мы импортируем все необходимые библиотеки, которые понадобятся для создания стратегии.
# Алгоритмы классификации
from
sklearn.svm
import
SVC
from
sklearn.metrics
import
scorer
from
sklearn.metrics
import
accuracy_score
# Для работы с данными
import
pandas as pd
import
numpy as np
# Для визуализации
import
matplotlib.pyplot as plt
import
seaborn
# Для считывания данных
from
pandas_datareader
import
data as pdr
Шаг 2: Получение данных
Мы будем загружать данные S&P500 из Google Finance с помощью pandas_datareader.
После этого мы отбросим отсутствующие значения из данных и построим график цен закрытия S&P500.
Df
=
pdr.get_data_yahoo(
'SPY'
, start
=
"2012-01-01"
, end
=
"2017-10-01"
)
Df
=
Df.dropna()
Df.Close.plot(figsize
=
(
10
,
5
))
plt.ylabel(
"S&P500 Price"
)
plt.show()
Целевая переменная - это переменная, которую прогнозирует алгоритм классификации. В этом примере целевой переменной является то, будет ли цена S&P500 закрываться вверх или вниз на следующий торговый день.
Сначала мы определим фактический торговый сигнал, используя следующую логику - если цена закрытия следующего торгового дня больше цены закрытия сегодняшнего дня, то мы будем покупать индекс S&P500, в противном случае мы будем продавать индекс S&P500. Мы будем хранить +1 для сигнала на покупку и -1 для сигнала на продажу.
y
=
np.where(Df[
'Close'
].shift(
-
1
) > Df[
'Close'
],
1
,
-
1
)
Шаг 4: Создание переменных предикторов
X - это набор данных, который содержит переменные предикторы, которые используются для прогнозирования целевой переменной, 'y'. X состоит из переменных, таких как «Open - Close» и «High - Low». Их можно понимать как индикаторы, на основе которых алгоритм будет прогнозировать цену.
Df[
'Open-Close'
]
=
Df.
Open
-
Df.Close
Df[
'High-Low'
]
=
Df.High
-
Df.Low
X
=
Df[[
'Open-Close'
,
'High-Low'
]]
Далее алгоритм классификации будет использовать предикторы и целевую переменную на этапе обучения для создания модели, а затем прогнозировать целевую переменную на тестовом наборе данных.
Шаг 5: Разделение набора данных на обучающую и тестовую выборки
На этом этапе мы разделим данные на обучающую и тестовую выборки.
Во-первых, 80% данных используется для обучения, а остальные данные для тестирования.
X_train и y_train - обучающая выборка
X_test и y_test - тестовая выборка
split_percentage
=
0.8
split
=
int
(split_percentage
*
len
(Df))
# обучающая выборка
X_train
=
X[:split]
y_train
=
y[:split]
# тестовая выборка
X_test
=
X[split:]
y_test
=
y[split:]
Шаг 6: Создание модели классификации с использованием обучающей выборки
Мы создадим модель классификации на основе обучающей выборки. Эта модель будет позже использована для прогнозирования торгового сигнала на тестовой выборке.
cls
=
SVC().fit(X_train, y_train)
Шаг 7: Точность модели классификации
Мы вычислим точность модели классификации для обучающей и тестовой выборок, сравнив фактические значения торгового сигнала с прогнозируемыми значениями. Функция precision_score() будет использоваться для вычисления точности.
Синтаксис: precision_score (target_actual_value, target_predicted_value)
target_actual_value: правильные значения сигнала
target_predicted_value: прогнозируемые значения сигнала
accuracy_train
=
accuracy_score(y_train,
cls
.predict(X_train))
accuracy_test
=
accuracy_score(y_test,
cls
.predict(X_test))
print
(
'\nTrain Accuracy:{: .2f}%'
.
format
(accuracy_train
*
100
))
print
(
'Test Accuracy:{: .2f}%'
.
format
(accuracy_test
*
100
))
Train Accuracy: 55.45%
Test Accuracy: 53.10%
Точность 50% + будет свидетельствовать о том, что классификационная модель эффективна.
Шаг 8: Прогноз
Мы прогнозируем сигнал (покупка или продажа) для тестовой выборки, используя функцию cls.predict(). Затем мы рассчитаем прибыли стратегии на основе сигнала, предсказанного моделью в наборе тестовых данных. Мы сохраним его в столбце «Strategy_Return», а затем построим график совокупной прибыли стратегии.
Df[
'Predicted_Signal'
]
=
cls
.predict(X)
Df[
'Return'
]
=
np.log(Df.Close.shift(
-
1
)
/
Df.Close)
*
100
Df[
'Strategy_Return'
]
=
Df.Return
*
Df.Predicted_Signal
Df.Strategy_Return.iloc[split:].cumsum().plot(figsize
=
(
10
,
5
))
plt.ylabel(
"Strategy Returns (%)"
)
plt.show()
Обновление
Мы заметили, что некоторые пользователи сталкиваются с проблемами при загрузке рыночных данных с платформ Yahoo и Google Finance. Если вы ищете альтернативный источник рыночных данных, вы можете использовать Quandl.
Комментариев нет:
Отправить комментарий