Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Analisis Tecnico Usando Inteligencia Artificial PDF
Analisis Tecnico Usando Inteligencia Artificial PDF
5 de septiembre de 2014
Índice general
0.1. Abstract . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1. El Problema 9
1.1. El Análisis de los Mercados Financieros . . . . . . . . . . . . . . . . . . . . 9
1.1.1. El Análisis Fundamental y el Análisis Técnico . . . . . . . . . . . . 9
1.1.2. Los Principios y Métodos del Análisis Técnico . . . . . . . . . . . . 10
1.1.3. Algunas Técnicas de Análisis Chartista . . . . . . . . . . . . . . . . 11
1.1.4. Algunas Técnicas del Análisis de Osciladores . . . . . . . . . . . . . 12
1.2. Traders Automáticos y Talentum . . . . . . . . . . . . . . . . . . . . . . . 14
1.3. Problema Propuesto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2. Desarrollo de la Solución 17
2.1. Solución Propuesta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.1.1. Visión General . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.1.2. Redes Neuronales como Predictores . . . . . . . . . . . . . . . . . . 18
2.1.3. El Procedimiento Completo . . . . . . . . . . . . . . . . . . . . . . 21
2.2. Etapas del Proceso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
2.2.1. Obtención y Tratamiento de los Datos . . . . . . . . . . . . . . . . 22
2.2.2. Entrenamiento de Redes Neuronales . . . . . . . . . . . . . . . . . . 24
2.2.3. Puesta en Marcha a Mercado Real . . . . . . . . . . . . . . . . . . 26
2.2.4. Monitorización y Fiabilidad . . . . . . . . . . . . . . . . . . . . . . 27
3. Aspectos Técnicos 29
3.1. Software Desarrollado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
3.1.1. Librerias Utilizadas . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
3.1.2. Módulos Desarrollados . . . . . . . . . . . . . . . . . . . . . . . . . 30
3.1.3. Estructura General . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
3.1.4. Interfaz de Usuario . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
3.2. Detalles Técnicos del Entrenamiento de Redes . . . . . . . . . . . . . . . . 37
3.2.1. El Problema del Overfitting . . . . . . . . . . . . . . . . . . . . . . 37
3.2.2. El Proceso Completo de Entrenamiento . . . . . . . . . . . . . . . . 39
3.3. Análisis de Componentes Principales . . . . . . . . . . . . . . . . . . . . . 40
3.4. Tests Estadisticos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
3.5. Medidas de Error y Fiabilidad . . . . . . . . . . . . . . . . . . . . . . . . . 44
3
4 ÍNDICE GENERAL
4. Resultados y Conclusiones 49
4.1. Resultados del Prototipo Inicial . . . . . . . . . . . . . . . . . . . . . . . . 49
4.2. Resultados Finales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
4.3. Conclusiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
0.1. ABSTRACT 5
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 Company’s 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:
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,
6 ÍNDICE 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.
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 summa-
rized 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 7
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 robot’s
performance.
Running the system in real-time market. In this step we run the neural net-
work 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 trai-
ning 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 user’s 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 didn’t 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.
8 ÍNDICE GENERAL
Capı́tulo 1
El Problema
9
10 CAPÍTULO 1. EL PROBLEMA
Podrı́a decirse que el análisis técnico es un análisis para el corto plazo mientras que
el análisis 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 cotización suba, ésta puede
bajar a corto plazo debido a la toma de beneficios por parte de los inversores. Son patrones
como éstos de los que el análisis técnico trata de sacar partido.
De hecho, a menudo se combinan ambos análisis: El análisis fundamental indica qué tı́tu-
los hay que comprar y cuáles hay que vender, mientras que el análisis técnico muestra el
momento exacto para realizar dicha compra o venta.
La primera premisa niega el principio básico del análisis fundamental, y asume que las
acciones no están sobrevaloradas ni infravaloradas, sino que reflejan su valor exacto. La
segunda refleja que el mercado se mueve por tendencias más largas o más cortas, y la
tercera premisa establece que lo que ocurrió en el pasado tiende a repetirse, y que por
tanto podemos usar los datos de éste para predecir los futuros.
Los métodos del análisis técnico pueden dividirse en dos grandes grupos: El análisis
chartista y el análisis por osciladores. El chartismo es un sistema basado únicamente en
el estudio de los gráficos. Supone que los movimientos de los precios son debidos a una
combinación de expectativas y sentimientos de los inversores, y que éstos actuarán 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 análisis de osciladores, por otro lado, utiliza ecuaciones matemáticas para deter-
minar señales de compra o venta en los gráficos, utilizando como variable principal las
cotizaciones de los precios.
En las siguientes dos secciones se establecen ejemplos de uno y otro tipo de análisis.
1.1. EL ANÁLISIS DE LOS MERCADOS FINANCIEROS 11
Fase de Expansión. Se confirma la mejora de los datos, que llegan al público ge-
neral, y se produce la compra masiva de tı́tulos, por lo que se eleva rápidamente
su cotización y produciendo altas rentabilidades, que a su vez motiva de nuevo la
compra.
Fase de Distribución. El público general compra gran cantidad de tı́tulos hasta que
el mercado alcanza un punto en el que ya no crece. Algunos inversores venden para
recoger beneficios y otros compran estos tı́tulos 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ño 1998. [1]
12 CAPÍTULO 1. EL PROBLEMA
durante ese periodo. Al suavizar la curva de precios, constituye una forma más sencilla
de observar las tendencias del mercado.
Además, una técnica para obtener señales de compra o de venta serı́a observar cuándo
la gráfica de la cotización del valor corta la gráfica formada por la media móvil, lo que
indicará que el mercado está sufriendo una tendencia bajista o alcista a corto plazo.
Por ejemplo, si una cotización ascendente corta la media móvil significa que el precio ha
ascendido de forma más rápida de lo normal, por lo que es de suponer que nos encontramos
ante una tendencia alcista y ésta seguirá 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 móviles de 14 dı́as (lı́nea continua) y de 150 dı́as (lı́nea discontinua). Ası́,
cuando la cotización corta la media que usemos como referencia, se producirá una orden
de compra (señaladas con un 1) o una orden de venta (señalada con un 2).
Figura 1.3: Medias Móviles: Cotización del BBVA durante el año 2000. Medias móviles de
14 dı́as (lı́nea continua) y de 150 dı́as (lı́nea discontinua). Se ha señalado con un 1 señales
de compra, y con un 2 señales de venta. [1]
Pese a la simplicidad de este método, existen varias modificaciones. Por una parte, tomar
medias móviles de periodos más largos o más pequeños varı́a el riesgo y la rentabilidad
esperada: Tomando medias móviles más largas las tendencias que detectemos serán más
seguras pero de menor rentabilidad que con medias móviles más cortas.
Existen por otra parte muchas variaciones y mejoras a este método, que van desde el
uso de varias medias móviles simultáneamente (para detectar por ejemplo los cortes entre
ellas en lugar de con la cotización) hasta otras formas de calcular estas medias, dando por
ejemplo más importancia a las cotizaciones más recientes.
14 CAPÍTULO 1. EL PROBLEMA
Existen otras técnicas más complejas basadas en ideas matemáticas, como son por
ejemplo las Bandas de Bollinger, que utiliza la regla estadı́stica de las tres sigmas, que
establece que el 99 % de una distribución normal está comprendida entre la media menos
tres veces la desviación tı́pica y la media más tres veces la desviación tı́pica. Por tanto, la
técnica se basa en que si la cotización alcanza la cota dada por la media móvil más tres
veces su desviación tı́pica, es de esperar que su precio comience a caer y emitimos una
orden de venta, y si la cotización alcanza la media móvil menos tres veces su desviación
tı́pica emitimos una de compra. Un gráfico reflejando esta técnica podemos encontrarlo
en la figura 1.4. En ella, encontramos las bandas de Bollinger referidas a la media móvil
de 20 dı́as. Cuando la cotización alcanza la banda superior, se espera que posteriormente
caiga, por lo que nuestra acción será de venta, mientras que si la cotización alcanza la
banda inferior emitiremos una señal de compra.
Figura 1.4: Bandas de Bollinger: Cotización de la empresa Altadis durante el año 2000.
[1]
Los sistemas automáticos han ido tomando mucha fuerza los últimos años. Entre sus
ventajas se encuentra la rapidez a la que puede detectar y realizar las operaciones, la
facilidad de diversificación o el hecho de que evitar que las emociones del broker influyan
en las decisiones del sistema. Como desventajas, por otra parte, podrı́an citarse los posibles
fallos mecánicos o la necesidad de monitorización.
Talentum es una empresa dedicada precisamente a este campo. Fundada en Febrero del
2013, Talentum se dedica principalmente al estudio y desarrollo de sistemas automáticos
para invertir en bolsa. Cuenta con profesionales de distintas ramas, principalmente eco-
nomistas, informáticos, quı́micos y matemáticos, cuyas técnicas especı́ficas combinadas se
programan en los robots.
En ese punto, la empresa se encontraba ante un problema que no habı́an logrado resolver
satisfactoriamente: La elección del subconjunto de robots para operar en cada momento.
La aproximación que habı́an 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 situación 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 realización de este trabajo fin de grado
fue dar a Talentum criterios para poder elegir con mayor efectividad qué robots elegir
para que operen en cada momento. Para ello, nuestra idea básica era utilizar los resultados
pasados de cada robot en situaciones del mercado similares para tratar de predecir cómo
se comportarán en la situación actual.
Ası́, debı́amos desarrollar unos “predictores” que nos proporcionen información sobre los
resultados que tendrá un robot concreto si operara en el momento actual. Esta información
16 CAPÍTULO 1. EL PROBLEMA
serı́a entonces utilizada por un agente externo de Talentum, que con sus propios criterios
decidirı́a qué robots utilizar.
Además del sistema básico de realización de predicciones sobre el desempeño de un
robot, incorporamos otros mecanismos para estimar los errores que cometemos en las
mismas, de forma que diéramos al agente externo la mayor cantidad de información posible
para realizar sus decisiones.
Por tanto, nuestro objetivo final es implementar un sistema que nos proporcione predic-
ciones sobre el rendimiento de cada robot, junto con una medida de la fiabilidad de esta
predicción. Todo ello será interpretado por un agente externo que elegirá un determinado
conjunto de robots en para que operen en cada momento, en función del riesgo deseado.
Capı́tulo 2
Desarrollo de la Solución
La principal decisión que marcarı́a gran parte del diseño posterior consistı́a en qué técni-
ca de inteligencia artificial utilizar para implementar los predictores. En nuestro caso, de-
cidimos utilizar redes neuronales porque, a pesar de ser suficientemente sencillas para la
profundidad de un trabajo fin de grado, esperábamos que fueran suficientemente flexibles
para resolver satisfactoriamente el problema para cada robot. Además, tienen la ventaja
de ser suficientemente eficientes en su ejecución para poder utilizarlas operando en tiempo
real.
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 parámetros
especı́ficos de cada nodo. Para que la red pueda resolver un determinado problema, se
modifican estos parámetros de acuerdo a ciertos algoritmos, denominados algoritmos de
entrenamiento. De esta forma, la red puede “aprender” para adaptarse a resolver un
17
18 CAPÍTULO 2. DESARROLLO DE LA SOLUCIÓN
Ası́, el objetivo de nuestro software será conseguir obtener redes neuronales capaces de
predecir el comportamiento de cada robot, y utilizar éstas para obtener información sobre
su desempeño esperado, que proporcionaremos a un agente externo para que las controle.
Hay distintos tipos de redes neuronales dependiendo del número y distribución de sus
neuronas y de los enlaces entre ellas, y a su estructura se le denomina usualmente to-
pologı́a de dicha red. Podemos distinguir en ella tres tipos de nodos o neuronas: De
entrada, que reciben la información del exterior, de salida, que proporcionan sus resulta-
dos al exterior, y ocultas, que reciben y envı́an 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 función
de sus entradas queda determinada por variables denominadas pesos, relativos a cada uno
de sus enlaces.
Podemos ver gráficamente 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 está en
la capa n cuando el mı́nimo número de neuronas entre ésta y una neurona de entrada es
n. Dicho de otro modo, las neuronas de entrada se encuentran en la capa 0, las nneuronas
20 CAPÍTULO 2. DESARROLLO DE LA SOLUCIÓN
a las que se conectan éstas 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 topologı́as muy diversas, las más
comunes tienen tres capas: una de entrada, una capa oculta y una de salida, y no tienen
ciclos.
den resultados similares, y corremos el riesgo de que la elección de una u otra se deba
únicamente a los resultados de ese conjunto concreto de experimentos realizados, y ésa
no sea la tendencia general. Para evitarlo, debemos no tener en cuenta únicamente que
la media de unos resultados sea mayor que otra, sino que debemos establecer que esta
diferencia sea estadı́sticamente significativa.
Que un resultado sea estadı́sticamente significativo significa que podemos asegurar
con una cierta probabilidad, normalmente el 95 % ó 99 %, que el resultado obtenido no es
producto del azar. Es decir, que realmente una topologı́a es mejor que la otra, y aunque
realizáramos más experimentos es de esperar que se mantenga ese resultado. En el caso
de que la diferencia entre el uso de dos topologı́as no sea estadı́sticamente significativa,
elegiremos aquella que sea más sencilla (menor número de neuronas, menor número de
variables de entrada...).
Para determinar si efectivamente existe significancia estadı́stica en la diferencia en-
tre las medias de las dos series de experimentos debemos realizar un test estadı́stico
adecuado. El procedimiento y la base teórica de los mismos se detallan en la sección 3.4.
Para terminar, una vez elegida la topologı́a que utilizaremos, se procede al entrena-
miento de una red con dicha configuración, que será nuestra red final.
Los detalles técnicos del procedimiento de ambas fases puede encontrarse más detalla-
damente en la sección 3.2, en la que también se recoge el proceso completo de experimen-
tación con las distintas topologı́as y entrenamiento de la red final, ası́ como el proceso de
test de las redes resultantes, cuyo objetivo es tener una estimación del comportamiento
que tendrá la red cuando opere con casos nuevos.
No obstante, hay que tener en cuenta que modelizar la situación 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 dı́a de la semana o la hora en las que se realizó la operación, etc., y nos
interesarı́a 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 información
no relevante, y reducir la dimensión de la información en la medida de lo posible, es
decir, reducir el número de variables de entrada. Esto, además, permitirá mejorar los
resultados de las redes, que sólo recibirán la información relevante, y por tanto podrán
22 CAPÍTULO 2. DESARROLLO DE LA SOLUCIÓN
dar mejores resultados con una estructura menos compleja. Para esta etapa previa de
reducción de la dimensión de la entrada utilizaremos el algoritmo del análisis principal
de componentes (PCA, por sus siglas en inglés), que se detalla en la sección 3.3.
Por otra parte, una vez tenemos nuestra red entrenada, podemos ponerla a operar
en el mercado real y monitorizar su rendimiento. Además, estableceremos medidas para
controlar la precisión 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 sección 3.5.
Por último, y como resumen de todo lo anteriormente expuesto, tenemos que podemos
dividir nuestro proceso en las siguientes etapas principales: Obtención y tratamiento
de los datos, elección de la topologı́a de la red y entrenamiento, puesta en
marcha en el mercado real y monitorización y fiabilidad.
Un diagrama de estas etapas, con los productos obtenidos en cada una de ellas y las
técnicas utilizadas en cada fase, puede encontrarse en la figura 2.4.
Ası́, debemos definir en un primer lugar cómo modelizaremos la situación 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 situación
del mercado de manera diferente para cada uno de ellos. Por tanto, nuestro software nos
permitirá definir qué información 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 modelización del mercado diferente
para cada robot.
La información más básica que podemos utilizar para reflejar la situación del mercado,
que esperamos que sea relevante para nuestra predicción, son los datos relativos a la
divisa sobre la que opera el robot. Utilizaremos por tanto los datos sobre la cotización de
esta divisa en un intervalo de tiempo determinado anterior a la solicitud de apertura de
la operación. Éstos vienen agrupados según periodos de tiempo de distintas longitudes,
denominados velas. Es decir, una vela es la información agrupada de un determinado
periodo de tiempo de una divisa concreta, y tiene 4 atributos principales: El precio que
tenı́a la divisa al inicio del periodo, el que tenı́a al final del mismo, y el máximo y mı́nimo
precio alcanzado en éste.
Las velas pueden tener distintas longitudes, y en nuestro software utilizaremos princi-
palmente velas de 4 tipos: De 5 minutos, de 15 minutos, de 1 hora y de 1 dı́a.
Además de la información básica de las velas de la divisa en la que opera nuestro robot,
nuestro software permite añadir otra información adicional, como velas de otras divisas,
el dı́a de la semana o la hora a la que se realizó la operación, e incluso otros indicadores
macroeconómicos, como son el precio del petróleo o del oro.
Con estos últimos indicadores logramos que, pese a que el robot tiene una visión muy
local del mercado (opera con una divisa y utiliza únicamente las cotizaciones de ésta para
determinar su comportamiento), nuestro sistema lo controla utilizando información mucho
más 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 último, es importante resaltar que únicamente podremos utilizar información an-
terior al momento de apertura de la operación. Esto es ası́ debido a que las redes
se utilizarán finalmente para predecir el resultado de la operación antes de que se inicie,
por lo que evidentemente debemos utilizar únicamente información que vayamos a tener
disponible en ese momento.
A continuación, una vez elegida la información que queremos utilizar como entrada de
nuestro problema, podemos formar los casos de prueba a partir del histórico de operaciones
del robot, que nos servirán para entrenar la red.
Obtenemos ası́ un fichero con ejemplos de entrada y salida de nuestro problema, siendo
la entrada la modelización del mercado en el momento de apertura de una operación, y
la salida el resultado que tuvo ésta.
Aunque podrı́amos utilizar directamente este fichero para entrenar nuestras redes, en-
contramos que la entrada es demasiado compleja: Por una parte, hay una gran cantidad de
información, mucha de ella redundante o muy parecida, y por otra, como cada robot opera
en distintas situaciones, puede haber información que sea útil en unos robots y redundan-
te en otros, y no tenemos forma de saberlo a priori. Esta excesiva complejidad provoca
que la red tenga muchas más dificultades para aprender y generalizar correctamente el
problema, por lo que trataremos de reducirla.
24 CAPÍTULO 2. DESARROLLO DE LA SOLUCIÓN
Para ello, como comentamos en la sección anterior, emplearemos el algoritmo del Análi-
sis Principal de Componentes. Este algoritmo permite combinar las distintas variables
de entrada para mantener la información más importante, y descartar aquella que sea re-
dundante o poco significativa. Aplicando este proceso a nuestro conjunto de casos de
prueba anterior, logramos reducir en la mayorı́a de los casos de unas 150 ó 200 entradas, a
tan sólo 20 ó 25, lo que constituye una reducción de alrededor del 80 u 85 % en el número
de entradas.
Esto además permite que aunque añadamos información nueva que finalmente resulte
ser redundante, esto no repercutirá demasiado negativamente en los resultados finales,
puesto que será eliminada por este último procedimiento. Ası́, podemos añadir gran can-
tidad de información en un principio, y dejar que este paso la reduzca, eliminando la que
sea redundante o poco significativa.
Con todo esto, obtenemos finalmente unos casos de prueba preprocesados adecuados
para el entrenamiento de las redes en la siguiente fase.
La segunda modificación se refiere al criterio que utilizamos para elegir una u otra to-
pologı́a en la primera fase. Es común elegir criterios basados únicamente en la precisión
de la predicción, como la diferencia entre los valores predichos y los valores correctos, o
el error cuadrático medio (MSE). Sin embargo, debido al uso que se dará posteriormente
a las predicciones, ninguna de estas medidas resultaba adecuada. En concreto, estos mo-
delos 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 decisión entre elegir una u otra red, la segunda diferencia le
resultará mucho más relevante.
Por ello, decidimos estudiar una medida de evaluación de la red neuronal alternativa
para esta fase, diseñando otra más parecida al uso que daremos posteriormente a las
predicciones. En ella, supondremos que el agente externo elegirá para que operen todos los
robots para los que nuestra predicción sea positiva, es decir, todos aquellos que predigamos
26 CAPÍTULO 2. DESARROLLO DE LA SOLUCIÓN
que van a obtener ganancias. Ası́, simularemos qué hubiera ocurrido si un determinado
conjunto de operaciones se hubieran realizado bajo la supervisión de nuestro sistema, y
cuál habrı́a sido el balance total del robot en ese periodo, comparándolo con aquel que
habrı́a obtenido sin nuestra intervención. Es decir, tomamos la suma del balance obtenido
en todas las operaciones para los que la predicción de nuestra red es positiva, y la diferencia
de ésta con la suma del balance total de las operaciones elegidas será nuestra medida de
error para esa red.
Tras realizar diversos experimentos con las redes obtenidas utilizando este método y los
anteriores, comparamos sus resultados. De esta forma obtuvimos que las redes entrenadas
con las topologı́as elegidas utilizando esta última medida de error daban resultados más
precisos cuando las utilizábamos con datos que no hubieran sido utilizados ni para el
entrenamiento ni para la optimización de los robots. Por ello, decidimos utilizar esta
última medida de error descrita para nuestro sistema.
Tras todo lo anterior, y una vez elegida la topologı́a de la red, procedemos a la segunda
fase. En ella, entrenamos una única red final con esta configuración elegida, que será la
red final que utilizaremos como predictor para ese robot en nuestro sistema.
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 básicas.
La primera, utilizada antes de la implementación de los sistemas de estimación de
errores, consiste simplemente en dejar operar aquellos robots para los cuales nuestra pre-
dicción sea positiva. Es decir, permitir todas aquellas operaciones que predigamos que van
a resultar en beneficios.
La segunda estrategia, también bastante sencilla, pero realizada una vez incorporamos
el sistema de control del error, consiste en dejar pasar aquellas operaciones que, aún
contando con el error que estimemos en la predicción, sigan superando un cierto umbral.
Este umbral, en nuestro caso, lo ajustamos utilizando los resultados que tuvimos durante
el periodo en que la utilizábamos sólo la primera estrategia recién 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
Por otra parte, para realizar nuestras predicciones debemos obtener los datos del mer-
cado en tiempo real: Cotizaciones de todas las divisas en forma de velas, otros indicadores
como el precio del petróleo 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 información actualizada del mercado global.
La información se combina de forma que coincida con la modelización de la situación
del mercado que realizamos para cada robot en la fase de obtención de los casos de
entrenamiento. Además, le aplicamos los mismos pasos que realizamos para la obtención
de dichos casos, es decir, es análisis principal de componentes y la normalización.
Tras este preprocesamiento, podemos utilizar los datos resultantes como entrada de la
red asociada, que nos devolverá la predicción. Por último, obtenemos la fiabilidad asociada
en ese momento a esta red, y suministramos toda esta información a Zeus.
Sin embargo, si únicamente tuviéramos los robots operando en mercado real controlados
por nuestro sistema, sólo conocerı́amos los resultados de las operaciones que Zeus permi-
tiera realizar. No obstante, para actualizar las estimaciones de error de las redes debemos
conocer también los resultados finales que tendrı́an las operaciones cuya realización no se
permite.
Para ello, tendremos operando no sólo los robots con dinero real controlados por
nuestro sistema, sino también otra copia de cada uno de ellos operando en una cuenta
de simulación. Es decir, realizarán todas las operaciones que realizarı́an los robots reales,
pero sin invertir dinero real en ellas. Estos robots simulados también almacenarán 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 podrı́an 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 información en tanto de la
28 CAPÍTULO 2. DESARROLLO DE LA SOLUCIÓN
evolución 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
están funcionando bien y recortar las pérdidas.
Capı́tulo 3
Aspectos Técnicos
29
30 CAPÍTULO 3. ASPECTOS TÉCNICOS
Jmathplot ([11]): Es una conocida librerı́a open source de uso de gráficos en Java.
Proporciona funcionalidad para mostrar gráficos de diversos tipos en 2D y 3D de
forma sencilla. En nuestro caso la utilizaremos para la visualización de gráficas y
resultados, especialmente para la funcionalidad de nuestro software relacionado que
la monitorización y obtención de estadı́sticas.
Además, para algunas funcionalidades, en general aquellas que tienen que ver con la
persistencia de los datos de la propia aplicación se decidió no utilizar estas bases de datos.
En su lugar, se implementó una clase que utilizaba como medio para guardar datos un
fichero de texto de la que heredaron otras clases para datos especı́ficos: Información de los
ficheros y casos de pruebas introducidos, información de las redes entrenadas, estadı́sticas
de ejecución, almacenación y recuperación de las propias redes neuronales, etc. De esta
forma evitábamos sobrecargas las bases de datos de Talentum con más información, y a
la vez hacı́amos el programa mucho más portable, lo que nos resultaba útil por ser un
desarrollo experimental. También se han almacenado en ficheros (.csv) la información de
los históricos del mercado, de los que necesitamos gran cantidad de información, de forma
que su acceso fuera mucho más rápido.
Hay que tener en cuenta que este módulo no sólo debe permitir realizar el procesamiento
antes de entrenar la red, sino que además debe guardar la información 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 análisis principal y la
normalización con los mismos parámetros que utilizó para obtener los casos de prueba
con los que entrenamos la red.
Visualización de estadı́sticas.
Procesamiento de Datos
Contiene toda la lógica 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 históricos de operaciones, la obtención de datos del histórico del mercado, la
aplicación del análisis principal de componentes, la normalización de los datos... etc.
Además, permite almacenar tanto los ficheros en cada una de las etapas como los casos
de prueba procesados, junto con toda su información relacionada (ı́ndice al que se refieren,
datos que se han utilizado para modelizar la situación del mercado, etc.) para su uso en
otras etapas, en la sesión actual o en otra posterior.
Recordemos que esta parte del software también debe permitir el procesamiento de
nuevos datos en tiempo real, para poder introducirlos en la red una vez puesta a funcionar.
Podemos encontrar un diagrama de clases de todo ello en la figura 3.2. En él, Network-
Controller es el controlador principal, y TrainNetworkControllerViewer es la clase princi-
pal de la vista. De nuevo, NetworkFilesTable es una tabla que muestra la información de
las redes en nuestro sistema, NetworkFile representa esta información, y NetworksData-
base almacena tanto la información como las propias redes.
Además, DividedSupervisedSets permite dividir los casos de prueba convenientemente
en entrenamiento, validación 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 33
Visualización de Estadı́sticas
Por último, esta parte implementa algunas funcionalidades de visualización de datos y
seguimiento en tiempo real de la ejecución de nuestro software. Permite obtener gráficas
con las predicciones de nuestras redes en un momento determinado, ası́ como ver, para
cada operación que hubieran realizado los robots sin nuestro sistema, si la hemos realizado
3.1. SOFTWARE DESARROLLADO 35
o no, cuál era nuestra predicción y fiabilidad en ese momento, y el resultado final que ha
tenido.
Además, mantiene registro de todos estos datos para su posterior consulta en ficheros
de texto. Podemos encontrar este último diagrama de clases en la figura 3.4. Una vez
más, 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 información
de las operaciones de los robots, que es obtenida de SignalsDatabase y de sus registros
internos de las predicciones realizadas. Por último, NetworkPlot permite mostrar la gráfica
de predicciones de una red concreta en un intervalo de tiempo determinado, información
que es guardada en StatFileResults. PlotUtils es una clase auxiliar que maneja la creación
de gráficas.
Ası́, el menú inicial, que se muestra en la figura 3.5, permite abrir dichos paneles de
control. En ellos es en los que se realiza la lógica real de uso de la aplicación.
Manage Data
Si elegimos la opción “Manage Data”, se desplegará el panel de la figura 3.6 que permite
añadir nuevos robots con su histórico de operaciones y procesarlos hasta obtener los casos
de prueba. Ası́, este panel provee funciones para: añadir nuevos robots al sistema, elegir
las variables que utilizaremos para modelar la situación del mercado (que será la entrada
36 CAPÍTULO 3. ASPECTOS TÉCNICOS
Administrate Networks
Run Networks
El tercer panel, desplegado al elegir “Run Networks” permite poner las redes entrenadas
anteriormente en ejecución. Tras esto, automáticamente harán predicciones sobre su robot
asociado que estará ejecutándose en mercado real, y las almacenarán 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 ejecución,
cons us últimas predicciones y su fiabilidad, e información sobre si su robot asociado
está operando. Además, permite activar y desactivar las redes en cualquier momento.
View Stats
Por último, al pulsar “View Stats” se despliega el cuarto panel, que contiene varias
opciones de visualización de estadı́sticas. Por ejemplo, podemos consultar las operaciones
realizadas por los robots en un intervalo dado, o una gráfica con las predicciones de una
red concreta en un cierto periodo de tiempo. Un ejemplo de visualización de este panel
se encuentra en la figura 3.9
Ası́, incluye una tabla que muestra las últimas operaciones realizadas con información
como si nuestro sistema la realizó o no, y cuál era la predicción y fiabilidad en ese momento,
y opciones para el filtrado de éstas y la visualización de gráficas sobre las predicciones de
una red concreta.
para los que no ha sido entrenada. Uno de los posibles motivos de que ocurra esto es que
la red ha quedado entrenada demasiado especı́ficamente para resolver los casos concretos
de entrenamiento, y por ello no es capaz de general los demás casos. A este problema se
le conoce como overfitting o sobreentrenamiento.
Para resolver este problema, y poder conocer cuándo debemos finalizar el entrenamien-
to, debemos saber cuándo 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 ba-
se a ciertos casos utilizará únicamente los casos de training, y utilizaremos los casos de
validación para detectar cuándo debemos detectar el proceso. Normalmente la división
en los subconjuntos de training y validation se realiza utilizando un 10 ó 20 % de casos
aleatoriamente elegidos para validación, y los restantes para entrenamiento.
Al estar entrenando la red para esos casos, el error que cometemos ajustando los
casos de training decrecerá con el tiempo. Sin embargo, al no estar utilizando para el
entrenamiento los casos de validation, tenemos que la red se comportará con éstos de la
misma forma que lo hará para los casos cuya salida correcta no conocemos, que son los que
queremos resolver. Por tanto, esperamos que el error que cometa en estos últimos decrezca
inicialmente con cada epoch, mientras la red se ajusta correctamente al problema, y se
incremente conforme la red se ajusta demasiado especı́ficamente para los casos de training,
fallando al generalizar el problema. Puede verse un ejemplo de la evolución esperada de
3.2. DETALLES TÉCNICOS DEL ENTRENAMIENTO DE REDES 39
Sin embargo, como hemos visto en la sección anterior, para evitar el problema del over-
fitting debemos tener un criterio de detención 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 pri-
mero para ajustar los parámetros y el segundo para detectar cuándo empieza a producirse
1
Para evitar ambigüedades 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 inglés) al
subconjunto de éste que se utiliza para ajustar los parámetros de la red durante el proceso.
40 CAPÍTULO 3. ASPECTOS TÉCNICOS
overfitting. Además, tenemos que debemos hacer varios experimentos para cada red, nor-
malmente 10 ó 20, y queremos que éstos cubran la mayor cantidad de situaciones posibles.
Para ello, en lugar de utilizar siempre la misma división 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 expe-
rimento uno de ellos para validación, y los K − 1 restantes para entrenamiento. Ası́, si
queremos realizar 10 experimentos para cada topologı́a y utilizamos 10-crossvalidation,
tenemos que utilizamos un 10 % de los datos para validación, y que todos los casos se
usan una ú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 querrı́amos utilizar todos los casos posibles para su entrenamiento, pero en-
tonces tendrı́amos que emplear otro método de detención, puesto que ya no utilizarı́amos
conjunto de validation. Este nuevo criterio de detención consiste en calcular el número
medio de epochs que se produjeron hasta la detención del entrenamiento en los experi-
mentos realizados para esta topologı́a en la primera fase. Ası́, podemos utilizar todos los
datos disponibles para entrenamiento para ajustar los parámetros, sin tener que dividirlo
en los subconjuntos de training y validation.
Además, existe en realidad otra etapa, que en el resto del documento tan sólo se nombra
brevemente, denominada fase de test. El objetivo de esta etapa es obtener una estimación
de cómo funcionará la red recién entrenada con datos nuevos que no han sido usados ni
para el entrenamiento ni para la elección de la topologı́a. Para ello, de nuestro conjunto
total original de casos de prueba, se suelen reservar un 20 ó 30 % de los datos para esta
fase.
Ası́, podemos utilizar estos datos no vistos para ejecutar la red, y calcular medidas
del error para éste. Estos errores serán presumiblemente similares a los que tendremos
cuando ejecutemos la red para casos nuevos reales.
Para concluir, es relevante aclarar que para la implementación del software hemos uti-
lizado un tipo de redes neuronales conocidas como Multi Layer Perceptron (MLP). Por
último, como función de activación (una función empleada internamente en la red neuronal
en las conexiones entre neuronas) hemos utilizado la tangente hiperbólica.
O equivalentemente:
máx uT Σu
u:||u||2 =1
Con Σ = n1 nj=1 (xj − x̄)(xj − x̄)T la matriz de covarianzas. Este problema, que como ya
P
hemos comentado consiste en el cálculo del cociente de Rayleigh de una matriz simétrica,
tiene solución conocidas. Para su resolución, basta diagonalizar la matriz de covarianzas
Σ y escoger como dirección u el vector propio correspondiente al mayor valor propio.
Es decir, la suma de los valores propios de la matriz de covarianzas. Por tanto, si pro-
yectamos 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]
λ1 + ... + λk
>= 0,95
λ1 + ... + λn
Esta reducción es útil, por ejemplo, para aumentar el rendimiento de cálculo del software
que utilizará dichas entradas. Además, normalmente mejora incluso la capacidad de éste de
generalizar un problema dado, debido a que ya habremos eliminado parte de la información
redundante o no útil.
Normalmente, este método nos permite reducir sustancialmente el número de variables
de entrada a la vez que mantenemos el 95 ó incluso el 99 % de la varianza.
Antes de explicar los tipos de tests estadı́sticos e introducir con especial profundidad
aquellos que utilizaremos en este trabajo concreto, definimos algunos conceptos previos:
Definición 3.4.1. Definimos la hipótesis nula como aquella hipótesis que queremos con-
trastar, mientras que la hipótesis alternativa es aquella contra la que queremos contras-
tarla.
Definición 3.4.2. Sea X una variable aleatoria, se dice que el vector aleatorio de di-
mensión n, (X1 , ..., Xn ) es una muestra aleatoria simple (m.a.s.) de tamaño n de X, si
para cada variable Xj ésta sigue la misma distribución que X y las variables Xj son
independientes entre sı́. [6]
3.4. TESTS ESTADISTICOS 43
Cuando queremos realizar un contraste de hipótesis, se debe fijar cuál es el mayor error
de tipo I que estamos dispuestos a cometer, y con éste 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ñan los contrastes de forma que la probabilidad α (de rechazar la
hipótesis nula cuando es verdadera) sea el 5 % (0.05). A la variable α también se le conoce
como nivel de significación del test.
Veremos a continuación dos definiciones adicionales antes de pasar a estudiar el con-
traste que utilizaremos en nuestro trabajo:
Definición 3.4.4. Sea (X1 , ..., Xn ) una m.a.s. de X, llamaremos estadı́stico a cualquier
vector aleatorio (k-dimensional) h(X1 , ..., Xn ), donde h : Rn − > Rk es una función me-
dible Borel.
Definición 3.4.5. Sea X una variable aleatoria con distribución Fρ con parámetro ρ, 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 parámetro ρ si
P (i(X) ≤ ρ ≤ s(X)) ≥ 1 − α
2. Establecemos las asunciones para la muestra estudiada. Por ejemplo, las distribu-
ciones de éstas o si son independientes.
6. Se calcula el valor tobs del estadı́stico T para los resultados observados de los expe-
rimentos.
X̄1 − X̄2
t= q (3.1)
sX1 X2 · n2
donde X̄1 y X̄2 son las medias de las dos muestras experimentales, y
r
1 2
sX1 X2 = (s + s2X2 )
2 X1
Pn
siendo s2X1 y s2X2 son los estimadores de las varianzas de las muestras, es decir, s2X =
2
i=1 (xi −x̄)
n
Por ello, procedimos a diseñar 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, cam-
biando de una semana a la siguiente. Por ello, necesitábamos cambiar el error estimado de
forma muy rápida, basándonos sobre todo en las últimas predicciones. Es decir, utilizando
principalmente en los resultados de las últimas 3 ó 4 operaciones, tenı́amos que estimar
el grado de fiabilidad de la predicción que nos dé la red en el momento actual.
Cuando en un principio se planteó el desarrollo de un sistema de estimación de erro-
res, una de las soluciones que se planteó fue utilizar técnicas de Inferencia Estadı́stica,
empleando intervalos de confianza. Sin embargo, debido a la limitación de basarnos casi
únicamente en las últimas 3 ó 4 operaciones, esta aproximación era inviable. Necesitába-
mos otra aproximación que nos permitiera obtener conclusiones con muy pocos datos, y
no como un promedio a largo plazo.
Nuestro objetivo en esta sección es, por tanto, exponer el desarrollo que nos llevó al
sistema actual de estimación el error para las predicciones de beneficio de una red neu-
ronal, basándonos únicamente en sus resultados en las últimas 3 ó 4 operaciones. Esto
permitirá a quien utiliza esta predicción juzgar mejor su decisión de elegir unos u otros
robots en función del riesgo que esté dispuesto a correr. Por ejemplo, si la predicción
es que ganará poco y el error que esperamos es grande, es poco probable que se quiera
utilizar este robot, mientras que si la predicción es que ganará 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 básicas
distintas, y tras cierta reflexión, resultaron ser de alguna forma similares a casos concretos
de una solución más general, que exponemos en último lugar.
Partimos de una variable R que refleja el valor real del beneficio que obtiene el robot al
realizar una cierta operación, 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 relación entre ellos, que será nuestra medida del error cometido. Una primera
aproximación planteada consiste en expresar el error cometido como un sumando, es
decir, suponer que la función P aproxima a R salvo un determinado error que será la
diferencia entre ambas:
R=P +
con la función que queremos estimar, y despejando tenemos que = R − P . Dado
que queremos utilizar los últimos 3 ó 4 valores para estimar nuestro error, podrı́amos
simplemente tomar el promedio del valor absoluto de esta resta para esos valores, y uti-
lizarlo como
P4
estimación del error de la predicción siguiente. Es decir, podrı́amos definir
ei
err = i=1 4
y estimar que dada una nueva predicción P , el valor de R estará en el
intervalo [P − err, P + err], por lo que es probable que el resultado de la operación sera
46 CAPÍTULO 3. ASPECTOS TÉCNICOS
R > P − err. Ası́, una posible estrategia serı́a elegir aquellos robots con mayor valor para
P − err, o aquellos tales que P − err > 0. Esta estrategia básica se puede mejorar estable-
ciendo este umbral de forma más adecuada. Para ello, podemos simular los resultados que
habrı́amos 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.
Además, también podemos mejorar la forma de calcular err, puesto que utilizando el
promedio de las 4 últimas operaciones, damos la misma importancia a la primera que a
la última operación que consideremos, y a partir de esa no tenemos en cuenta ninguna
otra. Parece más razonable que el peso de cada operación en la estimación final sea
proporcional a su antiguedad. Para ello, cada vez que recibamos una nueva operación a
tener en cuenta, disminuiremos el peso que tenı́an las anteriores y añadiremos esta última
con mayor importancia. Ası́, si errn es el error que tenı́amos en un momento dado y nos
llega otro resultado a tener en cuenta, el nuevo error errn+1 se calculará según:
0 = α · + (1 − α) · n
Con un 0 < α < 1 adecuado. Este α determina cómo se reparte el peso entre las ope-
raciones anteriores. Cuanto mayor sea, más importancia daremos al nuevo resultado que
acabamos de recibir, y que por tanto será el más reciente. Este α puede determinarse con
el mismo procedimiento que expusimos para elegir el umbral anterior: Basta seleccionar
varios posibles valores, simular qué hubiera ocurrido en un intervalo de tiempo pasado, y
elegir aquel valor de α que maximice nuestras ganancias.
R=P ·f
Y de igual forma que antes, podemos despejar f según f = PR , obteniendo un valor del
mismo para cada resultado que tengamos. A continuación, de forma análoga al método
anterior, podemos obtener un valor F que constituya un promedio ponderado de los fac-
tores f de los resultados pasados. Ası́, podemos utilizarlo para estimar el error esperado,
asumiendo que dada una predicción nueva P 0 , el resultado que esperamos será aproxima-
damente R0 = P 0 · F . Con ello, una estrategia básica podrı́a ser elegir aquellos robots para
los que nuestra predicción sea P · f > U con U un umbral adecuado.
Pero como hemos adelantado al principio, planteados de la manera adecuada, los dos
métodos anteriores son en realidad similares a casos particulares de un método más ge-
neral. La clave para ver la generalización 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 método, en el que tratábamos de ajustar R por P +, consiste
en realidad en un ajuste según una recta con pendiente 1 y ordenada en el origen . Por
otra parte, el segundo método, 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 método general que resulta lógico plantearse a continuación es precisamente
el ajuste de mı́nimos cuadrados, en el que aproximamos una serie de puntos en el
plano por una recta. Esta recta será aquella que minimice la suma de los cuadrados de
las diferencias entre los valores de nuestro ajuste y los reales. Además, para continuar con
la idea de darle más importancia a las operaciones más recientes, emplearemos el método
algo más complejo del ajuste de mı́nimos cuadrados ponderado. Esta variación del
método permite ajustar el peso que tendrá cada punto en el cálculo del error que queremos
minimizar. Utilizaremos como peso para los puntos αn , con n el número de operaciones
entre la actual y aquella a la que se refiere el punto. Este α puede ajustarse de la misma
forma que en los métodos 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 operación con predicción P
será R = P · m + n. Ası́, una posible estrategia serı́a elegir aquellos robots cuya predicción
cumpla que P · m + n > U para U un umbral ajustado.
Por ú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 qué estar relacionadas entre sı́.
Con estos métodos 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 método. Los resultados del sistema tras la implementación
del método final anterior se exponen en la sección 4.2.
48 CAPÍTULO 3. ASPECTOS TÉCNICOS
Capı́tulo 4
Resultados y Conclusiones
Aunque nuestro sistema está pensado para proporcionar información a un agente ex-
terno 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ún no
estaba desarrollado, únicamente contábamos con la predicción de la red asociada a cada
robot. Ası́, nuestra estrategia consistió en elegir para operar en mercado a todos aquellos
robots cuya predicción 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 pérdidas.
Ası́, podemos ver que el balance total que habrı́an obtenido los robots hubiera sido
de -235.51$, mientras que los robots con nuestro sistema pierden 72.20$ menos, es decir,
49
50 CAPÍTULO 4. RESULTADOS Y CONCLUSIONES
Cuadro 4.1: Balance total de las 4 semanas y total. Software sin fiabilidad.
-163.31$. Lo que es más, ú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, está fuera de nuestro control y no es
nuestra responsabilidad, podrı́amos pensar que los resultados obtenidos son satisfactorios.
No obstante, un estudio algo más detallado muestra que no es ası́. Es importante
resaltar que, como puede verse en la tabla 4.2, todas las semanas la proporción de ope-
raciones positivas que nuestro sistema deja pasar es superior la proporción de operaciones
negativas, lo cual sı́ es sin duda un dato muy positivo.
Sin embargo, si observamos las columnas de proporción vemos que los resultados no son
buenos. Éste será el dato que nos indicará en realidad si nuestro sistema está 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 pérdidas producidas por los robots que se
realizan en nuestro sistema es superior al porcentaje de ganancias que se producen. Esto
significa que si construyéramos un sistema que dejara operar a mercado aleatoriamente el
60 % de las operaciones que los robots solicitaran, estadı́sticamente deberı́a mantener el
60 % de las ganancias (más que nuestro sistema) y como consecuencia tener únicamente
el 60 % de las pérdidas (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 más pérdidas que ganancias, por lo que cualquier sistema que evite que
una cierta cantidad de operaciones se realicen (incluso si las elige al azar) mejorarı́a 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). Además,
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 pudiéramos detectar a tiempo en qué momentos (o semanas) nuestro sistema y
nuestras redes están fallando en sus predicciones deberı́amos mejorar sustancialmente
nuestros resultados. Esto es precisamente lo que perseguimos con la implementación del
sistema de fiabilidad y control de errores que desarrollamos e implementamos como parte
del prototipo final.
Adicionalmente, añadimos también 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 después de lo que lo
harı́a sin nuestra intervención, por lo que los resultados de una “misma operación” con y
sin la supervisión de nuestro software pueden ser distintas. Es por eso, por ejemplo, que
un robot que haya realizado una única operación con y sin nuestro sistema puede tener
balances ligeramente diferentes.
52 CAPÍTULO 4. RESULTADOS Y CONCLUSIONES
Cuadro 4.3: Balance total desglosado de la semana 2. Proporción de operaciones con Red
/ sin Red.
4.1. RESULTADOS DEL PROTOTIPO INICIAL 53
Cuadro 4.4: Balance total desglosado de la semana 4. Proporción de operaciones con Red
/ sin Red.
54 CAPÍTULO 4. RESULTADOS Y CONCLUSIONES
Los resultados del sistema tras 3 semanas de ejecución (del lunes 10/08/2014 al domingo
31/08/2014) son los que se detallan en esta sección. Al igual que en la sección anterior,
realizaremos la comparativa entre los resultados obtenidos con nuestro sistema y aquellos
que los robots habrı́an obtenido sin él.
Nos centraremos principalmente en las mismas métricas: El balance total de cada
semana y desglosado por robot, los balances positivo y negativo y número de operaciones
positivas y negativas. Además, volveremos a reflejar la proporción entre los balances y
número de operaciones que se realizan con nuestro sistema frente a los totales que se
producirı́an sin nuestra intervención. Esperamos que, si nuestro sistema funciona bien,
la proporción de balance y operaciones positivas que se realizan con nuestro sistema sea
siempre mayor que la proporción balance y operaciones negativas.
En la tabla 4.5 podemos encontrar los balances totales comparados de las 3 semanas,
y el balance final total. Además, 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 realizarı́a la totalidad de los robots si operaran de forma independiente.
También encontramos en esta tabla, al igual que en la sección anterior, la proporción
entre los resultados de ambos tipos.
Por último, en la tabla 4.7 podemos encontrar los balances finales y número de opera-
ciones positivas y negativas que realiza cada uno de los robots utilizados. Como podemos
ver, todos los resultados en este caso son mucho más favorables que en la sección anterior,
en concreto, podemos citar los siguientes:
4.2. RESULTADOS FINALES 55
Cuadro 4.5: Balance total de las 3 semanas y total. Software sin fiabilidad.
Balance Positivo Proporción Balance Negativo Proporción
Semana 1 138.63 / 154 0.90 -144.85 / -298.9 0.48
Semana 2 128.6 / 210.18 0.61 -231.25 / -439.4 0.53
Semana 3 155.66 / 265.12 0.59 -115.9 / -287.87 0.40
TOTAL 422.89 / 629.30 0.67 -492 / -1026.17 0.48
Ops. Positivas Proporción Ops. Negativas Proporción
Semana 1 16 / 23 0.70 11 / 22 0.5
Semana 2 19 / 29 0.66 15 / 26 0.57
Semana 3 23 / 38 0.61 6 / 30 0.2
TOTAL 58 / 90 0.64 32 / 78 0.41
Todas las semanas los resultados de balance total de nuestro sistema son mejores
que los obtenidos sin su utilización.
Todas las semanas la proporción de operaciones positivas respecto del total ha sido
superior a la proporción de operaciones negativas.
Todas las semanas la proporción de balance positivo respecto del total ha sido
superior a la proporción 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 sólo en 8 los resultados han empeorado. Lo que es más, la media
de mejora para esos 13 son 34$, mientras que la media de empeoramiento para los
otros 8 es de sólo 15$.
Además, como resultados finales obtenemos que a pesar de que los robots en general han
funcionado mal durante este periodo, y el balance total de éstos operando independien-
temente ha sido de -396.87$, el balance final total de nuestro sistema ha sido de 69.11$.
Lo que es más importante, nuestro sistema ha realizado 58 de 90 operaciones positivas (el
64 %) y tan sólo 32 de 78 operaciones negativas (el 41 %).
Además, 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 CAPÍTULO 4. RESULTADOS Y CONCLUSIONES
Todo esto indica que, finalmente, hemos logrado que nuestro software realice las pre-
dicciones con suficiente precisión, y hemos podido utilizar esta información para manejar
los robots de forma conveniente, mejorando significativamente sus resultados.
4.3. Conclusiones
Recordemos que nuestro objetivo inicial era aplicar técnicas de inteligencia artificial
para resolver el problema real al que se enfrentaba la empresa Talentum. Ésta tenı́a miles
de robots programados y configurados, y su problema consistı́a en elegir cuáles de ellos
tener operando en cada momento. Para ello, planteamos que nuestro objetivo final serı́a
desarrollar un sistema que diera suficientes datos para tomar esta decisión.
Por otra parte, el sistema actual aún se puede mejorar. Como trabajo futuro propone-
mos:
El reentrenamiento automático de las redes cada cierto tiempo, para utilizar los
datos nuevos.
El entrenamiento de las redes asignando más peso a los casos obtenidos de opera-
ciones realizadas más 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 más complejas para el agente externo utilizando la informa-
ción proporcionada.
58 CAPÍTULO 4. RESULTADOS Y CONCLUSIONES
Utilizar otros factores de medida del rendimiento de un robot aparte del beneficio
total esperado en el caso de realizar una operación, como una estimación del beneficio
en función del tiempo que esté operando.
Mejorar el control de errores cometido por las redes. Podrı́a utilizarse para ello, por
ejemplo, en lugar del ajuste a un recta, otra red neuronal para intentar aproximar
la función de error.
Entrenar las redes penalizando menos las subestimaciones que las sobreestimaciones.
Bibliografı́a
[1] Bolsa, Mercados y Técnicas de Inversión, Francisco López Lubián, Pablo Garcı́a
Estévez.
[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).
[6] Apuntes de la asignatura Inferencia Estadı́stica, Félix Luis Belzunce Torregrosa, Jose
Marı́a Ruiz Gómez. Universidad de Murcia. http://aulavirtual.um.es
[9] Weka 3: Data Mining Software in Java. Machine Learning Group at the University
of Waikato. http://www.cs.waikato.ac.nz/~ml/weka/
[11] Jmathplot: Easy Java scientific plot for math engineering. http://code.google.
com/p/jmathplot/
[14] Java SE Technologies - Database - The Java Database Connectivity (JDBC), Oracle,
http://www.oracle.com/technetwork/java/javase/jdbc/index.html
59