Processo de quantificação de IA e aprendizado de máquina: dos dados ao modelo

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.

 

Acho que você gosta

Origin blog.csdn.net/weixin_38175458/article/details/127766817
Recomendado
Clasificación