El diseño de modelos predictivos es uno de
los primeros frentes del trading cuantitativo. Desde las plataformas basadas en
redes neuronales hasta los modernos generadores automatizados de código, han
sido enormes los esfuerzos por conseguir estrategias viables a base de “torturar
los datos hasta que canten”. Todos los enfoques que recurren al cómputo intensivo
de series de precios para obtener estrategias cuantitativas caen dentro del data mining. También los que exploran
los datos sobre sentimiento de mercados y los rastreadores de noticias
financieras para desarrollar estrategias del tipo event-driven.
El software de minería de datos enfocado al
trading tiene la ventaja de ser mucho más específico y sencillo que los grandes
entornos de data mining y business intelligence. Sin embargo, utiliza
una ínfima parte de los recursos y herramientas analíticas disponibles en estas
plataformas de propósito general, diseñadas para buscar todo tipo de relaciones
ocultas y hacer predicciones complejas en inmensas bases de datos. Pero
empecemos por el principio…
1.- ¿QUÉ ES
LA MINERÍA DE DATOS?
Entendemos por minería de datos un conjunto de técnicas estadísticas y de modelado de la información con las que se prende extraer de manera automatizada patrones ocultos, tendencias, anomalías, vinculaciones complejas y significados en grandes volúmenes de datos. El objetivo es crear un modelo a partir de los datos que permita, bien clasificar la información partiendo de un conjunto de reglas inferidas de los datos, bien predecir tendencias o atributos discretos y continuos. Para ello se utilizan diferentes tipos de algoritmos:
De regresión: Para identificar tendencias. La regresión lineal es la más empleada,
aunque también son frecuentes las parabólicas, polinómicas y logarítmicas. Sin
embargo estos algoritmos son bastante ineficientes en espacios
multidimensionales en los que intervienen más de dos variables. En estos casos
suele ser mejor utilizar algoritmos basados en modelos probabilísticos o
estadísticos.
De clasificación: Para predecir variables discretas o para determinar atributos
comunes. Algunos algoritmos de agrupamiento o clustering como los K-means y
los K-medoids suelen dar buenos
resultados cuando se buscan formas de agrupación basadas en la distancia entre
puntos que representan la distancia media entre elementos de un grupo. Mediante
técnicas iterativas se pueden buscar soluciones que converjan rápidamente hacia
un óptimo local, incluso en grandes conjuntos de datos.
De segmentación: Para organizar los datos en categorías y subcategorías. Los árboles
de decisión son una técnica muy empleada tanto en clasificación como en
segmentación. En determinados problemas de este tipo también serán de utilidad
algunos tipos de redes neuronales e
incluso los algoritmos de soporte
vectorial (SVM).
De series temporales: Para analizar una secuencia de eventos e
identificar patrones con una finalidad predictiva. En series sencillas algunas
técnicas de regresión pueden ser de utilidad, aunque tanto las máquinas SVM
como el deep learning funcionan muy
bien en este tipo de tareas.
De asociación: Para buscar correlaciones y vínculos no lineales en conjuntos de
datos. Esto permitirá descubrir reglas de asociación que podrán emplearse con
carácter explicativo o predictivo. Los modelos de asociación basados en casos
permiten agrupar los elementos que comparten una etiqueta o propiedad en un
espacio de búsqueda determinado. Una vez creadas las reglas de asociación y
establecida la probabilidad de ocurrencia entre elementos relacionados, el
modelo permite elaborar predicciones basadas en la concurrencia de los
elementos asociados. Un ejemplo típico de este tipo de predicciones sería
sugerir a un cliente la compra de un nuevo producto en base a las últimas
compras que ha realizado.
De interpretación: para extraer significados en el ámbito del text mining. La búsqueda de información
significativa en textos es una de las tareas más complejas del data mining. Este tipo de algoritmos
combinan técnicas de deep learning
con lingüística computacional. Un ejemplo de este tipo sería el análisis
dinámico del sentimiento del mercado partiendo de una base de noticias
financieras en tiempo real.
2.- ¿QUÉ APLICACIONES TIENE EN EL ÁMBITO DEL TRADING
CUANTITATIVO?
Las aplicaciones son muy variadas y podemos situarlas en estas tres categorías: Analíticas, predictivas y de soporte a la toma de decisiones. Existen numerosos estudios en los siguientes ámbitos:
3.- ¿QUÉ ES
RAPIDMINER?
Existen numerosas plataformas para el desarrollo de sofisticados
modelos estadísticos y el análisis predictivo de grandes paquetes de datos:
SAS, Oracle Advanced Analytics, KNIME, WEKA, IBM, Neural Designer, etc. Hemos
elegido RapidMiner ya que dispone de un potente entorno visual para para el
encadenamiento de operadores, extensiones para importar y manejar series
financieras, compatibilidad con R y una abundantísima documentación mediante
video tutoriales y aplicaciones prediseñadas para diversos escenarios.
Los operadores disponibles cubren una inmensa variedad de tareas;
desde conectividad con bases de datos y otras aplicaciones estadísticas hasta
algoritmos avanzados de clasificación, segmentación, predicción, text mining y análisis de procesos. Otro
de sus grandes atractivos es el ser una herramienta open source muy empleada en el mundo académico y gratuita para usos
no comerciales. Para seguir los ejercicios que veremos a continuación es
necesario descargar:
- RapidMiner Finance and Economics Extension
4.- CONSTRUCCIÓN DEL MODELO
Seguidamente vamos a construir un modelo predictivo sencillo empleando datos en
base diaria del S&P 500 (GSPC), las
notas del Tesoro a 10 años (TNX) y la volatilidad (VIX). El objetivo será
predecir la evolución del índice en una ventana temporal de un día. Para ello utilizaremos
dos series:
- In Sample: 2001-2015.
Construcción, entrenamiento y validación de los modelos basados en redes
neuronales y SVM.
- Out Sample: 2016-2017m. Para
realizar las predicciones a un día del cierre del S&P 500.
El esquema general del modelo a construir será:
Para la obtención de datos la
extensión Finance and Economics
cuenta con diversos operadores que permiten importar los históricos de
cotizaciones y otros muchos datos de mercados de fuentes como Yahoo, Markit,
Bloomberg, la FED y Eurostat. Para nuestro modelo elegimos el operador Yahoo Historical Stock Data que nos permitirá
extraer las series requeridas en base diaria. También debemos incorporar los
operadores Joint, para fusionar las
series de cada producto en una única tabla de datos, y Set Role para asignar la fecha como referencia vinculante en todas
las series. Esto lo hacemos poniendo a la columna “date” el atributo “id”.
Especial atención merece el operador Windowing, que nos permitirá construir un modelo predictivo multivariado convirtiendo las series en cortes o ventanas temporales de una longitud específica y “n” elementos. Cada ventana se puede desplazar en saltos de “x” intervalos temporales. En nuestro ejemplo, configuramos este operador del siguiente modo:
Donde el tamaño de la ventana es
de un día, lo que significa que en cada corte tendremos una muestra de datos
para la variable a predecir (GPSC_CLOSE) que se desliza en saltos de 1 día (step size) a lo largo de la serie. El
horizonte de la predicción (parámetro horiozon)
será también de un día.
Nuestro siguiente paso será especificar el motor de entrenamiento y validación. El operador Sliding Window Validation nos permitirá establecer el tamaño de las regiones de entrenamiento y testeo. En la primera podemos utilizar diferentes algoritmos predictivos; desde modelos simples basados regresiones lineales y polinómicas hasta modelos tipo SVM y de autoaprendizaje, como perceptrones y redes neuronales. En la ventana de testeo utilizaremos los operadores Apply Model, para aplicar el modelo construido en la región de entrenamiento a la región de validación y Forecasting Performance para calcular la calidad de la predicción en base al criterio elegido.
Para la evaluación Out-Sample basta con cortar y pegar los operadores Yahoo Historical Data, Joint, Set Role y Windowing y unir la salida de datos de Sliding Window Validation con la entrada de un nuevo Apply Model. Las únicas modificaciones a relazar son: Especificar en los operadores Yahoo las nuevas fechas de comienzo y fin de la serie O-S y en el horizonte temporal de Windowing poner el valor 0. El mapa completo de procesos tendrá este aspecto:
5.- RESULTADOS
Diversos estudios académicos sostienen que es imposible predecir la evolución de los precios de los productos cotizados a un día con fines especulativos. Es decir, el margen de error supera ampliamente el beneficio potencial una vez descontados los gastos de la operativa. Nuestro pequeño experimento parece apuntar en la misma dirección. Probamos diferentes algoritmos predictivos con resultados bastante desiguales. Las RNNs muestran en general un comportamiento pobre. El algoritmo de Deep Learning parece comportarse algo mejor que una RNN simple, en todo caso la precisión de las predicciones no supera el 50%.
Seguidamente mostramos los resultados obtenidos con algunos algoritmos de este grupo. La línea roja es la serie de cierres diarios del S&P 500 y la azul las predicciones en la región Out-Sample del valor de los cierres proyectados a un día. La imagen inferior muestra el resultado obtenido con una red neuronal simple que emplea el algoritmo de back-propagation. El modelo parece funcionar bien cuando las variaciones en los movimientos de precios son pequeñas y continuas, pero es incapaz de predecir y adaptarse a los cambios bruscos en la tendencia.
Seguidamente utilizamos una red multicapa compleja o algoritmo de Deep Learning. A diferencia del modelo anterior el algoritmo puede utilizar un número ilimitado de capas ocultas y combina un algoritmo de back-propagation junto con avanzadas técnicas de aprendizaje adaptativo que permiten una mayor precisión en las predicciones. En la imagen inferior vemos el resultado de aplicar este algoritmo:
En este caso sí se aprecia cierta
capacidad predictiva para determinar los cambios en la dirección de la
tendencia, aunque el valor de los pecios previstos está aún muy lejos del
necesario para generar algún edge
aprovechable.
Las máquinas de soporte vectorial SVM son los algoritmos más empleados en este tipo de estudios. Son muy eficientes en tareas predictivas que requieren técnicas de regresión y clasificación. Sin embargo, en la tarea que nos ocupa, aunque se consigue cierta mejora respecto a los modelos RNN, el potencial predictivo sigue estando por debajo del requerido para ser empleado como herramienta de trading. Estas son las estadísticas serie Out-Sample pronosticada con esta técnica y las de la serie real:
El histograma de ambas series es muy similar. Un alto grado de solapamiento implica mayor precisión del modelo.
Por último, la capacidad predictiva de este modelo, como podemos ver en la imagen inferior, es notablemente mejor que la obtenida mediante redes neurales y otras técnicas predictivas disponibles en RapidMiner que hemos probado y descartado debido a su bajo rendimiento.
Como ya hemos dicho, resulta muy difícil
pronosticar el valor de los cierres a un día ya que los precios siguen un paseo
cuasi-aleatorio. Sin embargo, el potencial predictivo de estos modelos aumenta
considerablemente si nos conformamos con inferir la tendencia alcista o bajista
de la próxima sesión.
6.- DATA MINING Y PREDICCIÓN DE TENDENCIAS
Una de las gandes áreas del data mining es la clasificación o etiquetado de los elementos de una serie que cumplen determinadas propiedades. La extensión Finance and Economics dispone de un operador (“Classify by Trend”) que permite determinar en series temporales de cotizaciones el sesgo alcista o bajista. Una vez etiquetados los datos diarios podremos emplear técnicas de segmentación y operadores de auto-aprendizaje para predecir tendencias. La siguiente imagen muestra el etiquetado del S&P 500 en base diaria con el operador Classify by Trend:
Otro elemento importante para mejorar la capacidad predictiva del modelo es determinar en qué grado participan o qué relevancia tienen para la predicción cada una de las series que tomamos como input. El operador evolutivo Optimize Selection seleccionará mediante un algoritmo genético los atributos más relevantes en la predicción. En nuestro caso obtenemos la siguiente tabla de resultados:
El atributo GSPC_CLOSE se utiliza por defecto para el etiquetado de las tendencias. De los otros 12 atributos comprobamos que solo 7 de ellos son relevantes para el análisis predictivo, por lo que podemos eliminar el resto, con lo que disminuiremos el tiempo de evaluación y obtendremos resultados más precisos al filtrar el ruido. Con un modelo de este tipo obtenemos una mayor precisión:
En cambió su valor predictivo
para el trading será mucho más limitado y debemos utilizar el modelo en
combinación con otros indicadores. No es lo mismo, aventurar si la tendencia a
un día será alcista o bajista que establecer los valores óptimos de entrada y
salida de una posición partiendo de un pronóstico sobre el nivel que alcanzarán
los precios en la próxima sesión. En definitiva, cuanta más información
exigimos al modelo menos precisión vamos a obtener.
En conclusión, el uso de plataformas
genéricas de minería de datos para desarrollar modelos predictivos sobre series de precios no debe tener como
objetivo el trading, sino la investigación. Por ejemplo, se pueden utilizar
estas técnicas para clasificar los mercados en función de su tendencialidad o
para encontrar cambios de régimen y alteraciones significativas en la dinámica
de las formaciones de precios. Los algoritmos SVM y k-NN son muy buenos en
tareas de clasificación, por lo que también pueden empelarse en el desarrollo
de modelos de selección de activos para
la creación de portfolios.
Andrés A. García
© Tradingsys.org, 2017