Le 99e article original se concentre sur "la croissance personnelle et la liberté de richesse, la logique du fonctionnement mondial, l'investissement quantitatif de l'IA".
C'est le 99e article, et les 100 premiers petits objectifs originaux sont sur le point d'être terminés, ce qui est très bien.
Quel sera l'effet si vous insistez pour faire une chose pendant 1000 jours ? Attendons voir.
Les articles de ces derniers jours ont parlé de données ( hdf5 : format de stockage quantifié approprié pour les dataframes compatibles avec les pandas ), d'ingénierie des caractéristiques ( ingénierie des caractéristiques factorielles : basée sur les pandas et talib (code) ), d'évaluation à un seul facteur ( [Weekly research report ] AI Alphalens of quantitative feature engineering : un ensemble d'outils généraux pour l'analyse des facteurs alpha ), aujourd'hui je vais parler du modèle.
Combinez d'abord la modélisation financière avec le processus d'apprentissage automatique :
01 Préparation des données, ingénierie des fonctionnalités et étiquetage
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
importer des pandas en tant que symboles pd = ['SPX', '000300.SH'] dfs = [] avec pd.HDFStore('data/index.h5') comme magasin : pour le symbole dans les symboles : df = store[symbol] df[ 'fermer'] = df['fermer'] / df['fermer'].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
Ici, nous obtenons l'ingénierie des fonctionnalités et l'ensemble de données étiquetées,
Ce processus est générique :
02 Diviser le jeu de données
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] # Créer des ensembles d'apprentissage et de test 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 Modèle de référence
Mettre en œuvre trois modèles de référence, à savoir la régression logistique, Sensen aléatoire et SVM.
de sklearn.ensemble import RandomForestClassifier de sklearn.linear_model import LogisticRegression de 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) : classifier = RandomForestClassifier() classifier.fit(x_train, y_train) return classifier def do_svm(x_train,y_train): classifier = SVC() classifier.fit(x_train, y_train)
classificateur de retour
04 essai
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 , score
La quantification financière est injectée dans l'ensemble du processus d'apprentissage automatique, principalement le prétraitement des données, le calcul des facteurs, l'étiquetage automatique des données, la formation des modèles, la prédiction des modèles, etc.
Ce processus est presque standard, et plus tard, il s'agit principalement d'ajouter des facteurs plus nombreux et meilleurs, différentes méthodes d'étiquetage, qui peuvent être catégorielles ou continues. Dans le même temps, le facteur peut également effectuer un prétraitement, un filtrage, etc.
Ensuite, il existe des modèles meilleurs et plus performants.