Вы находитесь на странице: 1из 59

Analisis tecnico de mercados financieros basado en

tecnicas de inteligencia artificial

Angel
Pina Canelles
5 de septiembre de 2014

Indice general
0.1. Abstract . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1. El Problema
1.1. El Analisis de los Mercados Financieros . . . . . . . .
1.1.1. El Analisis Fundamental y el Analisis Tecnico
1.1.2. Los Principios y Metodos del Analisis Tecnico
1.1.3. Algunas Tecnicas de Analisis Chartista . . . .
1.1.4. Algunas Tecnicas del Analisis de Osciladores .
1.2. Traders Automaticos y Talentum . . . . . . . . . . .
1.3. Problema Propuesto . . . . . . . . . . . . . . . . . .
2. Desarrollo de la Soluci
on
2.1. Solucion Propuesta . . . . . . . . . . . . . . .
2.1.1. Vision General . . . . . . . . . . . . .
2.1.2. Redes Neuronales como Predictores . .
2.1.3. El Procedimiento Completo . . . . . .
2.2. Etapas del Proceso . . . . . . . . . . . . . . .
2.2.1. Obtencion y Tratamiento de los Datos
2.2.2. Entrenamiento de Redes Neuronales . .
2.2.3. Puesta en Marcha a Mercado Real . .
2.2.4. Monitorizacion y Fiabilidad . . . . . .
3. Aspectos T
ecnicos
3.1. Software Desarrollado . . . . . . . . . . . . . .
3.1.1. Librerias Utilizadas . . . . . . . . . . .
3.1.2. Modulos Desarrollados . . . . . . . . .
3.1.3. Estructura General . . . . . . . . . . .
3.1.4. Interfaz de Usuario . . . . . . . . . . .
3.2. Detalles Tecnicos del Entrenamiento de Redes
3.2.1. El Problema del Overfitting . . . . . .
3.2.2. El Proceso Completo de Entrenamiento
3.3. Analisis de Componentes Principales . . . . .
3.4. Tests Estadisticos . . . . . . . . . . . . . . . .
3.5. Medidas de Error y Fiabilidad . . . . . . . . .
3

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.

9
9
9
10
11
12
14
15

.
.
.
.
.
.
.
.
.

17
17
17
18
21
22
22
24
26
27

.
.
.
.
.
.
.
.
.
.
.

29
29
29
30
31
35
37
37
39
40
42
44

INDICE GENERAL

4. Resultados y Conclusiones
4.1. Resultados del Prototipo Inicial . . . . . . . . . . . . . . . . . . . . . . . .
4.2. Resultados Finales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.3. Conclusiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

49
49
54
57

0.1. ABSTRACT

0.1.

Abstract

The original goal of this work was to apply machine learning techniques to the study of
financial markets. We quickly discarded the problem of trying to predict the evolution of
the market itself, since this is a very well studied problem, and it is too complex for the
purposes of a final degree project. Instead, we were contacted by the company Talentum,
which proposed us to solve a problem they were currently facing.
Talentum is a startup company focused on automatic trading to operate on currency
exchange markets such as FOREX. They have a lot of automatic traders (that is, robots)
programmed using a wide variety of techniques, following the indications of experts from
different fields: mainly computer science, economy and mathematics, but also physics,
chemistry... etc. Since the Companys foundation in February 2014, they have developed
and programmed more than a thousand robots, and so, as the number of available robots
scaled so quickly, their actual problem is deciding, at a given moment, which robots they
should use in their systems to operate in the market.
Their first approaches not being satisfactory, they proposed us the problem of designing
and implementing a system that could help them making that decision. That is, ideally,
the system should be able to predict the expected performance of every robot, and provide
metrics to an external agent developed by them, that will use this data to choose a subset
of robots to operate in a given situation. In order to achieve this goal, our software would
study the way that every robot had performed in the past, comparing the current market
situation with the one in which the robot operated previously (and concluding from the
result obtained then).
In order to solve the proposed problem, we have had to design, implement and combine
techniques from both computer-science and mathematics. The theoretical basis of most of
them are also included in this document. Particularly, the main techniques that we used
are:
Artificial Neural Networks. Artificial neural networks are computational models
inspired by the architecture of animals brain. It is a well known machine learning
technique, specially suited for problems related to pattern recognition. We use them
as the kernel of our system, using them for implementing predictors on the robots
expected performance.
The Principal Component Analysis (PCA) is a statistical procedure that we
use for preprocessing the data extracted from the market, in order to reduce the
dimension of the data that models the market situation at a given moment. PCA uses
an orthogonal transformation to convert a possibly correlated set of observations into
a set of linearly uncorrelated ones.
Statistical hypothesis testing is a method of statistical inference to assess the
acceptance of a given hypothesis. We will use it as part of the process of choosing
the structure for each network.
Weighted least squares. The least squares problem consists on, given a set of
points in the plane, adjusting the line that minimizes the total error of calculating,

INDICE GENERAL

using the line as a function of x, the y value for every point (x, y) in the set. We
will use a variation of that method, that allows us to assign different importances
to each point, as a method to fix the error made by our predictors.
The software that has been developed for this work has been programmed using the
Java programming language, along with some external libraries that implement some of
the more technical algorithms. For example, we have used Encog ([8]) for the algorithms
related to creation, training and execution of neural networks, and WEKA ([9]) for the
implementation of the Principal Component Analysis.
The document is structured as follows:
In the first chapter we make an introduction to financial market analysis, explaining
its two main branches: Fundamental analysis and technical analysis. On the one hand,
fundamental analysis is based on the belief that the price of shares doesnt represent their
real value. Therefore, its goal is that of, using all possibly available information, knowing
the real value of the shares and therefore being able to buy or sell them efficiently.
On the other hand, technical analysis focuses on finding behavioral patterns in shares
prices: Studying the behavior they had in the past, trying to predict their future changes.
After this introduction, we focus on technical analysis, which is the one directly related
to this work. We will present its principles and premises. We also introduce the two
main groups in which technical analysis techniques can be divided: Charts analysis and
bounders analysis, and give some sample techniques of both of them.
After this section, we make a brief introduction to the automatic trading, and to
Talentum, the company we have been working with. To end the chapter, we introduce in
more detail the problem we solved during this work.
In the second chapter we expose the solution we have developed, which can be summarized as follows:
The kernel of our system, i.e. the predictors, are implemented using neural networks.
The problem the network tries to solve is that of, considering the situation of the financial
market at a given moment, predicting the balance (whether positive or negative) a robot
is going to have.
For the network being able to solve this problem, we use the available information
about how the robot performed in the past. This way, when a new case comes, the network
will make its prediction based on similar situations whose result we already know1 .
As modeling the state of the market can be very complex, and since we expect to have
a great deal of variables related to it, we have to apply some preprocessing to the data
before the neural network can use it efficiently. Firstly, we will reduce the dimensionality
of the data (that is, the number of variables) using the Principal Components Analysis.
Also, we will apply a normalization process before giving the data to the network. The
description and details of the whole process are given in the document.
1

The given explanation is a really general idea of how a neural network actually works, we will give
the detailed procedure in the correspondent sections of this document.

0.1. ABSTRACT

After this overall vision, we explain in detail the steps that are followed through the
software. Those steps are:
Obtaining and processing the data. In this step we get the operations records
of our robot, and our aim is to obtain a set of test cases for training the neural
network. We also apply the principal component analysis and normalization.
Training our neural networks. We use the set of test cases obtained in the
previous step to train a new network that will make predictions about the robots
performance.
Running the system in real-time market. In this step we run the neural network just trained. We have to get the real time market information from Talentum
databases and apply to them the same preprocessing procedures as with the training data. Next, we can execute our networks and send the predictions and related
information to the agent that will control the robots.
Monitoring the results. Once our system is running in the real-time market, we
monitor the operations that are being done. Every time a robot makes an operation,
we update the estimation of the error and reliability for the network that controls
it. We also implement the functionality to check the predictions being made by the
networks at any given moment, and getting the operations that have been done up
to date.
In the third chapter, we review all the technical aspects of our work, including the
theoretical base of the principal component analysis, technical details related to the neural
networks training (such as the overfitting problem), etc.
Also in this chapter, we explain the whole estructure of the software developed for the
processes described above, both from the programming point of view (libraries, modules,
classes diagrams...) and the users point of view (that is, we show the user interface and
explain how to use it).
Finally, in the fourth and last chapter we present the results obtained from our work. In
a first section we introduce the results obtained from a first prototype, which run during
the past month of June and didnt include any measure of the networks estimated error,
yet. In a second section we include the results obtained by the final prototype, which
has been running during last August, and included all the techniques covered by this
document. We analyze the results from both experiments, and compare them with the
results that would have been obtained by the same robots without using our system.
Finally, we give our conclusions for the work, as well as propose several future ways
to improve the software and results.

INDICE GENERAL

Captulo 1
El Problema
1.1.

El An
alisis de los Mercados Financieros

1.1.1.

El An
alisis Fundamental y el An
alisis T
ecnico

El analisis de los mercados financieros, o analisis bursatil, consiste en el estudio de los


activos del mercado financiero. Su objetivo consiste en obtener informacion anticipada
sobre la evolucion de sus cotizaciones, de forma que se puedan realizas operaciones de
compra y venta en bolsa que arrojen beneficios. El contenido de esta seccion esta basado
principalmente en [1].
El analisis de los mercados se puede dividir en dos grandes ramas principales: El
analisis fundamental y el analisis tecnico.
El an
alisis fundamental se basa en la creencia de que el mercado tiene una eficiencia
debil, es decir, que el precio de las acciones no es representativo de su valor. El analista
utiliza toda la informacion a su alcance sobre la empresa para realizar una estimacion del
precio que considera correcto para las acciones de la misma, y realizar una compra o una
venta seg
un piense que estas estan infravaloradas o sobrevaloradas. Realmente no hay una
forma completamente objetiva de valorar una accion, y por lo tanto varios analistas pueden
llegar a distintos resultados, concluyendo uno de ellos que la accion esta infravalorada y
el otro que esta sobrevalorada. Esto es logico, por otra parte, ya que para que alguien
pueda comprar una accion otra persona debe querer venderla.
El an
alisis t
ecnico, por el contrario, no plantea si las acciones estan correctamente
valoradas, sino que busca patrones de comportamiento en la cotizacion de las acciones,
basandose en la historia de comportamientos de estas, y trata con ellas de predecir movimientos futuros para obtener beneficios. El analisis tecnico es un analisis mas grafico,
visual, y que se ayuda de unos indicadores u osciladores que proporcionan informacion
sobre tendencias.
Aunque se utilizan diversas herramientas, es especialmente com
un el uso de graficos
que reflejen los movimientos de las cotizaciones. Al igual que ocurra en el analisis fundamental, no se trata de una ciencia exacta, y ante los mismos datos dos analistas pueden
emitir opniniones contrarias.
9

CAPITULO 1. EL PROBLEMA

10

Podra decirse que el analisis tecnico es un analisis para el corto plazo mientras que
el analisis fundamental lo es para el largo plazo. Por ejemplo, aunque las previsiones de
una empresa sean buenos y ser esperable a largo plazo que su cotizacion suba, esta puede
bajar a corto plazo debido a la toma de beneficios por parte de los inversores. Son patrones
como estos de los que el analisis tecnico trata de sacar partido.
De hecho, a menudo se combinan ambos analisis: El analisis fundamental indica que ttulos hay que comprar y cuales hay que vender, mientras que el analisis tecnico muestra el
momento exacto para realizar dicha compra o venta.

1.1.2.

Los Principios y M
etodos del An
alisis T
ecnico

El analisis tecnico, que como hemos comentado se basa en tratar de encontrar patrones
o tendencias en las cotizaciones, se basa en tres premisas:
Todo lo que puede afectar al precio de cualquier valor esta descontado.
Los precios se mueven por tendencias. Existen tres tendencias:
La tendencia primaria que engloba periodos anuales.
La secundaria, con periodos mensuales o semanales.
La terciaria con periodos diarios.
El mercado tiene memoria.
La primera premisa niega el principio basico del analisis fundamental, y asume que las
acciones no estan sobrevaloradas ni infravaloradas, sino que reflejan su valor exacto. La
segunda refleja que el mercado se mueve por tendencias mas largas o mas cortas, y la
tercera premisa establece que lo que ocurrio en el pasado tiende a repetirse, y que por
tanto podemos usar los datos de este para predecir los futuros.
Los metodos del analisis tecnico pueden dividirse en dos grandes grupos: El analisis
chartista y el analisis por osciladores. El chartismo es un sistema basado u
nicamente en
el estudio de los graficos. Supone que los movimientos de los precios son debidos a una
combinacion de expectativas y sentimientos de los inversores, y que estos actuaran de la
misma manera en el futuro de lo que lo hicieron en el pasado, por lo que trata de descubrir
patrones en las figuras que forman las evoluciones de los precios.
El analisis de osciladores, por otro lado, utiliza ecuaciones matematicas para determinar se
nales de compra o venta en los graficos, utilizando como variable principal las
cotizaciones de los precios.
En las siguientes dos secciones se establecen ejemplos de uno y otro tipo de analisis.


1.1. EL ANALISIS
DE LOS MERCADOS FINANCIEROS

1.1.3.

11

Algunas T
ecnicas de An
alisis Chartista

Un ejemplo de analisis chartista es establecer que el mercado, respecto a un determinado ttulo, puede encontrarse en una tendencia alcista o bajista. As, basandonos en los
comportamientos de la cotizacion en el pasado para situaciones similares, podemos establecer que pasara determinadas fase prefijadas. Por ejemplo, en el caso de encontrarnos
con un ttulo con una tendencia alcista (Figura 1.1) podemos distinguir las siguientes tres
fases:
Fase de Acumulacion. El analisis fundamental establece predicciones de bajada y
los inversores venden sus acciones al no ver una rentabilidad satisfactoria. Sin embargo, los operadores de Bolsa con mas informacion comienzan a comprar acciones
lentamente (a acumularlas) y el recorrido del precio es horizontal con una ligera
tendencia alcista.
Fase de Expansion. Se confirma la mejora de los datos, que llegan al p
ublico general, y se produce la compra masiva de ttulos, por lo que se eleva rapidamente
su cotizacion y produciendo altas rentabilidades, que a su vez motiva de nuevo la
compra.
Fase de Distribucion. El p
ublico general compra gran cantidad de ttulos hasta que
el mercado alcanza un punto en el que ya no crece. Algunos inversores venden para
recoger beneficios y otros compran estos ttulos animados precisamente por estas
rentabilidades obtenidas, lo que hace que el precio crezca y baje ligeramente.

Figura 1.1: Tendencia Alcista: IBEX-35 desde 1996 hasta mitad del a
no 1998. [1]

CAPITULO 1. EL PROBLEMA

12

