Predição do mercado de ações pela rede neural recorrente no modelo LSTM

Aniruddha Choudhury Blocked Desbloquear Seguir Seguindo 10 de janeiro

A arte de prever os preços das ações tem sido uma tarefa difícil para muitos dos pesquisadores e analistas. Na verdade, os investidores estão altamente interessados na área de pesquisa de previsão de preços de ações. Para um bom investimento e sucesso, muitos investidores estão interessados em conhecer a situação futura do mercado de ações. Sistemas de previsão bons e eficazes para o mercado de ações ajudam os investidores, investidores e analistas, fornecendo informações de apoio, como a direção futura do mercado de ações. Neste trabalho, apresentamos uma abordagem de rede neural recorrente (RNN) e Long Short-Term Memory (LSTM) para prever índices do mercado de ações.

Introdução

Há muitos indicadores financeiros complicados e também a flutuação do mercado de ações é altamente violenta. No entanto, à medida que a tecnologia está avançando, a oportunidade de obter uma fortuna estável no mercado de ações aumenta e também ajuda os especialistas a descobrir os indicadores mais informativos para fazer uma previsão melhor. A previsão do valor de mercado é de grande importância para ajudar a maximizar o lucro da compra de opções de ações, mantendo o risco baixo. Redes neurais recorrentes (RNN) provaram ser um dos modelos mais poderosos para o processamento de dados sequenciais. A memória de curto prazo é uma das arquiteturas RNNs mais bem-sucedidas. O LSTM introduz a célula de memória, uma unidade de computação que substitui os neurônios artificiais tradicionais na camada oculta da rede. Com estas células de memória, as redes são capazes de efetivamente associar memórias e entradas remotas no tempo, portanto, servem para captar a estrutura dos dados dinamicamente ao longo do tempo com alta capacidade de previsão.

Arquitetura LSTM

Arquitetura LSTM

Vamos começar implementando a célula LSTM por um único passo de tempo. Então, podemos iterativamente chamá-lo de dentro de um loop para que ele processe a entrada com as etapas de tempo Tx.

Sobre os portões

Metodologia

? Etapa 1: dados brutos: nesta etapa, os dados históricos de estoque são coletados do preço das ações do Google e esses dados históricos são usados para a previsão dos preços futuros das ações.

 conjunto de dados = pd.read_csv ('Google_Stock_Price_Train.csv', index_col = "Data", parse_dates = True ) 

Google Stock Dataset

? Etapa 2: Pré-processamento de dados: A etapa de pré-processamento envolve a) Discretização de dados: Parte da redução de dados, mas com particular importância, especialmente para dados numéricos. B) Transformação de dados: Normalização. c) Limpeza de dados: preencha os valores ausentes. d) Integração de dados: Integração de arquivos de dados. Depois que o conjunto de dados é transformado em um conjunto de dados limpo, o conjunto de dados é dividido em conjuntos de treinamento e teste para avaliar. Criando uma estrutura de dados com 60 timesteps e 1 output

 # Limpeza de dados 
dataset.isna (). any ()
 # Normalização de dimensionamento de recursos 
de sklearn.preprocessing import MinMaxScaler
sc = MinMaxScaler (feature_range = (0, 1))
training_set_scaled = sc.fit_transform (training_set)
 # Criando uma estrutura de dados com 60 timesteps e 1 output 
X_train = []
y_train = []
para i na faixa (60, 1258):
X_train.append (training_set_scaled [i-60: i, 0])
y_train.append (training_set_scaled [i, 0])
X_train, y_train = np.array (X_train), np.array (y_train)

# Remodelando
X_train = np.reshape (X_train, (X_train.shape [0], X_train.shape [1], 1))

? Etapa 3: Extração de Recursos: Nesta camada, apenas os recursos que serão alimentados à rede neural são escolhidos. Vamos escolher o recurso de data, abrir, alta, baixa, fechar e volume.

 Construindo o modelo RNN LSTM 
# Importando as bibliotecas e pacotes do Keras
de keras.models import Sequential
de keras.layers importar denso
de keras.layers importar LSTM
de remoção de importação de keras.layers
Usando o backend do TensorFlow.

? Estágio 4: Treinamento da Rede Neural: Nesta etapa, os dados são enviados para a rede neural e treinados para predição de atribuição de vieses e pesos aleatórios. Nosso modelo LSTM é composto por uma camada de entrada seqüencial seguida por 3 camadas LSTM e camada densa com ativação e, finalmente, uma camada de saída densa com função de ativação linear.

 # Inicializando o RNN 
