Перевод. Оригинал: Machine Learning Classification Strategy In Python
В этом посте мы шаг за шагом реализуем алгоритм классификации машинного обучения на S&P500 с использованием классификатора опорных векторов (SVC). SVC - это алгоритм классификации с учителем. Алгоритму классификации предоставляется набор обучающих данных, которые относится к одной из известных категорий. Например, категориями могут быть либо покупка, либо продажа акций. Алгоритм классификации строит модель на основе обучающих данных, а затем классифицирует тестовые данные в одну из категорий.
Шаг 1: Импорт библиотек
На этом этапе мы импортируем все необходимые библиотеки, которые понадобятся для создания стратегии.
# Алгоритмы классификацииfromsklearn.svmimportSVCfromsklearn.metricsimportscorerfromsklearn.metricsimportaccuracy_score# Для работы с даннымиimportpandas as pdimportnumpy as np# Для визуализацииimportmatplotlib.pyplot as pltimportseaborn# Для считывания данныхfrompandas_datareaderimportdata 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.CloseDf['High-Low']=Df.High-Df.LowX=Df[['Open-Close','High-Low']]
Далее алгоритм классификации будет использовать предикторы и целевую переменную на этапе обучения для создания модели, а затем прогнозировать целевую переменную на тестовом наборе данных.
Шаг 5: Разделение набора данных на обучающую и тестовую выборки
На этом этапе мы разделим данные на обучающую и тестовую выборки.
Во-первых, 80% данных используется для обучения, а остальные данные для тестирования.
X_train и y_train - обучающая выборка
X_test и y_test - тестовая выборка
split_percentage=0.8split=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)*100Df['Strategy_Return']=Df.Return*Df.Predicted_SignalDf.Strategy_Return.iloc[split:].cumsum().plot(figsize=(10,5))plt.ylabel("Strategy Returns (%)")plt.show()
Обновление
Мы заметили, что некоторые пользователи сталкиваются с проблемами при загрузке рыночных данных с платформ Yahoo и Google Finance. Если вы ищете альтернативный источник рыночных данных, вы можете использовать Quandl.


Комментариев нет:
Отправить комментарий