Y de la misma forma, una vez estabilizada su cotizacion, puede producirse a continuacion una tendencia bajista, que de nuevo podemos dividir en tres fases principales (Figura
1.2):
Fase de Distribucion. Coincide con la u
ltima fase del mercado alcista. Se producen
algunas compras y ventas sin mucha rentabilidad, lo que hace que los inversores
comiencen a buscar alternativas en otros mercados.
Fase de Panico. Cuando se percibe el efecto de las ventas, comienza un panico
muchas veces no justificado por los datos fundamentales y los inversores comienzan
a querer vender, por lo que el precio cae abruptamente, y aunque puede haber ligeras
subidas la tendencia es bajista.
Fase de Consolidacion. Finalmente la bajada comienza a atenuar y se vuelve a los
recorridos horizontales, hasta que acaba la tendencia bajista.

Figura 1.2: Tendencia Bajista: IBEX-35 durante el a


no 2000. [1]

De esta forma, asumiendo que el mercado se va a comportar de acuerdo a estos patrones


y fases, el conocedor de las tecnicas de analisis chartista podra decidir los momentos
adecuados para comprar y vender sus ttulos obteniendo altas rentabilidades.

1.1.4.

Algunas T
ecnicas del An
alisis de Osciladores

El ejemplo mas sencillo de oscilador (y uno de los mas utilizados) es la media m


ovil.
La media movil de un periodo es el promedio de los precios de un determinado ttulo


1.1. EL ANALISIS
DE LOS MERCADOS FINANCIEROS

13

durante ese periodo. Al suavizar la curva de precios, constituye una forma mas sencilla
de observar las tendencias del mercado.
Ademas, una tecnica para obtener se
nales de compra o de venta sera observar cuando
la grafica de la cotizacion del valor corta la grafica formada por la media movil, lo que
indicara que el mercado esta sufriendo una tendencia bajista o alcista a corto plazo.
Por ejemplo, si una cotizacion ascendente corta la media movil significa que el precio ha
ascendido de forma mas rapida de lo normal, por lo que es de suponer que nos encontramos
ante una tendencia alcista y esta seguira subiendo, por lo que es conveniente comprar.
Podemos encontrar un ejemplo de este procedimiento en la figura 1.3. En ella, se muestran
las medias moviles de 14 das (lnea continua) y de 150 das (lnea discontinua). As,
cuando la cotizacion corta la media que usemos como referencia, se producira una orden
de compra (se
naladas con un 1) o una orden de venta (se
nalada con un 2).

Figura 1.3: Medias Moviles: Cotizacion del BBVA durante el a


no 2000. Medias moviles de
14 das (lnea continua) y de 150 das (lnea discontinua). Se ha se
nalado con un 1 se
nales
de compra, y con un 2 se
nales de venta. [1]

Pese a la simplicidad de este metodo, existen varias modificaciones. Por una parte, tomar
medias moviles de periodos mas largos o mas peque
nos vara el riesgo y la rentabilidad
esperada: Tomando medias moviles mas largas las tendencias que detectemos seran mas
seguras pero de menor rentabilidad que con medias moviles mas cortas.
Existen por otra parte muchas variaciones y mejoras a este metodo, que van desde el
uso de varias medias moviles simultaneamente (para detectar por ejemplo los cortes entre
ellas en lugar de con la cotizacion) hasta otras formas de calcular estas medias, dando por
ejemplo mas importancia a las cotizaciones mas recientes.

14

CAPITULO 1. EL PROBLEMA

Existen otras tecnicas mas complejas basadas en ideas matematicas, como son por
ejemplo las Bandas de Bollinger, que utiliza la regla estadstica de las tres sigmas, que
establece que el 99 % de una distribucion normal esta comprendida entre la media menos
tres veces la desviacion tpica y la media mas tres veces la desviacion tpica. Por tanto, la
tecnica se basa en que si la cotizacion alcanza la cota dada por la media movil mas tres
veces su desviacion tpica, es de esperar que su precio comience a caer y emitimos una
orden de venta, y si la cotizacion alcanza la media movil menos tres veces su desviacion
tpica emitimos una de compra. Un grafico reflejando esta tecnica podemos encontrarlo
en la figura 1.4. En ella, encontramos las bandas de Bollinger referidas a la media movil
de 20 das. Cuando la cotizacion alcanza la banda superior, se espera que posteriormente
caiga, por lo que nuestra accion sera de venta, mientras que si la cotizacion alcanza la
banda inferior emitiremos una se
nal de compra.

Figura 1.4: Bandas de Bollinger: Cotizacion de la empresa Altadis durante el a


no 2000.
[1]

1.2.

Traders Autom
aticos y Talentum

Los sistemas de trading automatizados, o traders automaticos permiten establecer una


serie de reglas automaticas que dictan cuando realizar una operacion y cuando cerrarla,
de forma que esta se ejecute de forma autonoma sin intervencion humana posterior. Las
reglas que en estos se programan pueden ser relativamente sencillas, como las medias
moviles que vimos anteriormente, o mucho mas complejas.

1.3. PROBLEMA PROPUESTO

15

Los sistemas automaticos han ido tomando mucha fuerza los u


ltimos a
nos. Entre sus
ventajas se encuentra la rapidez a la que puede detectar y realizar las operaciones, la
facilidad de diversificacion o el hecho de que evitar que las emociones del broker influyan
en las decisiones del sistema. Como desventajas, por otra parte, podran citarse los posibles
fallos mecanicos o la necesidad de monitorizacion.
Talentum es una empresa dedicada precisamente a este campo. Fundada en Febrero del
2013, Talentum se dedica principalmente al estudio y desarrollo de sistemas automaticos
para invertir en bolsa. Cuenta con profesionales de distintas ramas, principalmente economistas, informaticos, qumicos y matematicos, cuyas tecnicas especficas combinadas se
programan en los robots.
En la actualidad, Talentum cuenta con mas de 1.000 robots programados y optimizados
con distintos parametros para diferentes divisas. Por el momento, los robots de Talentum
operan u
nicamente en el mercado FOREX (cambio de divisas). Han comercializado por
separado varios de sus robots, como Ulysses o Helena. Sin embargo, su producto estrella
es Diana, un sistema de trading automatico consistente en un conjunto de 5 robots que
rotan cada cierto tiempo dependiendo de las condiciones del mercado. [2]

1.3.

Problema Propuesto

Como hemos comentado, Talentum posee mas de 1.000 robots capaces de operar en
bolsa, basados en diferentes tecnicas y algoritmos. En la mayora de sus sistemas, como
Diana, no se utilizan de forma independiente, sino que se toma un subconjunto de robots
para que operen a la vez. De forma, se logra que las perdidas se compensen entre ellos y se
diversifican las operaciones, lo que permite minimizar el riesgo. Ademas, su sistema Diana
cambia los robots que operan cada poco tiempo, de forma que es capaz de adaptarse a
los cambios que se produzcan en el mercado, y retirar los robots que no funcionen bien y
sustituirlos por otros que, presumiblemente, lo haran mejor.
En ese punto, la empresa se encontraba ante un problema que no haban logrado resolver
satisfactoriamente: La eleccion del subconjunto de robots para operar en cada momento.
La aproximacion que haban realizado hasta entonces, consistente en simular los resultados
que hubieran tenido todos los robots la semana anterior, y elegir aquellos que lo hubieran
hecho mejor, no daba buenos resultados. Esto era debido a que la situacion del mercado,
especialmente del de divisas y operando a corto plazo, es muy cambiante de una semana
a la siguiente.
Por tanto, el problema que se propuso para la realizacion de este trabajo fin de grado
fue dar a Talentum criterios para poder elegir con mayor efectividad que robots elegir
para que operen en cada momento. Para ello, nuestra idea basica era utilizar los resultados
pasados de cada robot en situaciones del mercado similares para tratar de predecir como
se comportaran en la situacion actual.
As, debamos desarrollar unos predictores que nos proporcionen informacion sobre los
resultados que tendra un robot concreto si operara en el momento actual. Esta informacion

16

CAPITULO 1. EL PROBLEMA

sera entonces utilizada por un agente externo de Talentum, que con sus propios criterios
decidira que robots utilizar.
Ademas del sistema basico de realizacion de predicciones sobre el desempe
no de un
robot, incorporamos otros mecanismos para estimar los errores que cometemos en las
mismas, de forma que dieramos al agente externo la mayor cantidad de informacion posible
para realizar sus decisiones.
Por tanto, nuestro objetivo final es implementar un sistema que nos proporcione predicciones sobre el rendimiento de cada robot, junto con una medida de la fiabilidad de esta
prediccion. Todo ello sera interpretado por un agente externo que elegira un determinado
conjunto de robots en para que operen en cada momento, en funcion del riesgo deseado.

Captulo 2
Desarrollo de la Soluci
on
2.1.
2.1.1.

Soluci
on Propuesta
Visi
on General

Puesto que nuestro objetivo es lograr hacer predicciones sobre el resultado que tendra un
robot puesto a operar sobre el mercado, el n
ucleo de nuestro sistema lo constituiran los
predictores. Un predictor es un elemento relativo a un robot concreto, que basandose en
su historial de operaciones realizara sus predicciones. Ademas, estableceremos otra capa
superior al predictor que nos proporcionara una medida de la fiabilidad de las predicciones
realizadas por este en cada momento.
Toda esta informacion de cada robot sera utilizada por un agente externo para elegir que robots dejar operar en bolsa y cuales no. El esquema de esta estructura puede
encontrarse en la figura 2.1.
La principal decision que marcara gran parte del dise
no posterior consista en que tecnica de inteligencia artificial utilizar para implementar los predictores. En nuestro caso, decidimos utilizar redes neuronales porque, a pesar de ser suficientemente sencillas para la
profundidad de un trabajo fin de grado, esperabamos que fueran suficientemente flexibles
para resolver satisfactoriamente el problema para cada robot. Ademas, tienen la ventaja
de ser suficientemente eficientes en su ejecucion para poder utilizarlas operando en tiempo
real.
Una red neuronal artificial es un modelo matematico no lineal, de naturaleza computacional, con una arquitectura inspirada en la organizacion neuronal biologica ([3]). Es
decir, puede verse como una estructura en red consistente en un n
umero de neuronas
(nodos) conectadas por enlaces direccionales ([4]).
En ella, cada nodo es una unidad de procesamiento independiente, que calcula un valor
de salida a partir de una serie de valores de entrada. La forma en la que estos valores
de entrada se utilizan para dar lugar a la salida depende de una serie de parametros
especficos de cada nodo. Para que la red pueda resolver un determinado problema, se
modifican estos parametros de acuerdo a ciertos algoritmos, denominados algoritmos de
entrenamiento. De esta forma, la red puede aprender para adaptarse a resolver un
17

18

CAPITULO 2. DESARROLLO DE LA SOLUCION

Figura 2.1: Estructura basica general del sistema.


determinado problema. La figura 2.2 muestra un diagrama basico de la composicion de
una red neuronal.
As, el objetivo de nuestro software sera conseguir obtener redes neuronales capaces de
predecir el comportamiento de cada robot, y utilizar estas para obtener informacion sobre
su desempe
no esperado, que proporcionaremos a un agente externo para que las controle.

2.1.2.

Redes Neuronales como Predictores

Introducci
on y Conceptos B
asicos
Las redes neuronales artificiales son especialmente u
tiles en problemas complejos o dificiles de definir con precision. En estos casos, el dise
no de una funcion o metodo especfico
para resolver el problema resulta impracticable. Tambien es una tecnica muy com
un en
casos en los que la funcion es desconocida, pero contamos con bastantes casos en los que
conocemos de resolucion correcta del problema.
Por ejemplo, las redes neuronales son muy comunes en problemas de reconocimiento de
patrones: Escritura a mano, reconocimiento facial, etc. En ellos, pese a que no podemos
dise
nar o programar un conjunto de reglas o un software concreto para resolver cada
caso, en el caso de tener suficientes ejemplos del patron que queremos detectar, las redes
neuronales proporcionan muy buenos resultados en la deteccion de casos nuevos. Antes
de que una red neuronal pueda resolver un problema concreto, debemos someterla a un
proceso previo, conocido usualmente como aprendizaje o entrenamiento.

PROPUESTA
2.1. SOLUCION

19

Figura 2.2: Diagrama basico de red neuronal y neuronas.


El problema que estamos tratando de resolver es un problema de regresion. Es decir,
tenemos una funcion desconocida, que en nuestro caso recibe como entrada la informacion
del estado del mercado en un momento dado, y proporciona como salida la ganancia futura
del robot cuando se activa en ese estado del mercado. Lo que realiza la red neuronal es, a
partir de una serie de casos de ejemplo, crear un modelo de esa funcion desconocida. El
proceso de aprendizaje consiste en ajustar esta funcion que implementa la red neuronal
para reducir el error entre la salida obtenida y la deseada para el conjunto de ejemplos
en los que conocemos la resolucion del problema. Si los datos que utilizamos para este
aprendizaje son representativos de todas las posibles entradas, y el modelo que implementa
la red se ajusta bien a esos datos conocidos, esperamos que lo haga tambien para los
desconocidos.
Hay distintos tipos de redes neuronales dependiendo del n
umero y distribucion de sus
neuronas y de los enlaces entre ellas, y a su estructura se le denomina usualmente topologa de dicha red. Podemos distinguir en ella tres tipos de nodos o neuronas: De
entrada, que reciben la informacion del exterior, de salida, que proporcionan sus resultados al exterior, y ocultas, que reciben y envan sus variables a otros nodos de la propia
red.
Por otra parte, denominamos variables de entrada a aquellas que reciben las neuronas
de entrada del exterior de la red, y variables de salida a las que proporcionan al exterior
de la red las neuronas de salida. La forma de calcular la salida de cada neurona en funcion
de sus entradas queda determinada por variables denominadas pesos, relativos a cada uno
de sus enlaces.
Podemos ver graficamente los distintos tipos de neuronas y variables, as como su los
tipos de capas, en la figura 2.3.
Todas estas neuronas, a su vez, se distribuyen en capas. Decimos que un nodo esta en
la capa n cuando el mnimo n
umero de neuronas entre esta y una neurona de entrada es
n. Dicho de otro modo, las neuronas de entrada se encuentran en la capa 0, las nneuronas


CAPITULO 2. DESARROLLO DE LA SOLUCION

20

Figura 2.3: Tipos de neuronas y capas de una red neuronal.