regressor = sequencial ()
 # Adicionando a primeira camada LSTM e alguma regularização de Dropout 
regressor.add (LSTM (unidades = 50, return_sequences = True , input_shape = (X_train.shape [1], 1))) regressor.add (Saída (0.2))

# Adicionando uma segunda camada LSTM e alguma regularização de Dropout
regressor.add (LSTM (unidades = 50, return_sequences = True ))
regressor.add (Rejeição (0.2))

# Adicionando uma terceira camada LSTM e alguma regularização de Dropout
regressor.add (LSTM (unidades = 50, return_sequences = True ))
regressor.add (Rejeição (0.2))

# Adicionando uma quarta camada de LSTM e alguma regularização de Dropout
regressor.add (LSTM (unidades = 50))
regressor.add (Rejeição (0.2))

# Adicionando a camada de saída
regressor.add (denso (unidades = 1))
# Compilando o RNN
regressor.compile (optimizer = 'adam', perda = 'mean_squared_error')

# Ajustando o RNN ao conjunto de treinamento
regressor.fit (X_train, y_train, epochs = 100, batch_size = 32)

Otimizador

O tipo de otimizador usado pode afetar muito a rapidez com que o algoritmo converge para o valor mínimo. Além disso, é importante que haja alguma noção de aleatoriedade para evitar ficar preso em um mínimo local e não atingir o mínimo global. Existem alguns ótimos algoritmos, mas eu escolhi usar o otimizador Adam. O otimizador Adam combina as vantagens de dois outros otimizadores: ADAgrad e RMSprop.

O otimizador do ADAgrad usa essencialmente uma taxa de aprendizado diferente para cada parâmetro e cada etapa de tempo. O raciocínio por trás do ADAgrad é que os parâmetros que são pouco frequentes devem ter maiores taxas de aprendizado, enquanto os parâmetros que são freqüentes devem ter menores taxas de aprendizado. Em outras palavras, a atualização de descida de gradiente estocástica para ADAgrad se torna

Onde

A taxa de aprendizagem é calculada com base nos gradientes anteriores que foram calculados para cada parâmetro. Conseqüentemente,

Onde G é a matriz de somas de quadrados dos gradientes do passado. O problema com essa otimização é que as taxas de aprendizado começam a desaparecer muito rapidamente conforme as iterações aumentam.

O RMSprop considera a correção da taxa de aprendizado decrescente usando apenas um determinado número de gradientes anteriores. As atualizações se tornam

Onde

Agora que entendemos como esses dois otimizadores funcionam, podemos ver como Adam funciona.

Adaptive Moment Estimation, ou Adam, é outro método que calcula as taxas de aprendizado adaptativo para cada parâmetro considerando a média exponencialmente decrescente de gradientes passados e a média exponencialmente decrescente de gradientes passados. Isso pode ser representado como

O v e m podem ser considerados como as estimativas do primeiro e segundo momento dos gradientes, respectivamente, portanto, obtendo o nome de Estimativa Adaptativa de Momento. Quando isso foi usado pela primeira vez, os pesquisadores observaram que havia um viés inerente em relação a 0 e eles reagiram usando as seguintes estimativas:

Isso nos leva à regra de atualização final do gradiente

Este é o otimizador que eu usei e os benefícios estão resumidos no seguinte:

  1. A taxa de aprendizado é diferente para cada parâmetro e cada iteração.
  2. O aprendizado não diminui como no ADAgrad.
  3. A atualização do gradiente usa os momentos da distribuição de pesos, permitindo uma descida estatisticamente mais sonora.

Regularização

Outro aspecto importante do treinamento do modelo é garantir que os pesos não fiquem muito grandes e começar a focar em um ponto de dados, portanto, super ajuste. Portanto, devemos sempre incluir uma penalidade para pesos grandes (a definição de grande dependeria do tipo de regularizador usado). Eu escolhi usar a regularização Tikhonov, que pode ser considerada como o seguinte problema de minimização:

O fato de que o espaço de função está em um Hilbert Space (RKHS) do Kernel Reprodutor assegura que a noção de uma norma existe. Isso nos permite codificar a noção da norma em nosso regularizador.

Desistências

