Story Transcript
An´alisis t´ecnico de mercados financieros basado en t´ecnicas de inteligencia artificial ´ Angel Pina Canelles 5 de septiembre de 2014
´Indice general 0.1. Abstract . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 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 1.1.2. Los Principios y M´etodos del An´alisis T´ecnico 1.1.3. Algunas T´ecnicas de An´alisis Chartista . . . . 1.1.4. Algunas T´ecnicas del An´alisis de Osciladores . 1.2. Traders Autom´aticos y Talentum . . . . . . . . . . . 1.3. Problema Propuesto . . . . . . . . . . . . . . . . . . 2. Desarrollo de la Soluci´ on 2.1. Soluci´on Propuesta . . . . . . . . . . . . . . . 2.1.1. Visi´on General . . . . . . . . . . . . . 2.1.2. Redes Neuronales como Predictores . . 2.1.3. El Procedimiento Completo . . . . . . 2.2. Etapas del Proceso . . . . . . . . . . . . . . . 2.2.1. Obtenci´on y Tratamiento de los Datos 2.2.2. Entrenamiento de Redes Neuronales . . 2.2.3. Puesta en Marcha a Mercado Real . . 2.2.4. Monitorizaci´on y Fiabilidad . . . . . . 3. Aspectos T´ ecnicos 3.1. Software Desarrollado . . . . . . . . . . . . . . 3.1.1. Librerias Utilizadas . . . . . . . . . . . 3.1.2. M´odulos Desarrollados . . . . . . . . . 3.1.3. Estructura General . . . . . . . . . . . 3.1.4. Interfaz de Usuario . . . . . . . . . . . 3.2. Detalles T´ecnicos del Entrenamiento de Redes 3.2.1. El Problema del Overfitting . . . . . . 3.2.2. El Proceso Completo de Entrenamiento 3.3. An´alisis de Componentes Principales . . . . . 3.4. Tests Estadisticos . . . . . . . . . . . . . . . . 3.5. Medidas de Error y Fiabilidad . . . . . . . . . 3
. . . . . . . . .
. . . . . . . . . . .
. . . . . . . . .
. . . . . . . . . . .
. . . . . . . . .
. . . . . . . . . . .
. . . . . . . . .
. . . . . . . . . . .
. . . . . . .
. . . . . . . . .
. . . . . . . . . . .
. . . . . . .
. . . . . . . . .
. . . . . . . . . . .
. . . . . . .
. . . . . . . . .
. . . . . . . . . . .
. . . . . . .
. . . . . . . . .
. . . . . . . . . . .
. . . . . . .
. . . . . . . . .
. . . . . . . . . . .
. . . . . . .
. . . . . . . . .
. . . . . . . . . . .
. . . . . . .
. . . . . . . . .
. . . . . . . . . . .
. . . . . . .
. . . . . . . . .
. . . . . . . . . . .
. . . . . . .
. . . . . . . . .
. . . . . . . . . . .
. . . . . . .
. . . . . . . . .
. . . . . . . . . . .
. . . . . . .
. . . . . . . . .
. . . . . . . . . . .
5
. . . . . . .
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
4
´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.
5
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: 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
6
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 doesn’t 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
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 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 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
´INDICE GENERAL
Cap´ıtulo 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 an´alisis de los mercados financieros, o an´alisis burs´atil, consiste en el estudio de los activos del mercado financiero. Su objetivo consiste en obtener informaci´on anticipada sobre la evoluci´on de sus cotizaciones, de forma que se puedan realizas operaciones de compra y venta en bolsa que arrojen beneficios. El contenido de esta secci´on est´a basado principalmente en [1]. El an´alisis de los mercados se puede dividir en dos grandes ramas principales: El an´alisis fundamental y el an´alisis t´ecnico. El an´ alisis fundamental se basa en la creencia de que el mercado tiene una eficiencia d´ebil, es decir, que el precio de las acciones no es representativo de su valor. El analista utiliza toda la informaci´on a su alcance sobre la empresa para realizar una estimaci´on del precio que considera correcto para las acciones de la misma, y realizar una compra o una venta seg´ un piense que ´estas est´an infravaloradas o sobrevaloradas. Realmente no hay una forma completamente objetiva de valorar una acci´on, y por lo tanto varios analistas pueden llegar a distintos resultados, concluyendo uno de ellos que la acci´on est´a infravalorada y el otro que est´a sobrevalorada. Esto es l´ogico, por otra parte, ya que para que alguien pueda comprar una acci´on otra persona debe querer venderla. El an´ alisis t´ ecnico, por el contrario, no plantea si las acciones est´an correctamente valoradas, sino que busca patrones de comportamiento en la cotizaci´on de las acciones, bas´andose en la historia de comportamientos de ´estas, y trata con ellas de predecir movimientos futuros para obtener beneficios. El an´alisis t´ecnico es un an´alisis m´as gr´afico, visual, y que se ayuda de unos indicadores u osciladores que proporcionan informaci´on sobre tendencias. Aunque se utilizan diversas herramientas, es especialmente com´ un el uso de gr´aficos que reflejen los movimientos de las cotizaciones. Al igual que ocurr´ıa en el an´alisis fundamental, no se trata de una ciencia exacta, y ante los mismos datos dos analistas pueden emitir opniniones contrarias. 9
CAP´ITULO 1. EL PROBLEMA
10
Podr´ıa decirse que el an´alisis t´ecnico es un an´alisis para el corto plazo mientras que el an´alisis 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´on 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 an´alisis t´ecnico trata de sacar partido. De hecho, a menudo se combinan ambos an´alisis: El an´alisis fundamental indica qu´e t´ıtulos hay que comprar y cu´ales hay que vender, mientras que el an´alisis t´ecnico muestra el momento exacto para realizar dicha compra o venta.
1.1.2.
Los Principios y M´ etodos del An´ alisis T´ ecnico
El an´alisis t´ecnico, 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 est´a 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 b´asico del an´alisis fundamental, y asume que las acciones no est´an sobrevaloradas ni infravaloradas, sino que reflejan su valor exacto. La segunda refleja que el mercado se mueve por tendencias m´as largas o m´as cortas, y la tercera premisa establece que lo que ocurri´o en el pasado tiende a repetirse, y que por tanto podemos usar los datos de ´este para predecir los futuros. Los m´etodos del an´alisis t´ecnico pueden dividirse en dos grandes grupos: El an´alisis chartista y el an´alisis por osciladores. El chartismo es un sistema basado u ´nicamente en el estudio de los gr´aficos. Supone que los movimientos de los precios son debidos a una combinaci´on de expectativas y sentimientos de los inversores, y que ´estos actuar´an 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´alisis de osciladores, por otro lado, utiliza ecuaciones matem´aticas para determinar se˜ nales de compra o venta en los gr´aficos, utilizando como variable principal las cotizaciones de los precios. En las siguientes dos secciones se establecen ejemplos de uno y otro tipo de an´alisis.
´ 1.1. EL ANALISIS DE LOS MERCADOS FINANCIEROS
1.1.3.
11
Algunas T´ ecnicas de An´ alisis Chartista
Un ejemplo de an´alisis chartista es establecer que el mercado, respecto a un determinado t´ıtulo, puede encontrarse en una tendencia alcista o bajista. As´ı, bas´andonos en los comportamientos de la cotizaci´on en el pasado para situaciones similares, podemos establecer que pasar´a determinadas fase prefijadas. Por ejemplo, en el caso de encontrarnos con un t´ıtulo con una tendencia alcista (Figura 1.1) podemos distinguir las siguientes tres fases: Fase de Acumulaci´on. El an´alisis fundamental establece predicciones de bajada y los inversores venden sus acciones al no ver una rentabilidad satisfactoria. Sin embargo, los operadores de Bolsa con m´as informaci´on comienzan a comprar acciones lentamente (a acumularlas) y el recorrido del precio es horizontal con una ligera tendencia alcista. Fase de Expansi´on. Se confirma la mejora de los datos, que llegan al p´ ublico general, y se produce la compra masiva de t´ıtulos, por lo que se eleva r´apidamente su cotizaci´on y produciendo altas rentabilidades, que a su vez motiva de nuevo la compra. Fase de Distribuci´on. El p´ ublico 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˜ no 1998. [1]
CAP´ITULO 1. EL PROBLEMA
12
Y de la misma forma, una vez estabilizada su cotizaci´on, puede producirse a continuaci´on una tendencia bajista, que de nuevo podemos dividir en tres fases principales (Figura 1.2): Fase de Distribuci´on. 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 P´anico. Cuando se percibe el efecto de las ventas, comienza un p´anico 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 Consolidaci´on. 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 t´ecnicas de an´alisis chartista podr´ıa decidir los momentos adecuados para comprar y vender sus t´ıtulos obteniendo altas rentabilidades.
1.1.4.
Algunas T´ ecnicas del An´ alisis de Osciladores
El ejemplo m´as sencillo de oscilador (y uno de los m´as utilizados) es la media m´ ovil. La media m´ovil de un periodo es el promedio de los precios de un determinado t´ıtulo
´ 1.1. EL ANALISIS DE LOS MERCADOS FINANCIEROS
13
durante ese periodo. Al suavizar la curva de precios, constituye una forma m´as sencilla de observar las tendencias del mercado. Adem´as, una t´ecnica para obtener se˜ nales de compra o de venta ser´ıa observar cu´ando la gr´afica de la cotizaci´on del valor corta la gr´afica formada por la media m´ovil, lo que indicar´a que el mercado est´a sufriendo una tendencia bajista o alcista a corto plazo. Por ejemplo, si una cotizaci´on ascendente corta la media m´ovil significa que el precio ha ascendido de forma m´as r´apida de lo normal, por lo que es de suponer que nos encontramos ante una tendencia alcista y ´esta seguir´a 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´oviles de 14 d´ıas (l´ınea continua) y de 150 d´ıas (l´ınea discontinua). As´ı, cuando la cotizaci´on corta la media que usemos como referencia, se producir´a una orden de compra (se˜ naladas con un 1) o una orden de venta (se˜ nalada con un 2).
Figura 1.3: Medias M´oviles: Cotizaci´on del BBVA durante el a˜ no 2000. Medias m´oviles de 14 d´ıas (l´ınea continua) y de 150 d´ıas (l´ınea 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 m´etodo, existen varias modificaciones. Por una parte, tomar medias m´oviles de periodos m´as largos o m´as peque˜ nos var´ıa el riesgo y la rentabilidad esperada: Tomando medias m´oviles m´as largas las tendencias que detectemos ser´an m´as seguras pero de menor rentabilidad que con medias m´oviles m´as cortas. Existen por otra parte muchas variaciones y mejoras a este m´etodo, que van desde el uso de varias medias m´oviles simult´aneamente (para detectar por ejemplo los cortes entre ellas en lugar de con la cotizaci´on) hasta otras formas de calcular estas medias, dando por ejemplo m´as importancia a las cotizaciones m´as recientes.
14
CAP´ITULO 1. EL PROBLEMA
Existen otras t´ecnicas m´as complejas basadas en ideas matem´aticas, 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´on normal est´a comprendida entre la media menos tres veces la desviaci´on t´ıpica y la media m´as tres veces la desviaci´on t´ıpica. Por tanto, la t´ecnica se basa en que si la cotizaci´on alcanza la cota dada por la media m´ovil m´as tres veces su desviaci´on t´ıpica, es de esperar que su precio comience a caer y emitimos una orden de venta, y si la cotizaci´on alcanza la media m´ovil menos tres veces su desviaci´on t´ıpica emitimos una de compra. Un gr´afico reflejando esta t´ecnica podemos encontrarlo en la figura 1.4. En ella, encontramos las bandas de Bollinger referidas a la media m´ovil de 20 d´ıas. Cuando la cotizaci´on alcanza la banda superior, se espera que posteriormente caiga, por lo que nuestra acci´on ser´a de venta, mientras que si la cotizaci´on alcanza la banda inferior emitiremos una se˜ nal de compra.
Figura 1.4: Bandas de Bollinger: Cotizaci´on de la empresa Altadis durante el a˜ no 2000. [1]
1.2.
Traders Autom´ aticos y Talentum
Los sistemas de trading automatizados, o traders autom´aticos permiten establecer una serie de reglas autom´aticas que dictan cu´ando realizar una operaci´on y cu´ando cerrarla, de forma que ´esta se ejecute de forma aut´onoma sin intervenci´on humana posterior. Las reglas que en ´estos se programan pueden ser relativamente sencillas, como las medias m´oviles que vimos anteriormente, o mucho m´as complejas.
1.3. PROBLEMA PROPUESTO
15
Los sistemas autom´aticos 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 diversificaci´on 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´anicos o la necesidad de monitorizaci´on. 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´aticos para invertir en bolsa. Cuenta con profesionales de distintas ramas, principalmente economistas, inform´aticos, qu´ımicos y matem´aticos, cuyas t´ecnicas espec´ıficas combinadas se programan en los robots. En la actualidad, Talentum cuenta con m´as de 1.000 robots programados y optimizados con distintos par´ametros 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 autom´atico 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 m´as de 1.000 robots capaces de operar en bolsa, basados en diferentes t´ecnicas y algoritmos. En la mayor´ıa 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 p´erdidas se compensen entre ellos y se diversifican las operaciones, lo que permite minimizar el riesgo. Adem´as, 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 har´an mejor. En ese punto, la empresa se encontraba ante un problema que no hab´ıan logrado resolver satisfactoriamente: La elecci´on del subconjunto de robots para operar en cada momento. La aproximaci´on 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´on 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´on de este trabajo fin de grado fue dar a Talentum criterios para poder elegir con mayor efectividad qu´e robots elegir para que operen en cada momento. Para ello, nuestra idea b´asica era utilizar los resultados pasados de cada robot en situaciones del mercado similares para tratar de predecir c´omo se comportar´an en la situaci´on actual. As´ı, deb´ıamos desarrollar unos “predictores” que nos proporcionen informaci´on sobre los resultados que tendr´a un robot concreto si operara en el momento actual. Esta informaci´on
16
CAP´ITULO 1. EL PROBLEMA
ser´ıa entonces utilizada por un agente externo de Talentum, que con sus propios criterios decidir´ıa qu´e robots utilizar. Adem´as del sistema b´asico de realizaci´on de predicciones sobre el desempe˜ no de un robot, incorporamos otros mecanismos para estimar los errores que cometemos en las mismas, de forma que di´eramos al agente externo la mayor cantidad de informaci´on 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 predicci´on. Todo ello ser´a interpretado por un agente externo que elegir´a un determinado conjunto de robots en para que operen en cada momento, en funci´on del riesgo deseado.
Cap´ıtulo 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 tendr´a un robot puesto a operar sobre el mercado, el n´ ucleo de nuestro sistema lo constituir´an los predictores. Un predictor es un elemento relativo a un robot concreto, que bas´andose en su historial de operaciones realizar´a sus predicciones. Adem´as, estableceremos otra capa superior al predictor que nos proporcionar´a una medida de la fiabilidad de las predicciones realizadas por ´este en cada momento. Toda esta informaci´on de cada robot ser´a utilizada por un agente externo para elegir qu´e robots dejar operar en bolsa y cu´ales no. El esquema de esta estructura puede encontrarse en la figura 2.1. La principal decisi´on que marcar´ıa gran parte del dise˜ no posterior consist´ıa en qu´e t´ecnica 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, esper´abamos que fueran suficientemente flexibles para resolver satisfactoriamente el problema para cada robot. Adem´as, tienen la ventaja de ser suficientemente eficientes en su ejecuci´on para poder utilizarlas operando en tiempo real. Una red neuronal artificial es un modelo matem´atico no lineal, de naturaleza computacional, con una arquitectura inspirada en la organizaci´on neuronal biol´ogica ([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 par´ametros espec´ıficos de cada nodo. Para que la red pueda resolver un determinado problema, se modifican estos par´ametros de acuerdo a ciertos algoritmos, denominados algoritmos de entrenamiento. De esta forma, la red puede “aprender” para adaptarse a resolver un 17
18
´ CAP´ITULO 2. DESARROLLO DE LA SOLUCION
Figura 2.1: Estructura b´asica general del sistema. determinado problema. La figura 2.2 muestra un diagrama b´asico de la composici´on de una red neuronal. As´ı, el objetivo de nuestro software ser´a conseguir obtener redes neuronales capaces de predecir el comportamiento de cada robot, y utilizar ´estas para obtener informaci´on 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 precisi´on. En estos casos, el dise˜ no de una funci´on o m´etodo espec´ıfico para resolver el problema resulta impracticable. Tambi´en es una t´ecnica muy com´ un en casos en los que la funci´on es desconocida, pero contamos con bastantes casos en los que conocemos de resoluci´on 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 detecci´on 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 b´asico de red neuronal y neuronas. El problema que estamos tratando de resolver es un problema de regresi´on. Es decir, tenemos una funci´on desconocida, que en nuestro caso recibe como entrada la informaci´on 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 funci´on desconocida. El proceso de aprendizaje consiste en ajustar esta funci´on 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 resoluci´on 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 tambi´en para los desconocidos. Hay distintos tipos de redes neuronales dependiendo del n´ umero y distribuci´on de sus neuronas y de los enlaces entre ellas, y a su estructura se le denomina usualmente topolog´ıa de dicha red. Podemos distinguir en ella tres tipos de nodos o neuronas: De entrada, que reciben la informaci´on del exterior, de salida, que proporcionan sus resultados 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´on de sus entradas queda determinada por variables denominadas pesos, relativos a cada uno de sus enlaces. Podemos ver gr´aficamente 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´a en la capa n cuando el m´ınimo 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
´ CAP´ITULO 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 topolog´ıas muy diversas, las m´as 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 caracter´ısticas de la red que emplearemos: Variables de entrada, n´ umero de capas y de neuronas, distribuci´on de las mismas... etc., es decir, su topolog´ıa. En una segunda fase, se entrena una red con la topolog´ıa elegida, que ser´a la que obtendremos como resultado final del proceso. El procedimiento de la primera fase consiste en partir de un conjunto de posibles topolog´ıas, elegidas a priori, y tras un proceso de experimentaci´on, elegir aquella que proporcione mejores resultados. Es decir, en primer lugar elegimos un conjunto de topolog´ıas, definiendo las entradas que recibir´a nuestra red, cubriendo un espectro que consideremos suficiente. A continuaci´on realizamos una cierta cantidad de experimentos para cada posible topolog´ıa que nos planteemos utilizar para nuestro problema. Estos experimentos consisten en entrenar una red con esas caracter´ısticas y evaluarlas1 . As´ı, veremos los resultados que obtenemos para una serie de redes entrenadas con una determinada configuraci´on, calcularemos su media, y ´esta ser´a la medida que emplearemos para comparar esta topolog´ıa con las dem´as. Sin embargo, es importante tener en cuenta que es usual que distintas topolog´ıas 1
En este cap´ıtulo pretendemos u ´nicamente de dar una idea general de la soluci´on propuesta en nuestro trabajo, sin entrar en excesiva profundidad. Por ello, los detalles t´ecnicos relativos al entrenamiento, validaci´ on y test de las redes podemos encontrarlos en la secci´on 3.2
´ PROPUESTA 2.1. SOLUCION
21
den resultados similares, y corremos el riesgo de que la elecci´on 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 estad´ısticamente significativa. Que un resultado sea estad´ısticamente 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 topolog´ıa es mejor que la otra, y aunque realiz´aramos m´as 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´as sencilla (menor n´ umero de neuronas, menor n´ umero de variables de entrada...). Para determinar si efectivamente existe significancia estad´ıstica en la diferencia entre las medias de las dos series de experimentos debemos realizar un test estad´ıstico adecuado. El procedimiento y la base te´orica de los mismos se detallan en la secci´on 3.4. Para terminar, una vez elegida la topolog´ıa que utilizaremos, se procede al entrenamiento de una red con dicha configuraci´on, que ser´a nuestra red final. Los detalles t´ecnicos del procedimiento de ambas fases puede encontrarse m´as detalladamente en la secci´on 3.2, en la que tambi´en se recoge el proceso completo de experimentaci´on 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´on del comportamiento que tendr´a 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 c´omo ser´a el desempe˜ no del robot conociendo la situaci´on del mercado actual, debemos tener una serie de casos pasados en los que conozcamos el desempe˜ no que tuvo y la situaci´on del mercado en dicho momento. Esta serie de casos la obtendremos a partir del hist´orico de operaciones del robot. Es decir, cada vez que en el pasado el robot realiz´o una operaci´on en el mercado, sabemos qu´e resultado tuvo y conocemos la situaci´on del mercado en ese momento, por lo que a partir de este hist´orico podemos obtener casos para entrenar nuestra red. No obstante, hay que tener en cuenta que modelizar la situaci´on 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´o la operaci´on, 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´on no relevante, y reducir la dimensi´on de la informaci´on en la medida de lo posible, es decir, reducir el n´ umero de variables de entrada. Esto, adem´as, permitir´a mejorar los resultados de las redes, que s´olo recibir´an la informaci´on relevante, y por tanto podr´an
22
´ CAP´ITULO 2. DESARROLLO DE LA SOLUCION
dar mejores resultados con una estructura menos compleja. Para esta etapa previa de reducci´on de la dimensi´on de la entrada utilizaremos el algoritmo del an´ alisis principal de componentes (PCA, por sus siglas en ingl´es), que se detalla en la secci´on 3.3. Por otra parte, una vez tenemos nuestra red entrenada, podemos ponerla a operar en el mercado real y monitorizar su rendimiento. Adem´as, estableceremos medidas para controlar la precisi´on 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´on 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 topolog´ıa 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 t´ecnicas 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 hist´orico de operaciones del robot, y nuestro objetivo ser´a obtener una serie de casos de prueba para poder realizar el entrenamiento de la red neuronal que proporcionar´a 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 situaci´on del mercado en el momento de producirse la operaci´on, y la salida consiste en el resultado que tuvo ´esta. As´ı, debemos definir en un primer lugar c´omo modelizaremos la situaci´on 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´on del mercado de manera diferente para cada uno de ellos. Por tanto, nuestro software nos permitir´a definir qu´e informaci´on 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´on del mercado diferente para cada robot. La informaci´on m´as b´asica que podemos utilizar para reflejar la situaci´on del mercado, que esperamos que sea relevante para nuestra predicci´on, son los datos relativos a la divisa sobre la que opera el robot. Utilizaremos por tanto los datos sobre la cotizaci´on de esta divisa en un intervalo de tiempo determinado anterior a la solicitud de apertura de ´ la operaci´on. Estos vienen agrupados seg´ un periodos de tiempo de distintas longitudes, denominados velas. Es decir, una vela es la informaci´on 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´aximo y m´ınimo 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 d´ıa. Adem´as de la informaci´on b´asica de las velas de la divisa en la que opera nuestro robot, nuestro software permite a˜ nadir otra informaci´on adicional, como velas de otras divisas, el d´ıa de la semana o la hora a la que se realiz´o la operaci´on, e incluso otros indicadores macroecon´omicos, como son el precio del petr´oleo o del oro. Con estos u ´ltimos indicadores logramos que, pese a que el robot tiene una visi´on 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 informaci´on mucho m´as 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 informaci´on anterior al momento de apertura de la operaci´ on. Esto es as´ı debido a que las redes se utilizar´an finalmente para predecir el resultado de la operaci´on antes de que se inicie, por lo que evidentemente debemos utilizar u ´nicamente informaci´on que vayamos a tener disponible en ese momento. A continuaci´on, una vez elegida la informaci´on que queremos utilizar como entrada de nuestro problema, podemos formar los casos de prueba a partir del hist´orico de operaciones del robot, que nos servir´an para entrenar la red. Obtenemos as´ı un fichero con ejemplos de entrada y salida de nuestro problema, siendo la entrada la modelizaci´on del mercado en el momento de apertura de una operaci´on, y la salida el resultado que tuvo ´esta. Aunque podr´ıamos utilizar directamente este fichero para entrenar nuestras redes, encontramos que la entrada es demasiado compleja: Por una parte, hay una gran cantidad de informaci´on, mucha de ella redundante o muy parecida, y por otra, como cada robot opera en distintas situaciones, puede haber informaci´on 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 m´as dificultades para aprender y generalizar correctamente el problema, por lo que trataremos de reducirla.
´ CAP´ITULO 2. DESARROLLO DE LA SOLUCION
24
Para ello, como comentamos en la secci´on anterior, emplearemos el algoritmo del An´ alisis Principal de Componentes. Este algoritmo permite combinar las distintas variables de entrada para mantener la informaci´on m´as 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 mayor´ıa de los casos de unas 150 o´ 200 entradas, a tan s´olo 20 ´o 25, lo que constituye una reducci´on de alrededor del 80 u 85 % en el n´ umero de entradas. Esto adem´as permite que aunque a˜ nadamos informaci´on nueva que finalmente resulte ser redundante, esto no repercutir´a demasiado negativamente en los resultados finales, puesto que ser´a eliminada por este u ´ltimo procedimiento. As´ı, podemos a˜ nadir gran cantidad de informaci´on 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 normalizaci´on a los datos. Si bien en la teor´ıa esto no es necesario, debido a que las redes pueden reescalar cualquier transformaci´on lineal realizada a los datos, en la pr´actica lo usual es realizar la normalizaci´on. El motivo principal es que para la inicializaci´on 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 m´ınimos locales. Por tanto, como en general se utilizan valores aleatorios peque˜ nos para los pesos, es conveniente normalizar la entrada a valores tambi´en cercanos a 0. En nuestro caso, como se recomienda en general, utilizaremos como rango de normalizaci´on el intervalo [−1, 1].[12] El proceso de normalizaci´on 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(x−x 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 ser´a 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 topolog´ıa de nuestra red, y en una segunda fase entrenamos la red final que utilizaremos para controlar el robot. El proceso b´asico empleado es el usual cuando se trabaja con redes neuronales, que hemos expuesto anteriormente: En primer lugar se plantean diversas topolog´ıas posibles, con distinto n´ umero y tipo de entradas, distinto n´ umero de neuronas y distribuci´on, etc. A continuaci´on se realiza un determinado n´ umero de entrenamientos y experimentos para cada posible configuraci´on, y finalmente se elige aquella que arroja mejores resultados, asegur´andose de que la diferencia sea estad´ısticamente significativa. Por u ´ltimo, se entrena 2 una red final con dicha topolog´ıa . 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 caracter´ısticas de nuestro problema y situaci´on, 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 hist´orico de operaciones, es decir, utilizan para modificar el robot precisamente los mismos datos que utilizaremos nosotros. Es decir, ajusta sus par´ametros y comportamiento de forma que sus resultados si hubiera operado en el pasado sean buenos, esperando que de esta forma sean buenos tambi´en en el futuro. Esto implica que la situaci´on que encontramos en el hist´orico de operaciones es probable que no sea la misma que encontrar´a posteriormente el robot cuando sea puesto en funcionamiento. Presumiblemente, los resultados que obtendr´a el robot en tiempo real ser´an peores que los que se reflejan en su hist´orico, puesto que ´este ha sido programado de forma que los resultados de su hist´orico sean buenos. De hecho, si observamos el hist´orico de resultados de alg´ un robot, solemos encontrar que sus ganancias totales son muy altas, y hay muchas m´as operaciones que producen beneficios que que producen p´erdidas. 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 p´erdidas. Si utiliz´aramos como entrenamiento los casos extraidos directamente del hist´orico 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 mayor´ıa), 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 situaci´on que esperamos encontrar en realidad. Es decir, debemos modificarlo de manera que las ganancias se equiparen aproximadamente con las p´erdidas, para que nuestra red “aprenda” correctamente la misma situaci´on para la que posteriormente la utilizaremos. Para ello, nuestra soluci´on ha sido replicar las operaciones que produjeron p´erdidas hasta que el balance total de p´erdidas equipare al de ganancias. De esta forma, tenemos una situaci´on resultante en la que el balance total es aproximadamente 0, y la importancia de las operaciones negativas est´a mucho m´as cerca de la importancia de las operaciones positivas. As´ı, esperamos que nuestra red se adapte bien a ajustar ambos casos. La segunda modificaci´on se refiere al criterio que utilizamos para elegir una u otra topolog´ıa en la primera fase. Es com´ un elegir criterios basados u ´nicamente en la precisi´on de la predicci´on, como la diferencia entre los valores predichos y los valores correctos, o el error cuadr´atico medio (MSE). Sin embargo, debido al uso que se dar´a 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 decisi´on entre elegir una u otra red, la segunda diferencia le resultar´a mucho m´as relevante. Por ello, decidimos estudiar una medida de evaluaci´on de la red neuronal alternativa para esta fase, dise˜ nando otra m´as parecida al uso que daremos posteriormente a las predicciones. En ella, supondremos que el agente externo elegir´a para que operen todos los robots para los que nuestra predicci´on sea positiva, es decir, todos aquellos que predigamos
26
´ CAP´ITULO 2. DESARROLLO DE LA SOLUCION
que van a obtener ganancias. As´ı, simularemos qu´e hubiera ocurrido si un determinado conjunto de operaciones se hubieran realizado bajo la supervisi´on de nuestro sistema, y cu´al habr´ıa sido el balance total del robot en ese periodo, compar´andolo con aquel que habr´ıa obtenido sin nuestra intervenci´on. Es decir, tomamos la suma del balance obtenido en todas las operaciones para los que la predicci´on de nuestra red es positiva, y la diferencia de ´esta con la suma del balance total de las operaciones elegidas ser´a nuestra medida de error para esa red. Tras realizar diversos experimentos con las redes obtenidas utilizando este m´etodo y los anteriores, comparamos sus resultados. De esta forma obtuvimos que las redes entrenadas con las topolog´ıas elegidas utilizando esta u ´ltima medida de error daban resultados m´as precisos cuando las utiliz´abamos con datos que no hubieran sido utilizados ni para el entrenamiento ni para la optimizaci´on 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 topolog´ıa de la red, procedemos a la segunda fase. En ella, entrenamos una u ´nica red final con esta configuraci´on elegida, que ser´a la red final que utilizaremos como predictor para ese robot en nuestro sistema.
2.2.3.
Puesta en Marcha a Mercado Real
En esta secci´on describiremos el proceso de ejecuci´on de las redes neuronales entrenadas, y la comunicaci´on con el agente externo para proporcionarle sus predicciones. Este agente externo ser´a un sistema de Talentum ya existente denominado Zeus. Zeus es un software desarrollado para controlar la gesti´on 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 comunicar´a con Zeus proporcion´andole informaci´on de las predicciones sobre cada robot. Adem´as, cada vez que un robot quiera realizar una operaci´on, 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 b´asicas. La primera, utilizada antes de la implementaci´on de los sistemas de estimaci´on de errores, consiste simplemente en dejar operar aquellos robots para los cuales nuestra predicci´on sea positiva. Es decir, permitir todas aquellas operaciones que predigamos que van a resultar en beneficios. La segunda estrategia, tambi´en 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 predicci´on, sigan superando un cierto umbral. Este umbral, en nuestro caso, lo ajustamos utilizando los resultados que tuvimos durante el periodo en que la utiliz´abamos s´olo la primera estrategia reci´en 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 consistir´a en permitir las operaciones cuya aproximaci´on una vez tenida en cuenta la correcci´on 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 petr´oleo 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´on actualizada del mercado global. La informaci´on se combina de forma que coincida con la modelizaci´on de la situaci´on del mercado que realizamos para cada robot en la fase de obtenci´on de los casos de entrenamiento. Adem´as, le aplicamos los mismos pasos que realizamos para la obtenci´on de dichos casos, es decir, es an´alisis principal de componentes y la normalizaci´on. Tras este preprocesamiento, podemos utilizar los datos resultantes como entrada de la red asociada, que nos devolver´a la predicci´on. Por u ´ltimo, obtenemos la fiabilidad asociada en ese momento a esta red, y suministramos toda esta informaci´on a Zeus.
2.2.4.
Monitorizaci´ on y Fiabilidad
Una vez iniciada su ejecuci´on, nuestro software obtiene informaci´on sobre la ejecuci´on de los robots en el mercado, es decir, sobre las operaciones que realicen en cada momento y su resultado. Esta informaci´on la utilizaremos para actualizar la fiabilidad de las redes en funci´on de si sus prediciones fueron correctas o no. Para que obtener esta informaci´on sea posible, los robots almacenan en una base de datos durante su ejecuci´on informaci´on sobre la apertura y cierre de cada operaci´on que realizan, as´ı como los resultados de las mismas. Adem´as, nuestro sistema almacena tambi´en las predicciones que cada red realiz´o 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 tuvi´eramos los robots operando en mercado real controlados por nuestro sistema, s´olo conocer´ıamos los resultados de las operaciones que Zeus permitiera realizar. No obstante, para actualizar las estimaciones de error de las redes debemos conocer tambi´en los resultados finales que tendr´ıan las operaciones cuya realizaci´on no se permite. Para ello, tendremos operando no s´olo los robots con dinero real controlados por nuestro sistema, sino tambi´en otra copia de cada uno de ellos operando en una cuenta de simulaci´on. Es decir, realizar´an todas las operaciones que realizar´ıan los robots reales, pero sin invertir dinero real en ellas. Estos robots simulados tambi´en almacenar´an 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´on en tanto de la
28
´ CAP´ITULO 2. DESARROLLO DE LA SOLUCION
evoluci´on 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´an funcionando bien y recortar las p´erdidas.
Cap´ıtulo 3 Aspectos T´ ecnicos 3.1.
Software Desarrollado
Para la realizaci´on de este trabajo ha sido necesario el desarrollo de un nuevo software ´ desarrollado tambi´en espec´ıfico que realizara los procesos descritos anteriormente. Este, como parte de este trabajo, ha sido realizado en lenguaje Java con el soporte de determinadas librer´ıas especializadas. En las siguientes subsecciones se detallan las librer´ıas externas utilizadas, los m´odulos 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 librer´ıas externas para realizar las funcionalidades t´ecnicas cuya implementaci´on quedaba fuera de los objetivos de este trabajo. As´ı, las implementaciones relacionados directamente con, por ejemplo, las redes neuronales o el algoritmo del an´alisis principal de componentes, se han delegado en librer´ıas conocidas de aprendizaje computacional u otros a´mbitos, que se detallan a continuaci´on. Encog ([8]): Encog es una librer´ıa especializada de aprendizaje computacional, que implementa en el lenguaje Java la l´ogica y algoritmos de gran cantidad de t´ecnicas de inteligencia artificial, como redes bayesianas o support vector machines. En particular, nosotros utilizaremos su implementaci´on de redes neuronales para nuestro software. Para ´estas, incluye gran cantidad de algoritmos de entrenamiento, y otras funcionalidades adicionales como el almacenamiento y recuperaci´on de redes ya entrenadas. WEKA ([9]): WEKA es una aplicaci´on muy conocida de aprendizaje computacional, principalmente utilizada para miner´ıa de datos, tambi´en 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 aplicaci´on completa con interfaz de usuario, nosotros utilizaremos directamente sus librer´ıas, que contienen los algoritmos del an´alisis principal de componentes, y delegaremos tambi´en en ella algunas tareas menores como la normalizaci´on. 29
´ CAP´ITULO 3. ASPECTOS TECNICOS
30
Apache Commons Math ([10]): Es una librer´ıa escrita en Java de matem´aticas y estad´ıstica que incluye muchas funciones no disponibles directamente en el lenguaje Java. En nuestro caso, utilizaremos de ella la implementaci´on del ajuste por m´ınimos cuadrados ponderado. Jmathplot ([11]): Es una conocida librer´ıa open source de uso de gr´aficos en Java. Proporciona funcionalidad para mostrar gr´aficos de diversos tipos en 2D y 3D de forma sencilla. En nuestro caso la utilizaremos para la visualizaci´on de gr´aficas y resultados, especialmente para la funcionalidad de nuestro software relacionado que la monitorizaci´on y obtenci´on de estad´ısticas.
3.1.2.
M´ odulos Desarrollados
Adem´as, introducimos aqu´ı los m´odulos que han sido desarrollados y pueden ser entendidos de forma independiente, para facilitar la comprensi´on de la estructura global presentada en la secci´on 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, necesit´abamos conectarnos a diversas bases de datos en distintos host para obtener gran cantidad de datos diferentes (hist´oricos del robot, datos del mercado y operaciones en tiempo real, etc.). Por ello, implementamos una primera clase con la funcionalidad b´asica de comunicaci´on con la base de datos, de la que heredan otras clases espec´ıficas que refinan su comportamiento para los datos que utilizar´a. Adem´as, para algunas funcionalidades, en general aquellas que tienen que ver con la persistencia de los datos de la propia aplicaci´on se decidi´o no utilizar estas bases de datos. En su lugar, se implement´o una clase que utilizaba como medio para guardar datos un fichero de texto de la que heredaron otras clases para datos espec´ıficos: Informaci´on de los ficheros y casos de pruebas introducidos, informaci´on de las redes entrenadas, estad´ısticas de ejecuci´on, almacenaci´on y recuperaci´on de las propias redes neuronales, etc. De esta forma evit´abamos sobrecargas las bases de datos de Talentum con m´as informaci´on, y a la vez hac´ıamos el programa mucho m´as portable, lo que nos resultaba u ´til por ser un desarrollo experimental. Tambi´en se han almacenado en ficheros (.csv) la informaci´on de los hist´oricos del mercado, de los que necesitamos gran cantidad de informaci´on, de forma que su acceso fuera mucho m´as r´apido. M´ odulo de tratamiento de hist´ oricos y casos de prueba Como la l´ogica de procesamiento del hist´orico de operaciones para obtener finalmente los casos de prueba era demasiado compleja, decidimos extraerlo en un m´odulo aparte. As´ı, en clases separadas se encuentra recogida la l´ogica de lectura de los hist´oricos y su combinaci´on con la informaci´on del hist´orico del mercado, la aplicaci´on del an´alisis principal de componentes, y la normalizaci´on final.
3.1. SOFTWARE DESARROLLADO
31
Hay que tener en cuenta que este m´odulo no s´olo debe permitir realizar el procesamiento antes de entrenar la red, sino que adem´as debe guardar la informaci´on 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´alisis principal y la normalizaci´on con los mismos par´ametros que utiliz´o para obtener los casos de prueba con los que entrenamos la red. M´ odulo de redes neuronales Toda la l´ogica relacionada con las redes neuronales tambi´en fue encapsulada. En particular la l´ogica de creaci´on de las mismas, su entrenamiento, ejecuci´on y persistencia, se encuentran en este m´odulo. Adem´as, proporciona una fachada que encapsula las peculiaridades propias de la librer´ıa 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 ten´ıamos 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 l´ogica relacionada se encapsul´o en otro m´odulo, que implementa principalmente el patr´on Strategy. Este proporciona una interfaz con las operaciones u ´nicamente de inicializaci´on, a˜ nadir un nuevo resultado para actualizar el error y obtener el error esperado en base a una predicci´on.
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 utilizaci´on. Las dos primeras coinciden en funcionalidad con las dos primeras fases expuestas en la secci´on 2.2, la tercera corresponde a la tercera y cuarta fase, y la cuarta parte corresponde a la obtenci´on y visualizaci´on de estad´ısticas de ejecuci´on de las redes. Es decir, las cuatro partes son: Procesamiento de los datos. Entrenamiento de las Redes Neuronales. Ejecuci´on de las Redes y Monitorizaci´on. Visualizaci´on de estad´ısticas. Adem´as, todo el software ha sido desarrollado siguiendo la arquitectura de ModeloVista-Controlador (MVC), por lo que los elementos del modelo seguir´an la ruta model.*, los de la vista la ruta view.* y los del controlador la ruta controller.*. Aunque existe cierta discusi´on 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 continuaci´on.
32
´ CAP´ITULO 3. ASPECTOS TECNICOS
Procesamiento de Datos Contiene toda la l´ogica 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´oricos de operaciones, la obtenci´on de datos del hist´orico del mercado, la aplicaci´on del an´alisis principal de componentes, la normalizaci´on de los datos... etc. Adem´as, permite almacenar tanto los ficheros en cada una de las etapas como los casos de prueba procesados, junto con toda su informaci´on relacionada (´ındice al que se refieren, datos que se han utilizado para modelizar la situaci´on del mercado, etc.) para su uso en otras etapas, en la sesi´on actual o en otra posterior. Recordemos que esta parte del software tambi´en 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 informaci´on de todos los ficheros de datos del sistema. De esta clase heredan tambi´en las clases de las tablas de los otros apartados. La clase BacktestFactory nos proporciona los hist´oricos de operaciones de cualquier robot, y la clase InputFileFactory encapsula la l´ogica de procesamiento de datos, delega la l´ogica de preparaci´on de los casos de prueba sin preprocesar en FilePreparer, la aplicaci´on del an´alisis principal de componentes en FileReducer y la de normalizaci´on 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 l´ogica de persistencia de estos datos. Entrenamiento de las Redes Contiene toda la l´ogica y funciones relacionadas puramente con las redes neuronales. Es decir, realiza el proceso principal desde el procesamiento de los casos de prueba hasta la obtenci´on de la nueva red neuronal. Adem´as, contiene la l´ogica p´ uramente de ejecuci´on 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 l´ogica de creaci´on de redes, entrenamiento, ejecuci´on, test y validaci´on, y permite almacenarlas y recuperarlas en el mismo estado en una sesi´on 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 informaci´on de las redes en nuestro sistema, NetworkFile representa esta informaci´on, y NetworksDatabase almacena tanto la informaci´on como las propias redes. Adem´as, DividedSupervisedSets permite dividir los casos de prueba convenientemente en entrenamiento, validaci´on 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
´ CAP´ITULO 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 l´ogica que permiten la ejecuci´on del robot en tiempo real, y el control de los mismos. Es decir, desde la obtenci´on de la nueva red neuronal hasta el final del proceso, con esta red funcionando y facilitando sus datos a Zeus. Para ello, contiene la modelizaci´on de la red en ejecuci´on, el acceso a las bases de datos para obtenci´on de informaci´on del mercado en tiempo real, la consulta de las operaciones realizadas por cada robot en cada momento... etc. Tambi´en contiene las clases relacionadas con la fiabilidad, y la comunicaci´on con Zeus. Esta comunicaci´on se realiza a trav´es de una base de datos en la que nuestro sistema almacena sus predicciones sobre los robots en cada momento, que el sistema Zeus leer´a cuando necesite hacer uso de ella. El diagrama de clases de esta secci´on 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 informaci´on principal. La modelizaci´on de la red en ejecuci´on 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 informaci´on 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 Estad´ısticas Por u ´ltimo, esta parte implementa algunas funcionalidades de visualizaci´on de datos y seguimiento en tiempo real de la ejecuci´on de nuestro software. Permite obtener gr´aficas con las predicciones de nuestras redes en un momento determinado, as´ı como ver, para cada operaci´on que hubieran realizado los robots sin nuestro sistema, si la hemos realizado
3.1. SOFTWARE DESARROLLADO
35
Figura 3.3: Diagrama de clases de Ejecuci´on de las Redes. o no, cu´al era nuestra predicci´on y fiabilidad en ese momento, y el resultado final que ha tenido. Adem´as, 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 m´as, 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´on 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 gr´afica de predicciones de una red concreta en un intervalo de tiempo determinado, informaci´on que es guardada en StatFileResults. PlotUtils es una clase auxiliar que maneja la creaci´on de gr´aficas.
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 secci´on 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 l´ogica real de uso de la aplicaci´on. Manage Data Si elegimos la opci´on “Manage Data”, se desplegar´a el panel de la figura 3.6 que permite a˜ nadir nuevos robots con su hist´orico 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 situaci´on del mercado (que ser´a la entrada
´ CAP´ITULO 3. ASPECTOS TECNICOS
36
Figura 3.4: Diagrama de clases de Visualizaci´on de Estad´ısticas.
Figura 3.5: Menu Principal de la aplicaci´on. de nuestra red), procesar el hist´orico de acuerdo a estos datos, reducir su dimensionalidad utilizando el an´alisis 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´ gar´a 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 topolog´ıa manualmente o dar una lista de posibles topolog´ıas, entrenarlas con distintos par´ametros y evaluar el resultado. As´ı, la tabla de este panel muestra toda la informaci´on 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 ejecuci´on. Tras esto, autom´aticamente har´an predicciones sobre su robot asociado que estar´a ejecut´andose en mercado real, y las almacenar´an 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´on, cons us u ´ltimas predicciones y su fiabilidad, e informaci´on sobre si su robot asociado est´a operando. Adem´as, permite activar y desactivar las redes en cualquier momento.
Figura 3.8: Panel de Ejecuci´on de Redes.
View Stats Por u ´ltimo, al pulsar “View Stats” se despliega el cuarto panel, que contiene varias opciones de visualizaci´on de estad´ısticas. Por ejemplo, podemos consultar las operaciones realizadas por los robots en un intervalo dado, o una gr´afica con las predicciones de una red concreta en un cierto periodo de tiempo. Un ejemplo de visualizaci´on de este panel se encuentra en la figura 3.9 As´ı, incluye una tabla que muestra las u ´ltimas operaciones realizadas con informaci´on como si nuestro sistema la realiz´o o no, y cu´al era la predicci´on y fiabilidad en ese momento, y opciones para el filtrado de ´estas y la visualizaci´on de gr´aficas 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 secci´on 2.1.2, el proceso de entrenamiento consiste en ajustar los par´ametros 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
´ CAP´ITULO 3. ASPECTOS TECNICOS
Figura 3.9: Panel de Visualizaci´on de Estad´ısticas. 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´as casos. A este problema se le conoce como overfitting o sobreentrenamiento. Los algoritmos de entrenamiento de redes ajustan en sucesivas etapas los par´ametros de las neuronas para reducir el error producido en la predicci´on 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 ajustar´a bien a los casos que utilizamos para su entrenamiento, pero fallar´a al generalizar el problema con casos nuevos. Sin embargo, si lo ejecutamos durante demasiados pocos, la red no aprender´a el problema correctamente. Para resolver este problema, y poder conocer cu´ando debemos finalizar el entrenamiento, debemos saber cu´ando 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 utilizar´a u ´nicamente los casos de training, y utilizaremos los casos de validaci´on para detectar cu´ando debemos detectar el proceso. Normalmente la divisi´on en los subconjuntos de training y validation se realiza utilizando un 10 ´o 20 % de casos aleatoriamente elegidos para validaci´on, y los restantes para entrenamiento. Al estar entrenando la red para esos casos, el error que cometemos ajustando los casos de training decrecer´a con el tiempo. Sin embargo, al no estar utilizando para el entrenamiento los casos de validation, tenemos que la red se comportar´a con ´estos de la misma forma que lo har´a 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 espec´ıficamente para los casos de training, fallando al generalizar el problema. Puede verse un ejemplo de la evoluci´on 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 detenci´on ser´a el incremento en el error de validaci´on.
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 visi´on general bastante completa del proceso de entrenamiento, en esta secci´on expondremos los detalles t´ecnicos que no quedan recogidos en dicha visi´on general. Recordemos que el proceso general se divide en dos fases: En una primera hacemos experimentos con diversas redes entrenadas siguiendo diferentes topolog´ıas, y elegimos aquella que consideramos mejor, y en una segunda fase entrenamos una nueva red con estas caracter´ısticas. Sin embargo, como hemos visto en la secci´on anterior, para evitar el problema del overfitting debemos tener un criterio de detenci´on 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 par´ametros y el segundo para detectar cu´ando 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 ingl´es) al subconjunto de ´este que se utiliza para ajustar los par´ametros de la red durante el proceso.
40
´ CAP´ITULO 3. ASPECTOS TECNICOS
overfitting. Adem´as, 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 divisi´on 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 validaci´on, 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´on, 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 querr´ıamos utilizar todos los casos posibles para su entrenamiento, pero entonces tendr´ıamos que emplear otro m´etodo de detenci´on, puesto que ya no utilizar´ıamos conjunto de validation. Este nuevo criterio de detenci´on consiste en calcular el n´ umero medio de epochs que se produjeron hasta la detenci´on del entrenamiento en los experimentos realizados para esta topolog´ıa en la primera fase. As´ı, podemos utilizar todos los datos disponibles para entrenamiento para ajustar los par´ametros, sin tener que dividirlo en los subconjuntos de training y validation. Adem´as, existe en realidad otra etapa, que en el resto del documento tan s´olo se nombra brevemente, denominada fase de test. El objetivo de esta etapa es obtener una estimaci´on de c´omo funcionar´a la red reci´en entrenada con datos nuevos que no han sido usados ni para el entrenamiento ni para la elecci´on de la topolog´ıa. 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 ser´an presumiblemente similares a los que tendremos cuando ejecutemos la red para casos nuevos reales. Para concluir, es relevante aclarar que para la implementaci´on del software hemos utilizado un tipo de redes neuronales conocidas como Multi Layer Perceptron (MLP). Por u ´ltimo, como funci´on de activaci´on (una funci´on empleada internamente en la red neuronal en las conexiones entre neuronas) hemos utilizado la tangente hiperb´olica.
3.3.
An´ alisis de Componentes Principales
El An´alisis de Componentes Principales es un algoritmo de reducci´on de datos que transforma un conjunto de variables posiblemente correladas en otras linealmente incorreladas. Para ello, aplica una transformaci´on ortogonal, y las variables resultantes se denominan componentes principales. Adem´as, 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 an´alisis principal de componentes introducimos un resultado previo, que constituye la parte central del mismo. Este resultado, bastante conocido en matem´aticas, es el c´alculo del cociente de Rayleigh de una matriz sim´etrica. 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 direcci´on u ∈ Rm tal que la varianza de la muestra uT X = (uT x1 , ..., uT xn ) sea m´axima. Este problema puede ser visto tambi´en 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 direcci´on u es m´axima. Esto puede expresarse formalmente como: n
1X ((xj − x¯)T u)2 u:||u||2 =1 n j=1 m´ax
O equivalentemente: m´ax 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 c´alculo del cociente de Rayleigh de una matriz sim´etrica, tiene soluci´on conocidas. Para su resoluci´on, basta diagonalizar la matriz de covarianzas Σ y escoger como direcci´on u el vector propio correspondiente al mayor valor propio. Como hemos adelantado, el algoritmo del an´alisis de componentes principales se basa en la resoluci´on del problema anterior. Su ejecuci´on consiste simplemente en tomar la direcci´on para la muestra que maximiza la varianza (conforme acabamos de ver) y proyectar la muestra sobre el subespacio ortogonal a esta direcci´on. 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 m´etodo obtenemos todas las componentes principales, cumpliendo adem´as que est´an 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. Adem´as, podemos entender la varianza de las componentes como la “cantidad de informaci´on que contienen”, y por tanto las tendr´ıamos ordenadas seg´ un ese criterio. Por ello, este m´etodo suele emplearse para reducir la dimensionalidad de nuestros datos. Es decir, para descartar aquellas componentes que tienen menos informaci´on para reducir nuestro n´ umero de variables de entrada. [5] M´as 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
´ CAP´ITULO 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, bastar´ıa con que la proporci´on 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 reducci´on es u ´til, por ejemplo, para aumentar el rendimiento de c´alculo del software que utilizar´a dichas entradas. Adem´as, normalmente mejora incluso la capacidad de ´este de generalizar un problema dado, debido a que ya habremos eliminado parte de la informaci´on redundante o no u ´til. Normalmente, este m´etodo 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 estad´ısticos de hip´otesis son un m´etodo de Inferencia Estad´ıstica para contrastar la fiabilidad de un resultado experimental. Cuando se realiza cualquier experimentaci´on 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 m´etodos y al realizar una cierta cantidad de experimentos, un m´etodo parece mejor que otro, es posible que esto s´olo sea por los resultados de ese conjunto de experimentos aleatorios concretos, cuando en realidad si pudi´eramos realizar suficientes experimentos el resultado ser´ıa el contrario. Los tests estad´ısticos nos permiten controlar la probabilidad de equivocarnos haciendo estas consideraciones. 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´ on 3.4.1. Definimos la hip´otesis nula como aquella hip´otesis que queremos contrastar, mientras que la hip´otesis 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 dimensi´on 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 distribuci´on 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 sucesi´on 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 continuaci´on, como definiciones relativas directamente al contraste de hip´otesis, tenemos las siguientes: Definici´ on 3.4.3. Denominamos error de tipo I a la probabilidad de rechazar la hip´otesis nula cuando es verdadera, y error de tipo II a la probabilidad de aceptarla cuando es falsa. Cuando queremos realizar un contraste de hip´otesis, se debe fijar cu´al 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 hip´otesis nula cuando es verdadera) sea el 5 % (0.05). A la variable α tambi´en se le conoce como nivel de significaci´on del test. Veremos a continuaci´on 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 estad´ıstico a cualquier vector aleatorio (k-dimensional) h(X1 , ..., Xn ), donde h : Rn − > Rk es una funci´on medible Borel. Definici´ on 3.4.5. Sea X una variable aleatoria con distribuci´on Fρ con par´ametro ρ, 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´ametro ρ 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 distribuci´on 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 realizaci´on de un test estad´ıstico y finalmente lo completaremos para explicar el test concreto utilizado en este proceso, conocido como t-test. El proceso general de realizaci´on de un test estad´ıstico es el siguiente: 1. Se estudia el problema y se establecen las hip´otesis 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 estad´ıstico T . 4. Se elige el nivel de significaci´on α. 5. Se calculan las regiones cr´ıticas correspondientes al estad´ıstico y al nivel de significaci´on α.
´ CAP´ITULO 3. ASPECTOS TECNICOS
44
6. Se calcula el valor tobs del estad´ıstico T para los resultados observados de los experimentos. 7. Si el valor observado tobs se encuentra en la regi´on cr´ıtica, rechazamos la hip´otesis, y la aceptamos en caso contrario. El procedimiento concreto de realizaci´on del test depende principalmente, como hemos comentado, de la hip´otesis que queramos contrastar y de la distribuci´on de los experimentos. En nuestro caso, utilizaremos un test para comparar los resultados arrojados por redes neuronales de distintas configuraciones, para elegir con cu´al quedarnos. El objetivo ser´a decidir si entre dos redes distintas existe significancia estad´ıstica de que una de ellas proporciona mejores resultados que la otra. Es decir, lo que querremos saber ser´a si podemos asegurar que las medias de los resultados de una y otra son distintas. Por tanto, nuestra hip´otesis nula ser´a que las medias son iguales, y la hip´otesis alternativa que son distintas. El procedimiento y estad´ısticos concretos constituyen resultados bien conocidos, que pueden consultarse por ejemplo en [6] . As´ı, el estad´ıstico 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 −¯
2
n
Finalmente, tenemos que el intervalo de confianza, que tambi´en 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 observaci´on del estad´ıstico t seg´ un 3.1, y comprobar si se encuentra en el intervalo dado por 3.2. Si es as´ı, aceptaremos la hip´otesis nula, es decir, que no podemos distinguir sus medias, y en caso contrario la diferencia entre ellas ser´a estad´ısticamente significativa.
3.5.
Medidas de Error y Fiabilidad
Tras la implementaci´on del primer prototipo de nuestro sistema, que no inclu´ıa ning´ un sistema de control de errores sino que u ´nicamente emit´ıa 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 m´as normales”, esto es, la mayor parte del tiempo, pero que sin embargo hab´ıa 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 p´erdidas 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, necesit´abamos cambiar el error estimado de forma muy r´apida, bas´andonos sobre todo en las u ´ltimas predicciones. Es decir, utilizando principalmente en los resultados de las u ´ltimas 3 ´o 4 operaciones, ten´ıamos que estimar el grado de fiabilidad de la predicci´on que nos d´e la red en el momento actual. Cuando en un principio se plante´o el desarrollo de un sistema de estimaci´on de errores, una de las soluciones que se plante´o fue utilizar t´ecnicas de Inferencia Estad´ıstica, empleando intervalos de confianza. Sin embargo, debido a la limitaci´on de basarnos casi u ´nicamente en las u ´ltimas 3 o´ 4 operaciones, esta aproximaci´on era inviable. Necesit´abamos otra aproximaci´on que nos permitiera obtener conclusiones con muy pocos datos, y no como un promedio a largo plazo. Nuestro objetivo en esta secci´on es, por tanto, exponer el desarrollo que nos llev´o al sistema actual de estimaci´on el error para las predicciones de beneficio de una red neuronal, bas´andonos u ´nicamente en sus resultados en las u ´ltimas 3 ´o 4 operaciones. Esto permitir´a a quien utiliza esta predicci´on juzgar mejor su decisi´on de elegir unos u otros robots en funci´on del riesgo que est´e dispuesto a correr. Por ejemplo, si la predicci´on es que ganar´a poco y el error que esperamos es grande, es poco probable que se quiera utilizar este robot, mientras que si la predicci´on es que ganar´a 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´asicas distintas, y tras cierta reflexi´on, resultaron ser de alguna forma similares a casos concretos de una soluci´on m´as 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 operaci´on, 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´on entre ellos, que ser´a nuestra medida del error cometido. Una primera aproximaci´on planteada consiste en expresar el error cometido como un sumando, es decir, suponer que la funci´on P aproxima a R salvo un determinado error que ser´a la diferencia entre ambas: R=P + con la funci´on que queremos estimar, y despejando tenemos que = R − P . Dado que queremos utilizar los u ´ltimos 3 o´ 4 valores para estimar nuestro error, podr´ıamos simplemente tomar el promedio del valor absoluto de esta resta para esos valores, y utilizarlo como estimaci´on del error de la predicci´on siguiente. Es decir, podr´ıamos definir P4 e i y estimar que dada una nueva predicci´on P , el valor de R estar´a en el err = i=1 4 intervalo [P − err, P + err], por lo que es probable que el resultado de la operaci´on sera
46
´ CAP´ITULO 3. ASPECTOS TECNICOS
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´asica se puede mejorar estableciendo este umbral de forma m´as 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´as, tambi´en 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 operaci´on que consideremos, y a partir de esa no tenemos en cuenta ninguna otra. Parece m´as razonable que el peso de cada operaci´on en la estimaci´on final sea proporcional a su antiguedad. Para ello, cada vez que recibamos una nueva operaci´on a tener en cuenta, disminuiremos el peso que ten´ıan las anteriores y a˜ nadiremos esta u ´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´a seg´ un: 0 = α · + (1 − α) · n Con un 0 < α < 1 adecuado. Este α determina c´omo se reparte el peso entre las operaciones anteriores. Cuanto mayor sea, m´as importancia daremos al nuevo resultado que acabamos de recibir, y que por tanto ser´a el m´as reciente. Este α puede determinarse con el mismo procedimiento que expusimos para elegir el umbral anterior: Basta seleccionar varios posibles valores, simular qu´e hubiera ocurrido en un intervalo de tiempo pasado, y elegir aquel valor de α que maximice nuestras ganancias. Con la implementaci´on de esta primera aproximaci´on ya se produc´ıan mejoras significativas, aunque el segundo planteamiento expuesto a continuaci´on daba resultados incluso mejores. La idea consiste en utilizar un factor multiplicativo en lugar de uno aditivo, como hac´ıamos en el m´etodo 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 continuaci´on, de forma an´aloga al m´etodo 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 predicci´on nueva P 0 , el resultado que esperamos ser´a aproximadamente R0 = P 0 · F . Con ello, una estrategia b´asica podr´ıa ser elegir aquellos robots para los que nuestra predicci´on sea P · f > U con U un umbral adecuado. Pero como hemos adelantado al principio, planteados de la manera adecuada, los dos m´etodos anteriores son en realidad similares a casos particulares de un m´etodo m´as general. La clave para ver la generalizaci´on 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´etodo, en el que trat´abamos 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 m´etodo, 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´etodo general que resulta l´ogico plantearse a continuaci´on 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´a aquella que minimice la suma de los cuadrados de las diferencias entre los valores de nuestro ajuste y los reales. Adem´as, para continuar con la idea de darle m´as importancia a las operaciones m´as recientes, emplearemos el m´etodo algo m´as complejo del ajuste de m´ınimos cuadrados ponderado. Esta variaci´on del m´etodo permite ajustar el peso que tendr´a cada punto en el c´alculo 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 m´etodos 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´on con predicci´on P ser´a R = P · m + n. As´ı, una posible estrategia ser´ıa elegir aquellos robots cuya predicci´on 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 qu´e estar relacionadas entre s´ı. Con estos m´etodos 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´etodo. Los resultados del sistema tras la implementaci´on del m´etodo final anterior se exponen en la secci´on 4.2.
48
´ CAP´ITULO 3. ASPECTOS TECNICOS
Cap´ıtulo 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 secci´on 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 est´a pensado para proporcionar informaci´on 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 cont´abamos con la predicci´on de la red asociada a cada robot. As´ı, nuestra estrategia consisti´o en elegir para operar en mercado a todos aquellos robots cuya predicci´on 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´erdidas. En la tabla 4.1 se detallan nuestros balances totales de cada semana compar´andolos con los que habr´ıan obtenido los robots sin ninguna supervisi´on, 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. Adem´as, encontramos calculadas las proporciones entre todos estos factores comparando los resultados obtenidos por nuestro sistema con los obtenidos sin ninguna supervisi´on. Para interpretar estas proporciones, tenemos que las relativas a balance y operaciones positivas dan una medida de la precisi´on de nuestro sistema para detectar cu´ando los robots van a funcionar bien, y por tanto les permite operar. Por otra parte, las proporciones de balance y operaciones negativas indican la precisi´on de nuestra sistema para detectar cu´ando los robots van a tener p´erdidas, y evitar que se produzcan. Por tanto, idealmente nuestro sistema tendr´ıa 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 habr´ıan obtenido los robots hubiera sido de -235.51$, mientras que los robots con nuestro sistema pierden 72.20$ menos, es decir, 49
CAP´ITULO 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. Comparaci´on entre Robots con Red / Robots sin Red
4.1. RESULTADOS DEL PROTOTIPO INICIAL
51
-163.31$. Lo que es m´as, 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, est´a fuera de nuestro control y no es nuestra responsabilidad, podr´ıamos pensar que los resultados obtenidos son satisfactorios. No obstante, un estudio algo m´as detallado muestra que no es as´ı. Es importante resaltar que, como puede verse en la tabla 4.2, todas las semanas la proporci´on de operaciones positivas que nuestro sistema deja pasar es superior la proporci´on de operaciones negativas, lo cual s´ı es sin duda un dato muy positivo. Sin embargo, si observamos las columnas de proporci´on vemos que los resultados no son ´ buenos. Este ser´a el dato que nos indicar´a en realidad si nuestro sistema est´a 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´erdidas producidas por los robots que se realizan en nuestro sistema es superior al porcentaje de ganancias que se producen. Esto significa que si construy´eramos 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´as que nuestro sistema) y como consecuencia tener u ´nicamente el 60 % de las p´erdidas (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´as p´erdidas 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´as, 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´eramos detectar a tiempo en qu´e momentos (o semanas) nuestro sistema y nuestras redes est´an fallando en sus predicciones deber´ıamos mejorar sustancialmente nuestros resultados. Esto es precisamente lo que perseguimos con la implementaci´on del sistema de fiabilidad y control de errores que desarrollamos e implementamos como parte del prototipo final.
Adicionalmente, a˜ nadimos tambi´en 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´es de lo que lo har´ıa sin nuestra intervenci´on, por lo que los resultados de una “misma operaci´on” con y sin la supervisi´on de nuestro software pueden ser distintas. Es por eso, por ejemplo, que un robot que haya realizado una u ´nica operaci´on 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
CAP´ITULO 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. Proporci´on 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. Proporci´on de operaciones con Red / sin Red.
54
4.2.
CAP´ITULO 4. RESULTADOS Y CONCLUSIONES
Resultados Finales
En esta secci´on se presentan los resultados finales de nuestro software, siendo la diferencia m´as importantes respecto a los resultados de la secci´on anterior la incorporaci´on al sistema del m´etodo de control de errores y fiabilidad descrito en la secci´on 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 informaci´on que nos proporcionaba la fiabilidad de cada red. Como m´etodo de control de errores, hemos elegido el m´etodo basando en la t´ecnica de ajuste de m´ınimos cuadrados ponderado, que recordemos que consist´ıa en utilizar las predicciones de las u ´ltimas operaciones y sus resultados finales reales para ajustar una recta que permita corregir la predicci´on nueva. Adem´as, pese a que de nuevo los datos de predicci´on y fiabilidad que obtenemos en nuestro sistema est´an planteados para ser utilizados por un agente externo, implementamos una nueva estrategia b´asica 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 predicci´on, supere un cierto umbral U . Adem´as de este umbral, debemos elegir un valor del par´ametro α utilizado en el m´etodo 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 secci´on anterior. As´ı, se eligieron aquellos par´ametros que hubieran dado mejores resultados en ese periodo de tiempo. Concretamente, estos fueron los par´ametros α = 0,3 y U = 2. Los resultados del sistema tras 3 semanas de ejecuci´on (del lunes 10/08/2014 al domingo 31/08/2014) son los que se detallan en esta secci´on. Al igual que en la secci´on anterior, realizaremos la comparativa entre los resultados obtenidos con nuestro sistema y aquellos que los robots habr´ıan obtenido sin ´el. Nos centraremos principalmente en las mismas m´etricas: El balance total de cada semana y desglosado por robot, los balances positivo y negativo y n´ umero de operaciones positivas y negativas. Adem´as, volveremos a reflejar la proporci´on entre los balances y n´ umero de operaciones que se realizan con nuestro sistema frente a los totales que se producir´ıan sin nuestra intervenci´on. Esperamos que, si nuestro sistema funciona bien, la proporci´on de balance y operaciones positivas que se realizan con nuestro sistema sea siempre mayor que la proporci´on 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´as, 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´en encontramos en esta tabla, al igual que en la secci´on anterior, la proporci´on 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 m´as favorables que en la secci´on 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. Comparaci´on 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 utilizaci´on. Todas las semanas la proporci´on de operaciones positivas respecto del total ha sido superior a la proporci´on de operaciones negativas. Todas las semanas la proporci´on de balance positivo respecto del total ha sido superior a la proporci´on 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´olo en 8 los resultados han empeorado. Lo que es m´as, la media de mejora para esos 13 son 34$, mientras que la media de empeoramiento para los otros 8 es de s´olo 15$.
Adem´as, 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 m´as importante, nuestro sistema ha realizado 58 de 90 operaciones positivas (el 64 %) y tan s´olo 32 de 78 operaciones negativas (el 41 %). Adem´as, 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
CAP´ITULO 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 precisi´on, y hemos podido utilizar esta informaci´on para manejar los robots de forma conveniente, mejorando significativamente sus resultados.
4.3.
Conclusiones
Recordemos que nuestro objetivo inicial era aplicar t´ecnicas de inteligencia artificial ´ para resolver el problema real al que se enfrentaba la empresa Talentum. Esta ten´ıa miles de robots programados y configurados, y su problema consist´ıa en elegir cu´ales 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´on. La implementaci´on del primer prototipo u ´nicamente proporcionaba una predicci´on del balance que obtendr´a cada robot si lo pusi´eramos a operar en el mercado. Para ello, utilizamos redes neuronales como predictores, y otras t´ecnicas para las distintas etapas del proceso: an´alisis principal de componentes, tests estad´ısticos, 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 esper´abamos que mejoraran tras la adici´on de las medidas de control de errores al sistema. As´ı, aplicando ideas de matem´aticas y estad´ıstica, desarrollamos e implementamos un sistema nuevo que nos proporcionara, adem´as de las predicciones, una cierta medida de la fiabilidad de ´estas. Ahora, utilizando estas dos informaciones, pod´ıamos 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 ejecuci´on durante 3 semanas m´as, logramos que el agente programado con una estrategia b´asica consiguiera realizar operaciones que sumaron un 67 % del balance positivo total, mientras que u ´nicamente dej´o pasar operaciones que sumaron un 48 % del balance negativo total. Esto permiti´o pasar de unos resultados totales por parte de los robots de p´erdidas 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 autom´atico de las redes cada cierto tiempo, para utilizar los datos nuevos. El entrenamiento de las redes asignando m´as peso a los casos obtenidos de operaciones realizadas m´as 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´as complejas para el agente externo utilizando la informaci´on proporcionada.
58
CAP´ITULO 4. RESULTADOS Y CONCLUSIONES Ampliar la parte de visualizaci´on de estad´ısticas, y en general hacer la interfaz m´as usable por un usuario menos t´ecnico. Probar otros m´etodos 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 operaci´on, como una estimaci´on del beneficio en funci´on del tiempo que est´e operando. Utilizar otras t´ecnicas de inteligencia artificial para implementar los predictores, como sistemas clasificadores o support vector machines. 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´on de error. Entrenar las redes penalizando menos las subestimaciones que las sobreestimaciones.
Bibliograf´ıa [1] Bolsa, Mercados y T´ecnicas de Inversi´on, Francisco L´opez Lubi´an, Pablo Garc´ıa Est´evez. [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 Estad´ıstica, F´elix Luis Belzunce Torregrosa, Jose Mar´ıa Ruiz G´omez. 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