Escolar Documentos
Profissional Documentos
Cultura Documentos
PASSOS, MG
2019
Juliano Belfort Monteiro Junior
PASSOS, MG
2019
Dedico este trabalho especialmente aos meus pais
Isabel e Juarez, e também a minha família, por todo
o apoio durante minha vida acadêmica e pessoal.
AGRADECIMENTOS
Aos meus pais, Isabel e Juarez e ao meu irmão, Peterson, por sempre me
apoiarem durante a minha vida e pelo carinho, amizade, paciência, conselhos e
compreensão em diversos momentos.
À minha namorada, Bruna, pela paciência, carinho, auxílio durante essa
etapa, por ser uma amiga e pelos diversos momentos de distração.
A minha família, especialmente aos meus avós Nilza e Waldelar e ao meu tio
Thiago, pelo apoio, auxilio, compreensão e por me guiarem em momentos difíceis.
Ao meu orientador, Hugo, pela ajuda, tempo reservado, motivação,
compreensão, conversas descontraídas e por ser um amigo nessa etapa.
Ao professor Taffarel, pelo auxilio corrigindo tantos erros, pela paciência e
por toda atenção dada em preparar os alunos para esse momento.
Aos meus companheiros, especialmente ao Alan, ao Alysson, ao João, a
Joyce, ao Rafa e a Vanessa, por toda a ajuda, torcida, dificuldades compartilhadas,
madrugadas em claro, momentos de comemoração e auxilia durante essa etapa.
Aos professores do IFSULDEMINAS, por reservarem seu tempo, dedicação
e paciência para nos capacitar academicamente e nos preparar para o mercado de
trabalho.
A todos que já torceram pelo meu sucesso nessa etapa da minha vida e no
restante dela.
Obrigado!
“Não prever, é já lamentar.”
-Leonardo da Vinci
RESUMO
AM Aprendizado de Máquina
IA Inteligência Artificial
IBOV Índice Bovespa
IN Índice de Negociabilidade
LSTM Long-Short Term Memory/Memória de Longo Prazo
MLP Multilayer Perceptron/Perceptron de Múltiplas Camadas
MSE Mean Square Error/Erro Médio Quadrático
NARX Nonlinear Autoregressive Network with Exogenous Inputs/Rede
Neural Auto-Regressiva Com Entradas Exógenas
RN Rede Neural
RNA Rede Neural Artificial
RMSE Root Mean Square Error/Raiz do Erro Médio Quadrático
SFN Sistema Financeiro Nacional
WCA Web Crawling Agent
LISTA DE SÍMBOLOS
∑ Função de Agregação.
Θ Limiar/Threshold.
Φ Função de Ativação.
SUMÁRIO
1 INTRODUÇÃO ........................................................................................................ 14
5 CONCLUSÃO ......................................................................................................... 56
1 INTRODUÇÃO
2 REFERENCIAL TEÓRICO
Entidades Supervisoras buscam fazer com que os outros integrantes do SFN sigam
as regras definidas pela entidade anterior. Por fim, os Operadores são as entidades
e instituições que compõem o mercado financeiro brasileiro, as quais realizam o
papel intermediário na troca de recursos. Na Tabela 1 são apresentados alguns dos
componentes que fazem parte do SFN.
Instituições Financeiras,
Banco Central do Brasil Intermediários Financeiros e
Conselho Monetário
Administradores
Nacional
Comissão de Valores Bolsa de Mercadorias e
Mobiliários Futuros e Bolsa de Valores
Sociedades de
Conselho Nacional de Superintendência de
Capitalização e
Seguros Privados Seguros Privados
Seguradoras
Conselho Nacional de Secretaria Nacional de Entidades de Previdência
Previdência Complementar Previdência Complementar Complementar
forma pluralista, que seja baseada na economia de mercado, fazendo com que a
participação coletiva em tal economia ocorra de forma ampla, atuando incisivamente
nos resultados e riquezas da economia.
Após a compreensão dos pilares que fundamentam o mercado tratado nesta
subseção, foi necessário abordar o seu funcionamento. O mercado acionário é
classificado em duas etapas, as quais são o Mercado Primário, que é o principal
responsável pela inserção dos recursos nas empresas, e o Mercado Secundário, o
qual retrata cada transação entre as partes envolvidas. Na Figura 2 é ilustrada a
estrutura do mercado de capitais e algumas funcionalidades.
Mercado Primário
Mercado Secundário
2.1.2 BM&FBovespa
Esse acontecimento histórico fez com que muitas outras bolsas de valores
surgissem posteriormente pelo mundo e, em 1991 se iniciou o processo de
consolidação das bolsas de valores brasileiras. Inicialmente, tais praças de
comércio foram incorporadas por duas instituições, a BM&F e a Bovespa, que no
futuro deixariam de possuir fins lucrativos e integrariam suas operações, se
unificando e originando a atual BM&FBovespa.
Atualmente, a BM&FBovespa proporciona local, condições e sistema para a
prática de negociações de compra e venda de títulos e valores mobiliários. Além
disso, realiza uma análise do comportamento do mercado por meio de diversos
índices. Geralmente, cada índice específico é um indicador de desempenho de um
determinado conjunto de ações, que permite o acompanhamento da valorização de
tais ações ao longo do tempo.
Cada um dos índices medidos pela BM&FBovespa indica um valor obtido por
meio da realização de um cálculo. Esses valores são separados em setores, que
podem ser definidos como amplos, setoriais, de sustentabilidade, de governança ou
de segmento. Devido à sua grande utilização no mercado financeiro, abordou-se
neste trabalho o índice amplo conhecido como Bovespa (ASSAF NETO, 2018;
PINHEIRO, 2018).
O IBOV é um valor continuamente atualizado após um período de tempo e
que possui como finalidade indicar o desempenho das negociações na bolsa. Para
se realizar o cálculo desse valor utiliza-se do Índice de Negociabilidade (IN), que
define as quantidades teóricas de cada ativo que integrará o IBOV. Porém,
primeiramente, é necessário formalizar os ativos que farão parte da operação, para
que atendam a alguns critérios, dentre eles a liquidez e o volume financeiro, que
são, respectivamente, as ações com maior quantidade de negociações na bolsa e
as ações com maior montante de dinheiro transacionado (BM&FBovespa, 2017).
Após a seleção com base nas especificações, é realizado o cálculo que é
representado pela Equação 1, a qual compreende a estimativa do IN.
3 𝑁𝑎 𝑉𝑎 2
× ( )
𝐼𝑁 = ∑𝑃𝑖=1 √ 𝑁 𝑉
(1)
𝑃
22
1Pregão é o ato de divulgar alguma informação, na Economia é a exposição feita, por corretores de
bolsas, de ofertas a serem negociadas junto aos lances oferecidos (PREGÃO, 2019).
23
reais que são associados aos pesos de conexão da rede. Devido a isso é possível
fazer com que a rede se torne genérica (para qualquer entrada). Portanto, sem essa
etapa o algoritmo não obterá o conhecimento necessário para a generalização e
não conseguirá ser aplicado a novos conjuntos de dados.
Existem dois objetivos principais a serem atendidos, quando se trabalha com
AM: generalizar análises e encontrar a função (matemática) que possa ser utilizada
para predizer valores ou classificá-los. Além disso, existem dois Paradigmas de
Aprendizado quando se trata desses algoritmos, o Aprendizado Supervisionado em
que é necessário um supervisor externo que conhece o valor da saída e é capaz de
avaliar a eficácia do resultado, e o Aprendizado Não Supervisionado, no qual utiliza-
se de medidas estatísticas/probabilísticas na tentativa de se predizer/classificar
informações (FACELI et al., 2011). A Figura 3 ilustra a hierarquia de aprendizado,
bem como os seus tipos de tarefas.
Caso a saída não esteja adequada (dentro de um erro tolerável), realiza-se novas
operações de modo a tornar cada peso mais exato, buscando a convergência da
rede.
Com base no que foi exposto, existem diversos algoritmos que podem ser
utilizados para ajustar os valores dos pesos sinápticos de uma rede neural artificial.
Para prosseguir com o desenvolvimento das arquiteturas propostas, foram
utilizados os algoritmos de otimização de pesos conhecidos como Gradiente
Estocástico Descendente e Adam. Dessa forma, fez-se necessário analisar ambos
os algoritmos de modo a compreender seu funcionamento.
O primeiro algoritmo de otimização, o Gradiente Estocástico Descendente,
consiste em realizar o cálculo de um parâmetro conhecido como gradiente (obtido
através do erro total entre saída esperada e obtida), para cada neurônio, em cada
iteração. Vale ressaltar que o cálculo dos gradientes dos neurônios é efetuado com
base nos gradientes já computados de neurônios de camadas vizinhas. De posse
do valor do gradiente de cada neurônio é possível determinar qual o fator de ajuste
de cada peso sináptico da rede, realizando as atualizações para cada um deles.
Além disso, esse algoritmo mantém uma taxa de aprendizagem fixa (definida à
priori) para todas as iterações.
Segundo Kingma e Ba (2014), os quais são responsáveis por desenvolver o
algoritmo Adam, o intuito desse algoritmo é adaptar os pesos da rede neural
29
1
𝑓 (𝑥 ) = (3)
1+ 𝑒 −𝑥
𝑓(𝑥) = 𝑥 (4)
O Erro Quadrático Médio (MSE), como conceituado na Seção 2.4, é uma das
técnicas da área da Estatística que realiza a comparação entre valores alcançados
e reais. Segundo Dametto (2018), a MSE é a métrica mais empregada para realizar
o cálculo de desempenho em modelos de predição. A Equação 8 mostra como é
realizado o cálculo.
2
∑𝑁
𝑡=1(𝑉𝑝 − 𝑉𝑟 )
𝑀𝑆𝐸 = (8)
𝑁
A Raiz do Erro Quadrático Médio (RMSE) encontra, por meio de seu cálculo,
um valor numérico que indica o quão grave foi o erro computado, podendo ser
próximo de zero (erro mínimo) ou não. A operação realizada para obtenção do valor
é similar ao que ocorre na Equação 8, porém extrai-se o valor da raiz quadrada do
resultado. A Equação 9 descreve como é realizado o cálculo.
𝑁 2
∑ (𝑉𝑝 − 𝑉𝑟 )
𝑅𝑀𝑆𝐸 = √ 𝑡=1 (9)
𝑁
Com base nas métricas apresentadas, espera-se que com a sua utilização,
seja possível alcançar qual o resultado obtido pelas RNAs é o mais preciso. Por fim,
através desse resultado, foi possível concluir qual das redes analisadas é a melhor,
se aplicada ao problema de predição apresentado neste trabalho.
34
3 MATERIAL E MÉTODOS
2 http://cotacoes.economia.uol.com.br/bolsas/cotacoes-historicas.html?indice=.bvsp
35
120000
110000
100000
90000
Valores
80000
70000
60000
50000
40000
jul/11 jul/12 jul/13 jul/14 jul/15 jul/16 jul/17 jul/18 jul/19
Datas
rede. A Figura 9 mostra como é realizada a criação da rede neural com o uso da
biblioteca e como são declarados seus parâmetros.
1. model = Sequential()
2. model.add(Dense(x, input_dim=6, activation='sigmoid'))
3. model.add(Dense(y, activation='sigmoid'))
4. model.add(Dense(z, activation='sigmoid'))
5. model.compile(optimizer="sgd", loss="mse", metrics=['mse'])
6. model.fit(x_train, y_train, epochs=epocas, batch_size=6, verbose=0)
7. model = Sequential()
8. model.add(Dense(x, input_dim=6, activation='linear'))
9. model.add(Dense(y, activation='linear'))
10. model.add(Dense(z, activation='linear'))
11. model.compile(optimizer="adam", loss="mse", metrics=['mse'])
12. model.fit(x_train, y_train, epochs=epocas, batch_size=6, verbose=0)
Além disso, faz-se necessário destacar que devido a distinção entre as RNAs
propostas, as quantidades de épocas utilizadas se diferem. Utilizou-se para a
primeira arquitetura (MLP1), as quantidades 25000, 50000, 75000 e 100000,
enquanto para a segunda arquitetura (MLP2) foram utilizadas as quantidades 2500,
5000, 7500 e 10000, para realizar o treinamento das redes.
4 RESULTADOS E DISCUSSÕES
dos pesos e o bias de cada neurônio podem ter sido alterados de 0 até 100000
vezes. A nova arquitetura da rede é mostrada pela Figura 14.
90000
80000
Valores
70000
60000
50000
40000
jan/12 jan/13 jan/14 jan/15 jan/16 jan/17 jan/18 jan/19
Datas
104000
102000
100000
Valores
98000
96000
94000
92000
jun/19 jul/19 ago/19 set/19 out/19
Datas
MLP1 MLP2
100%
99%
98%
97%
Percentual
96%
95%
94%
93%
92%
91%
90%
97020,48 101066,94 102125,94 100625,74 104053,4
IBOV real
que em grande parte dos trabalhos analisados, os erros que estivessem no intervalo
de 1 a 10% são considerados aceitáveis. Com base no exposto, é possível verificar
que ambas as arquiteturas se mostraram eficientes ao realizar a predição dos
valores utilizados. Porém, a arquitetura e os parâmetros utilizados na MLP2,
mostraram-se superiores se comparados à MLP1, visto que todos os resultados
obtidos na fase de testes foram superiores a 96%.
Uma vez que foram encontrados os valores referentes à taxa de acerto de
cada rede, foram calculadas as métricas mencionadas na Seção 2.4. Para a MLP1,
obteve-se um valor de MSE igual a 1965329,63, e de RMSE um valor igual a
1401,90. Por outro lado, no que diz respeito à rede MLP2, foram obtidos valores de
MSE e RMSE, respectivamente iguais a 196844,52 e 443,67. Posteriormente,
verificou-se qual a acurácia da rede, tomando como base que o erro permitido para
a saída seria de 7% (tendo em mente análises empíricas). Com base no cálculo de
quantas saídas atendiam a esse critério, obteve-se uma acurácia de 80% para a
arquitetura da MLP1 e 100% para a arquitetura da MLP2.
Apesar dos valores altos de acurácia das arquiteturas, quando se realiza um
estudo a respeito do mercado acionário, propor uma arquitetura que oferece um
erro de 7% pode resultar em um prejuízo relativamente grande ao investidor. Dessa
forma, foi preciso reduzir ainda mais a margem de erro tolerável a fim de verificar
se as redes seriam realmente eficientes nessa predição, selecionou-se então um
erro permitido de 2%, pois utilizando esse valor foi possível reduzir o prejuízo (se
comparado a 7% de erro). Realizando então a análise, concluiu-se que a MLP2 se
mostrou novamente superior (se comparada a MLP1), visto que obteve uma taxa
de acerto de 80% para os valores utilizados na fase de testes, enquanto a MLP1
obteve 0% de taxa de acerto, não conseguindo predizer nenhum valor com uma
margem menor ou igual à 2% de erro.
Baseando-se nesse resultado é possível mensurar, comparando com as
arquiteturas existentes na literatura computacional, qual é a eficiência das redes,
parâmetros e função de ativação sugeridas por este trabalho. Com esse intuito,
utilizou-se os resultados (arquitetura de uma MLP) obtidos por Dametto (2018). A
arquitetura de Dametto foi utilizada para realizar predições com base em valores
diários do Índice Bovespa, em predições realizadas para períodos mais curtos
geralmente utiliza-se um erro inferior à 7% (utilizado neste trabalho), visto que a
cotação diária tem pouca variação (comparada à variação mensal). Além disso, para
55
a elaboração de uma arquitetura que prediz valores diários, existe uma quantidade
maior de dados a serem utilizados na fase de treinamento, fato que melhora a
capacidade de predição da rede.
Com base no exposto, é necessário enfatizar que a arquitetura desenvolvida
por Dametto, era composta de duas funções de ativação distintas (Unidade Linear
Retificada e Tangente Hiperbólica). Tal arquitetura também possui uma quantidade
maior de neurônios na camada intermediária (14 neurônios e apenas uma camada
oculta), diferentemente das arquiteturas desenvolvidas neste trabalho. Por meio
dessas informações, é possível classificar a arquitetura da MLP2 (obtida neste
trabalho) como uma arquitetura eficiente e capaz de predizer valores com um erro
inferior a 2% (na maioria das vezes), o qual pode ser considerado mínimo quando
se observa a variação mensal do IBOV. Utilizou-se o trabalho de Dametto para
realizar essa comparação devido ao fato de que essa dissertação serviu de
inspiração para a elaboração e desenvolvimento deste trabalho.
56
5 CONCLUSÃO
REFERÊNCIAS BIBLIOGRÁFICAS
HAYKIN, Simon S. et al. Neural networks and learning machines. Upper Saddle
River: Pearson education, 2009.
KINGMA, Diederik P.; BA, Jimmy. Adam: A method for stochastic optimization.
arXiv preprint arXiv:1412.6980, 2014.
MORETTIN, Pedro A.; TOLOI, Clélia. Análise de séries temporais. In: Análise de
séries temporais. 2006.
WUERGES, Artur Filipe Ewald; BORBA, José Alonso. Redes neurais, lógica
nebulosa e algoritmos genéticos: aplicações e possibilidades em finanças e
contabilidade. JISTEM-Journal of Information Systems and Technology
Management (Online), v. 7, n. 1, p. 163-182, 2010.