Visualización de datos en el mercado de acciones
A diferencia de una función analítica, donde el objetivo es obtener un resultado numérico para tomar una decisión, la visualización de datos permite no solo tomar decisiones. Permite también entender el contexto que se se desea analizar usando representaciones gráficas, donde los colores juegan un papel fundamental.
Por ejemplo, resultaría intuitivo que valores acompañados de una flecha verde indique que dichos valores están al alza o sufrieron un incremento.
Lo anterior no implica que la visualización de datos reemplace el análisis numérico y/o estadístico. Más bien pueden ser complementarios.
Por ejemplo, antes de usar una función de maximización, mediante visualización de datos podríamos decidir que valores no son representativos para eliminarlos.
¿Podríamos utilizar la visualización de datos para el entendimiento y toma de decisiones en el mercado de acciones?. La respuesta es, ¡¿Por qué no?!
¿Que visualizar?
Existen miles de algoritmos y/o técnicas que intentan predecir el valor de mercado de una acción. El resultado puede ser una lista, acompañada de una determinada ponderación y/o clasificación (ejemplo: comprar, no comprar).
En este artículo se diseñará un modelo de datos sobre el cuál tomaremos la decisión de comprar o no comprar una determinada acción. Para ello, nos basaremos en la variación porcentual índice IGPA de acciones chilenas.
El objetivo es decidir cuál es el rango de variación porcentual que maxima nuestra probabilidad de que estas acciones suban de precio dentro de un año.
Extracción de datos
Usaremos el paquete investpy, el cuál extrae información financiera desde el sitio investing.com mediante APIs.
Para más información, visitar https://pypi.org/project/investpy
El script en Python para obtener el precio histórico de las acciones del IGPA se encuentra aquí
En un primer acercamiento, podemos visualizar el IGPA de los últimos 25 años

Definición de datos a visualizar
El objetivo es generar un gráfico en dos dimensiones que permita distinguir como se comporta el precio de una acción entre dos años consecutivos.
Definimos entonces la información contenida en los ejes X e Y de la siguiente forma
Eje X: Variación porcentual de cada acción durante el último año (365 días)
Eje Y: Variación porcentual que tendrá cada acción dentro de un año (365 días).
Esto implica crear dos nuevas columnas en el conjunto de datos para incluir estos valores
Ejemplo
La acción A varió un 2% entre la semana 10 de 2004 y la semana 10 del 2005.
La misma acción A varió luego un -1% entre la semana 10 de 2005 y la semana 10 del 2006.
Tendríamos entonces las dos nuevas columnas; una para la variación porcentual durante el último año y otra para la variación porcentual para el año siguiente
| Acción | Semana | Variación Porcentual (año anterior) | Variación Porcentual (año siguiente) |
| A | 200510 | 0.02 | -0.01 |
Esto debe hacerse para cada acción y cada semana mediante la operación MERGE/LEFT JOIN
El código para realizar estas operaciones y obtener los gráficos que se muestran a continuación se encuentra aquí
Visualización de datos
Teniendo las dos columnas adicionales, procederemos a generar un gráfico de dispersión
Esto representa un total de 36400 puntos a graficar (50 acciones x 52 semanas x 14 años)
El detalle del código empleado para estas gráficas se encuentra aquí
Gráfico de dispersión

Se grafica, ente caso, cada uno de los puntos correspondientes a la columnas yearly_var (eje x) además de yearly_var2 (eje y).
La alta cantidad de datos no permite obtener conclusiones valiosas más allá de apreciar que la mayoría de los puntos se distribuyen entre -0.5 < x < 1. Esto es esperable; es extremadamente improbable encontrar acciones que varíen entre -50% y 100% entre un año y otro.
Una opción sería reducir el conjunto de puntos a graficar. A menos que sepamos exactamente que datos no añaden valor o están correlaciones con otros, eliminar parte de ellos iría contra uno de los principios de la minería de datos (dejar que los datos hablen).
Gráfico de Hexágonos
Tomando los mismos datos anteriores, nos disponemos a usar la función JOINTPLOT de Seaborn con la variante HEX. Esta instrucción divide el gráfico de dos dimensiones en múltiples hexágonos y asigna un color a cada uno de estos hexágonos en base a la densidad de puntos.

