El artículo original número 99 se centra en "el crecimiento personal y la libertad de riqueza, la lógica de la operación mundial, la inversión cuantitativa de IA".
Es el artículo 99, y los primeros 100 pequeños objetivos originales están a punto de completarse, lo cual es muy bueno.
¿Cuál será el efecto si insistes en hacer una cosa durante 1000 días? Vamos a esperar y ver.
Los artículos de los últimos días han hablado sobre datos ( hdf5: formato de almacenamiento cuantificado adecuado para marcos de datos compatibles con pandas ), ingeniería de características ( ingeniería de características de factores: basada en pandas y talib (código) ), evaluación de un solo factor ( [Informe de investigación semanal ] AI Alphalens de ingeniería de características cuantitativas: un conjunto de herramientas generales para analizar factores alfa ), hoy hablaré sobre el modelo.
Primero combine el modelado financiero con el proceso de aprendizaje automático:
01 Preparación de datos, ingeniería de características y etiquetado
def feature_engineer(df): características = [] for p en [1, 5, 20, 60]: características.append('mom_{}'.format(p)) df['mom_{}'.format(p) ] = df['cerrar'].pct_change(p) df['f_return_1'] = np.sign(df['cerrar'].shift(-1) / df['cerrar'] - 1) características.append ( 'código') características.append('f_return_1') print(características) df = df[características] return df
importar pandas como símbolos pd = ['SPX', '000300.SH'] dfs = [] con pd.HDFStore('data/index.h5') como almacén: para símbolo en símbolos: df = almacén[símbolo] df[ 'cerrar'] = df['cerrar'] / df['cerrar'].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
Aquí obtenemos la ingeniería de características y el conjunto de datos etiquetados,
Este proceso es genérico:
02 Dividir el conjunto de datos
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] # Crear conjuntos de entrenamiento y prueba X_train = input_data[input_data.index < split_date] X_test = input_data[input_data.index >= split_date] Tren_Y = datos_salida[datos_salida.índice <fecha_dividida] Prueba_Y = datos_salida[datos_salida.índice >= fecha_dividida] return Tren_X,prueba_X,tren_Y,prueba_Y
03 Modelo base
Implemente tres modelos de referencia, a saber, regresión logística, Sensen aleatorio y 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) : clasificador = RandomForestClassifier() classifier.fit(x_train, y_train) return clasificador def do_svm(x_train,y_train): clasificador = SVC() classifier.fit(x_train, y_train)
clasificador de retorno
04 prueba
def test_predictor(clasificador, 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 , puntaje
La cuantificación financiera se inyecta en todo el proceso de aprendizaje automático, principalmente el preprocesamiento de datos, el cálculo de factores, el etiquetado automático de datos, el entrenamiento de modelos, la predicción de modelos, etc.
Este proceso es casi estándar, y luego es principalmente para agregar más y mejores factores, diferentes métodos de etiquetado, que pueden ser categóricos o continuos. Al mismo tiempo, el factor también puede realizar algún preprocesamiento, filtrado y similares.
Luego hay modelos mejores y más capaces.