a las que se conectan estas estan en la capa 1, las que se conectan a estas otras estan en
la capa 2, etc. Si bien las redes neuronales pueden tener topologas muy diversas, las mas
comunes tienen tres capas: una de entrada, una capa oculta y una de salida, y no tienen
ciclos.
Entrenamiento de una Red Neuronal
El proceso completo que se realiza para obtener una red neuronal para resolver un
problema en concreto, se divide en dos fases. En la primera, se deciden las caractersticas de
la red que emplearemos: Variables de entrada, n
umero de capas y de neuronas, distribucion
de las mismas... etc., es decir, su topologa. En una segunda fase, se entrena una red con
la topologa elegida, que sera la que obtendremos como resultado final del proceso.
El procedimiento de la primera fase consiste en partir de un conjunto de posibles topologas, elegidas a priori, y tras un proceso de experimentacion, elegir aquella que proporcione mejores resultados. Es decir, en primer lugar elegimos un conjunto de topologas,
definiendo las entradas que recibira nuestra red, cubriendo un espectro que consideremos
suficiente.
A continuacion realizamos una cierta cantidad de experimentos para cada posible topologa que nos planteemos utilizar para nuestro problema. Estos experimentos consisten
en entrenar una red con esas caractersticas y evaluarlas1 . As, veremos los resultados que
obtenemos para una serie de redes entrenadas con una determinada configuracion, calcularemos su media, y esta sera la medida que emplearemos para comparar esta topologa
con las demas.
Sin embargo, es importante tener en cuenta que es usual que distintas topologas
1

En este captulo pretendemos u


nicamente de dar una idea general de la solucion propuesta en nuestro
trabajo, sin entrar en excesiva profundidad. Por ello, los detalles tecnicos relativos al entrenamiento,
validaci
on y test de las redes podemos encontrarlos en la seccion 3.2

PROPUESTA
2.1. SOLUCION

21

den resultados similares, y corremos el riesgo de que la eleccion de una u otra se deba
u
nicamente a los resultados de ese conjunto concreto de experimentos realizados, y esa
no sea la tendencia general. Para evitarlo, debemos no tener en cuenta u
nicamente que
la media de unos resultados sea mayor que otra, sino que debemos establecer que esta
diferencia sea estadsticamente significativa.
Que un resultado sea estadsticamente significativo significa que podemos asegurar
con una cierta probabilidad, normalmente el 95 % o 99 %, que el resultado obtenido no es
producto del azar. Es decir, que realmente una topologa es mejor que la otra, y aunque
realizaramos mas experimentos es de esperar que se mantenga ese resultado. En el caso
de que la diferencia entre el uso de dos topologas no sea estadsticamente significativa,
elegiremos aquella que sea mas sencilla (menor n
umero de neuronas, menor n
umero de
variables de entrada...).
Para determinar si efectivamente existe significancia estadstica en la diferencia entre las medias de las dos series de experimentos debemos realizar un test estadstico
adecuado. El procedimiento y la base teorica de los mismos se detallan en la seccion 3.4.
Para terminar, una vez elegida la topologa que utilizaremos, se procede al entrenamiento de una red con dicha configuracion, que sera nuestra red final.
Los detalles tecnicos del procedimiento de ambas fases puede encontrarse mas detalladamente en la seccion 3.2, en la que tambien se recoge el proceso completo de experimentacion con las distintas topologas y entrenamiento de la red final, as como el proceso de
test de las redes resultantes, cuyo objetivo es tener una estimacion del comportamiento
que tendra la red cuando opere con casos nuevos.

2.1.3.

El Procedimiento Completo

Como hemos visto, para obtener una red neuronal que pueda actuar de predictor hace
falta tener una serie de casos conocidos con los que poder entrenarla. En nuestro caso,
puesto que nustro objetivo es utilizar la red para predecir como sera el desempe
no del robot
conociendo la situacion del mercado actual, debemos tener una serie de casos pasados en
los que conozcamos el desempe
no que tuvo y la situacion del mercado en dicho momento.
Esta serie de casos la obtendremos a partir del historico de operaciones del robot. Es
decir, cada vez que en el pasado el robot realizo una operacion en el mercado, sabemos
que resultado tuvo y conocemos la situacion del mercado en ese momento, por lo que a
partir de este historico podemos obtener casos para entrenar nuestra red.
No obstante, hay que tener en cuenta que modelizar la situacion del mercado puede
ser bastante complejo. Existen gran cantidad de factores que podemos tener en cuenta:
Cotizaciones de la divisa en la que opera el robot, cotizaciones de otras divisas, otros
factores como el da de la semana o la hora en las que se realizo la operacion, etc., y nos
interesara utilizar la mayor cantidad de ellos posible, siempre y cuando sean relevantes.
Para que el uso posterior de estos datos sea efectivo, se hace necesario establecer un
tratamiento previo de los datos que nos permita eliminar redundancias e informacion
no relevante, y reducir la dimension de la informacion en la medida de lo posible, es
decir, reducir el n
umero de variables de entrada. Esto, ademas, permitira mejorar los
resultados de las redes, que solo recibiran la informacion relevante, y por tanto podran

22

CAPITULO 2. DESARROLLO DE LA SOLUCION

dar mejores resultados con una estructura menos compleja. Para esta etapa previa de
reduccion de la dimension de la entrada utilizaremos el algoritmo del an
alisis principal
de componentes (PCA, por sus siglas en ingles), que se detalla en la seccion 3.3.
Por otra parte, una vez tenemos nuestra red entrenada, podemos ponerla a operar
en el mercado real y monitorizar su rendimiento. Ademas, estableceremos medidas para
controlar la precision esperada de la red en cada momento, permitiendo a quien utilice
sus predicciones controlar el riesgo. Este sistema de control de la fiabilidad de la red se
expone en la seccion 3.5.
Por u
ltimo, y como resumen de todo lo anteriormente expuesto, tenemos que podemos
dividir nuestro proceso en las siguientes etapas principales: Obtenci
on y tratamiento
de los datos, elecci
on de la topologa de la red y entrenamiento, puesta en
marcha en el mercado real y monitorizaci
on y fiabilidad.
Un diagrama de estas etapas, con los productos obtenidos en cada una de ellas y las
tecnicas utilizadas en cada fase, puede encontrarse en la figura 2.4.

Figura 2.4: Diagrama general del sistema completo.

2.2.
2.2.1.

Etapas del Proceso


Obtenci
on y Tratamiento de los Datos

En esta etapa partimos del historico de operaciones del robot, y nuestro objetivo sera obtener una serie de casos de prueba para poder realizar el entrenamiento de la red neuronal
que proporcionara predicciones sobre el. Recordemos que un caso de prueba consiste en
una entrada para el problema cuya salida es conocida. En nuestro caso, la entrada consiste
en la situacion del mercado en el momento de producirse la operacion, y la salida consiste
en el resultado que tuvo esta.
As, debemos definir en un primer lugar como modelizaremos la situacion del mercado
en momento concreto. Dado que cada robot puede operar en una divisa distinta, siguiendo
diferentes estrategias y utilizando distintos datos, debemos poder modelizar la situacion
del mercado de manera diferente para cada uno de ellos. Por tanto, nuestro software nos
permitira definir que informacion de entrada queremos utilizar en cada caso para reflejar

2.2. ETAPAS DEL PROCESO

23

el estado del mercado, y realizar de esta forma una modelizacion del mercado diferente
para cada robot.
La informacion mas basica que podemos utilizar para reflejar la situacion del mercado,
que esperamos que sea relevante para nuestra prediccion, son los datos relativos a la
divisa sobre la que opera el robot. Utilizaremos por tanto los datos sobre la cotizacion de
esta divisa en un intervalo de tiempo determinado anterior a la solicitud de apertura de

la operacion. Estos
vienen agrupados seg
un periodos de tiempo de distintas longitudes,
denominados velas. Es decir, una vela es la informacion agrupada de un determinado
periodo de tiempo de una divisa concreta, y tiene 4 atributos principales: El precio que
tena la divisa al inicio del periodo, el que tena al final del mismo, y el maximo y mnimo
precio alcanzado en este.
Las velas pueden tener distintas longitudes, y en nuestro software utilizaremos principalmente velas de 4 tipos: De 5 minutos, de 15 minutos, de 1 hora y de 1 da.
Ademas de la informacion basica de las velas de la divisa en la que opera nuestro robot,
nuestro software permite a
nadir otra informacion adicional, como velas de otras divisas,
el da de la semana o la hora a la que se realizo la operacion, e incluso otros indicadores
macroeconomicos, como son el precio del petroleo o del oro.
Con estos u
ltimos indicadores logramos que, pese a que el robot tiene una vision muy
local del mercado (opera con una divisa y utiliza u
nicamente las cotizaciones de esta para
determinar su comportamiento), nuestro sistema lo controla utilizando informacion mucho
mas global. De esta forma, podemos identificar tendencias a nivel mundial, modificando
el comportamiento final del robot en base a si ciertos indicadores del mercado global
presentan tendencias alcistas o bajistas, por ejemplo.
Por u
ltimo, es importante resaltar que u
nicamente podremos utilizar informacion anterior al momento de apertura de la operaci
on. Esto es as debido a que las redes
se utilizaran finalmente para predecir el resultado de la operacion antes de que se inicie,
por lo que evidentemente debemos utilizar u
nicamente informacion que vayamos a tener
disponible en ese momento.
A continuacion, una vez elegida la informacion que queremos utilizar como entrada de
nuestro problema, podemos formar los casos de prueba a partir del historico de operaciones
del robot, que nos serviran para entrenar la red.
Obtenemos as un fichero con ejemplos de entrada y salida de nuestro problema, siendo
la entrada la modelizacion del mercado en el momento de apertura de una operacion, y
la salida el resultado que tuvo esta.
Aunque podramos utilizar directamente este fichero para entrenar nuestras redes, encontramos que la entrada es demasiado compleja: Por una parte, hay una gran cantidad de
informacion, mucha de ella redundante o muy parecida, y por otra, como cada robot opera
en distintas situaciones, puede haber informacion que sea u
til en unos robots y redundante en otros, y no tenemos forma de saberlo a priori. Esta excesiva complejidad provoca
que la red tenga muchas mas dificultades para aprender y generalizar correctamente el
problema, por lo que trataremos de reducirla.


CAPITULO 2. DESARROLLO DE LA SOLUCION

24

Para ello, como comentamos en la seccion anterior, emplearemos el algoritmo del An