En este caso tenemos un mejor entendimiento de los datos. Las áreas de mayor densidad están cercanas al origen (x=0, y=0). Esto tiene sentido ya que el valor porcentual de una acción varía generalmente en un rango menor a 10% entre un año y otro
Mapa de Densidad (Kernel Density)
Para generar esta gráfico, usaremos la función JOINTPLOT de Seaborn.
Esta vez mediante el uso la variante KDE

Esta gráfica permite visualizar de mejor manera la variación porcentual entre dos años seguidos.
La áreas más oscuras representan mayor densidad de puntos.
Al igual que en el caso del gráfico de hexágonos, este mapa de calor indica que la mayor densidad de puntos está cercana al origen (0,0).
¿Es posible mediante este gráfico responder la siguiente pregunta?
¿Qué acciones debiera comprar ahora con el fin de venderlas dentro de un año con la mayor ganancia posible?
No existe seguridad, de acuerdo al último gráfico, que una acción vaya a subir de precio.
Existe siempre una probabilidad, tanto de que suba como que baje de precio.
Sin embargo, podemos movernos a lo largo del eje X para comprobar si existe alguna combinación que permita obtener una mayor probabilidad de tener una acción al alza que a la baja.
Entre los valores -0,5 y 0 de eje X no se aprecia tal diferencia. Cada combinación del eje X parece tener la misma probabilidad de que suba o baje en la misma proporción en el eje Y.
Por otro lado, el rango correspondiente a 0,35 < X < 0,4 permite visualizar que el mínimo y máximo valor en el eje Y corresponde a 0,25 y 0,4 (aproximada y respectivamente).
Es decir, una acción cuyo precio aumentó en 35% durante el último año, es más probable que vuelva a aumentar su valor en los próximos 365 días a que disminuya.
Viendo el lado positivo, la distribución normal indica que es más probable obtener un retorno positivo que uno negativo. Esto se suma a la idea de que las estrategias a largo plazo vencen al daily trading
Conclusiones
En ocasiones es más simple visualizar datos y tomar decisiones directamente sobre ellos, en lugar de generar funciones analíticas o de optimización (las cuáles tomarían más tiempo en diseño).
Como regla general, no fue posible identificar oportunidades de inversión, salvo en los puntos cercanos X=0,35. En este caso podríamos afirmar que es posible concluir mediante interpretación visual que este punto permite maximizar la probabilidad de obtener un retorno positivo en los próximos 365 días,
Por otro lado, al observar la distribución de probabilidad que se encuentra al costado derecho del Mapa de Densidad, es posible apreciar que se trata prácticamente de una distribución de Gauss.
Esta distribución no es perfectamente simétrica, sino que presenta una leve inclinación hacia la sección positiva del eje Y, indicando que existe una probabilidad mayor de que una acción cualquiera vaya al alza a que vaya a la baja.
Esto tiene sentido, ya que a largo plazo podemos comprobar que el precio de las acciones y los índices bursátiles en general suben de valor a través del tiempo. Esto se suma a la idea de que las estrategias a largo plazo vencen al daily trading.
Ventajas
Utilizar las librerías gráficas que ofrece Python permite ahorrar tiempo al compararnos con la construcción de modelos analíticos.
Observar un gráfico permite entender de mejor forma un conjunto de datos al compararnos con la observación de datos en una tabla plana
Desventajas
Estamos tomando todas las acciones del IGPA, sin considerar el hecho de que distintas industrias pueden sufrir cambios más fuertes en precio. Por lo tanto, las conclusiones aquí obtenidas son generales, pudiendo en una segunda etapa realizar un análisis separado por sector económico.
Es necesario construir el tipo de gráfico adecuado y en la escala precisa para poder obtener conclusiones valiosas.