Código-fonte de previsão geral de estoque + modelo + conjunto de dados com base na rede neural LSTM

Modelo geral de previsão de estoque baseado em rede neural

Endereço de download: Código fonte de previsão de estoque geral + modelo + conjunto de dados com base na rede neural LSTM

0 Como usar Como usar

    1. Use getdata.py para baixar dados ou use sua própria fonte de dados, coloque os dados no diretório stock_daily
    1. Use data_preprocess.py para pré-processar os dados, gere um arquivo pkl e coloque-o no diretório pkl_handle (opcional)
    1. Ajuste os parâmetros em train.py e init.py, primeiro use predict...py para treinar o modelo, gere o arquivo de modelo e, em seguida, use predict.py para fazer previsões, gerar resultados de previsão ou gráficos de comparação de teste

0.1 Introdução aos parâmetros predict.py

    1. –model: nome do modelo, atualmente suporta lstm e transformador
    1. –mode: modo, atualmente suporta treinar, testar e prever
    1. –pkl: se deve usar o arquivo pkl, atualmente suporta 1 e 0
    1. –pkl_queue: Se deve usar o modo de fila pkl para aumentar a velocidade de treinamento, atualmente suporta 1 e 0
    1. –test_code: código de teste, atualmente suporta código de estoque
    1. –test_gpu: se deve usar o teste gpu, atualmente suporta 1 e 0
    1. –predict_days: número de dias para prever, atualmente suporta números

0.2 Introdução a alguns parâmetros em init.py Introdução a alguns parâmetros em init.py

    1. TRAIN_WEIGHT: peso de treinamento, atualmente suporta números menores ou iguais a 1
    1. SEQ_LEN: comprimento da sequência, atualmente suporta números
    1. BATCH_SIZE: tamanho do lote, atualmente suporta números
    1. EPOCH: número de rodadas de treinamento, atualmente suporta números
    1. LEARNING_RATE: taxa de aprendizado, atualmente suporta números menores ou iguais a 1
    1. WEIGHT_DECAY: Decaimento de peso, atualmente suporta números menores ou iguais a 1
    1. SAVE_NUM_ITER: Salve o intervalo do modelo, atualmente suporta números
    1. SAVE_NUM_EPOCH: Salve o intervalo do modelo, atualmente suporta números
    1. SAVE_INTERVAL: Salve o intervalo de tempo do modelo (segundos), atualmente suporta números
    1. OUTPUT_DIMENSION: dimensão de saída, atualmente suporta números
    1. INPUT_DIMENSION: dimensão de entrada, atualmente suporta números
    1. NUM_WORKERS: número de threads, atualmente suporta números
    1. PKL: Se deve usar arquivos pkl, atualmente suporta True e False
    1. BUFFER_SIZE: tamanho do buffer, atualmente suporta números
    1. símbolo: código de estoque, atualmente suporta código de estoque ou Generic.Data significa todos os dados baixados
    1. name_list: o nome do conteúdo que precisa ser previsto
    1. use_list: a troca de conteúdo que precisa ser prevista, 1 significa usar, 0 significa não usar

1 Introdução ao Projeto Introdução ao Projeto

