O 99º artigo original enfoca "crescimento pessoal e liberdade de riqueza, a lógica da operação mundial, investimento quantitativo de IA".
É o 99º artigo e os primeiros 100 pequenos objetivos originais estão prestes a ser concluídos, o que é muito bom.
Qual será o efeito se você insistir em fazer uma coisa por 1000 dias? Vamos esperar e ver.
Os artigos nos últimos dias falaram sobre dados ( hdf5: formato de armazenamento quantificado adequado para dataframe compatível com pandas ), engenharia de recursos ( engenharia de recursos de fator: baseado em pandas e talib (código) ), avaliação de fator único ( [relatório de pesquisa semanal ] AI Alphalens de engenharia de recursos quantitativos: um conjunto de ferramentas gerais para análise de fatores alfa ), hoje falarei sobre o modelo.
Primeiro, combine a modelagem financeira com o processo de aprendizado de máquina:
01 Preparação de dados, engenharia de recursos e rotulagem
def feature_engineer(df): features = [] for p in [1, 5, 20, 60]: features.append('mom_{}'.format(p)) df['mom_{}'.format(p) ] = df['close'].pct_change(p) df['f_return_1'] = np.sign(df['close'].shift(-1) / df['close'] - 1) features.append( 'code') features.append('f_return_1') print(features) df = df[features] return df
importar pandas como símbolos pd = ['SPX', '000300.SH'] dfs = [] com pd.HDFStore('data/index.h5') como armazenar: para símbolo em símbolos: df = armazenar[símbolo] df[ 'fechar'] = df['fechar'] / df['fechar'].iloc[0] df = feature_engineer(df) dfs.append(df) all = pd.concat(dfs) # all.set_index([all .index,'code'],inplace=True) all.sort_index(ascending=True, level=0, inplace=True) all.dropna(inplace=True) all.
Aqui temos a engenharia de recursos e o conjunto de dados rotulados,
Este processo é genérico:
02 Divida o conjunto de dados
import numpy as np import datetime def get_date_by_percent(start_date,end_date,percent): days = (end_date - start_date).days target_days = np.trunc(days * percent) target_date = start_date + datetime.timedelta(days=target_days) #print days , target_days,target_date return target_date def split_dataset(df,input_column_array,label,split_ratio): split_date = get_date_by_percent(df.index[0],df.index[df.shape[0]-1],split_ratio) input_data = df[input_column_array ] output_data = df[label] # Crie conjuntos de treinamento e teste X_train = input_data[input_data.index < split_date] X_test = input_data[input_data.index >= split_date] Y_train = output_data[output_data.index < split_date] Y_test = output_data[output_data.index >= split_date] return X_train,X_test,Y_train,Y_test
03 Modelo de linha de base
Implementar três modelos de benchmark, nomeadamente regressão logística, Sensen aleatório e SVM.
from sklearn.ensemble import RandomForestClassifier from sklearn.linear_model import LogisticRegression from sklearn.svm import LinearSVC, SVC def do_logistic_regression(x_train,y_train): classifier = LogisticRegression() classifier.fit(x_train, y_train) return classifier def do_random_forest(x_train,y_train) : classificador = RandomForestClassifier() classificador.fit(x_train, y_train) return classificador def do_svm(x_train,y_train): classificador = SVC() classificador.fit(x_train, y_train)
classificador de retorno
04 teste
def test_predictor(classifier, x_test, y_test): pred = classifier.predict(x_test) hit_count = 0 total_count = len(y_test) for index in range(total_count): if (pred[index]) == (y_test[index]) : hit_count = hit_count + 1 hit_ratio = hit_count / total_count score = classifier.score(x_test, y_test) print("hit_count=%s, total=%s, hit_ratio = %s" % (hit_count, total_count, hit_ratio)) return hit_ratio , pontuação
A quantificação financeira é injetada em todo o processo de aprendizado de máquina, principalmente pré-processamento de dados, cálculo de fatores, rotulagem automática de dados, treinamento de modelo, previsão de modelo e assim por diante.
Este processo é quase padrão, e depois é principalmente para adicionar mais e melhores fatores, diferentes métodos de rotulagem, que podem ser categóricos ou contínuos. Ao mesmo tempo, o fator também pode fazer algum pré-processamento, filtragem e afins.
Depois, há modelos melhores e mais capazes.