Мы шаг за шагом реализуем алгоритм классификации машинного обучения на S & P500 с использованием классификатора опорных векторов (SVC).

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

Шаг 1. Импортируйте библиотеки

На этом этапе мы импортируем необходимые библиотеки, которые потребуются для создания стратегии.

# machine learning classification
from sklearn.svm import SVC
from sklearn.metrics import scorer
from sklearn.metrics import accuracy_score
# For data manipulation
import pandas as pd
import numpy as np
# To plot
import matplotlib.pyplot as plt
import seaborn
# To fetch data
from pandas_datareader import data as pdr

Шаг 2. Получите данные

Мы загрузим данные S & P500 из Google Finance с помощью pandas_datareader.

После этого мы удалим недостающие значения из данных и построим серию цен закрытия S & P500.

Df = pdr.get_data_google('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()

Шаг 3. Определите целевую переменную

Целевая переменная - это переменная, которую прогнозирует алгоритм классификации машинного обучения. В этом примере целевой переменной является то, закроется ли цена S & P500 вверх или вниз в следующий торговый день.

Сначала мы определим реальный торговый сигнал, используя следующую логику: если цена закрытия на следующий торговый день выше, чем цена закрытия сегодня, мы купим индекс S & P500, иначе мы продадим индекс S & P500. Мы сохраним +1 для сигнала покупки и -1 для сигнала продажи.

y = np.where(Df['Close'].shift(-1) > Df['Close'],1,-1)

Шаг 4: Создание переменных-предикторов

X - это набор данных, содержащий переменные предсказателя, которые используются для предсказания целевой переменной «y». X состоит из таких переменных, как «Открытие - Закрытие» и «Максимум - Минимум». Их можно понимать как индикаторы, на основе которых алгоритм будет прогнозировать цену опциона.

Df['Open-Close'] = Df.Open - Df.Close
Df['High-Low'] = Df.High - Df.Low
X=Df[['Open-Close','High-Low']]

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

Шаг 5. Тестирование и обучение разделения набора данных

На этом этапе мы разделим данные на набор данных поезда и тестовый набор данных.

  1. Первые 80% данных используются для обучения, а остальные - для тестирования.
  2. X_train и y_train - набор данных о поездах
  3. X_test и y_test - набор тестовых данных
split_percentage = 0.8
split = int(split_percentage*len(Df))
# Train data set
X_train = X[:split]
y_train = y[:split]
# Test data set
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)

  1. target_actual_value: правильные значения сигнала
  2. 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))

Точность тестовых данных 50% + говорит о том, что модель классификации эффективна.

Шаг 8: прогноз

Мы будем предсказывать сигнал (покупка или продажа) для набора тестовых данных с помощью функции cls.predict (). Затем мы вычислим доходность стратегии на основе сигнала, предсказанного моделью в тестовом наборе данных. Мы сохраняем его в столбце «Strategy_Return», а затем строим график совокупной доходности стратегии.

Df['Predicted_Signal'] = cls.predict(X)
# Calculate log returns
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()

Как видно из графика, стратегия классификация машинного обучения дает около 15% прибыли в наборе тестовых данных.