Novo

  • 20230402

    1. Modifique o método de leitura do conjunto de dados, use fila e buffer de dados, reduza o número de IO e melhore a velocidade de treinamento
    1. Mova as variáveis ​​globais para init.py para facilitar a modificação
  • 20230328

    1. Modifique o formato do arquivo de dados de pré-processamento e adicione dois campos ts_code e data para uso subsequente
    1. Modifique os modelos lstm e transformador para suportar entrada de comprimento misto
    1. No modelo do transformador, uma camada decodificadora é adicionada, o que deve aumentar a precisão da previsão
  • 20230327

    1. Parte modificada da lógica de execução e combinada com o arquivo de pré-processamento load pkl, melhorou muito a velocidade de treinamento
    1. Corrigido um bug de alto impacto em relação à direção do fluxo de dados
    1. tente um novo modelo
    1. Adicionada uma nova métrica para avaliar a qualidade de um modelo
  • 20230325

    1. Aumente a função de pré-processamento de dados e salve a fila pré-processada como um arquivo pkl para reduzir a perda de E/S
    1. Modifique o código desnecessário
    1. Simplifique a lógica, diminua a responsabilidade do tempo, e a direção é trocar o espaço pelo tempo
    1. Adicione indicadores comuns para aumentar a precisão da previsão
  • 20230322

    1. Aumente o controle de conteúdo de saída, você mesmo pode definir o conteúdo e a quantidade de saída
    1. Modifique a fonte de dados de leitura para um arquivo csv local
    1. Modifique a lógica IO, use multi-threading para ler o arquivo csv na pasta especificada, armazene-o na memória, treine repetidamente e reduza o número de IO
    1. Modificar lstm, modelo do transformador
    1. Adicione a função de download de dados, use seu próprio token de API

Obtenha o token de API para baixar dados: Obtenha o token de API para baixar dados:

    1. Registre-se no site https://tushare.pro/ e obtenha pontos suficientes conforme necessário (até março de 2023, você só precisa modificar as informações do usuário, serão pontos suficientes e não serão determinados no futuro)
    1. Você pode visualizar seu próprio token de API na página https://tushare.pro/user/token
    1. Crie um api.txt no diretório raiz deste projeto e grave o token de API obtido neste arquivo
    1. Use este projeto getdata.py para baixar automaticamente os dados diários

O mercado de ações é um fator importante que orienta as mudanças no mercado de negociação.Se você conseguir entender a tendência do mercado de ações, será de grande ajuda para o investimento de pessoas físicas e jurídicas. No entanto, a tendência das ações será afetada por muitos fatores, por isso é difícil medir quantitativamente os fatores de influência. Mas agora, com a ajuda do aprendizado de máquina, é possível construir uma rede, aprender uma certa escala de dados de ações e obter um modelo que pode prever os preços das ações com mais precisão por meio do treinamento de rede, o que pode nos ajudar a entender a tendência das ações. em grande medida. Neste projeto, **LSTM (Long Short-Term Memory Network)** foi construído para prever com sucesso a tendência do estoque.

Em primeiro lugar, em termos de conjuntos de dados , escolhemos a Bolsa de Valores de Xangai nº 000001, o conjunto de dados China Ping An Stock (nº SZ_000001) usa dados de ações de 2016.01.01-2019.12.31, o conteúdo dos dados inclui a data do dia , preço de abertura, preço de fechamento, preço mais alto, preço mais baixo, volume de negociação, taxa de rotatividade. O conjunto de dados é dividido em uma proporção de 0,1 para gerar um conjunto de teste. O processo de treinamento usa os dados dos dias T-99 a T como entrada de treinamento para prever o preço de abertura da ação no dia T+1. (Aqui, gostaria de agradecer a Tushare por fornecer o conjunto de dados diários do estoque e receber seu apoio)

Em termos de modelos e resultados de treinamento , adotamos primeiro o LSTM (Long Short-Term Memory Network), que pode manter informações contextuais em comparação com redes neurais tradicionais e é mais propício a modelos de previsão de ações com base no mercado original para prever o mercado futuro. A rede LSTM nos ajudou a obter um bom resultado de ajuste e a perda rapidamente tendeu a 0. Em seguida, utilizamos a parte do Transformer Encoder proposta para atualizar o modelo LSTM para testes. No entanto, verifica-se que o resultado não é tão superior ao LSTM, o erro de ajuste da curva é maior e o declínio da perda é mais lento. Portanto, este projeto foca na realização do modelo LSTM para prever o mercado de ações.

2 Princípios do modelo LSTM Princípios do modelo LSTM

2.1 Modelo de Série Temporal Modelo de Série Temporal