Um método mais recente de prevenir o overfitting considera o que acontece quando alguns dos neurônios não funcionam de repente. Isso força o modelo a não ser excessivamente dependente de quaisquer grupos de neurônios e considera todos eles. Os dropouts descobriram seu uso para tornar os neurônios mais robustos e, assim, permitir-lhes prever a tendência sem se concentrar em nenhum neurônio. Aqui estão os resultados do uso de desistências

? Estágio 5: Geração de Saída: Nesta camada, o valor de saída gerado pela camada de saída do RNN é comparado com o valor alvo. O erro ou a diferença entre o alvo e o valor de saída obtido é minimizado pelo uso do algoritmo back propagation, que ajusta os pesos e os vieses da rede.

 Epoch 97/100 
1198/1198 [==============================] - 6s 5ms / passo - perda: 0,0018
Época 98/100
1198/1198 [==============================] - 6s 5ms / passo - perda: 0,0014
Epoch 99/100
1198/1198 [==============================] - 6s 5ms / passo - perda: 0,0014
Epoch 100/100
1198/1198 [==============================] - 6s 5ms / passo - perda: 0,0015

Seguimos o mesmo para o teste Data Preprocessing: O estágio de pré-processamento envolve a) Discretização de dados: Parte da redução de dados, mas com particular importância, especialmente para dados numéricos b) Transformação de dados: Normalização. c) Limpeza de dados: preencha os valores ausentes. d) Integração de dados: Integração de arquivos de dados. Depois que o conjunto de dados é transformado em um conjunto de dados limpo, o conjunto de dados é dividido em conjuntos de treinamento e teste para avaliar. Criando uma estrutura de dados com 60 timesteps e 1 output

 # Obtendo o preço real das ações de 2017 
dataset_test = pd.read_csv ('Google_Stock_Price_Test.csv', index_col = "Data", parse_dates = True )
# Obtendo o preço previsto da ação
 dataset_total = pd.concat ((dataset ['Open'], dataset_test ['Open']), axis = 0) 
entradas = dataset_total [len (dataset_total) - len (dataset_test) - 60:]. valores
inputs = inputs.reshape (-1,1)
inputs = sc.transform (entradas)
X_test = []
para i na faixa (60, 80):
X_test.append (inputs [i-60: i, 0])
X_test = np.array (X_test)
X_test = np.reshape (X_test, (X_test.shape [0], X_test.shape [1], 1))
predicted_stock_price = regressor.predict (X_test)
predicted_stock_price = sc.inverse_transform (predicted_stock_price)

Visualização

Todas as análises acima podem ser implementadas com relativa facilidade graças às keras e sua API funcional.

 # Visualizando os resultados 
plt.plot (real_stock_price, color = 'red', label = 'Preço real das ações do Google')
plt.plot (predicted_stock_price, color = 'blue', label = 'Preço das ações do Google previsto')
plt.title ('Google Stock Price Prediction')
plt.xlabel ('Time')
plt.ylabel ('Google Stock Price')
plt.legend ()
plt.show ()

Visualização de previsão

Análise geral de visualização

Rolando, média, tempo, série

Uma análise contínua de um modelo de séries temporais é frequentemente usada para avaliar a estabilidade do modelo ao longo do tempo . Ao analisar dados de séries temporais financeiras usando um modelo estatístico, uma suposição chave é que os parâmetros do modelo são constantes ao longo do tempo .

 dataset ['Close: 30 Day Mean'] = conjunto de dados ['Close']. rolling (window = 30) .mean () 
conjunto de dados [['' Close ',' Close: 30 Day Mean ']]. plot (figsize = (16,6))

Estoque abrindo a representação durante o período de tempo.

 conjunto de dados ['Open']. plot (figsize = (16,6)) 

Conclusão

A popularidade do mercado de ações está crescendo rapidamente, o que está incentivando os pesquisadores a descobrir novos métodos para a previsão usando novas técnicas. A técnica de previsão não está apenas ajudando os pesquisadores, mas também ajuda os investidores e qualquer pessoa a lidar com o mercado de ações. Para ajudar a prever os índices de ações, é necessário um modelo de previsão com boa precisão. Neste trabalho, usamos uma das mais precisas tecnologias de previsão usando a Rede Neuronal Recorrente e a Unidade de Memória de Curto Prazo que ajuda investidores, analistas ou qualquer pessoa interessada em investir no mercado de ações, fornecendo-lhes um bom conhecimento da situação futura. do mercado de ações.