alisis Principal de Componentes. Este algoritmo permite combinar las distintas variables
de entrada para mantener la informacion mas importante, y descartar aquella que sea redundante o poco significativa. Aplicando este proceso a nuestro conjunto de casos de
prueba anterior, logramos reducir en la mayora de los casos de unas 150 o 200 entradas, a
tan solo 20 o 25, lo que constituye una reduccion de alrededor del 80 u 85 % en el n
umero
de entradas.
Esto ademas permite que aunque a
nadamos informacion nueva que finalmente resulte
ser redundante, esto no repercutira demasiado negativamente en los resultados finales,
puesto que sera eliminada por este u
ltimo procedimiento. As, podemos a
nadir gran cantidad de informacion en un principio, y dejar que este paso la reduzca, eliminando la que
sea redundante o poco significativa.
Para finalizar el proceso aplicamos un proceso de normalizacion a los datos. Si bien en
la teora esto no es necesario, debido a que las redes pueden reescalar cualquier transformacion lineal realizada a los datos, en la practica lo usual es realizar la normalizacion.
El motivo principal es que para la inicializacion de las redes (los valores iniciales que se
dan a los pesos antes de comenzar el proceso de entrenamiento) deben estar escalados
de acuerdo a los rangos de valores de entrada, para facilitar la convergencia y reducir la
probabilidad de caer en mnimos locales. Por tanto, como en general se utilizan valores
aleatorios peque
nos para los pesos, es conveniente normalizar la entrada a valores tambien
cercanos a 0. En nuestro caso, como se recomienda en general, utilizaremos como rango
de normalizacion el intervalo [1, 1].[12]
El proceso de normalizacion consiste simplemente en un cambio de variable lineal, que
transforma una variable de entrada cuyos valores se encuentran en el intervalo [xmin , xmax ]
min )
1.
en otra que se encuentra entre los valores [1, 1], seg
un y = x2(xx
max xmin
Con todo esto, obtenemos finalmente unos casos de prueba preprocesados adecuados
para el entrenamiento de las redes en la siguiente fase.

2.2.2.

Entrenamiento de Redes Neuronales

Con los casos de prueba procesados en la fase anterior, nuestro objetivo en esta fase
sera obtener una red entrenada capaz de predecir el desempe
no de nuestro robot. Como
hemos comentado, esta fase se puede dividir a su vez en dos etapas: En una primera
elegimos la topologa de nuestra red, y en una segunda fase entrenamos la red final que
utilizaremos para controlar el robot.
El proceso basico empleado es el usual cuando se trabaja con redes neuronales, que
hemos expuesto anteriormente: En primer lugar se plantean diversas topologas posibles,
con distinto n
umero y tipo de entradas, distinto n
umero de neuronas y distribucion, etc.
A continuacion se realiza un determinado n
umero de entrenamientos y experimentos para
cada posible configuracion, y finalmente se elige aquella que arroja mejores resultados,
asegurandose de que la diferencia sea estadsticamente significativa. Por u
ltimo, se entrena
2
una red final con dicha topologa .
2

De nuevo, recordamos que los detalles del proceso pueden encontrarse en la seccion 3.2

2.2. ETAPAS DEL PROCESO

25

No obstante, debido a las caractersticas de nuestro problema y situacion, hay varios


factores que no son comunes al proceso usual de entrenamiento descrito.
El primero es debido a que Talentum optimiza los robots utilizando su historico de
operaciones, es decir, utilizan para modificar el robot precisamente los mismos datos que
utilizaremos nosotros. Es decir, ajusta sus parametros y comportamiento de forma que sus
resultados si hubiera operado en el pasado sean buenos, esperando que de esta forma sean
buenos tambien en el futuro. Esto implica que la situacion que encontramos en el historico
de operaciones es probable que no sea la misma que encontrara posteriormente el robot
cuando sea puesto en funcionamiento. Presumiblemente, los resultados que obtendra el
robot en tiempo real seran peores que los que se reflejan en su historico, puesto que este
ha sido programado de forma que los resultados de su historico sean buenos.
De hecho, si observamos el historico de resultados de alg
un robot, solemos encontrar
que sus ganancias totales son muy altas, y hay muchas mas operaciones que producen beneficios que que producen perdidas. En el mercado real, por el contrario, esperamos que el
balance del robot sea mucho peor, y que encontremos aproximadamente el mismo n
umero
de operaciones con ganancias que con perdidas. Si utilizaramos como entrenamiento los
casos extraidos directamente del historico de operaciones corremos el riesgo de que nuestra red sea demasiado permisiva, es decir, que se adapte para ajustar correctamente los
casos positivos (que son la mayora), aunque se equivoque en bastantes casos negativos.
Para evitar esto, debemos modificar el conjunto de entrenamiento para que se ajuste
en lo posible a la situacion que esperamos encontrar en realidad. Es decir, debemos modificarlo de manera que las ganancias se equiparen aproximadamente con las perdidas, para
que nuestra red aprenda correctamente la misma situacion para la que posteriormente
la utilizaremos. Para ello, nuestra solucion ha sido replicar las operaciones que produjeron
perdidas hasta que el balance total de perdidas equipare al de ganancias. De esta forma,
tenemos una situacion resultante en la que el balance total es aproximadamente 0, y la
importancia de las operaciones negativas esta mucho mas cerca de la importancia de las
operaciones positivas. As, esperamos que nuestra red se adapte bien a ajustar ambos
casos.
La segunda modificacion se refiere al criterio que utilizamos para elegir una u otra topologa en la primera fase. Es com
un elegir criterios basados u
nicamente en la precision
de la prediccion, como la diferencia entre los valores predichos y los valores correctos, o
el error cuadratico medio (MSE). Sin embargo, debido al uso que se dara posteriormente
a las predicciones, ninguna de estas medidas resultaba adecuada. En concreto, estos modelos de error penalizan de la misma forma un error entre haber predicho 15$ cuando en
realidad eran 20$, y haber predicho 3$ cuando en realidad eran -2$. Es de suponer que al
agente que vaya a realizar la decision entre elegir una u otra red, la segunda diferencia le
resultara mucho mas relevante.
Por ello, decidimos estudiar una medida de evaluacion de la red neuronal alternativa
para esta fase, dise
nando otra mas parecida al uso que daremos posteriormente a las
predicciones. En ella, supondremos que el agente externo elegira para que operen todos los
robots para los que nuestra prediccion sea positiva, es decir, todos aquellos que predigamos

26

CAPITULO 2. DESARROLLO DE LA SOLUCION

que van a obtener ganancias. As, simularemos que hubiera ocurrido si un determinado
conjunto de operaciones se hubieran realizado bajo la supervision de nuestro sistema, y
cual habra sido el balance total del robot en ese periodo, comparandolo con aquel que
habra obtenido sin nuestra intervencion. Es decir, tomamos la suma del balance obtenido
en todas las operaciones para los que la prediccion de nuestra red es positiva, y la diferencia
de esta con la suma del balance total de las operaciones elegidas sera nuestra medida de
error para esa red.
Tras realizar diversos experimentos con las redes obtenidas utilizando este metodo y los
anteriores, comparamos sus resultados. De esta forma obtuvimos que las redes entrenadas
con las topologas elegidas utilizando esta u
ltima medida de error daban resultados mas
precisos cuando las utilizabamos con datos que no hubieran sido utilizados ni para el
entrenamiento ni para la optimizacion de los robots. Por ello, decidimos utilizar esta
u
ltima medida de error descrita para nuestro sistema.
Tras todo lo anterior, y una vez elegida la topologa de la red, procedemos a la segunda
fase. En ella, entrenamos una u
nica red final con esta configuracion elegida, que sera la
red final que utilizaremos como predictor para ese robot en nuestro sistema.

2.2.3.

Puesta en Marcha a Mercado Real

En esta seccion describiremos el proceso de ejecucion de las redes neuronales entrenadas,


y la comunicacion con el agente externo para proporcionarle sus predicciones. Este agente
externo sera un sistema de Talentum ya existente denominado Zeus.
Zeus es un software desarrollado para controlar la gestion del riesgo de los sistemas de
Talentum. Es capaz de controlar las operaciones realizadas por cualquier conjunto de robots, y de denegar o autorizar cualquiera de sus operaciones en el momento en que el robot
solicite realizarla. Nuestro software, por tanto, se comunicara con Zeus proporcionandole
informacion de las predicciones sobre cada robot. Ademas, cada vez que un robot quiera
realizar una operacion, debe consultar a Zeus, que autoriza o deniega su entrada teniendo
en cuenta nuestras predicciones.
Las estrategias que implemente Zeus para controlar a los robots en base a nuestras
predicciones pueden ser muy diversas, dependiendo de las directrices de los expertos de
Talentum, e incluso de las preferencias de inversores concretos en cuanto a beneficio
deseado y niveles de riesgo admitidos. No obstante, para realizar las pruebas de nuestro
sistema y evaluar su rendimiento, hemos implementado dos estrategias basicas.
La primera, utilizada antes de la implementacion de los sistemas de estimacion de
errores, consiste simplemente en dejar operar aquellos robots para los cuales nuestra prediccion sea positiva. Es decir, permitir todas aquellas operaciones que predigamos que van
a resultar en beneficios.
La segunda estrategia, tambien bastante sencilla, pero realizada una vez incorporamos
el sistema de control del error, consiste en dejar pasar aquellas operaciones que, a
un
contando con el error que estimemos en la prediccion, sigan superando un cierto umbral.
Este umbral, en nuestro caso, lo ajustamos utilizando los resultados que tuvimos durante
el periodo en que la utilizabamos solo la primera estrategia recien descrite. As, elegimos
el umbral que maximizaba las ganancias en el caso de que el sistema de fiabilidad y esta

2.2. ETAPAS DEL PROCESO

27

segunda estrategia hubieran estado implementados en ese periodo. El umbral resultante


obtenido por este procedimiento fue en nuestro caso de 2$. Por tanta, nuestra estrategia
en este caso consistira en permitir las operaciones cuya aproximacion una vez tenida en
cuenta la correccion del error sea superior a este umbral.
Por otra parte, para realizar nuestras predicciones debemos obtener los datos del mercado en tiempo real: Cotizaciones de todas las divisas en forma de velas, otros indicadores
como el precio del petroleo o el oro... etc. Nuestro software ha sido implementado para
obtener todos estos indicadores de bases de datos habilitadas por Talentum, en las que en
periodos de tiempo de 5 minutos se almacena informacion actualizada del mercado global.
La informacion se combina de forma que coincida con la modelizacion de la situacion
del mercado que realizamos para cada robot en la fase de obtencion de los casos de
entrenamiento. Ademas, le aplicamos los mismos pasos que realizamos para la obtencion
de dichos casos, es decir, es analisis principal de componentes y la normalizacion.
Tras este preprocesamiento, podemos utilizar los datos resultantes como entrada de la
red asociada, que nos devolvera la prediccion. Por u
ltimo, obtenemos la fiabilidad asociada
en ese momento a esta red, y suministramos toda esta informacion a Zeus.

2.2.4.

Monitorizaci
on y Fiabilidad

Una vez iniciada su ejecucion, nuestro software obtiene informacion sobre la ejecucion
de los robots en el mercado, es decir, sobre las operaciones que realicen en cada momento
y su resultado. Esta informacion la utilizaremos para actualizar la fiabilidad de las redes
en funcion de si sus prediciones fueron correctas o no.
Para que obtener esta informacion sea posible, los robots almacenan en una base de
datos durante su ejecucion informacion sobre la apertura y cierre de cada operacion que
realizan, as como los resultados de las mismas. Ademas, nuestro sistema almacena tambien las predicciones que cada red realizo en cada momento, por lo que podemos utilizar
ambas informaciones para actualizar la fiabilidad de la red que predijo cada resultado.
Sin embargo, si u
nicamente tuvieramos los robots operando en mercado real controlados
por nuestro sistema, solo conoceramos los resultados de las operaciones que Zeus permitiera realizar. No obstante, para actualizar las estimaciones de error de las redes debemos
conocer tambien los resultados finales que tendran las operaciones cuya realizacion no se
permite.
Para ello, tendremos operando no solo los robots con dinero real controlados por
nuestro sistema, sino tambien otra copia de cada uno de ellos operando en una cuenta
de simulacion. Es decir, realizaran todas las operaciones que realizaran los robots reales,
pero sin invertir dinero real en ellas. Estos robots simulados tambien almacenaran los
resultados de sus operaciones en la misma base de datos que sus copias reales, pero con
otro identificador. De esta forma, nuestro sistema obtiene los resultados de todas las
operaciones que los robots podran realizar, independientemente de si finalmente se llevan
a cabo o no.
Con todo ello, tenemos finalmente operando todos nuestros robots en tiempo real,
controlados por sus respectivas redes. Para ello, recibimos informacion en tanto de la

28

CAPITULO 2. DESARROLLO DE LA SOLUCION

evolucion del mercado como de las operaciones que los propios robots realizan, y utilizamos
un sistema adicional para detectar lo antes posible los periodos en los que las redes no
estan funcionando bien y recortar las perdidas.

Captulo 3
Aspectos T
ecnicos
3.1.

Software Desarrollado

Para la realizacion de este trabajo ha sido necesario el desarrollo de un nuevo software

desarrollado tambien
especfico que realizara los procesos descritos anteriormente. Este,
como parte de este trabajo, ha sido realizado en lenguaje Java con el soporte de determinadas libreras especializadas.
En las siguientes subsecciones se detallan las libreras externas utilizadas, los modulos
desarrollados, la estructura del software y finalmente se muestra la interfaz de usuario y
funcionamiento.

3.1.1.

Librerias Utilizadas

Para el desarrollo del software se han empleado una serie de libreras externas para
realizar las funcionalidades tecnicas cuya implementacion quedaba fuera de los objetivos
de este trabajo. As, las implementaciones relacionados directamente con, por ejemplo,
las redes neuronales o el algoritmo del analisis principal de componentes, se han delegado
en libreras conocidas de aprendizaje computacional u otros ambitos, que se detallan a
continuacion.
Encog ([8]): Encog es una librera especializada de aprendizaje computacional, que
implementa en el lenguaje Java la logica y algoritmos de gran cantidad de tecnicas de inteligencia artificial, como redes bayesianas o support vector machines. En
particular, nosotros utilizaremos su implementacion de redes neuronales para nuestro software. Para estas, incluye gran cantidad de algoritmos de entrenamiento, y
otras funcionalidades adicionales como el almacenamiento y recuperacion de redes
ya entrenadas.
WEKA ([9]): WEKA es una aplicacion muy conocida de aprendizaje computacional, principalmente utilizada para minera de datos, tambien escrita en Java. Fue
desarrollada por la Universidad de Waikaito (Nueva Zelanda) y se distribuye bajo
licencia GNU General Public. Aunque el software en s constituye una aplicacion
completa con interfaz de usuario, nosotros utilizaremos directamente sus libreras,
que contienen los algoritmos del analisis principal de componentes, y delegaremos
tambien en ella algunas tareas menores como la normalizacion.
29


CAPITULO 3. ASPECTOS TECNICOS

30

Apache Commons Math ([10]): Es una librera escrita en Java de matematicas y


estadstica que incluye muchas funciones no disponibles directamente en el lenguaje
Java. En nuestro caso, utilizaremos de ella la implementacion del ajuste por mnimos
cuadrados ponderado.
Jmathplot ([11]): Es una conocida librera open source de uso de graficos en Java.
Proporciona funcionalidad para mostrar graficos de diversos tipos en 2D y 3D de
forma sencilla. En nuestro caso la utilizaremos para la visualizacion de graficas y
resultados, especialmente para la funcionalidad de nuestro software relacionado que
la monitorizacion y obtencion de estadsticas.

3.1.2.

M
odulos Desarrollados

Ademas, introducimos aqu los modulos que han sido desarrollados y pueden ser entendidos de forma independiente, para facilitar la comprension de la estructura global
presentada en la seccion siguiente. Estos son:
Comunicaci
on con bases de datos
Las bases de datos de Talentum se encuentran en un varios servidores propios, a los que
nos conectaremos utilizando JDBC (Java Database Connectivity, [14]), pudiendo escribir
nuestras consultas en SQL. Por tanto, necesitabamos conectarnos a diversas bases de
datos en distintos host para obtener gran cantidad de datos diferentes (historicos del
robot, datos del mercado y operaciones en tiempo real, etc.). Por ello, implementamos
una primera clase con la funcionalidad basica de comunicacion con la base de datos, de
la que heredan otras clases especficas que refinan su comportamiento para los datos que
utilizara.
Ademas, para algunas funcionalidades, en general aquellas que tienen que ver con la
persistencia de los datos de la propia aplicacion se decidio no utilizar estas bases de datos.
En su lugar, se implemento una clase que utilizaba como medio para guardar datos un
fichero de texto de la que heredaron otras clases para datos especficos: Informacion de los
ficheros y casos de pruebas introducidos, informacion de las redes entrenadas, estadsticas
de ejecucion, almacenacion y recuperacion de las propias redes neuronales, etc. De esta
forma evitabamos sobrecargas las bases de datos de Talentum con mas informacion, y a
la vez hacamos el programa mucho mas portable, lo que nos resultaba u
til por ser un
desarrollo experimental. Tambien se han almacenado en ficheros (.csv) la informacion de
los historicos del mercado, de los que necesitamos gran cantidad de informacion, de forma
que su acceso fuera mucho mas rapido.
M
odulo de tratamiento de hist
oricos y casos de prueba
Como la logica de procesamiento del historico de operaciones para obtener finalmente
los casos de prueba era demasiado compleja, decidimos extraerlo en un modulo aparte.
As, en clases separadas se encuentra recogida la logica de lectura de los historicos y
su combinacion con la informacion del historico del mercado, la aplicacion del analisis
principal de componentes, y la normalizacion final.

3.1. SOFTWARE DESARROLLADO

31

Hay que tener en cuenta que este modulo no solo debe permitir realizar el procesamiento
antes de entrenar la red, sino que ademas debe guardar la informacion que necesite para
aplicar el mismo procedimiento con los datos que queramos introducir en tiempo real
en esta misma red. Es decir, debe aplicarles a los datos nuevos el analisis principal y la
normalizacion con los mismos parametros que utilizo para obtener los casos de prueba
con los que entrenamos la red.
M
odulo de redes neuronales
Toda la logica relacionada con las redes neuronales tambien fue encapsulada. En particular la logica de creacion de las mismas, su entrenamiento, ejecucion y persistencia, se
encuentran en este modulo. Ademas, proporciona una fachada que encapsula las peculiaridades propias de la librera que estamos utilizando para estas funciones, Encog.
M
odulo de fiabilidad y control de errores
Para implementar la funcionalidad de fiabilidad y control de errores tenamos varias
estrategias disponibles, y es posible que unas funcionen mejor que otras en algunos casos,
por lo que era interesante tener disponibles varias. Por ello, toda la logica relacionada
se encapsulo en otro modulo, que implementa principalmente el patron Strategy. Este
proporciona una interfaz con las operaciones u
nicamente de inicializacion, a
nadir un nuevo
resultado para actualizar el error y obtener el error esperado en base a una prediccion.

3.1.3.

Estructura General

El software se puede dividir en 4 partes, diferenciadas tanto a nivel de estructura de


clases como a nivel de interfaz y utilizacion. Las dos primeras coinciden en funcionalidad
con las dos primeras fases expuestas en la seccion 2.2, la tercera corresponde a la tercera
y cuarta fase, y la cuarta parte corresponde a la obtencion y visualizacion de estadsticas
de ejecucion de las redes. Es decir, las cuatro partes son:
Procesamiento de los datos.
Entrenamiento de las Redes Neuronales.
Ejecucion de las Redes y Monitorizacion.
Visualizacion de estadsticas.
Ademas, todo el software ha sido desarrollado siguiendo la arquitectura de ModeloVista-Controlador (MVC), por lo que los elementos del modelo seguiran la ruta model.*,
los de la vista la ruta view.* y los del controlador la ruta controller.*. Aunque existe cierta
discusion al respecto, en nuestro caso consideraremos las clases relacionadas con las bases
de datos como parte del modelo.
La estructura del software de cada una de las secciones se detalla a continuacion.

32

CAPITULO 3. ASPECTOS TECNICOS

Procesamiento de Datos
Contiene toda la logica y funciones relacionadas con el proceso seguido desde que el
usuario quiere introducir un nuevo robot en el sistema hasta que obtenemos un conjunto
de casos de prueba que nos permitan entrenar una red para el mismo. As, implementa la
lectura de historicos de operaciones, la obtencion de datos del historico del mercado, la
aplicacion del analisis principal de componentes, la normalizacion de los datos... etc.
Ademas, permite almacenar tanto los ficheros en cada una de las etapas como los casos
de prueba procesados, junto con toda su informacion relacionada (ndice al que se refieren,
datos que se han utilizado para modelizar la situacion del mercado, etc.) para su uso en
otras etapas, en la sesion actual o en otra posterior.
Recordemos que esta parte del software tambien debe permitir el procesamiento de
nuevos datos en tiempo real, para poder introducirlos en la red una vez puesta a funcionar.
En la figura 3.1 podemos encontrar un diagrama de clases de esta parte. El controlador
principal es DataController, y la clase principal de la vista es DataControllerViewer. La
clase DataFilesTable hereda de AbstractTable ([13]) para mostrar la informacion de todos
los ficheros de datos del sistema. De esta clase heredan tambien las clases de las tablas de
los otros apartados.
La clase BacktestFactory nos proporciona los historicos de operaciones de cualquier
robot, y la clase InputFileFactory encapsula la logica de procesamiento de datos, delega la logica de preparacion de los casos de prueba sin preprocesar en FilePreparer, la
aplicacion del analisis principal de componentes en FileReducer y la de normalizacion en
FileNormalizer.
El resultado de esta fase es un fichero de casos de prueba, cuyo estado de procesamiento
y otros atributos se modelan en DataFile. DataFilesDatabase es, por tanto, la clase que
implementa la logica de persistencia de estos datos.
Entrenamiento de las Redes
Contiene toda la logica y funciones relacionadas puramente con las redes neuronales. Es
decir, realiza el proceso principal desde el procesamiento de los casos de prueba hasta la
obtencion de la nueva red neuronal. Ademas, contiene la logica p
uramente de ejecucion de
las redes en tiempo real (recibe la entrada y devolver la salida, no la controla ni interpreta).
Por tanto, esta parte engloba toda la logica de creacion de redes, entrenamiento,
ejecucion, test y validacion, y permite almacenarlas y recuperarlas en el mismo estado en
una sesion posterior.
Podemos encontrar un diagrama de clases de todo ello en la figura 3.2. En el, NetworkController es el controlador principal, y TrainNetworkControllerViewer es la clase principal de la vista. De nuevo, NetworkFilesTable es una tabla que muestra la informacion de
las redes en nuestro sistema, NetworkFile representa esta informacion, y NetworksDatabase almacena tanto la informacion como las propias redes.
Ademas, DividedSupervisedSets permite dividir los casos de prueba convenientemente
en entrenamiento, validacion y test, y unas clases auxiliares, NetworkTrainingResult y
NetworkTestResult agrupan los datos de resultados de los procesos de entrenamiento y
test de las redes, respectivamente.

3.1. SOFTWARE DESARROLLADO

Figura 3.1: Diagrama de clases de Procesamiento de Datos.

33


CAPITULO 3. ASPECTOS TECNICOS

34

Figura 3.2: Diagrama de clases de Entrenamiento de las Redes.


Ejecuci
on de las Redes y Monitorizaci
on
Contiene las clases y logica que permiten la ejecucion del robot en tiempo real, y el
control de los mismos. Es decir, desde la obtencion de la nueva red neuronal hasta el final
del proceso, con esta red funcionando y facilitando sus datos a Zeus. Para ello, contiene
la modelizacion de la red en ejecucion, el acceso a las bases de datos para obtencion de
informacion del mercado en tiempo real, la consulta de las operaciones realizadas por cada
robot en cada momento... etc. Tambien contiene las clases relacionadas con la fiabilidad,
y la comunicacion con Zeus. Esta comunicacion se realiza a traves de una base de datos
en la que nuestro sistema almacena sus predicciones sobre los robots en cada momento,
que el sistema Zeus leera cuando necesite hacer uso de ella.
El diagrama de clases de esta seccion se encuentra en la figura 3.3. De nuevo, RunningNetworkController es el controlador principal, y RunNetworksControllerViewer la clase
principal de la vista, con RunningNetworksTabla la tabla que muestra la informacion principal. La modelizacion de la red en ejecucion se realiza mediante la clase RunningNetwork,
que tiene asociada una red neuronal que es la que realmente realiza las operaciones y proporciona los resultados, y una clase que contiene el control de la fiabilidad para esa red.
Por otra parte, SetsControlDatabase es la clase que almacena la informacion de nuestras predicciones y fiabilidad en la base de datos para ser usada por Zeus, y SignalsDatabase recibe las operaciones realizadas por nuestros robots en tiempo real. Por u
ltimo,
recordemos que necesitamos datos en tiempo real del mercado, para lo que delegamos en
DataController y su clase RealTimeMarketFacade.
Visualizaci
on de Estadsticas
Por u
ltimo, esta parte implementa algunas funcionalidades de visualizacion de datos y
seguimiento en tiempo real de la ejecucion de nuestro software. Permite obtener graficas
con las predicciones de nuestras redes en un momento determinado, as como ver, para
cada operacion que hubieran realizado los robots sin nuestro sistema, si la hemos realizado

3.1. SOFTWARE DESARROLLADO

35

Figura 3.3: Diagrama de clases de Ejecucion de las Redes.


o no, cual era nuestra prediccion y fiabilidad en ese momento, y el resultado final que ha
tenido.
Ademas, mantiene registro de todos estos datos para su posterior consulta en ficheros
de texto. Podemos encontrar este u
ltimo diagrama de clases en la figura 3.4. Una vez
mas, StatsController es el controlador principal y StatsViewer la clase principal de la
vista, mientras que OperationsTable es la tabla en la que se muestra toda la informacion
de las operaciones de los robots, que es obtenida de SignalsDatabase y de sus registros
internos de las predicciones realizadas. Por u
ltimo, NetworkPlot permite mostrar la grafica
de predicciones de una red concreta en un intervalo de tiempo determinado, informacion
que es guardada en StatFileResults. PlotUtils es una clase auxiliar que maneja la creacion
de graficas.

3.1.4.

Interfaz de Usuario

La interfaz de usuario del software consta de un men


u principal inicial, y 4 paneles de
control, cada uno de ellos correspondiente a una parte principal del software descrita en
la seccion anterior.
As, el men
u inicial, que se muestra en la figura 3.5, permite abrir dichos paneles de
control. En ellos es en los que se realiza la logica real de uso de la aplicacion.
Manage Data
Si elegimos la opcion Manage Data, se desplegara el panel de la figura 3.6 que permite
a
nadir nuevos robots con su historico de operaciones y procesarlos hasta obtener los casos
de prueba. As, este panel provee funciones para: a
nadir nuevos robots al sistema, elegir
las variables que utilizaremos para modelar la situacion del mercado (que sera la entrada


CAPITULO 3. ASPECTOS TECNICOS

36

Figura 3.4: Diagrama de clases de Visualizacion de Estadsticas.

Figura 3.5: Menu Principal de la aplicacion.


de nuestra red), procesar el historico de acuerdo a estos datos, reducir su dimensionalidad
utilizando el analisis de componentes principales, y normalizarlos. Finalmente, tendremos
como resultado los casos de entrenamiento que utilizaremos para generar la red neuronal
asociada al robot.

Figura 3.6: Panel de Procesamiento de Datos.

Administrate Networks
Por otra parte, si en el men
u principal elegimos Administrate Networks se desple
gara el panel de entrenamiento de redes, que se encuentra en la figura 3.7. Este
utiliza
los ficheros de casos generados en la etapa anterior para obtener nuevas redes. Para ello,
permite las operaciones de crear una nueva red elegir su topologa manualmente o dar una
lista de posibles topologas, entrenarlas con distintos parametros y evaluar el resultado.
As, la tabla de este panel muestra toda la informacion elegida para la red, as como un
resumen de sus resultados de entrenamiento y test.


3.2. DETALLES TECNICOS
DEL ENTRENAMIENTO DE REDES

37

Figura 3.7: Panel de Entrenamiento de Redes.


Run Networks
El tercer panel, desplegado al elegir Run Networks permite poner las redes entrenadas
anteriormente en ejecucion. Tras esto, automaticamente haran predicciones sobre su robot
asociado que estara ejecutandose en mercado real, y las almacenaran en una base de datos
para que puedan ser consultadas por un agente externo. Podemos encontrar una imagen
de este panel en la figura 3.8.
Como podemos ver, incluye una tabla en la que se muestran los robots en ejecucion,
cons us u
ltimas predicciones y su fiabilidad, e informacion sobre si su robot asociado
esta operando. Ademas, permite activar y desactivar las redes en cualquier momento.

Figura 3.8: Panel de Ejecucion de Redes.

View Stats
Por u
ltimo, al pulsar View Stats se despliega el cuarto panel, que contiene varias
opciones de visualizacion de estadsticas. Por ejemplo, podemos consultar las operaciones
realizadas por los robots en un intervalo dado, o una grafica con las predicciones de una
red concreta en un cierto periodo de tiempo. Un ejemplo de visualizacion de este panel
se encuentra en la figura 3.9
As, incluye una tabla que muestra las u
ltimas operaciones realizadas con informacion
como si nuestro sistema la realizo o no, y cual era la prediccion y fiabilidad en ese momento,
y opciones para el filtrado de estas y la visualizacion de graficas sobre las predicciones de
una red concreta.

3.2.
3.2.1.

Detalles T
ecnicos del Entrenamiento de Redes
El Problema del Overfitting

Como se expone en la seccion 2.1.2, el proceso de entrenamiento consiste en ajustar


los parametros de la red para que resuelva los casos de prueba conocidos, esperando que
as sea capaz de generalizar aquellos que no lo son.
El problema que se plantea consiste en que la red puede dar las salidas correctas para
todos los casos de prueba, y dar salidas muy alejadas de las correctas para aquellos casos

38

CAPITULO 3. ASPECTOS TECNICOS

Figura 3.9: Panel de Visualizacion de Estadsticas.


para los que no ha sido entrenada. Uno de los posibles motivos de que ocurra esto es que
la red ha quedado entrenada demasiado especficamente para resolver los casos concretos
de entrenamiento, y por ello no es capaz de general los demas casos. A este problema se
le conoce como overfitting o sobreentrenamiento.
Los algoritmos de entrenamiento de redes ajustan en sucesivas etapas los parametros
de las neuronas para reducir el error producido en la prediccion de los casos. Cada una de
las iteraciones que se realizan utilizando una vez cada caso de entrenamiento se denomina
epoch.
As, si ejecutamos el algoritmo de entrenamiento durante demasiados epochs, tendremos que la red se ajustara bien a los casos que utilizamos para su entrenamiento, pero
fallara al generalizar el problema con casos nuevos. Sin embargo, si lo ejecutamos durante
demasiados pocos, la red no aprendera el problema correctamente.
Para resolver este problema, y poder conocer cuando debemos finalizar el entrenamiento, debemos saber cuando la red empieza a dar peores resultados para los casos para
los que no la estamos entrenando. Para ello, inicialmente se divide el conjunto de casos
que tenemos destinados al entrenamiento en dos subconjuntos: El conjunto de casos de
training y el de validation. As, el algoritmo que ajusta los pesos de las neuronas en base a ciertos casos utilizara u
nicamente los casos de training, y utilizaremos los casos de
validacion para detectar cuando debemos detectar el proceso. Normalmente la division
en los subconjuntos de training y validation se realiza utilizando un 10 o 20 % de casos
aleatoriamente elegidos para validacion, y los restantes para entrenamiento.
Al estar entrenando la red para esos casos, el error que cometemos ajustando los
casos de training decrecera con el tiempo. Sin embargo, al no estar utilizando para el
entrenamiento los casos de validation, tenemos que la red se comportara con estos de la
misma forma que lo hara para los casos cuya salida correcta no conocemos, que son los que
queremos resolver. Por tanto, esperamos que el error que cometa en estos u
ltimos decrezca
inicialmente con cada epoch, mientras la red se ajusta correctamente al problema, y se
incremente conforme la red se ajusta demasiado especficamente para los casos de training,
fallando al generalizar el problema. Puede verse un ejemplo de la evolucion esperada de


3.2. DETALLES TECNICOS
DEL ENTRENAMIENTO DE REDES

39

los errores de training1 y validation en la figura 3.10. Idealmente, detendremos el proceso


cuando la red ya haya aprendido el problema y comience a sobreajustarse a los casos de
entrenamiento, por lo que normalmente nuestro criterio de detencion sera el incremento
en el error de validacion.

Figura 3.10: Ejemplo de Overfitting. En azul el error de training y en rojo el error de


validation.

3.2.2.

El Proceso Completo de Entrenamiento

Aunque en otras secciones del trabajo se da una vision general bastante completa del
proceso de entrenamiento, en esta seccion expondremos los detalles tecnicos que no quedan
recogidos en dicha vision general. Recordemos que el proceso general se divide en dos fases:
En una primera hacemos experimentos con diversas redes entrenadas siguiendo diferentes
topologas, y elegimos aquella que consideramos mejor, y en una segunda fase entrenamos
una nueva red con estas caractersticas.
Sin embargo, como hemos visto en la seccion anterior, para evitar el problema del overfitting debemos tener un criterio de detencion del entrenamiento efectivo. En la primera
fase utilizaremos el procedimiento descrito, consistente en dividir los casos disponibles
para el entrenamiento en dos subconjuntos, de training y de validation, y utilizar el primero para ajustar los parametros y el segundo para detectar cuando empieza a producirse
1

Para evitar ambig


uedades y aunque pueda estar claro por el contexto, nos referiremos por conjunto
de entrenamiento al total de casos destinados a este proceso, y por conjunto de training (en ingles) al
subconjunto de este que se utiliza para ajustar los parametros de la red durante el proceso.

40

CAPITULO 3. ASPECTOS TECNICOS

overfitting. Ademas, tenemos que debemos hacer varios experimentos para cada red, normalmente 10 o 20, y queremos que estos cubran la mayor cantidad de situaciones posibles.
Para ello, en lugar de utilizar siempre la misma division en casos de training y validation,
la cambiaremos en cada experimento para asegurar que todos los casos se han utilizado
para training y para validation la misma cantidad de veces.
Para ello, utilizamos un procedimiento conocido como K-crossvalidation, que consiste
en dividir el conjunto de entrenamiento en K partes o pliegues, y utilizar en cada experimento uno de ellos para validacion, y los K 1 restantes para entrenamiento. As, si
queremos realizar 10 experimentos para cada topologa y utilizamos 10-crossvalidation,
tenemos que utilizamos un 10 % de los datos para validacion, y que todos los casos se
usan una u
nica vez para este subconjunto, y 9 para el de entrenamiento.
Por otra parte, de la segunda fase obtendremos la red que utilizaremos posteriormente,
por lo que querramos utilizar todos los casos posibles para su entrenamiento, pero entonces tendramos que emplear otro metodo de detencion, puesto que ya no utilizaramos
conjunto de validation. Este nuevo criterio de detencion consiste en calcular el n
umero
medio de epochs que se produjeron hasta la detencion del entrenamiento en los experimentos realizados para esta topologa en la primera fase. As, podemos utilizar todos los
datos disponibles para entrenamiento para ajustar los parametros, sin tener que dividirlo
en los subconjuntos de training y validation.
Ademas, existe en realidad otra etapa, que en el resto del documento tan solo se nombra
brevemente, denominada fase de test. El objetivo de esta etapa es obtener una estimacion
de como funcionara la red recien entrenada con datos nuevos que no han sido usados ni
para el entrenamiento ni para la eleccion de la topologa. Para ello, de nuestro conjunto
total original de casos de prueba, se suelen reservar un 20 o 30 % de los datos para esta
fase.
As, podemos utilizar estos datos no vistos para ejecutar la red, y calcular medidas
del error para este. Estos errores seran presumiblemente similares a los que tendremos
cuando ejecutemos la red para casos nuevos reales.
Para concluir, es relevante aclarar que para la implementacion del software hemos utilizado un tipo de redes neuronales conocidas como Multi Layer Perceptron (MLP). Por
u
ltimo, como funcion de activacion (una funcion empleada internamente en la red neuronal
en las conexiones entre neuronas) hemos utilizado la tangente hiperbolica.

3.3.

An
alisis de Componentes Principales

El Analisis de Componentes Principales es un algoritmo de reduccion de datos que


transforma un conjunto de variables posiblemente correladas en otras linealmente incorreladas. Para ello, aplica una transformacion ortogonal, y las variables resultantes se
denominan componentes principales. Ademas, veremos que las componentes principales
resultantes quedan ordenadas seg
un su varianza.


3.3. ANALISIS
DE COMPONENTES PRINCIPALES

41

Antes de describir el algoritmo del analisis principal de componentes introducimos un


resultado previo, que constituye la parte central del mismo. Este resultado, bastante
conocido en matematicas, es el calculo del cociente de Rayleigh de una matriz simetrica.
En primer lugar, consideremos un conjunto de n puntos xj , j = 1, ..., n con xn Rm ,
representados como una matriz m n X = [x1 , ..., xn ].
Definimos el problema de maximizar la varianza como el de encontrar una direccion
u Rm tal que la varianza de la muestra uT X = (uT x1 , ..., uT xn ) sea maxima.
Este problema puede ser visto tambien como encontrar el vector u tal que la varianza
de los puntos de la muestra proyectados sobre la recta que pasa por el origen y tiene
direccion u es maxima. Esto puede expresarse formalmente como:
n

1X
((xj x)T u)2
u:||u||2 =1 n
j=1
max

O equivalentemente:
max uT u
u:||u||2 =1

P
Con = n1 nj=1 (xj x)(xj x)T la matriz de covarianzas. Este problema, que como ya
hemos comentado consiste en el calculo del cociente de Rayleigh de una matriz simetrica,
tiene solucion conocidas. Para su resolucion, basta diagonalizar la matriz de covarianzas
y escoger como direccion u el vector propio correspondiente al mayor valor propio.
Como hemos adelantado, el algoritmo del analisis de componentes principales se basa
en la resolucion del problema anterior. Su ejecucion consiste simplemente en tomar la direccion para la muestra que maximiza la varianza (conforme acabamos de ver) y proyectar
la muestra sobre el subespacio ortogonal a esta direccion. De esta forma, todas las muestras proyectadas sobre el subespacio ortogonal son evidentemente ortogonales a la que
acabamos de tomar, y por lo tanto son incorreladas. Iterando sucesivamente este metodo
obtenemos todas las componentes principales, cumpliendo ademas que estan ordenadas
seg
un su varianza.
Evidentemente, el n
umero de componentes principales (no nulas) es siempre menor o
igual que el n
umero original de variables. Ademas, podemos entender la varianza de las
componentes como la cantidad de informacion que contienen, y por tanto las tendramos
ordenadas seg
un ese criterio. Por ello, este metodo suele emplearse para reducir la dimensionalidad de nuestros datos. Es decir, para descartar aquellas componentes que tienen
menos informacion para reducir nuestro n
umero de variables de entrada. [5]
Mas concretamente, utilizaremos que la varianza total de la muestra es la suma de las
varianzas de las componentes, y esta es precisamente la traza de la matriz de covarianzas.
Por tanto, si es la matriz de covarianzas y es esta misma matriz diagonalizada
( = U U T ), entonces la varianza total es precisamente:
T r = T r(U U T ) = T r(U T U ) = T r = 1 + ... + n


CAPITULO 3. ASPECTOS TECNICOS

42

Es decir, la suma de los valores propios de la matriz de covarianzas. Por tanto, si proyectamos nuestra muestra sobre las direcciones dadas por los primeros k valores propios,
tenemos que la varianza total del subespacio es 1 + ... + k . Pero estas direcciones son,
precisamente, las primeras k componentes principales. [7]
As, si queremos mantener, digamos, el 95 % de la varianza, bastara con que la proporcion entre la varianza total original y la varianza de la muestra proyectada en el subespacio
fuera 0.95, es decir:
1 + ... + k
>= 0,95
1 + ... + n
Esta reduccion es u
til, por ejemplo, para aumentar el rendimiento de calculo del software
que utilizara dichas entradas. Ademas, normalmente mejora incluso la capacidad de este de
generalizar un problema dado, debido a que ya habremos eliminado parte de la informacion
redundante o no u
til.
Normalmente, este metodo nos permite reducir sustancialmente el n
umero de variables
de entrada a la vez que mantenemos el 95 o incluso el 99 % de la varianza.

3.4.

Tests Estadisticos

Los tests estadsticos de hipotesis son un metodo de Inferencia Estadstica para contrastar la fiabilidad de un resultado experimental. Cuando se realiza cualquier experimentacion siempre existe la posibilidad de que los resultados, favorables o no, hayan sido
debidos al azar, cuando en realidad el resultado con mayor probabilidad era el contrario.
Por ejemplo, si estamos comparando dos metodos y al realizar una cierta cantidad de experimentos, un metodo parece mejor que otro, es posible que esto solo sea por los resultados
de ese conjunto de experimentos aleatorios concretos, cuando en realidad si pudieramos
realizar suficientes experimentos el resultado sera el contrario. Los tests estadsticos nos
permiten controlar la probabilidad de equivocarnos haciendo estas consideraciones.
Antes de explicar los tipos de tests estadsticos e introducir con especial profundidad
aquellos que utilizaremos en este trabajo concreto, definimos algunos conceptos previos:
Definici
on 3.4.1. Definimos la hipotesis nula como aquella hipotesis que queremos contrastar, mientras que la hipotesis alternativa es aquella contra la que queremos contrastarla.
Definici
on 3.4.2. Sea X una variable aleatoria, se dice que el vector aleatorio de dimension n, (X1 , ..., Xn ) es una muestra aleatoria simple (m.a.s.) de tama
no n de X, si
para cada variable Xj esta sigue la misma distribucion que X y las variables Xj son
independientes entre s. [6]

3.4. TESTS ESTADISTICOS

43

Es decir, tenemos que si X es la variable aleatoria que representa nuestro experimento,


una muestra aleatoria simple puede ser vista como una sucesion de experimentos de X,
que cumplen ser independientes entre s (esto es, que el resultado de una de las repeticiones
del experimento no influye en el resto).
A continuacion, como definiciones relativas directamente al contraste de hipotesis,
tenemos las siguientes:
Definici
on 3.4.3. Denominamos error de tipo I a la probabilidad de rechazar la hipotesis
nula cuando es verdadera, y error de tipo II a la probabilidad de aceptarla cuando es falsa.
Cuando queremos realizar un contraste de hipotesis, se debe fijar cual es el mayor error
de tipo I que estamos dispuestos a cometer, y con este fijo buscamos un contraste que
minimice el error de tipo II. A este primer error se le suele denominar , y al segundo
. Normalmente se dise
nan los contrastes de forma que la probabilidad (de rechazar la
hipotesis nula cuando es verdadera) sea el 5 % (0.05). A la variable tambien se le conoce
como nivel de significacion del test.
Veremos a continuacion dos definiciones adicionales antes de pasar a estudiar el contraste que utilizaremos en nuestro trabajo:
Definici
on 3.4.4. Sea (X1 , ..., Xn ) una m.a.s. de X, llamaremos estadstico a cualquier
vector aleatorio (k-dimensional) h(X1 , ..., Xn ), donde h : Rn > Rk es una funcion medible Borel.
Definici
on 3.4.5. Sea X una variable aleatoria con distribucion F con parametro , y
sea X = (X1 , ..., Xn ) una m.a.s. de X, se dice que el intervalo (i(X), s(X)) es un intervalo
de confianza al nivel 1 , para el parametro si
P (i(X) s(X)) 1
Es decir, un intervalo de confianza es un intervalo obtenido a partir de la m.a.s. que
cumple que, si la variable aleatoria sigue una distribucion determinada F , la probabilidad
de que se encuentre en ese intervalo es mayor que 1 .
Una vez introducidos estos conceptos y definiciones, expondremos el proceso general
de realizacion de un test estadstico y finalmente lo completaremos para explicar el test
concreto utilizado en este proceso, conocido como t-test.
El proceso general de realizacion de un test estadstico es el siguiente:
1. Se estudia el problema y se establecen las hipotesis nula y alternativa.
2. Establecemos las asunciones para la muestra estudiada. Por ejemplo, las distribuciones de estas o si son independientes.
3. Se decide el test a utilizar, y en consecuencia el estadstico T .
4. Se elige el nivel de significacion .
5. Se calculan las regiones crticas correspondientes al estadstico y al nivel de significacion .


CAPITULO 3. ASPECTOS TECNICOS

44

6. Se calcula el valor tobs del estadstico T para los resultados observados de los experimentos.
7. Si el valor observado tobs se encuentra en la region crtica, rechazamos la hipotesis,
y la aceptamos en caso contrario.
El procedimiento concreto de realizacion del test depende principalmente, como hemos
comentado, de la hipotesis que queramos contrastar y de la distribucion de los experimentos. En nuestro caso, utilizaremos un test para comparar los resultados arrojados por
redes neuronales de distintas configuraciones, para elegir con cual quedarnos. El objetivo sera decidir si entre dos redes distintas existe significancia estadstica de que una de
ellas proporciona mejores resultados que la otra. Es decir, lo que querremos saber sera si
podemos asegurar que las medias de los resultados de una y otra son distintas.
Por tanto, nuestra hipotesis nula sera que las medias son iguales, y la hipotesis alternativa que son distintas. El procedimiento y estadsticos concretos constituyen resultados
bien conocidos, que pueden consultarse por ejemplo en [6] . As, el estadstico que utilizaremos es el siguiente:
t=

1 X

X
q2
sX1 X2 n2

(3.1)

1 y X
2 son las medias de las dos muestras experimentales, y
donde X
r
1 2
(s + s2X2 )
sX1 X2 =
2 X1
Pn

siendo s2X1 y s2X2 son los estimadores de las varianzas de las muestras, es decir, s2X =

x)
i=1 (xi

Finalmente, tenemos que el intervalo de confianza, que tambien es un resultado conocido, es:
1 X
2 t1 S, X
1 X
2 + t1 S)
(X
(3.2)
2
2
As, nuestro procedimiento final consiste simplemente en calcular la observacion del
estadstico t seg
un 3.1, y comprobar si se encuentra en el intervalo dado por 3.2. Si es as,
aceptaremos la hipotesis nula, es decir, que no podemos distinguir sus medias, y en caso
contrario la diferencia entre ellas sera estadsticamente significativa.

3.5.

Medidas de Error y Fiabilidad

Tras la implementacion del primer prototipo de nuestro sistema, que no inclua ning
un
sistema de control de errores sino que u
nicamente emita las predicciones, pusimos a
funcionar el software para evaluar sus resultados preliminares. Concluimos que las redes
eran capaces de predecir bastante bien los resultados de los robots en las circunstancias
mas normales, esto es, la mayor parte del tiempo, pero que sin embargo haba semanas
en las que se encadenaban varias operaciones en las que las redes fallaban sus predicciones,

3.5. MEDIDAS DE ERROR Y FIABILIDAD

45

provocando perdidas importantes y un empeoramiento sustancial de la eficacia de nuestro


sistema.
Por ello, procedimos a dise
nar e implementar un elemento externo a las redes que
evaluara su eficacia a muy corto plazo. Estudiando los resultados, vimos que los periodos
en los que red pasaba de actuar razonablemente bien a actuar mal eran muy cortos, cambiando de una semana a la siguiente. Por ello, necesitabamos cambiar el error estimado de
forma muy rapida, basandonos sobre todo en las u
ltimas predicciones. Es decir, utilizando
principalmente en los resultados de las u
ltimas 3 o 4 operaciones, tenamos que estimar
el grado de fiabilidad de la prediccion que nos de la red en el momento actual.
Cuando en un principio se planteo el desarrollo de un sistema de estimacion de errores, una de las soluciones que se planteo fue utilizar tecnicas de Inferencia Estadstica,
empleando intervalos de confianza. Sin embargo, debido a la limitacion de basarnos casi
u
nicamente en las u
ltimas 3 o 4 operaciones, esta aproximacion era inviable. Necesitabamos otra aproximacion que nos permitiera obtener conclusiones con muy pocos datos, y
no como un promedio a largo plazo.
Nuestro objetivo en esta seccion es, por tanto, exponer el desarrollo que nos llevo al
sistema actual de estimacion el error para las predicciones de beneficio de una red neuronal, basandonos u
nicamente en sus resultados en las u
ltimas 3 o 4 operaciones. Esto
permitira a quien utiliza esta prediccion juzgar mejor su decision de elegir unos u otros
robots en funcion del riesgo que este dispuesto a correr. Por ejemplo, si la prediccion
es que ganara poco y el error que esperamos es grande, es poco probable que se quiera
utilizar este robot, mientras que si la prediccion es que ganara mucho y tenemos un error
esperado moderado, s es probable que queramos dejarlo operar.
Para ello, se plantearon dos aproximaciones iniciales partiendo de dos ideas basicas
distintas, y tras cierta reflexion, resultaron ser de alguna forma similares a casos concretos
de una solucion mas general, que exponemos en u
ltimo lugar.
Partimos de una variable R que refleja el valor real del beneficio que obtiene el robot al
realizar una cierta operacion, y una variable P que nos da el valor predicho por nuestra
red. Evidentemente, el valor de R nos resulta desconocido, y lo que queremos es establecer
alguna relacion entre ellos, que sera nuestra medida del error cometido. Una primera
aproximacion planteada consiste en expresar el error cometido como un sumando, es
decir, suponer que la funcion P aproxima a R salvo un determinado error que sera la
diferencia entre ambas:
R=P +
con  la funcion que queremos estimar, y despejando tenemos que  = R P . Dado
que queremos utilizar los u
ltimos 3 o 4 valores para estimar nuestro error, podramos
simplemente tomar el promedio del valor absoluto de esta resta para esos valores, y utilizarlo como
estimacion del error de la prediccion siguiente. Es decir, podramos definir
P4
e
i
y estimar que dada una nueva prediccion P , el valor de R estara en el
err = i=1
4
intervalo [P err, P + err], por lo que es probable que el resultado de la operacion sera

46

CAPITULO 3. ASPECTOS TECNICOS

R > P err. As, una posible estrategia sera elegir aquellos robots con mayor valor para
P err, o aquellos tales que P err > 0. Esta estrategia basica se puede mejorar estableciendo este umbral de forma mas adecuada. Para ello, podemos simular los resultados que
habramos obtenido para un intervalo de tiempo pasado determinado en el caso de utilizar
esta estrategia con distintos umbrales, y finalmente quedarnos con aquel que proporcione
mejores resultados.
Ademas, tambien podemos mejorar la forma de calcular err, puesto que utilizando el
promedio de las 4 u
ltimas operaciones, damos la misma importancia a la primera que a
la u
ltima operacion que consideremos, y a partir de esa no tenemos en cuenta ninguna
otra. Parece mas razonable que el peso de cada operacion en la estimacion final sea
proporcional a su antiguedad. Para ello, cada vez que recibamos una nueva operacion a
tener en cuenta, disminuiremos el peso que tenan las anteriores y a
nadiremos esta u
ltima
con mayor importancia. As, si errn es el error que tenamos en un momento dado y nos
llega otro resultado a tener en cuenta, el nuevo error errn+1 se calculara seg
un:
0 =  + (1 ) n
Con un 0 < < 1 adecuado. Este determina como se reparte el peso entre las operaciones anteriores. Cuanto mayor sea, mas importancia daremos al nuevo resultado que
acabamos de recibir, y que por tanto sera el mas reciente. Este puede determinarse con
el mismo procedimiento que expusimos para elegir el umbral anterior: Basta seleccionar
varios posibles valores, simular que hubiera ocurrido en un intervalo de tiempo pasado, y
elegir aquel valor de que maximice nuestras ganancias.
Con la implementacion de esta primera aproximacion ya se producan mejoras significativas, aunque el segundo planteamiento expuesto a continuacion daba resultados incluso
mejores. La idea consiste en utilizar un factor multiplicativo en lugar de uno aditivo, como
hacamos en el metodo anterior. De esta forma, suponemos que P determina R excepto
por un determinado factor f por el que viene multiplicado. As, en este caso podemos
expresar R como:
R=P f
Y de igual forma que antes, podemos despejar f seg
un f = PR , obteniendo un valor del
mismo para cada resultado que tengamos. A continuacion, de forma analoga al metodo
anterior, podemos obtener un valor F que constituya un promedio ponderado de los factores f de los resultados pasados. As, podemos utilizarlo para estimar el error esperado,
asumiendo que dada una prediccion nueva P 0 , el resultado que esperamos sera aproximadamente R0 = P 0 F . Con ello, una estrategia basica podra ser elegir aquellos robots para
los que nuestra prediccion sea P f > U con U un umbral adecuado.
Pero como hemos adelantado al principio, planteados de la manera adecuada, los dos
metodos anteriores son en realidad similares a casos particulares de un metodo mas general. La clave para ver la generalizacion consiste en imaginar los valores de P y R como
puntos (P, R) en el plano, y plantear el problema como el de aproximar estos puntos
mediante una recta.

3.5. MEDIDAS DE ERROR Y FIABILIDAD

47

De esta forma, el primer metodo, en el que tratabamos de ajustar R por P +, consiste
en realidad en un ajuste seg
un una recta con pendiente 1 y ordenada en el origen . Por
otra parte, el segundo metodo, ajustar R por P f consiste en realidad en ajustar los
puntos a una recta con pendiente f que pasa por el origen.
Por ello, el metodo general que resulta logico plantearse a continuacion es precisamente
el ajuste de mnimos cuadrados, en el que aproximamos una serie de puntos en el
plano por una recta. Esta recta sera aquella que minimice la suma de los cuadrados de
las diferencias entre los valores de nuestro ajuste y los reales. Ademas, para continuar con
la idea de darle mas importancia a las operaciones mas recientes, emplearemos el metodo
algo mas complejo del ajuste de mnimos cuadrados ponderado. Esta variacion del
metodo permite ajustar el peso que tendra cada punto en el calculo del error que queremos
minimizar. Utilizaremos como peso para los puntos n , con n el n
umero de operaciones
entre la actual y aquella a la que se refiere el punto. Este puede ajustarse de la misma
forma que en los metodos anteriores.
Finalmente, obtendremos una recta y = m x + n que ajuste estos puntos, por lo que
podemos estimar que el valor real que obtendremos de una operacion con prediccion P
sera R = P m + n. As, una posible estrategia sera elegir aquellos robots cuya prediccion
cumpla que P m + n > U para U un umbral ajustado.
Por u
ltimo, es importante resaltar que cada red tiene su propia fiabilidad y ajuste del
error independiente, y que por tanto deben calcularse por separado. Esto es as debido a
que hay situaciones en las que unas redes pueden funcionar muy bien y otras muy mal, y
en general ni las redes ni los robots tienen por que estar relacionadas entre s.
Con estos metodos establecemos un nuevo filtro que controla a la propia red, que a
su vez supervisa los robots operando a mercado, y la mejora es realmente sustancial, en
especial con el segundo y tercer metodo. Los resultados del sistema tras la implementacion
del metodo final anterior se exponen en la seccion 4.2.

48

CAPITULO 3. ASPECTOS TECNICOS

Captulo 4
Resultados y Conclusiones
4.1.

Resultados del Prototipo Inicial

Tras finalizar el desarrollo del prototipo de nuestro software sin las medidas de control
de errores y fiabilidad descritas en la seccion 3.5, se puso en marcha con un conjunto de
23 robots durante un mes, desde el 02/06/2014 hasta el 30/06/2014.
Aunque nuestro sistema esta pensado para proporcionar informacion a un agente externo que sea el que controle los robots, para poder obtener resultados sobre su eficacia
implementamos una estrategia sencilla para poder elegir los robots que dejaremos operar
en el mercado y poder evaluar sus resultados. Puesto que el sistema de fiabilidad a
un no
estaba desarrollado, u
nicamente contabamos con la prediccion de la red asociada a cada
robot. As, nuestra estrategia consistio en elegir para operar en mercado a todos aquellos
robots cuya prediccion de su red fuera positiva. Es decir, pondremos a operar todos los
robots que estimemos que van a obtener ganancias en sus operaciones, y los retiraremos
cuando predigamos que van a sufrir perdidas.
En la tabla 4.1 se detallan nuestros balances totales de cada semana comparandolos
con los que habran obtenido los robots sin ninguna supervision, es decir, permitiendo a
todos los robots operar durante todo el tiempo. Por otra parte, en la tabla 4.2 aparecen
el n
umero de operaciones positivas y negativas que realizan los robots, y el balance total
dividido en balance positivo y negativo.
Ademas, encontramos calculadas las proporciones entre todos estos factores comparando los resultados obtenidos por nuestro sistema con los obtenidos sin ninguna supervision.
Para interpretar estas proporciones, tenemos que las relativas a balance y operaciones positivas dan una medida de la precision de nuestro sistema para detectar cuando los robots
van a funcionar bien, y por tanto les permite operar. Por otra parte, las proporciones
de balance y operaciones negativas indican la precision de nuestra sistema para detectar
cuando los robots van a tener perdidas, y evitar que se produzcan. Por tanto, idealmente nuestro sistema tendra proporciones de balance y operaciones positivas muy altos, y
proporciones de balance y operaciones negativas muy bajos.
As, podemos ver que el balance total que habran obtenido los robots hubiera sido
de -235.51$, mientras que los robots con nuestro sistema pierden 72.20$ menos, es decir,
49

CAPITULO 4. RESULTADOS Y CONCLUSIONES

50

Semana 1
Semana 2
Semana 3
Semana 4
TOTAL

Balance Final Original Balance Final Redes Diferencia


-24.12
9.01
33.13
-70.44
-19.3
51.14
-3.04
-22.07
-19.03
-137.91
-130.95
6.96
-235.51
-163.31
72.20

Cuadro 4.1: Balance total de las 4 semanas y total. Software sin fiabilidad.

Semana 1
Semana 2
Semana 3
Semana 4
TOTAL
Semana 1
Semana 2
Semana 3
Semana 4
TOTAL

Balance Positivo Proporci


on
49.34 / 69.65
0.71
38.49 / 46.98
0.82
78.06 / 150.07
0.52
39.31 / 81.13
0.48
205.2 / 347.83
0.59
Ops. Positivas
Proporci
on
13 / 18
0.72
13 / 18
0.72
15 / 25
0.6
9 / 12
0.75
50 / 73
0.68

Balance Negativo Proporci


on
-40.33 / -93.77
0.43
-57.79 / -117.42
0.49
-100.13 / -153.11
0.65
-170.26 / -219.04
0.78
-368.51 / -583.34
0.63
Ops. Negativas
Proporci
on
7 / 18
0.39
9 / 22
0.41
11 / 27
0.41
17 / 27
0.63
44 / 83
0.53

Cuadro 4.2: Balance positivo y negativo y n


umero de operaciones positivas y negativas de
cada semana y final. Software sin fiabilidad. Comparacion entre Robots con Red / Robots
sin Red

4.1. RESULTADOS DEL PROTOTIPO INICIAL

51

-163.31$. Lo que es mas, u


nicamente en una de las semanas los robots fuera de nuestro
sistema funcionaron mejor. Como debemos tener en cuenta que el hecho de que los robots
en s funcionen mal en general, y pierdan dinero, esta fuera de nuestro control y no es
nuestra responsabilidad, podramos pensar que los resultados obtenidos son satisfactorios.
No obstante, un estudio algo mas detallado muestra que no es as. Es importante
resaltar que, como puede verse en la tabla 4.2, todas las semanas la proporcion de operaciones positivas que nuestro sistema deja pasar es superior la proporcion de operaciones
negativas, lo cual s es sin duda un dato muy positivo.
Sin embargo, si observamos las columnas de proporcion vemos que los resultados no son

buenos. Este
sera el dato que nos indicara en realidad si nuestro sistema esta funcionando
correctamente, ya que no depende de que los propios robots lo hagan bien o mal. As,
podemos ver que nuestro sistema permite pasar el 59 % del balance positivo y el 63 %
del balance negativo. Es decir, el porcentaje de perdidas producidas por los robots que se
realizan en nuestro sistema es superior al porcentaje de ganancias que se producen. Esto
significa que si construyeramos un sistema que dejara operar a mercado aleatoriamente el
60 % de las operaciones que los robots solicitaran, estadsticamente debera mantener el
60 % de las ganancias (mas que nuestro sistema) y como consecuencia tener u
nicamente
el 60 % de las perdidas (menos que nuestro sistema). As, en realidad, el hecho de que los
robots supervisados den mejores resultados que sin supervisar se debe a que en general
ha habido muchas mas perdidas que ganancias, por lo que cualquier sistema que evite que
una cierta cantidad de operaciones se realicen (incluso si las elige al azar) mejorara los
resultados.

Sin embargo, s podemos ver que hay semanas que nuestro sistema ha funcionado muy
bien (semanas 1 y 2) aunque haya otras que haya funcionado muy mal (3 y 4). Ademas,
tenemos que los resultados de las proporciones de operaciones positivas y negativas que
realiza nuestro sistema s son buenos todas las semanas. Por tanto, nos planteamos
que si pudieramos detectar a tiempo en que momentos (o semanas) nuestro sistema y
nuestras redes estan fallando en sus predicciones deberamos mejorar sustancialmente
nuestros resultados. Esto es precisamente lo que perseguimos con la implementacion del
sistema de fiabilidad y control de errores que desarrollamos e implementamos como parte
del prototipo final.

Adicionalmente, a
nadimos tambien en las tablas 4.3 y 4.4 los balances totales de cada
robot las semanas 2 y 4, encontrandose en esta primera resultado muy buenos, y en la
segunda resultados muy malos. Hay que tener en cuenta en estos datos que hay ocasiones
en las que nuestro sistema permite operar a un robot algo de tiempo despues de lo que lo
hara sin nuestra intervencion, por lo que los resultados de una misma operacion con y
sin la supervision de nuestro software pueden ser distintas. Es por eso, por ejemplo, que
un robot que haya realizado una u
nica operacion con y sin nuestro sistema puede tener
balances ligeramente diferentes.

52

10062
10075
10208
10290
10309
10416
15009
20020
20023
20030
25001
25013
40003
50003
50011
50016
50030
50114
50177
50212
50242
61228
10169

CAPITULO 4. RESULTADOS Y CONCLUSIONES

Balance Original Balance Redes Ops. Positivas


1.11
2.12
1/1
0
0
0/0
0
0
0/0
0
0
0/0
0
0
0/0
0
0
0/0
0
0
0/0
-3.2
-3.1
2/2
-4.49
0
0/0
-29.5
-33.6
1/1
-13.7
1.6
1/4
-24.1
-7.7
1/2
-18.24
-3.3
0/0
0
0
0/0
0
0
0/0
2.7
2.7
2/2
0
0
0/0
0
0
0/0
4.4
0.3
1/2
0
0
0/0
6.95
6.95
3/3
-7.1
0
0/0
14.73
14.73
1/1

Ops. Negativas
0/0
0/0
0/0
0/0
0/0
0/0
0/0
1/1
0/2
3/3
0/5
3/4
1/4
0/0
0/0
0/0
0/0
0/0
0/0
0/0
1/1
0/2
0/0

Cuadro 4.3: Balance total desglosado de la semana 2. Proporcion de operaciones con Red
/ sin Red.

4.1. RESULTADOS DEL PROTOTIPO INICIAL

10062
10075
10208
10290
10309
10416
15009
20020
20023
20030
25001
25013
40003
50003
50011
50016
50030
50114
50177
50212
50242
61228
10169

Balance Original Balance Redes Ops. Positivas


-15.54
0
0/0
0
0
0/0
0
0
0/0
0
0
0/0
26.5
0
0/1
-4.71
-4.71
2/2
-1.8
-1.8
0/0
10.3
10.2
2/2
-26.38
-24.79
0/0
-0.1
-0.1
0/0
1.4
-5.5
0/2
-6.1
-6.1
1/1
-71.91
-63.17
1/1
0
0
0/0
0
0
0/0
8.2
8.2
1/1
0
0
0/0
0
0
0/0
-5.8
-6.1
0/0
0
0
0/0
-37.08
-37.08
2/2
-21.4
0
0/0
6.51
0
0/1

53

Ops. Negativas
0/1
0/0
0/0
0/0
0/0
3/3
1/1
1/1
1/2
1/1
1/3
3/3
3/3
0/0
0/0
0/0
0/0
0/0
1/1
0/0
3/3
0/3
0/0

Cuadro 4.4: Balance total desglosado de la semana 4. Proporcion de operaciones con Red
/ sin Red.

54

4.2.

CAPITULO 4. RESULTADOS Y CONCLUSIONES

Resultados Finales

En esta seccion se presentan los resultados finales de nuestro software, siendo la diferencia mas importantes respecto a los resultados de la seccion anterior la incorporacion
al sistema del metodo de control de errores y fiabilidad descrito en la seccion 3.5. Para
obtener estos resultados, se a
nadieron 40 nuevos robots al sistema, se entrenaron redes
para ellos, y se pusieron a funcionar teniendo en cuenta la nueva informacion que nos proporcionaba la fiabilidad de cada red. Como metodo de control de errores, hemos elegido el
metodo basando en la tecnica de ajuste de mnimos cuadrados ponderado, que recordemos
que consista en utilizar las predicciones de las u
ltimas operaciones y sus resultados finales
reales para ajustar una recta que permita corregir la prediccion nueva.
Ademas, pese a que de nuevo los datos de prediccion y fiabilidad que obtenemos
en nuestro sistema estan planteados para ser utilizados por un agente externo, implementamos una nueva estrategia basica que nos permita probar el sistema. En este caso
elegiremos para operar todos aquellos robots que, pese a tener en cuenta el error que
esperamos cometer en nuestra prediccion, supere un cierto umbral U .
Ademas de este umbral, debemos elegir un valor del parametro utilizado en el metodo
elegido de fiabilidad para definir los pesos que asignamos a cada una de las operaciones
anteriores. Tanto este valor como el valor del umbral U se ajustaron utilizando las
operaciones cuyos resultados se detallan en la seccion anterior. As, se eligieron aquellos
parametros que hubieran dado mejores resultados en ese periodo de tiempo. Concretamente, estos fueron los parametros = 0,3 y U = 2.
Los resultados del sistema tras 3 semanas de ejecucion (del lunes 10/08/2014 al domingo
31/08/2014) son los que se detallan en esta seccion. Al igual que en la seccion anterior,
realizaremos la comparativa entre los resultados obtenidos con nuestro sistema y aquellos
que los robots habran obtenido sin el.
Nos centraremos principalmente en las mismas metricas: El balance total de cada
semana y desglosado por robot, los balances positivo y negativo y n
umero de operaciones
positivas y negativas. Ademas, volveremos a reflejar la proporcion entre los balances y
n
umero de operaciones que se realizan con nuestro sistema frente a los totales que se
produciran sin nuestra intervencion. Esperamos que, si nuestro sistema funciona bien,
la proporcion de balance y operaciones positivas que se realizan con nuestro sistema sea
siempre mayor que la proporcion balance y operaciones negativas.
En la tabla 4.5 podemos encontrar los balances totales comparados de las 3 semanas,
y el balance final total. Ademas, en la tabla 4.6 podemos encontrar el balance positivo y
negativo que realizan los robots que nuestro sistema elige para operar en cada momento
frente al que realizara la totalidad de los robots si operaran de forma independiente.
Tambien encontramos en esta tabla, al igual que en la seccion anterior, la proporcion
entre los resultados de ambos tipos.
Por u
ltimo, en la tabla 4.7 podemos encontrar los balances finales y n
umero de operaciones positivas y negativas que realiza cada uno de los robots utilizados. Como podemos
ver, todos los resultados en este caso son mucho mas favorables que en la seccion anterior,
en concreto, podemos citar los siguientes:

4.2. RESULTADOS FINALES

55

Balance Final Original Balance Final Redes Diferencia


Semana 1
-144.9
-6.22
138.68
Semana 2
-229.22
-102.65
126.57
Semana 3
-22.75
39.76
62.51
TOTAL
-396.87
-69.11
327.76
Cuadro 4.5: Balance total de las 3 semanas y total. Software sin fiabilidad.
Semana 1
Semana 2
Semana 3
TOTAL
Semana 1
Semana 2
Semana 3
TOTAL

Balance Positivo Proporci


on
138.63 / 154
0.90
128.6 / 210.18
0.61
155.66 / 265.12
0.59
422.89 / 629.30
0.67
Ops. Positivas
Proporci
on
16 / 23
0.70
19 / 29
0.66
23 / 38
0.61
58 / 90
0.64

Balance Negativo Proporci


on
-144.85 / -298.9
0.48
-231.25 / -439.4
0.53
-115.9 / -287.87
0.40
-492 / -1026.17
0.48
Ops. Negativas
Proporci
on
11 / 22
0.5
15 / 26
0.57
6 / 30
0.2
32 / 78
0.41

Cuadro 4.6: Balance positivo y negativo y n


umero de operaciones positivas y negativas
de cada semana y final. Software con fiabilidad. Comparacion entre Robots con Red /
Robots sin Red
Todas las semanas los resultados de balance total de nuestro sistema son mejores
que los obtenidos sin su utilizacion.
Todas las semanas la proporcion de operaciones positivas respecto del total ha sido
superior a la proporcion de operaciones negativas.
Todas las semanas la proporcion de balance positivo respecto del total ha sido
superior a la proporcion de balance negativo.
De los 21 robots que han operado y muestran diferencias entre nuestros resultados
y los obtenidos operando independientemente, en 13 se ha producido una mejora
de los mismos, y solo en 8 los resultados han empeorado. Lo que es mas, la media
de mejora para esos 13 son 34$, mientras que la media de empeoramiento para los
otros 8 es de solo 15$.

Ademas, como resultados finales obtenemos que a pesar de que los robots en general han
funcionado mal durante este periodo, y el balance total de estos operando independientemente ha sido de -396.87$, el balance final total de nuestro sistema ha sido de 69.11$.
Lo que es mas importante, nuestro sistema ha realizado 58 de 90 operaciones positivas (el
64 %) y tan solo 32 de 78 operaciones negativas (el 41 %).
Ademas, la suma del balance de las operaciones positivas que ha dejado pasar ha sido
422.89$ de 629.30$ totales (67 %), y la suma del balance de las operaciones negativas
realizadas ha sido tan solo de -492$, frente a los -1026.17$ de balance negativo total
(48 %).

56

10062
10078
10208
10224
10387
15009
16052
20042
20059
50016
50030
50082
50407
10169
10185
10194
10225
10226
10290
50003
50011
50114
10309
15036
16024
16080
16104
20020
20030
20035
25013
30207
40003
40005
50006
50138
50177
50212
50242
50450

CAPITULO 4. RESULTADOS Y CONCLUSIONES

Balance Original Balance Redes Ops. Positivas


6.63
13.77
3/3
-32.5
-32.6
2/2
6.82
6.82
1/1
0
0
0/0
0
0
0/0
-31.5
-19.1
3/4
-126.27
37.33
2/3
0
0
0/0
4.35
3.02
1/2
-38.9
-39.7
0/0
5.89
12.64
2/1
0
0
0/0
-110.91
-92.41
1/1
1.86
1.86
2/2
29.33
-1
0/3
5.06
0
0/2
0
0
0/0
0
0
0/0
8.4
8.4
1/1
-3
0
0/0
-19
-19
1/1
0
0
0/0
16.8
0
0/1
-24.97
-17.99
6/8
0
0
0/0
-90
0
0/0
9.1
9.1
2/2
10
8.2
4/6
-1.6
-6.1
1/7
0
0
0/0
-72.7
-6.8
1/2
0
0
0/0
21.82
-16.04
2/6
-11.4
30.9
1/3
0
0
0/0
32.52
9.18
1/5
-1
18.2
5/6
-37.4
-22.69
1/1
44.9
44.9
15 / 15
0
0
0/0

Ops. Negativas
0/1
1/1
0/0
0/0
0/0
2/5
0/2
0/0
0/0
1/1
0/0
0/0
4/5
1/1
1/3
0/0
0/0
0/0
0/0
0/1
1/1
0/0
0/0
4/6
0/0
0/2
0/0
2/2
1/2
0/0
3/8
0/0
4/7
0 / 12
0/0
0/4
1/2
1/3
5/5
0/0

Cuadro 4.7: Balance total desglosado de la semana 4.

4.3. CONCLUSIONES

57

Todo esto indica que, finalmente, hemos logrado que nuestro software realice las predicciones con suficiente precision, y hemos podido utilizar esta informacion para manejar
los robots de forma conveniente, mejorando significativamente sus resultados.

4.3.

Conclusiones

Recordemos que nuestro objetivo inicial era aplicar tecnicas de inteligencia artificial

para resolver el problema real al que se enfrentaba la empresa Talentum. Esta


tena miles
de robots programados y configurados, y su problema consista en elegir cuales de ellos
tener operando en cada momento. Para ello, planteamos que nuestro objetivo final sera
desarrollar un sistema que diera suficientes datos para tomar esta decision.
La implementacion del primer prototipo u
nicamente proporcionaba una prediccion del
balance que obtendra cada robot si lo pusieramos a operar en el mercado. Para ello,
utilizamos redes neuronales como predictores, y otras tecnicas para las distintas etapas del
proceso: analisis principal de componentes, tests estadsticos, etc. Una vez implementado
todo ello, pusimos nuestro sistema a funcionar durante un mes, y evaluamos los resultados.
Por desgracia, estos resultados fueron altamente insatisfactorios, aunque esperabamos que
mejoraran tras la adicion de las medidas de control de errores al sistema.
As, aplicando ideas de matematicas y estadstica, desarrollamos e implementamos un
sistema nuevo que nos proporcionara, ademas de las predicciones, una cierta medida de
la fiabilidad de estas. Ahora, utilizando estas dos informaciones, podamos mejorar las
decisiones que tomara nuestro agente externo a la hora de elegir los robots para operar.
Finalmente, en el prototipo inicial s logramos obtener resultados satisfactorios. En
concreto, tras su ejecucion durante 3 semanas mas, logramos que el agente programado con
una estrategia basica consiguiera realizar operaciones que sumaron un 67 % del balance
positivo total, mientras que u
nicamente dejo pasar operaciones que sumaron un 48 %
del balance negativo total. Esto permitio pasar de unos resultados totales por parte de
los robots de perdidas de -396.78$, a perder u
nicamente -69.11$, lo que constituye una
diferencia de 327.76$, que supone una mejora sustancial de los resultados.
Por otra parte, el sistema actual a
un se puede mejorar. Como trabajo futuro proponemos:
El reentrenamiento automatico de las redes cada cierto tiempo, para utilizar los
datos nuevos.
El entrenamiento de las redes asignando mas peso a los casos obtenidos de operaciones realizadas mas recientemente.
Establecer las estrategias de fiabilidad a utilizar independientemente para cada red.
Actualmente se establece una estrategia de fiabilidad global, pero para cada red
puede funcionar mejor una que otra.
Establecer estrategias mas complejas para el agente externo utilizando la informacion proporcionada.

58

CAPITULO 4. RESULTADOS Y CONCLUSIONES


Ampliar la parte de visualizacion de estadsticas, y en general hacer la interfaz mas
usable por un usuario menos tecnico.
Probar otros metodos de entrenamiento de redes neuronales.
Utilizar otros factores de medida del rendimiento de un robot aparte del beneficio
total esperado en el caso de realizar una operacion, como una estimacion del beneficio
en funcion del tiempo que este operando.
Utilizar otras tecnicas de inteligencia artificial para implementar los predictores,
como sistemas clasificadores o support vector machines.
Mejorar el control de errores cometido por las redes. Podra utilizarse para ello, por
ejemplo, en lugar del ajuste a un recta, otra red neuronal para intentar aproximar
la funcion de error.
Entrenar las redes penalizando menos las subestimaciones que las sobreestimaciones.

Bibliografa
[1] Bolsa, Mercados y Tecnicas de Inversion, Francisco Lopez Lubian, Pablo Garca
Estevez.
[2] Talentum - Automatic Systems for your Trading, http://fxtalentum.com/
[3] Artificial neural networks. Opening the black box. Cancer. Dayhoff JE, DeLeo JM.
American Cancer Society, v. 91, p. 1615-1635, 2001.
[4] Neuro-Fuzzy and soft computing. A computational approach to learning and machine
intelligence. Jang J.-S.R., Sun C. T., Mizutani E. (1997).
[5] Coursera - Machine Learning, Andrew Ng. Stanford University. https://www.
coursera.org/course/ml
[6] Apuntes de la asignatura Inferencia Estadstica, Felix Luis Belzunce Torregrosa, Jose
Mara Ruiz Gomez. Universidad de Murcia. http://aulavirtual.um.es
[7] Principal Components Analysis. http://inst.eecs.berkeley.edu/~ee127a/book/
login/l_sym_pca.html
[8] Encog Machine Learning
heatonresearch.com/encog

Framework.

Heaton

Research.

http://www.

[9] Weka 3: Data Mining Software in Java. Machine Learning Group at the University
of Waikato. http://www.cs.waikato.ac.nz/~ml/weka/
[10] Commons Math: The Apache Commons Mathematics Library. http://commons.
apache.org/proper/commons-math/index.html
[11] Jmathplot: Easy Java scientific plot for math engineering. http://code.google.
com/p/jmathplot/
[12] Neural-Networks FAQ, http://www.faqs.org/faqs/ai-faq/neural-nets/part2/
[13] AbstractTableModel (Java Platform SE 7). http://docs.oracle.com/javase/7/
docs/api/javax/swing/table/AbstractTableModel.html
[14] Java SE Technologies - Database - The Java Database Connectivity (JDBC), Oracle,
http://www.oracle.com/technetwork/java/javase/jdbc/index.html

59