Modelo de série temporal : A análise preditiva de série temporal é usar as características de um evento no passado para prever as características do evento no futuro. Este é um problema de modelagem preditiva relativamente complexo. Ao contrário da previsão do modelo de análise de regressão, o modelo de série temporal depende da ordem dos eventos. Os resultados do modelo de entrada são diferentes depois que os valores do mesmo tamanho são alterados na ordem .

2.1 De RNN para LSTM De RNN para LSTM

RNN: O resultado do cálculo de cada camada oculta de RNN está relacionado à entrada atual e ao resultado da última camada oculta. Através deste método, os resultados do cálculo de RNN têm a característica de lembrar os resultados anteriores. Entre eles, x é a camada de entrada, o é a camada de saída, s é a camada oculta e t refere-se ao número de cálculos, V, W, U são os pesos e o estado da t-ésima camada oculta é mostrado na seguinte fórmula:

S t = f ( U ∗ X t + W ∗ S t − 1 ) (1) St = f(U*Xt + W*St-1) (1)St=f ( UXt+CSt1 )  (1)
RNN

Pode-se ver que, se o estado atual da camada oculta estiver relacionado às n vezes anteriores por meio do modelo RNN, a quantidade de cálculo precisa ser aumentada e a complexidade aumenta exponencialmente. No entanto, esse problema pode ser resolvido usando a rede LSTM.

LSTM (Rede de Memória de Longo Prazo) LSTM (Rede de Memória de Longo Prazo):

LSTM é um tipo especial de RNN, que resolve principalmente o problema de desaparecimento e explosão de gradiente no processo de treinamento de sequência longa por Eileen. Comparado com o RNN, o LSTM pode ter um desempenho melhor em sequências longas.
Adicione uma descrição da imagem

Adicione uma descrição da imagem

  • Existem três estágios dentro do LSTM: estágio de esquecimento, estágio de seleção de memória, estágio de saída O LSTM tem três estágios: estágio de esquecimento, estágio de seleção de memória e estágio de saída.

    • **Estágio de esquecimento: **Uso de cálculo como um controle de portão para controlar o conteúdo que precisa ser esquecido no estado anterior.

    • **Estágio de memória de seleção: ** Selecione a memória para a entrada, o sinal de gating é controlado por , e o conteúdo de entrada é controlado por [Falha na transferência de imagem do link externo, o site de origem pode ter um mecanismo anti-leeching, é recomendado salve a imagem e carregue-a diretamente para representação.

    • **Estágio de saída:**Determine o conteúdo de saída do estado atual, através do controle, e também dimensione a saída obtida no estágio anterior.

    Adicione uma descrição da imagem

Implementação do modelo de previsão 3LSTM para previsão de estoque

1. Preparação do conjunto de dados

1. Preparação do conjunto de dados

  • Divisão do conjunto de dados: O conjunto de dados é dividido em uma proporção de 0,1 para gerar um conjunto de teste. O processo de treinamento usa os dados dos dias T-99 a T como entrada de treinamento para prever o preço de abertura da ação no dia T+1.

  • Padronize os dados: Tanto o conjunto de treinamento quanto o conjunto de teste precisam ser divididos pelo intervalo por coluna. O processamento inverso é necessário para obter resultados após a conclusão do treinamento.

train ( [ : , i ] ) = ( train ( [ : , i ] ) ) − min ( train [ : , i ] ) / ( max ( train [ : , i ] ) − min ( train [ : , i ] ) ) ( 2 ) train([:,i])=(train([:,i]))-min(train[:,i])/(max(train[:,i])-min(train[: ,i])) (2)trem ( [ : _,eu ])=( trem ( [ : _,eu ]))min ( trem [ : _ _,i ] ) / ( ma x ( trem [ : _,eu ])min ( trem [ : _ _,i ])) 2

teste ( [ : , i ] ) = ( teste ( [ : , i ] ) ) − min ( trem [ : , i ] ) / ( max ( trem [ : , i ] ) − min ( trem [ : , i ] ) ) ( 3 ) test([:,i])=(test([:,i]))-min(train[:,i])/(max(train[:,i])-min(train[: ,i])) (3)teste ( [ : _,eu ])=( teste ( [ : _,eu ]))min ( trem [ : _ _,i ] ) / ( ma x ( trem [ : _,eu ])min ( trem [ : _ _,i ])) 3

2. Construção de modelo

2. Construção do modelo

Use a estrutura pytorch para criar o modelo LSTM e as configurações de parâmetro contidas em arch.nn.LSTM() :

  • A dimensão do recurso de entrada: input_size=dimension(dimension=8)

  • A dimensão da camada oculta no LSTM: hidden_size=128

  • O número de camadas da rede neural recorrente: num_layers=3

  • lote_primeiro: VERDADEIRO

  • Viés: o viés é usado por padrão

Configurações de parâmetro de camada totalmente conectada :

  • Primeira camada: in_features=128, out_features=16

  • Segunda camada: in_features=16, out_features=1 (mapeia para um valor)

3. Treinamento modelo

3. Treinamento modelo

  • Após a depuração, é determinado que a taxa de aprendizado lr=0,00001

  • Função de otimização: descida de gradiente em lote (SGD)

  • Tamanho do lote batch_size=4

  • Época de álgebra de treinamento = 100

  • Função de perda: MSELoss significa função de perda quadrada, o modelo de treinamento final reduz o MSELoss para cerca de 0,8.

Adicione uma descrição da imagem

4. Previsão do modelo

4. Previsão do modelo

O conjunto de teste é verificado usando o modelo treinado, e o erro percentual médio absoluto (MAPELoss) é de 0,04 em comparação com os dados reais, e a precisão do conjunto de teste pode ser obtida em 96%.

Adicione uma descrição da imagem

5. Resultados do modelo

5. Resultados do modelo

A figura abaixo mostra a exibição da linha K dos últimos 100 dias do conjunto de dados geral: se o preço de abertura do dia for menor que o preço de fechamento, será vermelho e se o preço de abertura do dia for maior que o preço de fechamento, será verde. A figura também mostra informações como o volume de negociação do dia e a média móvel.

Adicione uma descrição da imagem

O gráfico de comparação dos resultados do conjunto de teste previstos pelo modelo LSTM e os resultados reais mostram que os resultados previstos pelo modelo LSTM estão muito próximos da tendência real do estoque, por isso tem grande valor de referência.

Adicione uma descrição da imagem

Mudanças no MSELoss durante o treinamento do modelo LSTM. Pode-se ver que, à medida que o número de gerações de treinamento aumenta, o MSELoss desse modelo gradualmente tende a 0.

Adicione uma descrição da imagem

4. Conclusão

4. Conclusão

Este projeto aborda o problema de previsão do mercado de ações usando métodos de aprendizado de máquina. O projeto adota a Bolsa de Valores de Xangai nº 000001 do centro de dados de ações de código aberto, China Ping An Stock (nº SZ_000001) e usa LSTM (rede neural de memória de longo prazo) que é mais adequado para previsão de sequência de longo prazo para treinamento. Através do treinamento da sequência do conjunto de treinamento, o conjunto de teste Ao prever o preço de abertura, o modelo de previsão de ações LSTM com uma taxa de precisão de 96% foi finalmente obtido, o que resolveu o problema de previsão do mercado de ações com mais precisão.

Durante o processo de desenvolvimento do projeto, o modelo Transformer proposto mais recentemente que o LSTM também foi usado, mas o efeito de previsão no conjunto de teste não foi bom. Análises posteriores acreditam que isso pode ser devido ao codificador e à camada decodificadora correspondente no Transformer geral modelo, mas no modelo deste projeto, a camada totalmente conectada é usada em vez do decodificador, então o efeito não é bom. Em estudos subsequentes, pode ser melhorado e talvez resultados mais otimizados do que o LSTM possam ser obtidos.

Endereço de download: Código fonte de previsão de estoque geral + modelo + conjunto de dados com base na rede neural LSTM

Acho que você gosta

Origin blog.csdn.net/2301_76484015/article/details/130105522
Recomendado
Clasificación