Aprendizaje Automático en Trading
Aprendizaje Automático en Trading
Ishan Shah
Rekhit Pachanekar
Instituto Cuantitativo
Machine Translated by Google
Contenido
I Introducción 5
Prefacio 6
Reconocimiento 12
10 Regresión logística 97
CONTENIDO
Referencias 219
2
Machine Translated by Google
Si buscas una introducción al aprendizaje automático para el trading, no hay nada mejor que
el nuevo libro de Shah y Pachanekar. Te guiarán desde los conceptos básicos hasta la
metodología avanzada de la industria.
Es un libro sumamente práctico, lleno de instrucciones paso a paso, código fuente y
explicaciones. Para aquellos interesados en adquirir conocimientos serios sobre el ámbito del
trading con aprendizaje automático, recomiendo encarecidamente este libro.
Andreas F. Clenow, director de inversiones de Acies Asset Management y autor de los best
sellers Following the Trend, Stocks on the Move y Trading Evolved
Machine Translated by Google
Prefacio
Hay muchos libros sobre aprendizaje automático, pero la mayoría de los autores se centran en
mostrando sus credenciales en matemáticas y habilidades de programación en lugar de enseñar
habilidades prácticas. Fiel a sus raíces educativas, este libro
Por Ishan Shah y Rekhit Pachanekar de QuantInsti hace lo contrario.
Ya sea que lea los capítulos secuencialmente como un libro de texto o lo use como un...
Diccionario para buscar temas especiales, es invaluable para el comerciante práctico.
¿Quién necesita estas habilidades para sobrevivir en el mundo ultracompetitivo del comercio
cuantitativo actual?
Parte I
Introducción
Machine Translated by Google
Prefacio
Machine Translated by Google
— Bill Gates
7
Machine Translated by Google
En 1950, Alan Turing creó un test, llamado “Test de Turing”, para determinar si una máquina era lo
suficientemente “humana”. Para ello, la máquina debía interactuar con una persona real. En dichas
interacciones, si la persona consideraba que el comportamiento de la máquina era indistinguible del
de un humano, la máquina aprobaba el test.
Google lanzó recientemente un asistente de voz con inteligencia artificial que podría reservar citas
llamando al establecimiento y conversando con la recepcionista.
Arthur Samuel escribió el primer programa informático de aprendizaje para jugar a las damas.
Estudió los movimientos anteriores y los incorporó a sus movimientos cuando jugó contra un
oponente. Hoy, la inteligencia artificial DeepMind de Google ha derrotado a un jugador humano en el
juego de mesa Go!, una hazaña que antes se creía imposible. Todo esto, gracias al aprendizaje
automático.
El aprendizaje automático tiene diversas aplicaciones. Desde pronósticos agrícolas hasta estimaciones
de precios de acciones, se puede utilizar prácticamente en cualquier lugar donde haya que analizar
datos. Algunos algoritmos de aprendizaje automático desvelan información que ni siquiera sabías
que existía.
¡En el mundo actual generamos más datos que nunca! Según el Foro Económico Mundial, en 2025
generaremos casi 463 exabytes (es decir, mil millones de GB) de datos cada día.
Obviamente, un ser humano no podrá seguir el ritmo de la sobrecarga de datos, y los programas
informáticos convencionales podrían no ser capaces de manejar cantidades tan grandes de datos.
8
Machine Translated by Google
¿Por qué se escribió este libro? El aprendizaje automático es un tema muy amplio si se tienen
en cuenta las distintas disciplinas que se originaron a partir de él. También se oyen palabras
de moda como IA, redes neuronales, aprendizaje profundo e ingeniería de IA asociadas al
aprendizaje automático.
Nuestro objetivo en este libro es desmitificar estos conceptos y aclarar en qué se diferencia el
aprendizaje automático de la programación convencional y, además, cómo se puede utilizar
para obtener una ventaja en el ámbito del trading.
Hemos estructurado el libro de tal manera que inicialmente aprenderás sobre las distintas
tareas que lleva a cabo un algoritmo de aprendizaje automático.
Cuando sea apropiado, se le presentará el código necesario para ejecutar estas tareas. Si tiene
conocimientos de programación en Python, podrá leer estas secciones rápidamente y
comprender los conceptos con facilidad.
Una vez que se cubren los conceptos básicos de las tareas de ML, avanzamos y analizamos
varios algoritmos de ML, un capítulo a la vez. Desarrollaremos los conceptos y le brindaremos
una guía paso a paso sobre cómo se puede convertir una idea en reglas y aplicar el aprendizaje
automático para probar esta idea en datos del mundo real. Y si está satisfecho con los
resultados, avance e impleméntelos en la vida real.
¿Quién debería leer esto? Creemos que también puede ser útil para:
9
Machine Translated by Google
• Cualquiera que haya oído hablar de los algoritmos de aprendizaje automático y esté
entusiasmado por saber más.
Como dijimos anteriormente, no queremos que los lectores de este libro sean programadores
de computadoras, ya que hemos tratado de mantener el texto simple con muchos ejemplos
del mundo real para ilustrar varios conceptos.
¿Qué contiene este libro? El material que se presenta aquí es una introducción básica al
mundo del aprendizaje automático. Puede pensar en él como un libro que le cuenta los
fundamentos del aprendizaje automático y cómo se aplica en la vida real.
Desde el principio, creemos que la teoría por sí sola no es suficiente para retener el
conocimiento. Es necesario saber cómo se pueden aplicar estos conocimientos en el mundo
real. Por ello, nuestro libro contiene muchos ejemplos del mundo real, especialmente en el
ámbito del trading. Pero tenga la seguridad de que estos conceptos se pueden transferir a
cualquier otra disciplina que requiera el análisis de datos.
¿Cómo leerlo? La forma ideal de leer este libro es capítulo por capítulo. Pero también puedes
probar otras opciones, como:
¿Dónde más se puede encontrar todo esto? El aprendizaje automático existe desde hace más
de medio siglo. De hecho, la palabra «robota», que hace referencia a una máquina con
aspecto humano, se mencionó por primera vez en una obra de teatro checa en 1920.
De esta forma, se puede encontrar una gran variedad de información relacionada con el
aprendizaje automático en forma de blogs, cursos, vídeos y otros medios. Y también hay
recursos gratuitos. La idea de este libro era presentar el conjunto básico y los principios del
aprendizaje automático en un lenguaje fácil de entender y, además, de forma compacta.
10
Machine Translated by Google
Licencia de derechos de autor Esta obra está bajo la Licencia Creative Commons Atribución
CompartirIgual 4.0 Internacional.
Código y datos utilizados en el libro Puedes descargar todos los archivos de código y datos
desde el enlace de Github: '[Link] También
actualizaremos los códigos y archivos de datos en el mismo enlace.
Sugerencias y errores Creemos que ninguno de nosotros es perfecto en este mundo. Todos
nos esforzamos constantemente por mejorar y nosotros no somos diferentes. Por lo tanto, sus
sugerencias y comentarios son bienvenidos. Puede decirnos cualquier cosa que podamos
mejorar o simplemente escribirnos a quantra@[Link].
11
Machine Translated by Google
Reconocimiento
Cuando iniciamos este proyecto, lo sentimos como una simple transferencia de conocimientos.
De los autores a usted, el lector. En retrospectiva, este libro ha sido más que eso. A lo largo
del camino, hubo muchas discusiones con personas talentosas de diferentes equipos y
funciones. En QuantInsti, creemos en el poder de la colaboración y este libro es otro ejemplo
de un esfuerzo en equipo con el único objetivo de transmitir conocimiento de una manera
lúcida que sea interesante e informativa.
Con esto en mente, nos gustaría agradecer a nuestro propio equipo de investigación y
contenido de Quantra, Rishabh, Satyapriya y Kevin, quienes trabajaron en horarios extraños,
revisando el libro en varias etapas y brindándonos consejos útiles durante todo nuestro viaje.
De cara al futuro, nos gustaría extender nuestra gratitud al equipo de contenido de EPAT,
especialmente a Vivek, Ashutosh, Anshul, Mario y Jay, por brindarnos comentarios críticos y
asegurarse de que nos mantuviéramos en el camino correcto. Además, gracias a Aiman, Kshitij
y Viraj, por apoyarnos con comentarios sobre varios aspectos del libro.
Nos gustaría agradecer al Dr. Thomas Starke y a Andreas Clenow por sus valiosos comentarios
para aumentar la calidad del contenido cubierto en este libro.
También queremos expresar nuestro agradecimiento a Anupriya y Nitesh por creer en nosotros
cuando emprendimos nuestro ejercicio de escritura. Por último, nos gustaría agradecerte a ti,
querido lector, porque estás a punto de invertir el activo más valioso que tienes en este mundo,
tu tiempo, mientras lees el libro.
Machine Translated by Google
1
Introducción a la máquina
Aprendiendo
El aprendizaje automático ha sido un tema candente durante décadas. Sin embargo, la investigación en este
campo había declinado a fines del siglo XX. Había dos cosas que obstaculizaban el progreso del aprendizaje
automático.
1. Los recursos informáticos necesarios para el aprendizaje automático eran prohibitivamente caros y, por
lo tanto, sólo las grandes instituciones eran capaces de invertir en su investigación.
2. El aprendizaje automático requiere datos para aprender. En el comienzo, estos datos eran difíciles de
obtener.
Pero con la revolución de la industria informática, los recursos informáticos se abarataron y la cantidad de datos
generados se multiplicó por diez. Se trataba de datos digitales, por lo que incluso su adquisición se volvió más
barata. Todo esto contribuyó a un aumento repentino del progreso del aprendizaje automático. Esto ha dado
como resultado que numerosas bibliotecas de aprendizaje automático sean capaces de procesar años de datos
en segundos. ¡Incluso en su computadora personal!
¿Por qué debería utilizar el aprendizaje automático? El mundo avanza hacia la automatización y el aprendizaje
automático, y el sector financiero no es la excepción.
Zest AI, que desarrolla soluciones de inteligencia artificial para prestamistas, ayuda a los prestamistas de
automóviles a evaluar a los clientes potenciales y les asesora sobre la tasa de préstamo correcta que se les debe cobrar.
[Link] afirma que después de usar su modelo ML para evaluar a los clientes, redujo la tasa de
incumplimiento del primer pago del 32% al 8%.
¿Qué pasa con el aprendizaje automático en el trading? Los algoritmos de aprendizaje automático (ML) pueden
crear una cartera de inversiones para usted. Un asesor humano tiene que estudiar los mercados y obtener
certificaciones de asesoramiento para tener la confianza suficiente.
Machine Translated by Google
para sugerir una cartera a sus clientes. Por otro lado, un algoritmo de ML puede realizar la
misma tarea en segundos. Betterment y Wealthfront son empresas que brindan servicios de
inversión a través de su plataforma de aprendizaje automático.
Tomemos un ejemplo sencillo para ilustrar este concepto. En primer lugar, el algoritmo ML
recibe los detalles de todos los clientes y sus respectivas carteras como entrada. A
continuación, el algoritmo ML aprende la relación entre la cartera recomendada y las
características del cliente (a partir de nuestros datos de entrada). Después de esto, el modelo
está listo para hacer recomendaciones para la cartera de cualquier cliente en función de sus
características (como edad, ingresos, situación laboral, etc.). Por ejemplo, si el cliente es una
mujer de 25 años con un alto apetito de riesgo, el modelo, basándose en patrones previos
aprendidos, sugeriría una cartera inclinada hacia acciones tecnológicas como Apple y
Facebook.
Los algoritmos de ML son muy rápidos y es probable que hagan esto en cuestión de segundos.
La ventaja de la velocidad es aprovechada por los fondos de cobertura que utilizan el comercio
algorítmico. Renaissance Technologies es solo un ejemplo entre cientos de fondos impulsados
por IA. Se sabe que Renaissance Technologies utiliza el aprendizaje automático en sus
estrategias comerciales y tiene alrededor de 55 mil millones de dólares en activos bajo su
administración. Varios fondos de cobertura y empresas de comercio de alta frecuencia
confían en el aprendizaje automático para crear sus estrategias comerciales.
Fuente: [Link]
outperformingthehedgefundbenchmark
En un informe de 2019, Preqin informó que siguió el desempeño de 152 fondos de cobertura
impulsados por ML e IA. Preqin comparó el desempeño de los fondos de IA
14
Machine Translated by Google
¿El aprendizaje automático es solo para fondos de cobertura y grandes instituciones? Eso fue
así durante mucho tiempo, pero ya no. Con la llegada de la tecnología y los recursos de
ciencia de datos de código abierto, los comerciantes minoristas y los particulares también han
comenzado a aprender y utilizar el aprendizaje automático. Tomemos un ejemplo.
Supongamos que comprende la tendencia del mercado. Tiene una estrategia comercial
sencilla que utiliza algunos indicadores técnicos que le ayudan a predecir la tendencia del
mercado y operar en consecuencia. Mientras tanto, otro operador utiliza el aprendizaje
automático para implementar la misma estrategia comercial. Aunque, en lugar de unos pocos
indicadores técnicos antiguos, permitirá que la máquina revise cientos de indicadores técnicos.
Deja que la máquina decida qué indicador funciona mejor para predecir la tendencia correcta
del mercado. Mientras que el operador habitual podría haberse conformado con el RSI o la
MA, el algoritmo ML podrá revisar muchos más indicadores técnicos y elegir los mejores, en
términos de poder de predicción.
Este libro le brinda una guía detallada y paso a paso para crear una estrategia comercial de
aprendizaje automático.
15
Machine Translated by Google
Respondamos algunas preguntas relacionadas con el aprendizaje automático antes de pasar a un modelo
de aprendizaje automático de la vida real.
¿Qué es el aprendizaje automático? Una diferencia clave entre un algoritmo regular y un algoritmo de
aprendizaje automático es el modelo de “aprendizaje”, que permite que el algoritmo aprenda de los datos
y tome sus propias decisiones.
Esto permite que las máquinas realicen tareas que de otro modo les resultarían imposibles. Dichas tareas
pueden ser tan sencillas como reconocer la escritura humana o tan complejas como los coches
autónomos.
Por ejemplo, supongamos que se supone que un algoritmo debe distinguir correctamente entre un rostro
masculino y uno femenino a partir de un grupo de fotos de documentos de identidad. Se entrenaría un
algoritmo de aprendizaje automático (ML) en una parte de los datos para "aprender" a reconocer cualquier
rostro. Mientras que un algoritmo simple no sería capaz de realizar esta tarea, un algoritmo de ML no solo
podría categorizar las fotos como entrenadas, sino que aprendería continuamente de los datos de prueba
y aumentaría su "aprendizaje" para volverse más preciso en sus predicciones.
¡Recuerde con qué frecuencia Facebook (FB) le pide que etiquete a la persona que aparece en la foto!
Entre miles de millones de usuarios, los algoritmos de aprendizaje automático de FB son capaces de
hacer coincidir correctamente diferentes fotos de la misma persona e identificarla. La función de piloto
automático de Tesla es otro ejemplo.
¿Cómo aprenden las máquinas? La respuesta es sencilla: ¡igual que los humanos!
En primer lugar, recibimos información sobre una cosa determinada, que se almacena en nuestra mente.
Si nos encontramos con la misma cosa en el futuro, nuestro cerebro es capaz de identificarla. Además,
las experiencias pasadas nos ayudan a tomar mejores decisiones en el futuro. Nuestro cerebro se entrena
a sí mismo identificando las características y patrones en el conocimiento/datos recibidos, lo que le permite
identificar o diferenciar con éxito entre varias cosas.
El aprendizaje automático es uno de los enfoques más populares en el campo de la inteligencia artificial.
Uno de los aspectos clave del aprendizaje automático es el uso de datos nuevos y continuos para iterar y
seguir aprendiendo.
Hay muchas industrias clave en las que el ML está teniendo un gran impacto: servicios financieros,
logística, marketing y ventas, atención médica, etc. Se espera que en
16
Machine Translated by Google
¿Cuál es la diferencia entre Machine Learning, Deep Learning e Inteligencia Artificial? La gente
suele confundir estos términos, por eso hemos creado una infografía que te ayudará a aclarar
estos conceptos.
17
Machine Translated by Google
Piense en el aprendizaje supervisado como si fuera un niño que está aprendiendo las tablas
de multiplicar. Dígale al niño la tabla de multiplicar del 2 hasta 2 por 5. Luego, el niño deduce
la lógica de que tiene que sumar 2 para obtener la siguiente respuesta en la tabla de
multiplicar. Luego, dice que 2 por 6 es 12. Al crear modelos de aprendizaje supervisado, los
datos de entrenamiento contienen las respuestas requeridas o el resultado esperado. Estas
respuestas requeridas se denominan etiquetas. Por ejemplo, si los datos de entrenamiento
contienen los indicadores técnicos como RSI y ADX, así como la posición comercial a tomar,
como comprar o vender, entonces se conoce como el enfoque de aprendizaje supervisado.
Los modelos supervisados se entrenan con conjuntos de datos etiquetados. Puede tratarse
de una etiqueta continua (regresión) o de una etiqueta categórica (clasificación).
Modelos de regresión La regresión se utiliza cuando se trabaja con valores continuos, como
el costo de una casa, cuando se le dan características como la ubicación, el área cubierta, los
precios históricos, etc. Modelos de regresión populares
son:
• Regresión lineal
18
Machine Translated by Google
• Regresión Lasso •
Regresión Ridge
Modelos de clasificación La clasificación se utiliza para datos que se dividen en categorías, cada
una de las cuales está representada por una etiqueta. Los datos de entrenamiento deben contener
las etiquetas y deben tener suficientes observaciones de cada etiqueta.
• Clasificadores de árboles de
decisión • Clasificadores de bosques
aleatorios • Clasificadores de redes neuronales
Clasificación binaria
Este tipo de clasificación tiene solo dos categorías. Por lo general, son valores booleanos: 1 o 0 (a
veces conocidos como Verdadero/Falso o Alto/Bajo). Algunos ejemplos en los que se podría
utilizar esta clasificación son la detección de cáncer o la detección de correo no deseado. En la
detección de cáncer, las etiquetas serían positivas o negativas para el cáncer. De manera similar,
las etiquetas para la detección de correo no deseado serían spam o no spam. También puede
convertir el comercio en un problema de clasificación binaria con etiquetas como comprar y vender,
o comprar y ninguna posición.
Clasificación multiclase
Los clasificadores multiclase o multinomiales pueden distinguir entre más de dos clases. Por
ejemplo, puede tener tres etiquetas, como comprar, sin posición o vender.
Este tipo de clasificación se produce cuando una sola observación contiene varias etiquetas. Por
ejemplo, una sola imagen podría contener un coche, un camión y una persona. El algoritmo debe
poder clasificar cada uno de ellos por separado.
Por lo tanto, debe entrenarse para muchas etiquetas y debe informar "Verdadero" para cada uno de los
objetos, es decir, un automóvil, un camión y un humano, y "Falso" para cualquier otra etiqueta para la
que se haya entrenado.
19
Machine Translated by Google
En un sistema de este tipo, se supone que los grupos descubiertos coincidirán razonablemente bien con
una clasificación intuitiva. Por ejemplo, la agrupación de acciones en función de datos históricos dará
como resultado la agrupación de las acciones que pertenecen al mismo sector o grupo industrial.
También puede haber algunas sorpresas, como que Facebook y Twitter puedan formar parte de un
grupo diferente aunque pertenezcan al mismo sector.
Otra aplicación del aprendizaje no supervisado es la detección de anomalías. Esta utiliza un algoritmo
de agrupamiento para descubrir los valores atípicos más importantes en un gráfico. Estos se utilizan
para detectar fraudes con tarjetas de crédito y para detectar un desplome del mercado o una caída de la bolsa.
eventos del cisne.
El aprendizaje por refuerzo toma acciones para maximizar las recompensas. No es un tipo de aprendizaje
supervisado porque no depende estrictamente de datos supervisados o etiquetados. Y tampoco es un
aprendizaje no supervisado, ya que modifica el modelo de acuerdo con la recompensa final. La
característica especial de estos modelos es que intentan aprender de sus errores y tomar mejores
decisiones en ejecuciones posteriores. Un buen ejemplo de este tipo de modelo de aprendizaje
automático puede ser el robot AlphaGo controlado por computadora para jugar al juego de mesa Go. Se
pueden utilizar agentes de aprendizaje automático similares para el comercio.
Un activo.
Para ayudarlo a comenzar, hemos creado una explicación paso a paso de las diferentes tareas que se
llevan a cabo durante la creación y ejecución del aprendizaje automático.
20
Machine Translated by Google
21
Machine Translated by Google
Parte II
Aprendizaje automático
Marco de implementación
Machine Translated by Google
Cuando se utiliza el aprendizaje automático, hay algunas cosas que hay que tener en cuenta antes de
pasar la información a un algoritmo de aprendizaje automático. En general, se realizan las siguientes
tareas.
El señor Rob Read, un operador de Manhattan, busca utilizar un algoritmo de aprendizaje automático
que le permita saber cuándo comprar acciones de JP Morgan. Para ello, acude a un proveedor de
datos para obtener los datos de precios.
Luego se asegura de que la calidad de los datos sea buena. Para ello, comprueba si hay valores
faltantes o duplicados en los datos. Realiza otros análisis para garantizar que los datos se puedan
utilizar con el algoritmo de aprendizaje automático.
Ahora, Rob quiere que el algoritmo ML prediga cuándo comprar acciones de JP Morgan.
Marca los días en que el precio del día siguiente es mayor que el precio de ese día como 1. Y el resto
de los días los marca como cero.
Pero, ¿qué se necesita como entrada para predecir la variable objetivo? Las entradas del algoritmo de
aprendizaje automático se denominan variables de características. Utiliza indicadores como el RSI,
el MACD e incluso indicadores de impulso como el ADX.
¿Cómo evalúa si el modelo de aprendizaje automático es eficaz? Para ello, divide los datos en
entrenamiento y prueba.
El algoritmo utiliza los datos del entrenamiento para aprender la relación entre las variables de
características y el objetivo. Esta relación se denomina modelo ML.
De esta manera, el algoritmo aprenderá cómo se relacionan las variables de características y las
variables de destino mediante el uso del conjunto de datos de entrenamiento y verificará el rendimiento
del modelo en el conjunto de datos de prueba.
¿Qué métricas se pueden utilizar para evaluar el modelo? Dado que ha creado la variable objetivo de
antemano, dispone de las señales reales. Puede comparar fácilmente las señales previstas del modelo
de aprendizaje automático con los datos reales.
23
Machine Translated by Google
Por ejemplo, el modelo ML predijo una señal de 1 el 8 de julio de 2021. Esto significa
que el modelo ML cree que el precio el 9 de julio de 2021 sería más alto que el 8 de
julio de 2021.
Por último, genera señales a través del modelo de aprendizaje automático y las prueba
retrospectivamente. Grafica la curva de capital y la caída para analizar el rendimiento en
mayor profundidad.
Esta fue una breve descripción general de las tareas de ML. Profundicemos en cada
uno de estos pasos e implementémoslos en Python.
24
Machine Translated by Google
Definiendo el problema
Declaración, objetivo y característica
Como sugiere el nombre, el enunciado del problema indica el problema que se desea resolver. Es
lo que se desea obtener como resultado del algoritmo de aprendizaje automático.
—Charles Kettering
Todos sus esfuerzos se dedicarán a resolver este enunciado del problema. En aplicaciones
comerciales, el enunciado del problema puede ser:
Para los propósitos de este libro, nuestro planteamiento del problema será: "¿Comprar acciones de
JP Morgan en un momento dado o no?"
Rob define comprar cuando el rendimiento esperado al día siguiente es positivo y vender si el
rendimiento esperado al día siguiente es negativo.
Rob toma los datos históricos de los retornos y comienza a marcar estos días como compra y venta.
0,007 Comprar
0,002 Vender
0,02 Comprar
0,005 Vender
Esta columna marcada como compra y venta se denomina variable objetivo. En el aprendizaje
automático, se indicará con la letra "y" la variable objetivo.
De manera similar, puedes crear una variable objetivo en función de los diferentes enunciados de
problemas que estarás resolviendo.
Por ejemplo, Mary quiere crear un algoritmo de aprendizaje automático para predecir el precio de
las acciones de JP Morgan al final del siguiente día de negociación. En este caso, la variable
objetivo será una serie de datos de precios de cierre.
2.3 Características
Supongamos que no existe un modelo de aprendizaje automático y Rob tiene que tomar esta
decisión por su cuenta.
¿Qué datos o información necesitaría Rob para tomar esta decisión? ¿Puedes ayudar a Rob?
26
Machine Translated by Google
Rob pasa toda esta información al modelo ML, que a su vez procesa esta información y le
indica a Rob que compre o venda. La información, como la volatilidad, que Rob pasa al modelo
ML se denomina características.
Es importante tener en cuenta que la información que Rob le pasó al modelo de aprendizaje
automático debe ser de buena calidad. Estarás de acuerdo en que una mala calidad de la
información de entrada producirá una salida deficiente y engañosa. El dicho común es: "basura
que entra, basura que sale".
Rob tiene que limpiar los datos y luego introducirlos en el modelo ML.
Rob estaba entusiasmado y comenzó a recopilar todos los datos que tenía y los preparó para
pasarlos al modelo ML. Por capricho, también decidió recopilar el historial de precios de las
manzanas durante el mismo período de tiempo para usarlo como una característica en su
modelo ML.
¿Qué utilidad tendrán estos datos? No serán útiles en absoluto. El precio de la fruta no tendrá
poder predictivo sobre el precio de las acciones de la empresa Apple Inc. Por lo tanto, antes
de pasar cualquier dato al modelo de ML, Rob debe asegurarse de que cada característica
sea relevante y tenga algún poder predictivo.
Pero, aunque los datos sean relevantes, hay algo importante que comprobar. Veamos en qué
consiste este punto en la siguiente sección.
27
Machine Translated by Google
largo del tiempo. Por ejemplo, se dice que el precio de una acción, que ha fluctuado entre $8 y $9 desde
que comenzó a cotizar, es estacionario. Tenga en cuenta que esta característica no es obligatoria para
todos los algoritmos de aprendizaje automático.
Veamos otro ejemplo. El modelo de aprendizaje automático aprende que, a medida que el índice S&P
500 aumenta, el índice de volatilidad (VIX) disminuye y viceversa. Un algoritmo básico de aprendizaje
automático, al observar un aumento constante en el precio del SP500 a lo largo de los años, comenzaría
a predecir que el VIX caería a cero y luego entraría en la zona negativa, mientras que esto nunca
sucederá.
Rob ahora ha comprendido este concepto y casi ha decidido las características que se agregarán.
Finalmente, quiso incluir la volatilidad de las acciones en su modelo, pero ¿qué debería incluir en su
modelo, la volatilidad semanal o mensual, o ambas?
Dado que ambas características, la volatilidad semanal y mensual, están altamente correlacionadas
entre sí, agregar ambas no agregará ninguna información adicional al modelo.
En cambio, mantenerlos juntos en el modelo podría agregar más peso a la información que contiene
cada uno de ellos individualmente. Por lo tanto, Rob decide descartar uno de ellos. Por lo tanto, para
asegurarse de obtener resultados confiables, debe asegurarse de que se cumplan las condiciones
anteriores.
• Las características son la entrada que se le da al modelo ML para hacer predicciones. • Cada
característica que se pasa al modelo ML debe ser relevante y tener algún poder predictivo. • La
mayoría de los modelos ML requieren
características estacionarias para hacer predicciones.
ciones.
• Las características correlacionadas pueden añadir peso a la información que contiene cada una
de ellas individualmente. Por lo tanto, se desean características no correlacionadas.
En el próximo capítulo, veremos cómo puedes crear estos objetivos y características en Python.
28
Machine Translated by Google
Este capítulo está creado especialmente para que puedas entender cómo aplicar los conocimientos que
has aprendido hasta ahora en un entorno de programación como Python.
Ha decidido que quiere operar en JP Morgan. Más específicamente, quiere diseñar un algoritmo de
aprendizaje automático que le ayude a decidir si debe invertir en JP Morgan en un momento determinado.
Por lo tanto, el enunciado del problema es el siguiente:
El propósito es:
Para codificar las variables de destino y características en Python, necesitaremos algunas bibliotecas o
paquetes, y también los datos históricos de JP Morgan.
Para leer un archivo CSV, puedes utilizar el método read_csv de pandas. La sintaxis se
muestra a continuación:
Sintaxis:
nombre_archivo: Ruta completa del archivo y nombre del archivo en formato de cadena.
30
Machine Translated by Google
Variable objetivo
Siempre que la etiqueta sea 1, el modelo indica una señal de compra . Y siempre que la
etiqueta sea 0, el modelo indica una señal de no compra . Asignaremos 1 a la columna de
señal siempre que los rendimientos futuros sean mayores que 0.
¿Recuerdas cómo Rob analizó los retornos del día siguiente para formar las variables objetivo,
compra o venta, para ese día? Aquí se aplica el mismo concepto.
Como queremos obtener rendimientos futuros, trasladaremos el cambio porcentual del período
actual al período anterior. Esto se puede hacer utilizando el método shift de pandas.
Sintaxis:
DataFrame[columna].pct_change().shift(período)
[11]: # Crea una columna 'future_returns' con el cálculo del cambio porcentual
data['future_returns'] =
data['close'].pct_change().shift(1)
datos[['cerrar','señal']].head()
31
Machine Translated by Google
Como puede ver en la tabla anterior, el precio de cierre de la segunda a la tercera fila aumenta
y, por lo tanto, la columna de señal en la segunda fila está marcada como 1. En otras palabras,
si compra cuando la columna de señal es 1, obtendrá ganancias positivas. Nuestro objetivo
es desarrollar un modelo de aprendizaje automático que pueda predecir con precisión cuándo
comprar.
Características Para predecir la señal, crearemos las variables de entrada para el modelo ML.
Estas variables de entrada se denominan características. Las características se conocen
como X. Puede crear características de tal manera que cada característica en su conjunto de
datos tenga algún poder predictivo.
[4]: # Crea una columna 'pct_change' con el cambio porcentual anterior de 15 minutos
data['pct_change'] =
data['close'].pct_change()
A continuación, calcularemos los indicadores técnicos RSI y ADX. Esto se puede hacer
utilizando el método RSI y ADX de la biblioteca talib.
Sintaxis:
Dado que hay 6,5 horas de negociación en un día y nuestros datos son de 15 minutos, el
período de tiempo será 6,5*4.
32
Machine Translated by Google
Ahora crearemos la media móvil simple y la correlación continua del precio de cierre. Esto se
puede hacer utilizando el método mean y corr de la biblioteca pandas.
Sintaxis:
DataFrame[columna].rolling(ventana).mean()
DataFrame[columna].rolling(ventana).corr()
ventana=int(6.5*4)).media()
.corr(datos['sma'])
Calculemos ahora la volatilidad de las acciones. Esto se puede hacer calculando la desviación
estándar móvil de la columna pct_change.
33
Machine Translated by Google
datos['volatilidad2'] = [Link](
int(6.5*8), períodos_mínimos=int(6.5*8))
[ 'pct_change'].std()*100
Crea X e y
Antes de crear las características (X) y el objetivo (y), eliminaremos las filas con valores
faltantes.
[9]: # Objetivo
y = datos[['señal']].copy()
# Características
X = datos[['apertura','máximo','mínimo','cierre','cambio_pct',
'pct_change2', 'pct_change5', 'rsi', 'adx', 'sma', 'corr', 'volatilidad',
'volatilidad2']].copy()
yo=1
[Link](nfilas, 3, i)
# Grafique la característica
X[feature].plot(figsize=(8,3*[Link][1]),
color=[Link](3,))
[Link](característica)
[Link](característica) i+=1
plt.tight_layout()
[Link]()
34
Machine Translated by Google
35
Machine Translated by Google
Comprobación de estacionariedad
Como has visto que la mayoría de los algoritmos ML requieren características estacionarias,
eliminaremos las características no estacionarias de X.
Puede utilizar el método adfuller de la biblioteca statsmodels para realizar esta prueba en
Python y comparar el valor p.
Para utilizar el método adfuller, debes importarlo desde la biblioteca statsmodels como se
muestra a continuación:
resultado = adfuller(X)
resultado = adfuller(serie)
si(resultado[1] < 0.05):
volver 'estacionario'
demás:
volver 'no estacionario'
# Verificar la estacionariedad de
col en [Link]:
si estacionario(datos[col]) == 'no estacionario':
print('%s no está estacionario. Lo estamos soltando.' % col)
[Link](columnas=[col], eje=1, inplace=True)
36
Machine Translated by Google
De esta forma, se puede observar que los parámetros de apertura, máximo, mínimo, cierre y SMA no son estacionarios.
Correlación: puedes comprobar si dos características tienen una alta correlación, entonces
esencialmente una de las características es redundante. Podemos eliminar esa
característica y mejorar el aprendizaje del modelo.
37
Machine Translated by Google
[12]: def get_pair_above_threshold(X, umbral): """Función para devolver los pares con
correlación por encima del umbral.
"""
# Desagrupar la matriz
correl = [Link]().unstack()
imprimir(obtener_par_por_encima_del_umbral(X, 0.7))
MultiIndex([('volatilidad', 'volatilidad2')], )
Una vez que hayamos eliminado las características que no son estacionarias y están
correlacionadas, mostraremos las características que hemos seleccionado.
[14]: lista([Link])
[14]: ['pct_cambio',
'pct_cambio2',
38
Machine Translated by Google
[pct_change5', 'rsi',
'adx',
'corr',
'volatilidad']
En el próximo capítulo, aprenderá por qué es importante dividir los datos en conjuntos de datos
de prueba y de entrenamiento.
39
Machine Translated by Google
Pregúntele a cualquiera que haya escrito exámenes que implicaran cálculos matemáticos y le dirá
que las preguntas le resultaron familiares, pero que no eran lo que había estudiado.
En el aprendizaje automático, la división de entrenamiento y prueba significa dividir los datos en dos
partes:
Importar bibliotecas
# Para trazar
gráficos, importe [Link] como plt
%matplotlib inline
[Link]('seaborndarkgrid')
Para mayor comodidad, guardamos el objetivo (y) y las características (X), preparados para JP
Morgan en las secciones anteriores, como archivos csv.
Primero carguemos estos archivos csv usando el método read_csv de la biblioteca pandas.
# Leer el objetivo y =
pd.read_csv('../data_modules/JPM_target_2017_2019.csv',
índice_col=0, fecha_análisis=Verdadero)
41
Machine Translated by Google
La proporción es una proporción popular para dividir los datos, pero no existe una regla general
que indique que siempre debemos usar la proporción 80%20%.
También puedes probar otras opciones de proporción populares como 90%10%, 75%25%.
Utilizaremos un método listo para usar llamado train_test_split del módulo sklearn para realizar la
división de entrenamientoprueba.
Sintaxis:
Parámetros:
Devoluciones:
Utilicemos train_test_split para dividir los datos en una proporción de 80% de entrenamiento y
20% de prueba.
{X_train.shape}.") print(f"La
forma de la variable y_train es \ {y_train.shape}.\n") print(f"La forma de
la variable X_test es \
42
Machine Translated by Google
{X_test.shape}.")
print(f"La forma de la variable y_test es \ {y_test.shape}.\n")
1. Las dimensiones del conjunto de datos original muestran que había 7 características
y 19318 observaciones en el conjunto de datos de características (X). La variable de
destino (y) tiene una columna y la misma cantidad de observaciones que X.
2. Las dimensiones de train_data muestran que X_train tiene 7 características y 15454
observaciones. Esto es el 80 % de 19318, redondeado hacia abajo al entero más
cercano. La variable de destino para los datos de train (y_train) tiene una columna y
la misma cantidad de observaciones que X_train.
3. Las dimensiones de test_data muestran que X_test tiene 7 características y 3864
observaciones. Es decir, el 20 % restante de 19318. La variable de destino para los
datos de entrenamiento (y_test) tiene una columna y la misma cantidad de
observaciones que X_test.
Grafiquemos una de las columnas de características para ver cómo se dividen los datos.
43
Machine Translated by Google
# Mostrar la trama
[Link]()
[Link]()
Podemos ver que los datos train_data (puntos azules) y los datos test_data (puntos naranjas) se
mezclan aleatoriamente.
Pero, como se ve en la ilustración anterior, estamos tratando con datos de series temporales
financieras.
En el caso de los datos de series temporales, el orden de los índices es importante y no se pueden mezclar
aleatoriamente. Esto se debe a que los índices de los datos de series temporales son marcas de tiempo que
44
Machine Translated by Google
La razón es sencilla: no se pueden utilizar los datos de 2021 para entrenar el modelo y luego
utilizarlo para predecir los precios de 2017. No es posible en la vida real porque no tenemos
acceso a datos futuros.
Forma correcta de dividir datos de series temporales Para dividir los datos de series temporales, no
debemos mezclar los conjuntos de datos. Podemos especificar el parámetro shuffle en False. Está
configurado en True de manera predeterminada, por lo que no especificarlo en la llamada al método
da como resultado una salida mezclada.
# Mostrar la trama
[Link]()
[Link]()
45
Machine Translated by Google
Ahora que ha aprendido a dividir los datos, intentemos entrenar un modelo y usar el modelo
entrenado para hacer algunas predicciones en los próximos capítulos.
46
Machine Translated by Google
En los capítulos anteriores, aprendimos sobre las características (X), el objetivo (y) y la división de
entrenamientoprueba.
Como habrás visto en innumerables películas, el héroe siempre entrena duro antes de enfrentarse al
competidor. Del mismo modo, también tenemos que entrenar el algoritmo de aprendizaje automático.
Para que cuando entre en el mundo real, funcione espectacularmente.
Una vez ajustado el modelo, se utilizará X_test con el modelo de aprendizaje automático entrenado
para obtener los valores previstos (y_pred).
Machine Translated by Google
Importar bibliotecas
El objetivo (y) y las características (X) del conjunto de datos de prueba y entrenamiento se leen
desde los archivos CSV. Tenga en cuenta que estos datos se prepararon en los capítulos anteriores.
X_prueba = pd.read_csv(
ruta + "JPM_features_testing_2017_2019.csv", índice_col=0,
Lo importante aquí es aprender cómo se utilizan train_data y test_data junto con el modelo ML.
El modelo RandomForestClassifier del paquete sklearn se utiliza para crear el modelo de árbol
de clasificación. Si no tienes mucha experiencia en aprendizaje automático,
48
Machine Translated by Google
Sintaxis:
RandomForestClassifier(n_estimadores, max_características,
profundidad_máxima, estado_aleatorio)
Parámetros:
Devoluciones:
Un objeto de tipo RandomForestClassifier que se puede ajustar a los datos de prueba y luego usarse
para realizar pronósticos.
Hemos establecido los valores de los parámetros. Son a modo de ejemplo y se pueden modificar.
Entrenar el modelo
Ahora es el momento de que el modelo aprenda de X_train e y_train. Llamamos a la función de ajuste
del modelo y pasamos los conjuntos de datos X_train e y_train.
Sintaxis:
[Link](tren_X, tren_Y)
Parámetros:
Devoluciones:
La función de ajuste entrena el modelo utilizando los datos que se le pasan. El modelo entrenado se
almacena en el objeto de modelo donde se aplicó la función de ajuste.
49
Machine Translated by Google
Datos de pronóstico
El modelo ya está listo para realizar pronósticos. Ahora podemos pasar los datos no vistos (X_test) al
modelo y obtener los valores predichos por el modelo (y_pred).
Para realizar un pronóstico, se llama a la función de predicción y se pasan los datos no vistos como
parámetro.
Sintaxis:
[Link](X_test)
Hagamos una predicción usando el modelo. A modo de ejemplo, usaremos el primer punto de datos
en X_test.
datos_invisibles_de_un_solo_día.T
pct_cambio5 0,001374
rsi 47.746053
anuncio 26.139722
corre 0,515815
volatilidad 0,143024
Estos datos corresponden al 28 de mayo de 2019. Pasémoslos al modelo para obtener la predicción.
50
Machine Translated by Google
[6]: matriz([0])
El resultado previsto del modelo es 0. Esto significa que el modelo indica que no tomará
posición el 28 de mayo de 2019. Apliquemos el modelo a todo el conjunto de datos de prueba.
[7]: # Utilice el modelo y prediga los valores para los datos de prueba y_pred =
rf_model.predict(X_test)
Las predicciones del modelo se almacenan en y_pred. 0 significa que no hay posición y 1
significa que hay una posición larga. Con y_pred, ahora podemos realizar operaciones
utilizando un modelo ML.
Pero ¿cómo sabemos que las predicciones del modelo ML son buenas?
Como podemos ver, el modelo predice correctamente los tres primeros valores de test_data.
Pero, ¿cómo sabemos la precisión de la predicción del modelo para todo el conjunto de
datos? Necesitamos aprender algunas métricas para medir el rendimiento del modelo. Esto
se tratará en el próximo capítulo.
51
Machine Translated by Google
6
Métricas para evaluar el clasificador
Modelo
Una de las formas más sencillas de averiguarlo es ver cuántas veces las predicciones realizadas por
el modelo de aprendizaje automático fueron correctas. Por ejemplo, si el modelo de aprendizaje
automático solo es correcto el 50 % de las veces, entonces no es en absoluto útil. También se puede
acertar el 50 % de las veces tomando decisiones aleatorias.
Por ejemplo, la tarea consiste en predecir si saldrá cara o cruz en el lanzamiento de una moneda. El
modelo puede predecir cara todas las veces y acertar el 50 % de las veces. Como solo hay dos
opciones, cara o cruz, incluso una suposición aleatoria acertará el 50 % de las veces. Por lo tanto, es
necesario que el modelo acierte más del 50 % de las veces.
tiempo.
Por otro lado, si el modelo de ML acertó 8 de cada 10 veces, entonces acertó el 80 % de las veces. Y
podemos decir que, en efecto, es capaz de encontrar algunos patrones para mapear la entrada con la
salida y que no es aleatorio. En la jerga técnica, esta puntuación del 80 % se denomina precisión.
¿Cuál debería ser el umbral deseado de precisión al utilizar modelos ML para el trading?
¡Descubrámoslo ahora!
Machine Translated by Google
Importaremos las bibliotecas y leeremos los valores predichos del modelo (y_pred) y los valores
objetivo esperados (y_test) de test_data.
# Porcentaje de precisión
precision_percentage = round(100 *
53
Machine Translated by Google
precision_data.sum()/len(precision_data), 2)
[Link]([])
[Link](x=prueba_y.índice, y=[1]*len(prueba_y),
c=(datos_de_precisión != True).astype(float), marcador='.',
cmap=cmap)
54
Machine Translated by Google
La precisión se calcula como se muestra arriba. Estos cálculos de precisión y otras métricas de
rendimiento se pueden realizar utilizando el método classification_report ya preparado. Aprenderá sobre
el método classification_report en la última parte del capítulo.
Probablemente no. Considere un modelo de ML diseñado para predecir si debe comprar o vender. Este
modelo de ML tiene una precisión del 73 %. Pero al utilizar este modelo, las señales de venta no son
muy buenas y se generan pérdidas.
¿Cómo es posible eso para un modelo ML con una precisión del 73%?
Para obtener una respuesta a esa pregunta, debe obtener la etiqueta numérica de precisión o la acción
que realizará el modelo de aprendizaje automático. En este caso, la precisión de cada predicción de
compra y venta. Esto lo ayudará a obtener una visión más granular de cómo funciona el modelo.
Resulta que el modelo ML predijo 100 veces que el precio subiría, el precio en realidad subió 90 veces
y en realidad bajó 10 veces.
Por lo tanto, para predecir la señal de "compra", el modelo tiene una precisión del 90 %. Eso es bastante
bueno.
Compra prevista de ML
Pero en el caso de la señal de venta, el modelo predijo 50 veces que el precio bajaría, pero el
precio bajó solo 20 veces y subió 30 veces. El modelo solo tiene un 40 % de precisión a la
hora de predecir la señal de venta, por lo que colocar una orden de venta basándose en la
recomendación del modelo seguramente será desastroso.
A veces, se utilizan jergas para explicar las etiquetas de la matriz, como Falso
55
Machine Translated by Google
En todas las ocasiones en las que el modelo ML predijo correctamente la compra, lo llamamos
Verdadero Positivo. La cantidad de veces en las que el modelo ML se equivocó al predecir la
compra o la etiqueta positiva, lo llamamos Falso Positivo. Falso porque el modelo ML se equivocó
al pronosticar la etiqueta positiva.
La cantidad de veces que el modelo de ML predijo correctamente una señal negativa o de venta
se denomina Verdadero Negativo. Y cuando el modelo de ML se equivocó en la predicción de
una etiqueta negativa o una señal de venta, se denomina Falso Negativo. Este uso de la
terminología de positivo y negativo proviene de la ciencia médica, donde realizamos la prueba y
el resultado es positivo o negativo. Pero en algunos casos, puede haber un diagnóstico erróneo.
Sintaxis:
matriz_confusión(y_test, y_pred)
Parámetros:
Devoluciones:
56
Machine Translated by Google
# Mostrar la gráfica
[Link]()
1. Verdadero positivo: 1007 predicciones correctas para tomar una posición larga.
2. Falso positivo: 951 predicciones incorrectas para tomar una posición larga
Cuando la acción esperada no era posición.
3. Verdadero Negativo: 985 predicciones correctas para no tomar posición.
4. Falso Negativo: 921 predicciones incorrectas por no tomar posición cuando
La acción esperada era tomar una posición larga.
Si tiene más etiquetas para clasificar, la matriz de confusión crece. Por ejemplo, 3 etiquetas
como comprar, sin posición y vender se ven así.
57
Machine Translated by Google
Por lo tanto, a medida que aumenta el número de etiquetas, se hace difícil su interpretación.
Predicciones de ML
Comprar 0 .. .. .. Compre 10
Precio Actual Sin incremento 10 25 .. 40 10
El movimiento aumenta 0,1% 25 40 .. 10 25
Aumenta 0,2% 40 10 .. 25 40
Aumenta 0,3% 25 40 .. 10 25
Aumenta 0,4% 10 25 .. 40 10
Aumenta 0,5% 25 40 .. 10 25
Aumenta 0,6% 40 10 .. 25 40
Aumenta 0,7% 10 25 .. 40 10
Aumenta 0,8% 40 10 .. 25 40
Aumenta 0,9% 25 40 ..25 10 25
Aumenta 1%+ 10 .. 40 10
¿Existen otras razones por las que no deberíamos mantener la precisión como la única métrica?
Vamos a desviarnos un poco del tema e imaginar que Rob quiere crear un
Algoritmo de ML que sería útil en tiempos de estrés o caída del mercado, como
como durante el brote de la pandemia de covid 19.
Analizó los rendimientos diarios del S&P 500 durante los últimos 40 años.
Rob construyó un algoritmo ML para predecir cuándo se producirán los retornos diarios del S&P 500.
58
Machine Translated by Google
ser inferior al 5 %. Y según la predicción del modelo ML, Rob venderá en corto los futuros del SP500.
Este modelo ML creado por Rob mostró una precisión del 99,8 %.
¡Guau! ¡Estaba en el séptimo cielo!
Pero Mary, su amiga y colega, parecía sospechosa y analizó en profundidad los datos. El algoritmo de
aprendizaje automático se ejecutó durante 10.000 días entre 1980 y 2021.
El ML fue correcto 9980 veces, lo que resultó en una precisión del 99,8%.
Descubrió que el S&P 500 cayó por debajo del 5% sólo 20 veces.
Y el algoritmo predijo que no se venderían futuros del S&P 500 en corto todos los días, incluidos
los 20 días siguientes. En los 20 días en que el SP500 cayó un 5 % o más, el modelo fue
incorrecto.
Mary le explicó el problema a Rob y le dijo que hay una métrica mejor que se puede usar en este caso:
comprobar cuántas veces el modelo predijo correctamente que el mercado caería un 5 % o más .
Predicción de ML
Entonces Rob estaba encantado y dijo que solo usaría el recuerdo en el futuro.
Mary tuvo que decirle a Rob que la métrica de recuperación como independiente tampoco es buena.
¿Qué pasa si el modelo simplemente predice que se venderá todos los días?
Predicción de ML
La recuperación de la caída del mercado del 5% será del 20/20 o del 100%, eso siempre es correcto,
pero ya sabes que este modelo no es útil.
Mary dijo que también deberías comprobar el número de veces que el modelo dio la señal de venta y
resultó correcto.
59
Machine Translated by Google
Predicción de ML
Rob se dio cuenta de que este valor es 20 de cada 10 000 veces, es decir, 0,002. Este valor se llama
precisión.
Rob se dio cuenta de que tanto el recuerdo como la precisión son igualmente importantes.
Le preguntó a Mary si hay una manera de crear una medida de rendimiento que pueda
combinar ambos.
Mary dijo que sí. Se llama puntuación f1. Puedes usar la puntuación f1 para entender el rendimiento
general del algoritmo. La puntuación f1 es la media armónica de precisión y recuperación.
(precisión recuperación)
f 1puntuación = 2
(precisión + recuperación)
(1 0,002) f 0,004
1puntuación = 2 = = 0,003
(1 + 0,002) 1,002
2 (precisión * recuperación)
f1score =
(precisión + recuperación)
60
Machine Translated by Google
Sintaxis:
informe_clasificación(y_test, y_pred)
Parámetros:
Devoluciones:
En la columna más a la izquierda, puedes ver los valores 0,0 y 1,0. Estos representan
La posición es la siguiente:
Entonces, a partir de la tabla, se puede decir que el modelo ML tiene una precisión general
61
Machine Translated by Google
Puntuación de 0,52. La precisión que calculamos fue del 51,55 %, es decir, aproximadamente 0,52.
Además de la precisión, también puede identificar la precisión, la recuperación y la puntuación f1 de
las señales.
A veces, los valores de la señal pueden no estar equilibrados. Puede haber casos en los que la
cantidad de ocurrencias de 0 sea apenas 50, mientras que la cantidad de ocurrencias de 1.0 sea
500. En este escenario, el promedio ponderado le dará más peso a la señal 1. Por el contrario, el
promedio macro toma un promedio simple de todas las ocurrencias.
¡Hagamos una prueba retrospectiva de este modelo y veamos cómo habría funcionado!
62
Machine Translated by Google
7
Backtesting y trading en vivo
Hasta ahora has visto diferentes métricas de evaluación de modelos como exactitud,
precisión, recuperación y puntuación f1. Una vez que estés satisfecho con el rendimiento
del modelo, puedes tomar las señales generadas por ellos para operar y analizar los retornos.
No solo los retornos, sino que también debes analizar el riesgo asociado con la generación
de retornos.
¿Por qué hacemos pruebas retrospectivas del modelo? Piénsalo: antes de comprar cualquier
cosa, ya sea un teléfono móvil o un coche, querrás comprobar el historial de la marca, sus
características, etc. para comprobar si merece la pena invertir en ella. El mismo principio se
aplica al trading, y las pruebas retrospectivas te ayudan con ello.
En los capítulos anteriores, usted tomó como características el cambio porcentual previo de
15, 30 y 75 minutos y esperaba que estas características lo ayudaran a predecir los
rendimientos futuros. Esta es su hipótesis.
Machine Translated by Google
Repasaremos algunos términos y conceptos que nos ayudarán a analizar nuestra estrategia.
Pero lo haremos simultáneamente para ver cómo funciona nuestra estrategia.
# Para trazar
gráficos, importe [Link] como plt
%matplotlib inline
[Link]('seaborndarkgrid')
64
Machine Translated by Google
estrategia_datos.índice = pd.hasta_fecha_hora(estrategia_datos.índice)
datos_de_estrategia = datos_de_estrategia.dropna()
Lo primero que debes saber sobre tu estrategia es cuáles son los retornos.
Sólo entonces pensarás si el negocio tenía sentido. Así que primero calcularás
La estrategia regresa, como se muestra a continuación.
datos_de_estrategia[['retornos_de_estrategia']].head()
[2]: estrategia_devoluciones
28/05/2019 [Link]+00:00 0.000000
28/05/2019 [Link]+00:00 0.000000
28/05/2019 [Link]+00:00 0,000366
28/05/2019 [Link]+00:00 0.000000
65
Machine Translated by Google
Devolverá un marco de datos que contiene los detalles de cada operación realizada durante
la prueba retrospectiva. Se incluyen los siguientes detalles para cada operación:
• Precio de
salida • Ganancia o pérdida
cerrar_columna]
hora_de_salida = i
precio_de_salida = [Link][hora_de_salida,
columna_de_cierre]
detalles_de_operación = [Link](
[(posición_actual, hora_de_entrada,
precio_de_entrada, hora_de_salida,
66
Machine Translated by Google
precio_de_salida)])
operaciones = [Link](detalles_de_operación,
ignore_index=True)
"
hora_de_entrada =
si nueva_posición != 0:
tiempo_entrada = i
posición_actual = nueva_posición
registro_comercial.iloc[0].T
Análisis de nivel de operaciones Definiremos una función get_analytics. La función tomará el registro
de operaciones que generamos en el paso anterior y devolverá lo siguiente:
Ganancia bruta •
Pérdida bruta
67
Machine Translated by Google
• Ganancia/pérdida neta
• Número de operaciones ganadoras •
Número de operaciones perdedoras
• Porcentaje de ganancias
• Porcentaje de pérdidas
• Ganancia promedio por operación ganadora •
Pérdida promedio por operación perdedora
# Utilidad bruta
analytics['gross_profit'] = [Link][ [Link] >
0].[Link]()
# Pérdida bruta
analytics['pérdida_bruta'] =
[Link][ [Link] < 0].[Link]()
# Utilidad neta
analytics['net_profit'] = [Link]()
# Análisis de operaciones
rentables ['ganadores'] = len([Link][ [Link] > 0])
# Análisis de operaciones
con pérdidas ['losers'] = len([Link][
68
Machine Translated by Google
# Porcentaje de victorias
analytics['win_percentage'] = 100 * [Link] /\
análisis.total_trades
# Porcentaje de pérdida
analytics['porcentaje_pérdida'] = 100 * [Link] /\
análisis.total_trades
analítica = ronda(analítica, 2)
análisis de retorno.T
analítica
[4]: Estrategia
169,00
0.00
169,00
59.21
29,49
29,72
102.00
núm_de_operaciones_largas núm_de_operaciones_cortas totales beneficio_bruto pérdida_bruta beneficio_neto ganadores
perdedores 67,00
porcentaje de 60.36
69
Machine Translated by Google
rendimientos_acumulados = (datos_de_estrategia[
'cumulative_returns'][1] 1) *100 print("El
rendimiento acumulado es {0:.2f}%." .format(cumulative_returns))
70
Machine Translated by Google
Del resultado anterior, se puede ver que la estrategia generó un rendimiento acumulado del
28,10 % en siete meses. Es impresionante, pero no es la única métrica que necesitamos ver.
Profundicemos más para comprender el rendimiento de su estrategia en detalle.
Puede analizar los rendimientos generados por la estrategia y el riesgo asociado a ellos
utilizando diferentes métricas de rendimiento.
252 6,5 4
Nota: Hay aproximadamente 252 días de negociación en un año y 6,5 horas de negociación
en un día. Como trabajamos con datos de 15 minutos, la cantidad de frecuencias de
negociación en un año es 252 6,5 4.
Del resultado anterior se desprende que la rentabilidad media anual de la estrategia es del
52,20 %. Pero, ¿qué tan volátil es el activo? Puedes averiguarlo utilizando la volatilidad anual.
Volatilidad anualizada La volatilidad es una medida del riesgo. Se define como la desviación
estándar de los rendimientos de la inversión. La volatilidad anualizada se puede calcular
multiplicando la volatilidad diaria por la raíz cuadrada del número de días de negociación en
un año.
71
Machine Translated by Google
Una volatilidad anualizada del 14,90% significa que, durante aproximadamente el 68% del
tiempo en un año, el precio en el momento actual diferiría en menos del 14,90% del precio
del momento anterior.
Esto es interesante. Pero la volatilidad como término trata a los términos positivos y negativos
como si fueran lo mismo. Te gustaría saber cuánto puede llegar la cartera a territorio negativo.
Puedes comprobarlo utilizando la caída máxima.
Caída máxima La caída máxima es el valor máximo que una cartera perdió desde su punto
máximo. Es la pérdida máxima que puede generar la estrategia.
Cuanto mayor sea el valor de la reducción, mayores serán las pérdidas. Se calcula de la
siguiente manera:
72
Machine Translated by Google
plt.tight_layout() [Link]()
Del resultado anterior, se puede ver que la reducción máxima es del 7,94%.
Esto significa que el valor máximo que perdió la cartera desde su pico fue del 7,94%.
Como con cualquier inversión, también puedes calcular el índice de Sharpe para comprender el
rendimiento de la estrategia.
Ratio de Sharpe El ratio de Sharpe mide el rendimiento de una cartera en comparación con un
activo libre de riesgo. Es la relación entre los rendimientos obtenidos por encima de la tasa libre
de riesgo y la volatilidad de los rendimientos. Se calcula de la siguiente manera:
73
Machine Translated by Google
Rp Rf
Relación de Sharpe =
σp
dónde,
• Rp es la rentabilidad de la cartera. •
Rf es la tasa libre de riesgo.
•
σp es la volatilidad.
Se preferirá una cartera con un índice de Sharpe más alto a una cartera con un índice
de Sharpe más bajo.
Los operadores también utilizan el ratio de Sharpe, ya que proporciona información sobre los
rendimientos por unidad de riesgo. Por lo tanto, utiliza ambos factores, riesgo y rendimientos.
74
Machine Translated by Google
Un predictor del futuro. La prueba de caminar hacia adelante es un método mejor que, hasta cierto punto,
puede predecir el futuro.
En el método de prueba de avance, dividimos los datos históricos en el conjunto de datos de entrenamiento
(dentro de la muestra) y de prueba (fuera de la muestra). En el conjunto de datos de entrenamiento,
optimizamos los parámetros comerciales y verificamos el rendimiento de la estrategia en los conjuntos de
datos de prueba.
Se toman los primeros tres años de datos como entrenamiento y se mantiene el cuarto año como prueba.
Luego evalúa el desempeño durante el cuarto año utilizando varias métricas de desempeño.
A continuación, repite la optimización utilizando datos de los años 2 a 4 y valida utilizando el mes 5.
Repite este proceso hasta que hayas llegado al final de los datos. Recopila los resultados de todos los
datos fuera de la muestra del año 4 al 10, que es tu resultado fuera de la muestra.
Trading en papel y trading en vivo Usted creó la estrategia y analizó el rendimiento de la misma.
Si está satisfecho con el rendimiento de la estrategia de backtesting, puede comenzar a operar con papel.
Si no, debe modificar la estrategia hasta que el rendimiento le resulte aceptable. Y una vez que los
resultados de la estrategia de backtesting sean satisfactorios, puede comenzar a operar en vivo.
Cómo
No hay un número fijo. Puede poner en marcha su estrategia después de realizar una prueba retrospectiva
o después de realizar varias pruebas retrospectivas. Como mencionamos en la pregunta anterior, una
vez que esté satisfecho con los resultados de la prueba retrospectiva, puede
75
Machine Translated by Google
Un buen analista de backtesting debe ser consciente de ciertas desventajas y sesgos que
pueden cambiar drásticamente los resultados de sus pruebas retrospectivas. Veámoslos uno
por uno.
Al diseñar una estrategia, tienes acceso a todos los datos, por lo que pueden darse situaciones
en las que incluyas datos futuros que no estaban disponibles en el período de tiempo que se
está probando.
Debe asegurarse de no utilizar datos que solo estarán disponibles en el futuro para evitar el
sesgo de anticipación.
Si usted utilizara acciones de empresas tecnológicas para formular una estrategia, pero tomara
los datos después del estallido de la burbuja punto com, presentaría un escenario marcadamente
diferente que si los hubiera incluido antes del estallido de la burbuja.
Es un hecho simple, después del año 2000, las empresas que sobrevivieron lo hicieron bien
porque sus fundamentos eran sólidos y, por lo tanto, su estrategia sería...
76
Machine Translated by Google
No incluye todo el universo. Por lo tanto, el resultado de su prueba retrospectiva podría no brindar
una imagen completa.
Software de backtesting Existen plataformas disponibles que brindan la funcionalidad para realizar
backtesting en datos históricos. Los puntos importantes a considerar antes de seleccionar una
plataforma de backtesting son:
1. Blueshift 2.
MetaTrader 3.
Amibroker 4.
QuantConnect 5.
Quanthouse, etc.
Aunque esto ya se ha dicho antes, no es necesario que el pasado sea siempre representativo del
futuro.
Por lo tanto, es importante tener en cuenta que no se debe confiar demasiado en las pruebas retrospectivas.
Por ejemplo, la pandemia de COVID en 2020 fue la primera de su tipo y tuvo un impacto en los
mercados globales.
Es posible que las reglas identificadas en los datos históricos no hayan funcionado bien durante
esta pandemia.
¡Genial! Has creado con éxito tu propio algoritmo de aprendizaje automático y no solo lo has
probado con datos históricos, sino que también has analizado sus resultados.
Antes de comenzar a operar en vivo, es posible que haya algunas cosas que deba tener en
cuenta. En la siguiente sección, responderemos algunas de las preguntas más comunes cuando
se trata de aplicar el modelo de aprendizaje automático en los mercados en vivo.
77
Machine Translated by Google
8
Desafíos en el trading en vivo
En ambos casos, los operadores utilizan los datos más recientes disponibles para entrenar sus
modelos y luego los guardan. Estos modelos se recuperan más tarde y se utilizan para hacer
predicciones durante la negociación. Este proceso ahorra tiempo y recursos. Puede utilizar la
biblioteca pickle para guardar un modelo una vez que se haya entrenado.
El módulo pickle implementa un algoritmo fundamental, pero poderoso, para guardar y cargar
una estructura de objeto de Python. El proceso de guardar se conoce como “serialización” y el
proceso de carga se denomina “desserialización”.
Cuando guarde un objeto con pickle, ese objeto se convertirá en un flujo de bytes de 1 y 0, y
luego se guardará. Cuando desee cargar un objeto dirigido por pickle, se lleva a cabo una
operación inversa, por la cual se guarda un flujo de bytes.
Machine Translated by Google
convertido nuevamente en un objeto. Hay un par de cosas que debes recordar al guardar un
objeto con Pickle.
Al (des)serializar objetos, debe utilizar la misma versión de Python, ya que el proceso utilizado
es diferente en las distintas versiones y esto puede generar
errores.
Seguridad
Los datos de Pickle se pueden alterar para insertar código malicioso, por lo que no se recomienda
restaurar datos de fuentes no autenticadas.
En el código que se muestra aquí, hemos creado una función simple llamada save_model que
toma estos dos parámetros como entradas y guarda el modelo.
En una simulación, guardaremos el modelo entrenado varias veces. Por lo tanto, creamos una
función llamada save_model para manejar este paso repetitivo. Esta función toma el nombre del
modelo y el nombre guardado del modelo como entrada, y guarda el modelo en un archivo
binario, ya que la máquina puede ser local, remota o un sistema de archivos desubicado.
Además de la biblioteca pickle, también puedes usar las bibliotecas joblib y JSON para guardar
tus modelos. La biblioteca joblib es muy eficiente en comparación con la biblioteca pickle a la
hora de guardar objetos que contienen datos de gran tamaño. Por otro lado, JSON guarda un
modelo en un formato de cadena que es más fácil de leer para los humanos.
79
Machine Translated by Google
En este ejemplo, ejecutamos esta función save_model y guarda el modelo en la máquina local
con el nombre model_pickle como se muestra.
[ ]: modelo_guardado_nombre = 'modelo_guardado.pkl'
guardar_modelo(modelo, modelo_guardado_nombre)
Cargar un modelo Una vez que haya guardado el modelo, puede acceder a él en su máquina
local mediante la función load_model. Esta función toma el nombre del modelo seleccionado
como entrada y carga ese modelo.
[ ]: def load_model(nombre_guardado_del_modelo):
# Abra el archivo que contiene el modelo # con el nombre
mencionado en la máquina local con open(model_saved_name, 'rb') como archivo:
# Devuelve el modelo
modelo de retorno
¿Cómo manejar los datos? Para entrenar modelos de trading basados en aprendizaje automático
necesitamos una gran cantidad de datos. Descargar datos de una fuente en línea cada vez que
se desea entrenar un modelo lleva mucho tiempo. Para evitar esto, los datos antiguos que se
usaron para entrenar el modelo inicial deben guardarse en la máquina local y los datos nuevos
pueden agregarse a este archivo al final de la operación todos los días. Los datos nuevos pueden
agregarse a los datos existentes usando la función de anexión de pandas.
80
Machine Translated by Google
A la izquierda puede ver el archivo de datos antiguo y a la derecha puede ver el archivo de datos
actualizado después de agregar los nuevos datos.
¿Cuándo se debe volver a entrenar el modelo? Necesitamos volver a entrenar un modelo cada vez
que su rendimiento deja de ser bueno.
Puede decidir cuándo volver a entrenar un modelo en función de sus métricas de rendimiento, como:
1. Pérdida de capital Supongamos que desea volver a entrenar un modelo en función de su pérdida de
capital. En ese caso, debe realizar un seguimiento de las ganancias y pérdidas (o PnL) de la estrategia
en cada período de tiempo, como por ejemplo, cada día o cada minuto.
Si el modelo inicialmente obtuvo una ganancia de 100 dólares y luego perdió 5 dólares, cuál es el
criterio de corte en este caso.
Una vez que se activa el criterio de corte, dejaremos de operar y luego volveremos a entrenar el
modelo.
2. Precisión Este es otro criterio que puede utilizarse para decidir si se debe volver a entrenar un
modelo o no.
81
Machine Translated by Google
Digamos que ha establecido una precisión del 55 % como criterio para volver a entrenar un modelo.
Siempre que la precisión del modelo caiga por debajo del 55%, debes volver a entrenarlo.
Además de estos dos enfoques, puedes volver a entrenar tu modelo con la mayor frecuencia
posible, independientemente de su rendimiento. Sin embargo, asegúrate de que tu modelo no esté
sobreajustado.
Esto creará un modelo que se entrenará con los últimos datos disponibles en todo momento.
Cuando desea volver a entrenar un modelo, debe realizar muchas tareas, como crear las
características, entrenar el modelo y guardarlo.
Para realizar estas tareas múltiples, creamos una función simple llamada create_new_model. Esta
función toma los datos sin procesar y el nombre guardado del modelo como entrada.
save_model(modelo, nombre_guardado_del_modelo)
Lectura adicional
82
Machine Translated by Google
[Link]
14. ¿Cuál es el ratio de Sharpe aceptable para un escritorio de prop? https://
[Link]/questions/21120/whatisanacceptablesharperatio
forapropdesk/21123#21123
15. Hacer lo contrario de lo que dice el modelo
83
Machine Translated by Google
[Link]
themodelsays/35906#35906
16. ¿Debe volver a entrenarse un modelo si hay nuevas observaciones disponibles?
[Link]
trainedifnewobservationsareavailable
84
Machine Translated by Google
Parte III
Aprendizaje supervisado:
Regresión y clasificación
Machine Translated by Google
9
El modelo de regresión lineal
Por ejemplo, los precios de las acciones de JP Morgan y Bank of America se mueven al
unísono. ¿Cómo cree que será la relación entre JP Morgan y Bank of America?
Fecha xy
1 24
2 48
3 8 16
4 3?
Aquí se puede ver fácilmente que y es el doble de x. Por lo tanto, se puede decir que
El precio de Y será $6. En otras palabras, la representación matemática de
La relación es y = 2x.
87
Machine Translated by Google
Para predecir el precio de Y en el día 4, dado que el precio de X es $3, puedes trazar la
línea como se muestra para obtener el precio de $6 para Y.
x
29
3 11
4 13
6 17
88
Machine Translated by Google
Este es el principio básico de la regresión lineal, en el que se ajusta una línea para
conectar los puntos de datos. Además, se puede utilizar esta línea para predecir el valor
de Y si se conoce el valor de X.
Pero esto dista mucho de ser cierto en el caso de los datos del mundo real. Si cambiamos
x e y por JP Morgan y Bank of America, los puntos quedarían por encima o por debajo de
la línea. La distancia entre el punto y la línea se denomina error de pronóstico.
Existen varios modelos de regresión que funcionan para minimizar este error. Veamos
cómo se puede utilizar la regresión lineal con datos del mundo real y cómo evaluar su
rendimiento.
89
Machine Translated by Google
Puede utilizar el método fit() de [Link] para calcular las variables necesarias
para desarrollar un modelo de regresión lineal. La sintaxis se muestra a continuación:
Sintaxis:
1. y: coordenada y 2.
X: coordenada x
90
Machine Translated by Google
[ ]: importar advertencias
[Link]('ignorar') importar
[Link] como sm Y = data['JPM
observado']
X = sm.add_constant(data['BAC Close']) modelo =
[Link](Y,X).fit() [Link]()
[ ]: [Link]
[ ]: constante 10.857609
BAC Cerrar 4.216694
tipo: float64
[ ]: print(f"y = {round([Link][0],2)} + \
{round([Link][1],2)} * x") print(f"JPM
= {round([Link][0],2)} + \ {round([Link][1],2)} *
BAC")
Pero, ¿qué tan bien pueden los datos de precios del Bank of America predecir el precio del J.
P. Morgan. Para ello, utilizaremos la métrica de bondad de ajuste o R2, como se le conoce
comúnmente.
9.2 Rcuadrado
Rcuadrado también se conoce como coeficiente de determinación y se denota por R
2
.
91
Machine Translated by Google
Varianza inexplicada = 1 −
Varianza total
2
∑ i=1 (yi − yˆi)
norte
=1−
norte
2
∑ i=1 (yi − y¯)
El
Donde, yi es el valor observado para la i ésima fila. y¯ es el promedio de las fila. yˆi es el valor predicho
y
observadas.
2
Ahora, ya que entiendes las matemáticas detrás de R , ¿Cuál es el rango de R? 2?
El valor de R 2
siempre se encuentra entre 0 y 1.
Regrese a la fórmula anterior y podrá ver que R 1 si y solo si todas las yi fueran exactamente iguales a las yˆi respectivas . 2 serán
Eso 2 significa que R será 1 cuando el modelo pueda predecir todos los valores y será 0 cuando el modelo no pueda capturar ninguno.
2
Precisamente. Y la
relación R entre las X y las Y.
Calcular Rcuadrado Calculemos el Rcuadrado para los datos anteriores usando la fórmula.
El R cuadrado es 0,82
El valor anterior de Rcuadrado significa que el 82% de la variación en el precio de las acciones de
JP Morgan se explica por la variación en el precio de las acciones de Bank of America.
92
Machine Translated by Google
r2_score(y_verdadero,y_predicho)
El R cuadrado es 0,82
[ ]: data_nestle = pd.read_csv(ruta \
+
→'Precio previsto de JPM y Nestlé para [Link]',
índice_col=0)
datos_nestle.tail()
El R cuadrado es 0,35
2
¿Puedes interpretar el valor de R? ¿arriba? El valor anterior de Rcuadrado,
0,35, significa que solo el 35% de la variación en el precio de las acciones de JP Morgan
Se explica por la variación del precio de las acciones de Nestlé.
93
Machine Translated by Google
Echemos un vistazo al gráfico del precio de JPM frente al precio de BAC y del precio de JPM frente
al precio de Nestlé.
[Link]()
94
Machine Translated by Google
2 ¿ De los dos valores de R mejor? que hemos visto cual creeis que es
95
Machine Translated by Google
Sí, el primer valor (82 %) es mejor, ya que explica más varianza. En el primer gráfico, se puede
ver que los puntos están más cerca de la línea de mejor ajuste y dispersos en el segundo
gráfico. Esto explica la diferencia entre los dos valores de R
2.
Conclusión Rcuadrado es una de las métricas más populares para medir la bondad del ajuste
de un modelo de regresión lineal.
Utilizando Rcuadrado, usted concluyó cómo el precio de las acciones de Bank of America fue
capaz de explicar mejor la variación en el precio de las acciones de JP Morgan.
¿Se le ocurre algún otro precio de acciones que también pueda ayudarle a explicar esta
variación? El precio de las acciones de cualquier otro banco o instituto de inversión podría
serle de ayuda.
Ahora te toca a ti. Puedes descargar cualquier dato de este tipo desde fi[Link] y
aplicar lo aprendido.
La regresión lineal es una forma sencilla de modelar la relación entre las variables
independientes y dependientes. Otro nombre similar es regresión logística, que veremos en
el próximo capítulo.
96
Machine Translated by Google
10
Regresión logística
A pesar del nombre "regresión logística", este no se utiliza para problemas de regresión de
aprendizaje automático donde la tarea es predecir el resultado en valor real.
Es un problema de clasificación que se utiliza para predecir un resultado binario (1/0,
1/1, Verdadero/Falso) dado un conjunto de variables independientes.
y = c + x1 w1 + x2 w2 + ....xn wn
Machine Translated by Google
El objetivo de la regresión lineal es estimar valores para los coeficientes del modelo c, w1,
w2, w3. . . .wn y ajustar los datos de entrenamiento con un error cuadrático mínimo y
predecir la salida y.
La regresión logística hace lo mismo, pero con un añadido. El modelo de regresión logística
calcula una suma ponderada de las variables de entrada similar a la regresión lineal, pero
ejecuta el resultado a través de una función no lineal especial, la función logística o función
sigmoidea, para producir la salida y.
Aquí, la salida es binaria o en forma de 0/1 o 1/1.
y = 1/(1+e −x )
Como puede ver en el gráfico, es una curva en forma de S que se acerca a 1 a medida que
el valor de la variable de entrada aumenta por encima de 0, y se acerca a 0 a medida que
la variable de entrada disminuye por debajo de 0. La salida de la función sigmoidea es 0,5
cuando la variable de entrada es 0.
98
Machine Translated by Google
Así, si la salida es mayor que 0,5, podemos clasificar el resultado como 1 (o positivo) y si es
menor que 0,5, podemos clasificarlo como 0 (o negativo).
Ahora tenemos una intuición básica sobre la regresión logística y la función sigmoidea.
Aprenderemos a implementar la regresión logística en Python y a predecir el movimiento del
precio de las acciones utilizando la condición anterior.
# Indicadores técnicos
importar talibán como ta
# Aprendizaje automático
desde sklearn.linear_model Importación LogisticRegression desde sklearn
Importación de métricas
Importar conjunto de datos Utilizaremos los mismos datos que usamos en la segunda parte
del libro.
99
Machine Translated by Google
Hemos creado funciones para las tareas estándar, como la creación del objetivo y las
características. Esto te permite importar el módulo y realizar las tareas fácilmente sin tener
que escribir el código cada vez. Encontrarás el módulo de utilidades, así como la información
relacionada, en la página de GitHub.
Tenga en cuenta que esto no está disponible como una 'instalación pip' estándar.
100
Machine Translated by Google
y, X = obtener_características_objetivo(datos)
dividir = int(0.8*len(X))
X_tren, X_prueba, y_tren, y_prueba = X[:dividir], X[dividir:], \
y[:dividir], y[dividir:]
[6]: 0 1
0% de cambio 1% [0,015386536081786702]
de cambio2 2% de [0,08026259453839425]
cambio5 3 rsi [0,024335207683013463]
[0,00528661227807867]
4 anuncio [0,013464920611383472]
101
Machine Translated by Google
5 corr [0,0016395252591729392]
volatilidad [0,016321785785599726] 6
[[0,50948029 0,49051971]
[0,51218059 0,48781941]
[0,51603258 0,48396742]
...
[0,51860144 0,48139856]
[0,52032489 0,47967511]
[0,52745957 0,47254043]]
A continuación, predeciremos las etiquetas de clase utilizando la función de predicción para el conjunto de datos
de prueba.
Evaluar el modelo
102
Machine Translated by Google
103
Machine Translated by Google
104
Machine Translated by Google
105
Machine Translated by Google
11
Modelo Bayes ingenuo
En pocas palabras, Guillermo de Ockham afirmó que “las soluciones más simples
son casi siempre las mejores soluciones”.
Pero en un artículo sobre Naive Bayes, ¿por qué hablamos de navajas? En realidad,
Naive Bayes incorpora implícitamente esta creencia, porque realmente es un modelo
simple. Veamos cómo se puede utilizar un modelo simple como el modelo Naive
Bayes en el trading.
Hagamos un pequeño desvío para entender qué significa el "Bayes" en Naive Bayes.
Básicamente, existen dos escuelas de pensamiento en lo que respecta a las
probabilidades. Una escuela sugiere que la probabilidad de un evento se puede
deducir calculando las probabilidades de todos los eventos probables y luego
calculando la probabilidad del evento en el que estás interesado.
Por ejemplo, en el caso del experimento del lanzamiento de una moneda, sabes que la
probabilidad de que salga cara es ½ porque aquí solo hay dos posibilidades, cara o cruz.
sección.
P(B|A) P(A)
P(A|B) =
P(B)
Digamos que A es el evento en el que una persona dice que el rojo es su color favorito.
Ahora, sea B el evento en el que la persona se casa.
Por lo tanto, P(A | B) es la probabilidad de que A diga que el rojo es su color favorito cuando
la persona está casada.
En un sentido similar, P(B | A) es la probabilidad de que una persona esté casada cuando
dice que su color favorito es el rojo.
Ahora bien, ¿qué sucede si desea determinar la probabilidad de que el precio suba al día
siguiente de que el RSI baje de 40? Piense en esto: si el RSI baja de 40 el martes, querrá
comprar el miércoles con la esperanza de que el precio suba.
Sea P(A) la probabilidad de que el precio aumente y P(B) la probabilidad de que el RSI
estuviera por debajo de 40 el día anterior.
Ahora, encontraremos la probabilidad de que el precio suba al día siguiente si el RSI está por
debajo de 40 mediante la misma fórmula.
Pero, ¡un momento! ¿Qué pasa si queremos comprobar cuándo el RSI está por debajo de 40 y,
al mismo tiempo, el “slow k” del oscilador estocástico es mayor que su “slow d”?
P(B|A)P(C|A)P(A)
P(A|B, C) =
P(B)P(C)
107
Machine Translated by Google
Si bien esto parece bastante sencillo de calcular, si se agregan más características al modelo,
la complejidad aumenta. Aquí es donde entra en escena la parte ingenua del modelo
bayesiano ingenuo.
Supuesto del modelo Naive Bayes El modelo Naive Bayes supone que tanto B como C son
eventos independientes. Además, también se elimina el denominador.
Esto simplifica el modelo en gran medida y podemos escribir la ecuación simplemente como:
Debes recordar que esta suposición puede ser incorrecta en la vida real. Lógicamente
hablando, tanto el RSI como los indicadores estocásticos se calculan utilizando la misma
variable, es decir, los datos de precios. Por lo tanto, no son exactamente independientes.
Sin embargo, la belleza del modelo Naive Bayes es que, aunque esta suposición no es cierta,
el modelo aún funciona bien en varios escenarios.
Espera, ¿existe solo un tipo de modelo Naive Bayes? En realidad, hay tres.
Descubrámoslo en la siguiente sección.
Tipos de modelos Naive Bayes Según el requisito, puede elegir el modelo correspondiente.
Estos modelos se basan en los datos de entrada con los que está trabajando:
Multinomial: Este modelo se utiliza cuando tenemos datos discretos y estamos trabajando en
su clasificación. Un ejemplo sencillo es que podemos tener el clima (nublado, soleado, lluvioso)
como entrada y queremos ver en qué clima se juega un partido de tenis.
Gaussiano: Como su nombre indica, en este modelo trabajamos con datos continuos que
siguen una distribución gaussiana. Un ejemplo sería la temperatura del estadio donde se
juega el partido.
Binomial: ¿Qué sucede si tenemos los datos de entrada como simplemente sí o no, es decir,
un valor booleano? En este caso, utilizaremos el modelo binomial.
Lo mejor de Python es que la biblioteca sklearn incorpora todos estos modelos. ¿Probamos a
usarla para crear nuestro propio modelo Naive Bayes? ¿Por qué no lo intentamos?
108
Machine Translated by Google
# Indicadores técnicos
importar talibán como ta
109
Machine Translated by Google
dividir = int(0.8*len(X))
X_tren, X_prueba, y_tren, y_prueba = X[:dividir], X[dividir:], \
y[:dividir], y[dividir:]
110
Machine Translated by Google
111
Machine Translated by Google
datos_de_estrategia[['retornos_de_estrategia']].head()
[6]: estrategia_devoluciones
28/05/2019 [Link]+00:00 0,000732
28/05/2019 [Link]+00:00 0.000000
28/05/2019 [Link]+00:00 0.000000
28/05/2019 [Link]+00:00 0.000000
28/05/2019 [Link]+00:00 0.000000
112
Machine Translated by Google
Obviamente, hay margen de mejora, pero esto fue solo una demostración de cómo funciona
un modelo Naive Bayes. Pero ¿existen ocasiones especiales en las que se debería utilizar el
modelo? Averigüémoslo en la siguiente sección.
• Dado que Naive Bayes supone que todos los eventos son independientes entre sí, no
puede calcular la relación entre los dos eventos. • El modelo Naive Bayes es rápido,
pero tiene un costo de precisión.
A veces se dice que el método Bayes ingenuo es un mal estimador.
• La ecuación de Naive Bayes muestra que estamos multiplicando las distintas probabilidades.
Por lo tanto, si una característica devolvió una probabilidad 0, podría convertir todo el
resultado en 0. Sin embargo, existen varios métodos para
113
Machine Translated by Google
Superar esta situación. Una de las más famosas es la llamada corrección de Laplace.
En este método, se combinan las características o se establece la probabilidad en 1,
lo que garantiza que no obtengamos una probabilidad cero.
Conclusión El modelo Naive Bayes, a pesar de ser ingenuo, es bastante simple y efectivo en
una gran cantidad de casos de uso en la vida real. Si bien se utiliza principalmente para el
análisis de texto, se ha utilizado como herramienta de verificación en el campo del comercio.
El modelo Naive Bayes también se puede utilizar como un trampolín hacia modelos de
aprendizaje automático basados en una clasificación más precisa y compleja.
114
Machine Translated by Google
12
Árboles de decisión
También crearemos un árbol de decisiones para pronosticar el rendimiento concreto del activo
al día siguiente.
Si observamos los primeros cuatro pasos, son operaciones comunes para el procesamiento de datos.
116
Machine Translated by Google
Los pasos 5 y 6 están relacionados con los algoritmos de ML para los árboles de decisión
específicamente. Como veremos, la implementación en Python será bastante sencilla.
Sin embargo, es fundamental comprender bien la parametrización y el análisis de los
resultados.
Obtención de los datos La materia prima de cualquier algoritmo son los datos. En nuestro
caso, serían las series temporales de instrumentos financieros, como índices, acciones, etc.,
y suelen contener detalles como el precio de apertura, el máximo, el mínimo, el precio de
cierre y el volumen.
Existen múltiples fuentes de datos para descargar los datos, gratuitos y premium.
Las fuentes más comunes de datos diarios gratuitos son Quandl, Yahoo, Google o cualquier
otra fuente de datos en la que confiemos.
Para mantener la uniformidad, vamos a utilizar el mismo conjunto de datos que utilizamos en
la parte anterior del libro. Esto nos ayuda porque no tenemos que dedicar tiempo a obtener
los datos, sino que podemos centrarnos en el algoritmo de aprendizaje automático y su
funcionamiento.
# Indicadores técnicos
importar talibán como ta
# Trazado de gráficos
import [Link] como plt import
seaborn como sns %matplotlib
inline [Link]('seaborn
darkgrid')
117
Machine Translated by Google
dividir = int(0.8*len(X))
X_tren, X_prueba, y_tren, y_prueba = X[:dividir], X[dividir:], \
y[:dividir], y[dividir:]
Básicamente, se refieren a los parámetros con los que el algoritmo debe construir el
118
Machine Translated by Google
árbol porque sigue un enfoque recursivo para construir el árbol, por lo que debemos establecer
algunos límites para crearlo.
Criterio: Para los árboles de decisión de clasificación, podemos optar por Gini o Entropía y
Ganancia de Información, estos criterios hacen referencia a la función de pérdida para evaluar
el rendimiento de un algoritmo de aprendizaje automático, y son los más utilizados cuando se
trata de algoritmos de clasificación. Aunque queda fuera del alcance de este capítulo, nos sirve
para ajustar la precisión del modelo, y del algoritmo para construir el árbol. También deja de
evaluar las ramas en las que no se obtiene ninguna mejora según la función de pérdida.
Ahora necesitamos hacer pronósticos con el modelo sobre datos desconocidos. Para ello,
utilizaremos el 30% de los datos que habíamos reservado para pruebas y, por último,
evaluaremos el rendimiento del modelo. Pero primero, echemos un vistazo gráfico al árbol de
decisión de clasificación que el algoritmo ML ha creado automáticamente para nosotros.
119
Machine Translated by Google
nombres_de_características=X_train.columns)
# Para crear el gráfico, puedes descomentar # la siguiente
línea de código y ejecutarla # [Link](dot_data)
Nótese que el gráfico solo muestra los nodos más significativos. En este gráfico podemos ver
toda la información relevante de cada nodo:
Podemos observar un par de nodos puros que nos permiten deducir posibles reglas de
negociación. Por ejemplo, se puede ver cómo se dividen los nodos en función de los valores
de las características a las que el algoritmo ha dado más preferencia.
Pronóstico
Ahora hagamos predicciones con conjuntos de datos que fueron reservados para pruebas,
esta es la parte que nos permitirá saber si el algoritmo es confiable con datos desconocidos
en el entrenamiento.
120
Machine Translated by Google
121
Machine Translated by Google
datos_de_estrategia['rendimiento_de_estrategia'] = \
datos_de_estrategia['señal_predicha'].shift(1) * \
datos_de_estrategia['pct_change']
datos_de_estrategia[['retornos_de_estrategia']].head()
[7]: estrategia_devoluciones
28/05/2019 [Link]+00:00 0.0
28/05/2019 [Link]+00:00 0.0
28/05/2019 [Link]+00:00 0.0
28/05/2019 [Link]+00:00 0.0
28/05/2019 [Link]+00:00 0.0
122
Machine Translated by Google
Árboles de decisión para regresión Ahora vamos a crear el árbol de decisión de regresión
utilizando la función DecisionTreeRegressor de la biblioteca [Link].
DecisionTreeRegressor(criterio='mse',
profundidad_máxima=Ninguna,
disminución_mínima_de_impurezas=0,0,
división_mínima_de_impurezas=Ninguna , muestras_hoja_mínimas=400,
muestras_división_mínima=2, fracción_mínima_de_peso_hoja=0,0, preordenación=Falso, estado_aleatorio=N
Básicamente se refiere a los parámetros con los que el algoritmo debe construir el árbol, debido
a que sigue un enfoque recursivo para construir el árbol, debemos establecer algunos límites
para crearlo.
Criterio: Para los árboles de decisión de clasificación, podemos elegir Error Absoluto Medio
(MAE) o Error Cuadrático Medio (MSE). Estos criterios están relacionados con la función de
pérdida para evaluar el rendimiento de un algoritmo de máquina de aprendizaje y son los más
utilizados para los algoritmos de regresión. Básicamente nos sirve para ajustar la precisión del
modelo, el algoritmo para construir el árbol y deja de evaluar las ramas en las que no se obtiene
ninguna mejora según la función de pérdida. Aquí, dejamos el parámetro por defecto a
123
Machine Translated by Google
max_depth: Número máximo de niveles que tendrá el árbol. Lo hemos dejado con el parámetro
predeterminado 'none'.
[10]: y = X['pct_change'].shift(1)
dividir = int(0.8*len(X))
X_tren, X_prueba, y_tren, y_prueba = X[:dividir], X[dividir:], \
y[:dividir], y[dividir:]
Visualizar el modelo Para visualizar el árbol, utilizamos nuevamente la biblioteca graphviz que
nos brinda una descripción general del árbol de decisión de regresión para el análisis.
Conclusión Los árboles de decisión son fáciles de crear y es fácil extraer algunas reglas que
prometen ser útiles, pero la verdad es que para crear árboles de decisión es necesario
parametrizarlos y estos parámetros pueden y deben optimizarse.
124
Machine Translated by Google
1. Bagging 2.
Subespacio aleatorio 3.
Bosque aleatorio
El algoritmo crea modelos secuenciales que se refinan en cada nuevo modelo para
reducir el sesgo del anterior. Los ejemplos incluyen
1. AdaBoosting
2. Aumento de gradiente
125
Machine Translated by Google
13
Algoritmo de bosque aleatorio
Los árboles de decisión tienen una estructura jerárquica o arborescente con ramas que actúan
como nodos. Podemos llegar a una decisión determinada al atravesar estos nodos, que se
basan en las respuestas obtenidas de los parámetros relacionados con los nodos.
Sin embargo, los árboles de decisión sufren un problema de sobreajuste, que consiste
básicamente en aumentar la especificidad dentro del árbol para llegar a una determinada
conclusión añadiendo cada vez más nodos al árbol y, a partir de ahí, aumentando la
profundidad del árbol y haciéndolo más complejo.
Una de las soluciones para superar este problema es utilizar Random Forest. Veamos cómo.
El bosque aleatorio llega a una decisión o predicción en función del número máximo de votos
recibidos de los árboles de decisión. El resultado al que se llega, un número máximo de veces
a través de los numerosos árboles de decisión, se considera como el resultado final por el
bosque aleatorio.
¿Cómo seleccionar características del conjunto de datos para construir árboles de decisión para el
Bosque aleatorio?
Una vez seleccionadas las características, se construyen los árboles en función de la mejor división.
Cada árbol proporciona un resultado que se considera un "voto" de ese árbol para el resultado dado.
El resultado que recibe la mayor cantidad de "votos" es elegido por el bosque aleatorio como
resultado/resultado final o, en el caso de variables continuas, el promedio de todos los resultados
se considera como resultado final.
Por ejemplo, en el diagrama anterior, podemos observar que cada árbol de decisión ha votado o
predicho una clase específica. El resultado o clase final seleccionado por el Bosque Aleatorio será la
Clase N, ya que tiene mayoría de votos o es el resultado predicho por dos de los cuatro árboles de
decisión.
127
Machine Translated by Google
# Indicadores técnicos
importar talibán como ta
# Trazado de gráficos
import [Link] como plt import seaborn
como sns %matplotlib inline
[Link]('seaborn
darkgrid')
128
Machine Translated by Google
En este paso, utilizaremos las mismas variables objetivo y característica que hemos utilizado en
los capítulos anteriores.
dividir = int(0.8*len(X))
X_tren, X_prueba, y_tren, y_prueba = X[:dividir], X[dividir:], \
y[:dividir], y[dividir:]
Entrenamiento del modelo de aprendizaje automático ¡Todo listo con los datos! Entrenemos un
modelo clasificador de árbol de decisión. La función RandomForestClassifier del árbol se almacena
en la variable clf y luego se llama a un método de ajuste con los conjuntos de datos X_train e
y_train como parámetros para que el modelo clasificador pueda aprender la relación entre la
entrada y la salida.
129
Machine Translated by Google
predicho = [Link](X_test)
# Mostrar la gráfica
[Link]()
imprimir(metrics.classification_report(y_test, predicho))
130
Machine Translated by Google
La estrategia vuelve
datos_de_estrategia[['retornos_de_estrategia']].head()
[6]: estrategia_devoluciones
28/05/2019 [Link]+00:00 0.0
28/05/2019 [Link]+00:00 0.0
28/05/2019 [Link]+00:00 0.0
28/05/2019 [Link]+00:00 0.0
28/05/2019 [Link]+00:00 0.0
131
Machine Translated by Google
La salida muestra los retornos de la estrategia y los retornos diarios según el código del clasificador
de bosque aleatorio. En el próximo capítulo, veremos el algoritmo XGBoost, que es el arma
preferida por la mayoría de las máquinas.
132
Machine Translated by Google
133
Machine Translated by Google
14
Algoritmo XGBoost
¿Qué es el boosting? El método de conjunto secuencial, también conocido como "boosting", crea
una secuencia de modelos que intenta corregir los errores de los modelos anteriores en la
secuencia. El primer modelo se construye a partir de datos de entrenamiento, el segundo modelo
mejora el primero, el tercer modelo mejora el segundo, y así sucesivamente.
Machine Translated by Google
El clasificador 2 predice correctamente los dos guiones, algo que el clasificador 1 no pudo
hacer. Pero el clasificador 2 también comete otros errores. Este proceso continúa y tenemos
un clasificador final combinado que predice todos los puntos de datos correctamente.
Se pueden agregar modelos clasificadores hasta que todos los elementos del conjunto de datos de
entrenamiento se predigan correctamente o hasta que se agregue un número máximo de modelos clasificadores.
El número máximo óptimo de modelos clasificadores a entrenar se puede determinar
mediante el ajuste de hiperparámetros.
Vayamos paso a paso y entendamos dónde encaja XGBoost en el esquema más amplio de
las cosas.
En pocas palabras Con los modelos de árboles de decisión, bayesianos y similares, nos
topamos con un obstáculo. La tasa de predicción para ciertos enunciados de problemas era
pésima cuando utilizábamos un solo modelo. Aparte de eso, en el caso de los árboles de
decisión, nos dimos cuenta de que teníamos que vivir con sesgos, varianzas y ruido en los modelos.
Esto dio lugar a la idea de combinar modelos, lo que se denominaba y se denomina
"aprendizaje en conjunto". Pero en este caso, podemos utilizar mucho más de un modelo para
crear un conjunto. El aumento de gradiente fue uno de esos métodos de aprendizaje en conjunto.
135
Machine Translated by Google
Hablando en términos generales, una función de pérdida se puede definir como un error, es decir,
la diferencia entre el valor predicho y el valor real. Por supuesto, cuanto menor sea el error, mejor
será el modelo de aprendizaje automático.
El aumento de gradiente es un enfoque en el que se crean nuevos modelos que predicen los
residuos o errores de modelos anteriores y luego se suman para hacer la predicción final.
Obj = L + Ω
La función de pérdida (L) que necesita optimizarse puede ser el error cuadrático medio para
la regresión, Logloss para la clasificación binaria o mlogloss para la clasificación multiclase.
Bien, hemos entendido cómo el aprendizaje automático evolucionó desde modelos simples a una
combinación de modelos. De alguna manera, los humanos no pueden estar satisfechos por mucho
tiempo, y a medida que los enunciados de los problemas se volvieron más complejos y el conjunto
de datos más grande, nos dimos cuenta de que debíamos ir un paso más allá. Esto nos lleva a
XGBoost.
¿Por qué XGBoost es tan bueno? XGBoost fue escrito en C++, que, si lo piensas, es realmente
rápido en lo que respecta al tiempo de cálculo. Lo bueno de XGBoost es que se puede importar
fácilmente en Python y, gracias al contenedor sklearn, podemos usar los mismos nombres de
parámetros que se usan en los paquetes de Python.
Si bien la lógica real es algo larga de explicar, una de las principales ventajas de XGBoost es que
ha podido paralelizar el componente de construcción de árboles del algoritmo de refuerzo. Esto
genera una ganancia espectacular en términos de tiempo de procesamiento, ya que podemos
utilizar más núcleos de una CPU o incluso continuar y utilizar también la computación en la nube.
Si bien los algoritmos de aprendizaje automático tienen soporte para ajustes y pueden funcionar
con programas externos, XGBoost tiene parámetros integrados para regularización.
136
Machine Translated by Google
ción y validación cruzada para garantizar que tanto el sesgo como la varianza se mantengan al
mínimo. La ventaja de los parámetros incorporados es que conducen a una implementación más
rápida.
Importancia de las características de XGBoost A veces, no nos conformamos con saber qué tan
bueno es nuestro modelo de aprendizaje automático. Nos gustaría saber qué característica tiene
más poder predictivo. Existen varias razones por las que conocer la importancia de las características
puede ayudarnos. A continuación, enumeraremos algunas:
1. Si sabes que una determinada característica es más importante que otras, le prestarás más
atención y tratarás de ver si puedes mejorar aún más tu modelo.
4. Lo bueno de XGBoost es que contiene una función incorporada para calcular la importancia
de la característica y no tenemos que preocuparnos por codificarla en el modelo.
137
Machine Translated by Google
Muy bien, antes de pasar al código, asegurémonos de que todos tenemos XGBoost en
nuestro sistema.
Eso es todo. ¡Genial! Ahora pasemos a lo real, es decir, el código Python de XGBoost.
Importar bibliotecas
[1]: advertencias de
importación [Link]('ignore')
# Importar XGBoost
importar xgboost
# Clasificador XGBoost de
xgboost importar XGBClassifier
138
Machine Translated by Google
Definir parámetros Hemos definido la lista de stock, la fecha de inicio y la fecha de finalización
con las que trabajaremos en este capítulo.
Obtener los datos, crear características y variables de destino Definimos una lista de
características de las cuales el modelo seleccionará las mejores. Aquí, tenemos el cambio
porcentual y la desviación estándar con diferentes períodos de tiempo como características.
La variable objetivo es el retorno del día siguiente. Si el retorno del día siguiente es positivo, lo
etiquetamos como 1, y si es negativo, lo etiquetamos como 1. También puede intentar crear las
variables objetivo con tres etiquetas, como 1, 0 y 1 para posiciones largas, sin posición y cortas
respectivamente.
lista_de_predictores.append('pct_change_'+str(r))
lista_de_predictores.append('std_'+str(r))
139
Machine Translated by Google
# Variable de destino
df['return_next_day'] = df.daily_pct_change.shift(1) df['actual_signal'] =
[Link](df.return_next_day > 0, 1, 1)
df = [Link]()
Antes de pasar a la implementación del modelo Python XGBoost, primero grafiquemos los
retornos diarios de Apple almacenados en el diccionario para ver si todo está funcionando
bien.
140
Machine Translated by Google
Dividir los datos en entrenamiento y prueba Dado que XGBoost es, después de todo, un modelo de aprendizaje
automático, dividiremos el conjunto de datos en un conjunto de prueba y un conjunto de entrenamiento.
[5]: # Crea un marcador de posición para los datos divididos de prueba y entrenamiento
X_train = [Link]()
X_prueba = [Link]()
y_tren = [Link]() y_prueba =
[Link]()
longitud_del_tren = int(len(X)*0.80)
X_tren = X_tren.append(X[:longitud_tren])
X_prueba = X_prueba.append(X[longitud_entrenamiento:])
y_entrenamiento = y_entrenamiento.append(y[:longitud_entrenamiento])
y_prueba = y_prueba.append(y[longitud_entrenamiento:])
[Link] ADVERTENCIA: /
opt/concourse/worker/volumes/live/
→7a2b9f413287451b669143e9a6c0910f/volume
/xgboostsplit_1619728204606/work/src/learner.[Link]
→Inicio en XGBoost
141
Machine Translated by Google
Dado que utilizamos la mayoría de los parámetros predeterminados, es posible que reciba
ciertas advertencias según las actualizaciones en la biblioteca XGBoost.
Importancia de las características Hemos trazado las 7 características principales y las hemos
ordenado según su importancia.
142
Machine Translated by Google
Predecir la señal
[9]: # Predecir la señal comercial en el conjunto de datos de prueba
y_pred = [Link](X_test)
Informe de clasificación
[10]: # Obtener el informe de clasificación
imprimir(informe_de_clasificación(prueba_y, y_pred))
¡Espera! Ya casi llegamos. Veamos qué nos dice XGBoost ahora mismo.
Matriz de confusión
[11]: matriz_confusión_datos = matriz_confusión(prueba_y, predicción_y)
143
Machine Translated by Google
[18]: # Crea un marco de datos vacío para almacenar los retornos de la estrategia de
# acciones individuales
cartera = [Link](columnas=lista_de_stocks)
# Para cada acción en la lista de acciones, grafica los retornos de la estrategia # y los retornos
de compra y retención para stock_name
en stock_list:
144
Machine Translated by Google
[Link](tamaño de figura=(8,5))
145
Machine Translated by Google
146
Machine Translated by Google
147
Machine Translated by Google
Rendimiento de la cartera
148
Machine Translated by Google
Veamos ahora otro concepto interesante, llamado redes neuronales en el próximo capítulo.
149
Machine Translated by Google
15
Redes neuronales
Los estudios sobre redes neuronales se iniciaron con el objetivo de mapear el cerebro humano
y comprender cómo toman decisiones los seres humanos. Pero el trading algorítmico intenta
eliminar por completo las emociones humanas del aspecto comercial. ¿Por qué deberíamos
aprender sobre redes neuronales entonces?
A veces no nos damos cuenta de que el cerebro humano es posiblemente la máquina más
compleja del mundo y se sabe que es bastante eficaz a la hora de llegar a conclusiones en un
tiempo récord.
Antes de profundizar en los detalles del trading con redes neuronales, debemos comprender
el funcionamiento del componente principal, es decir, la red neuronal.
ron.
Machine Translated by Google
Una neurona consta de tres componentes: las dendritas, el axón y el cuerpo principal de la
neurona. Las dendritas son las receptoras de la señal y el axón es el transmisor. Una neurona
sola no es de mucha utilidad, pero cuando está conectada a otras neuronas, realiza varios
cálculos complejos y ayuda a operar la máquina más complicada de nuestro planeta, el cuerpo
humano.
Hay entradas a la neurona marcadas con líneas azules, y la neurona emite una señal de salida
después de algún cálculo.
A cada señal de entrada se le asigna un peso, wi. Este peso se multiplica por el valor de
entrada y la neurona almacena la suma ponderada de todas las variables de entrada.
Luego se aplica una función de activación a la suma ponderada, lo que da como resultado la
señal de salida de la neurona.
Las señales de entrada son generadas por otras neuronas, es decir, la salida de otras
neuronas, y la red está construida para hacer predicciones/cálculos en esta
manera.
151
Machine Translated by Google
Entendiendo una red neuronal Tomemos un ejemplo para entender el funcionamiento de las
redes neuronales.
La capa de entrada está formada por los parámetros que nos ayudarán a llegar a un valor de
salida o a hacer una predicción. Nuestro cerebro tiene básicamente cinco parámetros de
entrada básicos, que son nuestros sentidos del tacto, el oído, la vista, el olfato y el gusto.
Las neuronas de nuestro cerebro crean parámetros más complejos, como emociones y
sentimientos, a partir de estos parámetros de entrada básicos. Y nuestras emociones y
sentimientos nos hacen actuar o tomar decisiones, que son básicamente el resultado de la
red neuronal de nuestro cerebro.
Por lo tanto, en este caso hay dos capas de cálculos antes de tomar una decisión.
La primera capa toma los cinco sentidos como entradas y da como resultado emociones y
sentimientos, que son las entradas a la siguiente capa de cálculos, donde el resultado es una
decisión o una acción.
Por lo tanto, en este modelo extremadamente simplista del funcionamiento del cerebro
humano, tenemos una capa de entrada, dos capas ocultas y una capa de salida.
Por supuesto, por nuestra experiencia, todos sabemos que el cerebro es mucho más
complicado que esto, pero esencialmente así es como se realizan los cálculos en nuestro
cerebro.
152
Machine Translated by Google
En el diagrama que se muestra arriba, hay cinco parámetros de entrada como se muestra
en el diagrama.
Las tres neuronas de la capa oculta tendrán pesos diferentes para cada uno de los cinco
parámetros de entrada y podrían tener funciones de activación diferentes, que activarán
los parámetros de entrada de acuerdo con varias combinaciones de las entradas.
Por ejemplo, la primera neurona podría analizar el volumen y la diferencia entre el precio
de cierre y el precio de apertura, y también podría ignorar los precios máximo y mínimo.
En este caso, los pesos de los precios máximo y mínimo serán cero.
De manera similar, las otras dos neuronas generarán un valor de salida basado en sus
funciones de activación y pesos individuales. Finalmente, el valor de salida o el valor
predicho del precio de las acciones será la suma de los tres valores de salida de cada
neurona. Así es como funcionará la red neuronal para predecir los precios de las acciones.
Ahora que entiendes el funcionamiento de una red neuronal, pasaremos al meollo del
asunto de este capítulo, que es aprender cómo la Red Neuronal Artificial se entrenará a sí
misma para predecir el movimiento del precio de una acción.
Entrenando la red neuronal Para simplificar las cosas en las redes neuronales, podemos decir
que hay dos formas de codificar un programa para realizar una tarea específica.
1. Defina todas las reglas que requiere el programa para calcular el resultado dada una
determinada entrada al programa.
153
Machine Translated by Google
datos como entrada, así como la salida, que es el precio de cierre del día siguiente. Esta
variable de salida es el valor que queremos que nuestro modelo aprenda a predecir. El valor
real de la salida estará representado por 'y' y el valor predicho estará representado por yˆ.
El entrenamiento del modelo implica ajustar los pesos de las variables para todas las diferentes
neuronas presentes en la red neuronal. Esto se hace minimizando la "función de costo". La
función de costo, como sugiere el nombre, es el costo de hacer una predicción utilizando la
red neuronal. Es una medida de qué tan lejos está el valor predicho, yˆ, del valor real u
observado, y.
Hay muchas funciones de costo que se utilizan en la práctica, la más popular se calcula como
la mitad de la suma de las diferencias al cuadrado entre los valores reales y previstos para el
conjunto de datos de entrenamiento.
C = ∑1/2(yˆ − y)2
La red neuronal se entrena a sí misma calculando primero la función de costo para el conjunto
de datos de entrenamiento para un conjunto determinado de pesos para las neuronas. Luego,
vuelve atrás y ajusta los pesos, seguido por el cálculo de la función de costo para el conjunto
de datos de entrenamiento en función de los nuevos pesos.
El proceso de enviar los errores de vuelta a la red para ajustar los pesos se llama
retropropagación.
Esto se repite varias veces hasta que se minimiza la función de costo. A continuación, veremos
con más detalle cómo se ajustan los pesos y se minimiza la función de costo.
Los pesos se ajustan para minimizar la función de costo. Una forma de hacerlo es mediante la
fuerza bruta.
Supongamos que tomamos 1000 valores para los pesos y evaluamos la función de costo para
estos valores.
El mejor valor para los pesos sería la función de costo correspondiente a los mínimos de este
gráfico.
154
Machine Translated by Google
Este enfoque podría tener éxito para una red neuronal que involucra un solo peso que necesita
ser optimizado.
Sin embargo, a medida que aumenta el número de pesos a ajustar y el número de capas
ocultas, el número de cálculos necesarios aumentará drásticamente.
El tiempo que se necesitará para entrenar un modelo de este tipo será extremadamente largo,
incluso en la supercomputadora más rápida del mundo. Por este motivo, es esencial
desarrollar una metodología mejor y más rápida para calcular los pesos de la red neuronal.
La visualización del descenso del gradiente se muestra en los diagramas siguientes. El primer
gráfico es un valor único de pesos y, por lo tanto, es bidimensional. Se puede ver que la bola
roja se mueve en zigzag para llegar al mínimo de la función de costo.
En el segundo diagrama, tenemos que ajustar dos pesos para minimizar la función de costo.
Por lo tanto, podemos visualizarlo como un contorno, como se muestra en el gráfico, donde
nos movemos en la dirección de la pendiente más pronunciada, para alcanzar los mínimos en
el menor tiempo posible. Con este enfoque, no tenemos que hacer muchos cálculos y, como
resultado, los cálculos no toman mucho tiempo, lo que hace que el entrenamiento del modelo
sea una tarea factible.
155
Machine Translated by Google
1. Descenso de gradiente por lotes: en el descenso de gradiente por lotes, la función de costo se
calcula sumando todas las funciones de costo individuales en el conjunto de datos de
entrenamiento y luego calculando la pendiente y ajustando los pesos.
3. Descenso de gradiente por minilotes: es una combinación de los métodos por lotes y
estocásticos. Aquí, creamos diferentes lotes agrupando varias entradas de datos en un lote.
Esto básicamente da como resultado la implementación del descenso de gradiente estocástico
en lotes más grandes de entradas de datos en el conjunto de datos de entrenamiento.
Si bien podemos profundizar en el descenso de gradientes, nos tememos que quedará fuera de lugar.
156
Machine Translated by Google
Esto reduce drásticamente la complejidad del proceso para ajustar los pesos.
Esto marcaría el final de la primera época, las épocas sucesivas comenzarán con los
valores de peso de las épocas anteriores, podemos detener este proceso cuando la
función de costo converja dentro de un cierto límite aceptable.
Ahora aprenderemos cómo desarrollar nuestra propia Red Neuronal Artificial para
predecir el movimiento del precio de una acción.
Entenderás cómo codificar una estrategia utilizando las predicciones de una red neuronal que
construiremos desde cero.
157
Machine Translated by Google
# Indicadores técnicos
importar talibán como ta
# Trazado de gráficos
import [Link] como plt import
seaborn como sns %matplotlib
inline [Link]('seaborn
darkgrid')
Se utilizará random para inicializar la semilla a un número fijo, de modo que cada vez que
ejecutemos el código comencemos con la misma semilla.
Importar conjunto
de datos [ ]: # Los datos se almacenan en el directorio 'data_modules' path = "../
data_modules/"
158
Machine Translated by Google
dividir = int(0.8*len(X))
X_tren, X_prueba, y_tren, y_prueba = X[:dividir], X[dividir:], \ y[:dividir], y[dividir:]
Escalado de características
X_test_original = X_test.copia()
X_tren = sc.fit_transform(X_tren)
Prueba_X = [Link](Prueba_X)
Ahora importaremos las funciones que se utilizarán para construir la red neuronal artificial.
Importamos el método secuencial de la biblioteca [Link]. Este se utilizará para construir
secuencialmente las capas de aprendizaje de la red neuronal. El siguiente método que
importaremos será la función densa de la biblioteca [Link].
Este método se utilizará para construir las capas de nuestra Red Neuronal Artificial.
[ ]: clasificador = secuencial()
159
Machine Translated by Google
[ ]: [Link](Dense( unidades
= 128,
inicializador_del_núcleo = 'uniforme',
activación = 'relu',
dimensión_de_entrada =
[Link][1] ))
Kernel_initializer: define los valores iniciales de los pesos de las diferentes neuronas en la
capa oculta. Hemos definido este parámetro como "uniforme", lo que significa que los pesos
se inicializarán con valores de una distribución uniforme.
Input_dim: define la cantidad de entradas a la capa oculta. Hemos definido este valor para que
sea igual a la cantidad de columnas de nuestro marco de datos de características de entrada.
Este argumento no será necesario en las capas posteriores, ya que el modelo sabrá cuántas
salidas produjo la capa anterior.
))
Luego añadimos una segunda capa, con 128 neuronas, con un inicializador de núcleo
uniforme y "relu" como función de activación. En esta red neuronal solo estamos construyendo
dos capas ocultas.
[ ]: [Link](Dense( unidades
= 1,
160
Machine Translated by Google
La siguiente capa que construimos será la capa de salida, de la que requerimos una única
salida. Por lo tanto, las unidades que se pasan son 1 y se elige la función de activación como
función sigmoidea porque queremos que la predicción sea una probabilidad de que el mercado
se mueva hacia arriba.
[ ]: [Link]( optimizador
= 'adam', pérdida =
'error_cuadrático_medio', métricas =
['precisión'] )
Optimizador: Se elige como optimizador 'adam', que es una extensión del descenso de
gradiente estocástico.
Métricas: define la lista de métricas que evaluará el modelo durante la fase de prueba y
entrenamiento. Hemos elegido la precisión como métrica de evaluación.
Ahora necesitamos ajustar la red neuronal que hemos creado a nuestros conjuntos de datos de
entrenamiento.
Esto se hace pasando X_train, y_train, el tamaño del lote y el número de épocas en la función
fit().
El tamaño del lote se refiere a la cantidad de puntos de datos que el modelo utiliza para
calcular el error antes de retropropagar los errores y realizar modificaciones en los pesos.
Con esto nuestra Red Neuronal Artificial en Python ha sido compilada y está lista para realizar
predicciones.
161
Machine Translated by Google
¡Esto es interesante! Si bien los rendimientos de la estrategia fueron menores que los del
índice de referencia, debe tener en cuenta que el porcentaje de reducción es relativamente menor.
Sin embargo, la estrategia de la red neuronal se puede mejorar permitiendo que el
algoritmo procese más datos para mejorar sus puntuaciones de rendimiento.
Lectura adicional
3. Predicción del precio del oro mediante aprendizaje automático en Python: https://
[Link]/goldpricepredictionusingmachine
162
Machine Translated by Google
aprendiendopython/
4. Comercio con aprendizaje automático: Regresión [Curso]
[Link]
logisticregressioninmachinelearning
paper/PredictionofStockPerformanceintheIndianStockDutta
Bandopadhyay/082826e9adf1c3ce3ff9f70491566719772fdc8a
xgboostalgorithm/
14. Aprendizaje en conjunto para mejorar los resultados del aprendizaje automático
[Link]
Tácticomediante métodos de aprendizaje conjunto
15. Asignación cuantitativa de activos A nosotros
Máquina
[Link]
163
Machine Translated by Google
Parte IV
Aprendizaje no supervisado,
Procesamiento del lenguaje natural
y aprendizaje por refuerzo
Machine Translated by Google
16
Aprendizaje no supervisado
Pero si lo piensas, los humanos también tienen otro enfoque para aprender. Un bebé
comienza sin ningún conocimiento de lo que lo rodea y se le presenta a sus padres,
que son humanos. Aunque el bebé no pueda hablar, sabe cómo diferenciar las cosas.
Cuando ve un perro, primero pensará si se trata de algún otro ser, diferente de sus
padres. Cuando ve otro perro, ve que este perro tiene más cosas en común, como la
cola, con el primer perro que con un humano. De esta manera, aunque no sepa que
está viendo un "perro", ha aprendido a poner a los perros en una categoría diferente
a la de los humanos.
Repite el mismo proceso cuando ve un gato. Sabe que es diferente tanto de los
perros como de los humanos. Este proceso, cuando se replica en el aprendizaje
automático, se denomina agrupamiento, que es parte del aprendizaje no supervisado.
Supongamos que desea analizar las acciones que componen el índice S&P 500 y encontrar
dos acciones similares. Esto le ayudará a aplicar una estrategia de negociación de pares en
las acciones similares identificadas. Pero analizar las 500 acciones
datos fundamentales y de precios, y encontrar similitudes es una tarea muy tediosa y
Tarea que consume mucho tiempo.
Aquí puede utilizar un algoritmo de aprendizaje no supervisado. Simplemente pase los datos
relevantes de 500 acciones al algoritmo. A cambio, agrupará los datos similares.
acciones juntas. Por ejemplo, creará un grupo de Google y Facebook, y otro grupo de
Citigroup y Bank of America, y así sucesivamente.
Luego puede elegir un par de Citigroup y Bank of America y crear un
Estrategia comercial de arbitraje estadístico.
Esto puede funcionar no solo en 500 acciones, sino también en acciones de diferentes
geografías o incluso de diferentes clases de activos como divisas, materias primas o
bonos. El algoritmo no supervisado los agrupará en un asunto
de segundos.
Esto es útil no solo para el trading de pares, sino que también puede utilizar estos grupos para
Cree carteras diversificadas. Recuerde que los valores que son similares
entre sí se colocan juntos en un solo grupo. Y la seguridad en uno
El clúster es diferente a la seguridad en otro clúster.
Puede elegir el valor de mayor rendimiento de cada grupo y crear una cartera diversificada.
Por ejemplo, puede elegir Bank of America, Facebook, Gold
ETF, EURUSD y bonos del Tesoro de EE. UU. y crea una cartera diversificada.
166
Machine Translated by Google
Amazon Tecnología
Google Tecnología
Microsoft Tecnología
Ford Auto
JP Morgan Banco
Tesla Auto
De manera similar, si tuviera que dividir estas empresas en tres grupos, podría ser:
hecho como se muestra:
Aquí, el grupo 1 comprende las empresas tecnológicas, el grupo 2 son los bancos y el grupo
3 son automóviles. De estas agrupaciones, se puede concluir que las acciones
Dentro de un grupo son similares entre sí y difieren entre sí.
grupos. Cada grupo se llama clúster.
La siguiente pregunta que surge es ¿qué pasa si en lugar de diez, tienes una lista de
¿Miles de empresas? ¿Y si, además del sector, tienes muchas otras?
¿Características en el conjunto de datos?
Puede leer los datos fila por fila y crear los grupos. Pero, como el tamaño
A medida que aumenten los datos, la creación de grupos con intervención humana será imposible.
Puede utilizar el algoritmo de agrupamiento para realizar esta tarea. El agrupamiento es una técnica
para dividir los datos en grupos similares. Solo necesita pasar datos significativos para todas las
empresas y el algoritmo de agrupamiento creará
grupos para ti.
167
Machine Translated by Google
Por ejemplo, analizamos el grupo anterior y descubrimos que los grupos se crearon en función
de los sectores. Observe también que la única característica que se pasó al algoritmo de
agrupamiento fue el sector. Eso significa que el resultado generado por el algoritmo se basa
en la entrada proporcionada al algoritmo.
Obtendrá los datos históricos. Para entrenar un modelo de clasificación, debe etiquetar los
datos históricos. Para los días en los que los retornos del día siguiente son positivos, los
etiqueta como compra. Y los días en los que los retornos del día siguiente son negativos, los
etiqueta como sin posición. También utiliza dos características como entrada para el modelo
de aprendizaje automático. La imagen muestra un diagrama de dispersión de estas dos
características. Los puntos azules corresponden a una señal de compra y los verdes a ninguna posición.
El modelo de clasificación creará un límite para separar los puntos azules de los puntos verdes.
Luego, utilizará este límite para predecir si es mejor comprar o no comprar.
168
Machine Translated by Google
Posición en los datos no vistos o en los puntos de datos futuros. Si un punto de datos
cae en la región izquierda, se clasificará como una señal de compra. Y si cae en la región
derecha, se clasificará como No comprar, lo que significa que no se toma ninguna posición.
Aquí se puede ver que algunos puntos se encuentran en la región incorrecta, lo que
significa que estos puntos están mal clasificados.
Además, es muy difícil crear el límite si las clases no están bien separadas. Veamos
ahora cómo podemos abordar el mismo problema con un algoritmo de agrupamiento.
169
Machine Translated by Google
Es decir, el algoritmo de agrupamiento solo tiene acceso a las características y no conoce los
grupos en los que debe clasificar los datos. Como no hay etiquetas separadas para comprar,
el algoritmo no creará ningún límite para separar comprar y no comprar, pero creará grupos
de puntos de datos similares.
Puede analizar los grupos e identificar en qué grupo comprará el activo. Según su análisis,
puede comprar acciones de Apple si los puntos de datos se encuentran en el grupo 1.
170
Machine Translated by Google
Como puede ver, todos los puntos de datos que caen en el grupo 1 son de color azul.
indicando que los retornos del día siguiente son positivos.
Una limitación de la agrupación en clústeres es que no tienes ningún control sobre los clústeres.
creado por el algoritmo. Algunos de los clústeres creados podrían no ser útiles.
para nosotros, mientras que otros podrían serlo. Por ejemplo, el grupo 2 y el grupo 3 tienen
una combinación de compra y ninguna posición, lo que dificulta la incorporación de una
etiqueta significativa para ello.
Eso fue todo acerca de las diferencias clave entre clasificación y agrupamiento.
Vamos a resumirlos.
Agrupamiento de clasificación
171
Machine Translated by Google
en el próximo capítulo.
172
Machine Translated by Google
17
Agrupamiento de Kmedias
El agrupamiento de kmedias se utiliza cuando tenemos datos sin etiquetar, es decir, datos sin
categorías o grupos definidos. Este algoritmo encuentra grupos o conglomerados en los datos,
con la cantidad de grupos representados por la variable 'k' (de ahí el nombre).
Lo bueno de kmeans es que simplemente le damos los datos al algoritmo y la cantidad de grupos
que se deben formar. ¡Y luego le decimos que comience a funcionar! Eso es todo lo que obtiene
el algoritmo.
El algoritmo trabaja iterativamente para asignar cada observación a uno de los k grupos en función
de la similitud de las características proporcionadas.
Las entradas del algoritmo kmeans son los datos/características (X) y el valor de 'k' (número de
clústeres que se formarán).
1. El algoritmo comienza con la elección aleatoria de 'K' puntos de datos como 'centroides',
donde cada centroide define un grupo.
2. Cada punto de datos se asigna a un grupo definido por un centroide de modo que la distancia
entre ese punto de datos y el centroide del grupo sea mínima.
3. Los centroides se vuelven a calcular tomando la media de todos los puntos de datos que se
asignaron a ese grupo en el paso anterior. El algoritmo itera entre los pasos (ii) y (iii) hasta
que se cumple un criterio de detención, como alcanzar un número máximo predefinido de
iteraciones o hasta que los puntos de datos dejan de cambiar los grupos.
Veamos esto en acción ahora. A menudo, los operadores e inversores quieren agrupar acciones
en función de similitudes en determinadas características.
Por ejemplo, un comerciante que desea operar con una estrategia de negociación de pares, donde
Machine Translated by Google
Ella toma simultáneamente una posición larga y corta en dos acciones similares, idealmente querría
escanear todas las acciones y encontrar aquellas que sean similares entre sí en términos de industria,
sector, capitalización de mercado, volatilidad o cualquier otra característica.
1. Rentabilidad sobre el capital (ROE) = Ingresos netos/Patrimonio total del accionista, y 2. La beta
de la acción.
Los inversores y operadores utilizan el ROE para medir la rentabilidad de una empresa en relación
con el capital de los accionistas. Por supuesto, es preferible invertir en una empresa con un ROE alto.
Por otro lado, el beta representa la volatilidad de las acciones en relación con el mercado en general
(representado por un índice como el S&P 500 o el DJIA).
Revisar manualmente cada una de las acciones y luego formar grupos es un proceso tedioso y que
requiere mucho tiempo. En su lugar, se podría utilizar un algoritmo de agrupamiento, como el algoritmo
de agrupamiento kmeans, para agrupar o agrupar las acciones en función de un conjunto determinado
de características.
Importar conjunto de datos Usaremos el conjunto de datos que contiene los datos de 12 empresas y
que está almacenado en el archivo sample_stocks.csv. Puede descargar este archivo desde el enlace
de GitHub que se proporciona en la sección “Acerca del libro” de este libro.
# Trazado
import [Link] como plt import seaborn
como sns %matplotlib inline
[Link]('seaborn
darkgrid')
advertencias de importación
174
Machine Translated by Google
[Link]('ignorar')
Como se ve arriba, hemos descargado con éxito los datos de las 12 acciones.
Ahora crearemos una copia (df) de los datos originales y trabajaremos con ellos.
El primer paso es preprocesar los datos para que se puedan introducir en un algoritmo de
agrupamiento de kmedias. Esto implica convertir los datos en un formato de matriz NumPy.
y escalarlo.
La escala equivale a restar la media de la columna y dividirla por la desviación estándar de la columna
de cada punto de datos de esa columna.
escalador = StandardScaler()
datos_escalados = escalador.ajuste_transformado([Link])
175
Machine Translated by Google
imprimir(datos_escalados)
[[1,29583307 0,59517359]
[1.00653849 1.27029587]
[ 0,51349787 0,40862664 ]
[1,21731025 0,81725329]
[ 0,47010369 1,4746092 ]
[0,39654021 0,70177185]
[ 0,66723728 0,39086027]
[0,92842895 1,08374893]
[ 2.02733507 0.11548144 ]
[ 0,36595764 1,90100222 ]
[0,77592938 0,47080896]
[1.01521733 1.16369762]]
¡Eso es todo! 'km_model' ahora está entrenado y podemos extraer el clúster que tiene
asignado a cada acción de la siguiente manera:
176
Machine Translated by Google
Ahora que tenemos los clústeres asignados, los visualizaremos utilizando las bibliotecas
matplotlib y seaborn de la siguiente manera:
# Dibuje el gráfico
[Link]('Beta')
[Link]('ROE(%)')
[Link](ax.get_legend().get_texts(), fontsize='15')
[Link](ax.get_legend().get_title(), fontsize='15') [Link]('CLUSTERS del
algoritmo kmeans con k = 2', fontsize='xlarge')
177
Machine Translated by Google
Podemos ver claramente la diferencia entre los dos grupos en el gráfico anterior.
¿Puedes hacer un análisis de este grupo? El grupo 1 está compuesto en gran parte por todas
las empresas de servicios públicos que tienen un ROE bajo y una beta baja en comparación con
las empresas tecnológicas de alto crecimiento del grupo 0.
Aunque no le dijimos al algoritmo kmeans a qué sectores industriales pertenecían las acciones,
pudo descubrir esa estructura en los datos mismos. Ahí radica el poder y el atractivo del
aprendizaje no supervisado.
La siguiente pregunta que surge es ¿cómo decidir el valor del hiperparámetro k antes de ajustar
el modelo?
Pasamos el valor del hiperparámetro k=2 de forma aleatoria mientras ajustábamos el modelo.
Una de las formas de hacer esto es comprobar la "inercia" del modelo, que representa
178
Machine Translated by Google
A continuación graficamos los valores de inercia para los modelos kmean con diferentes valores
de 'k':
179
Machine Translated by Google
Como podemos ver que el valor de inercia muestra una disminución marginal después de k =
3, un modelo kmedias con k = 3 (tres clústeres) es el más adecuado para esta tarea.
Puedes intentar ejecutar el mismo algoritmo pero cambiar el parámetro a 3 y ver cómo cambia.
180
Machine Translated by Google
18
Agrupamiento jerárquico
En el capítulo anterior analizamos la agrupación de Kmeans, pero ¿se dio cuenta de una
limitación de Kmeans?
La agrupación jerárquica es uno de esos algoritmos que nos ayuda en este sentido.
Veamos cómo funciona.
Paso 2: Identificar dos grupos que sean similares y convertirlos en un solo grupo.
182
Machine Translated by Google
¿Cómo identificar si dos grupos son similares? Una de las formas de hacerlo es encontrar la
distancia entre los grupos.
Medida de distancia (similitud) La distancia entre dos grupos se puede calcular en función de
la longitud de la línea recta trazada de un grupo a otro. Esto se conoce comúnmente como
distancia euclidiana.
Si (x1, y1) y (x2, y2) son puntos en el espacio bidimensional, entonces la distancia euclidiana entre ellos
es:
2
(x2 x1) − (y2 − y1) 2
Además de la distancia euclidiana, se han desarrollado otras métricas para medir la distancia,
como la distancia de Hamming, la distancia de Manhattan (taxi o manzana de la ciudad) y la
distancia de Minkowski.
Enlace simple: el enlace simple o enlace más cercano es la distancia más corta entre un par
de observaciones en dos grupos.
183
Machine Translated by Google
Enlace completo: el enlace completo o enlace más lejano es la distancia más lejana
entre un par de observaciones en dos grupos.
Enlace centroide: el enlace centroide es la distancia entre los centroides de dos grupos.
En este caso, es necesario encontrar el centroide de dos grupos y luego calcular la
distancia entre ellos antes de fusionarlos.
184
Machine Translated by Google
Las observaciones E y F son las más cercanas entre sí por cualquier otro punto. Por lo tanto,
se combinan en un grupo y, además, la altura del vínculo que las une es la más pequeña.
Las siguientes observaciones que están más cerca entre sí son A y B, que se combinan.
Esto también se puede observar en el dendrograma, ya que la altura del bloque entre A y B
es ligeramente mayor que la de E y F. De manera similar, D se puede fusionar en los grupos
E y F y luego C se puede combinar con este. Finalmente, A y B se combinan en C, D, E y F
para formar un solo grupo.
Pero la pregunta sigue siendo la misma: ¿cómo encontramos el número de grupos utilizando
un dendrograma o dónde debemos dejar de fusionar los grupos?
Si lo piensas, puedes ver que, si bien A y B pueden estar en un grupo, están lejos del otro
grupo formado por C, D, E y F. Esto se ve en el dendrograma, ya que la altura de la línea
que une estos dos grupos es la más larga. Por lo tanto, podrías dividir estos puntos en dos
grupos.
Las observaciones se asignan a los grupos trazando una línea horizontal a través del
dendrograma.
185
Machine Translated by Google
En cada iteración, separamos los puntos o grupos más alejados que no son similares hasta que
cada punto de datos se considera un grupo individual. Aquí dividimos los grupos individuales en n
grupos, de ahí el nombre de agrupamiento divisivo.
# Trazado de gráficos
import seaborn como sns import
[Link] como plt %matplotlib inline
[Link]('seaborn
darkgrid')
# Aprendizaje automático
# Escalado de datos desde
[Link] import StandardScaler
186
Machine Translated by Google
ruta = "../módulos_de_datos/"
[Link]()
Crear un dendrograma Comenzamos importando la biblioteca que nos ayudará a crear dendrogramas.
El dendrograma nos ayuda a darnos una idea aproximada de la cantidad de clústeres.
# Crear un dendrograma
187
Machine Translated by Google
[Link]([Link](datos, método='ward'),etiquetas=datos.
→índice)
[Link]('Dendrograma')
[Link]('Acciones')
[Link]('Distancia euclidiana ') [Link]()
188
Machine Translated by Google
datos
189
Machine Translated by Google
19
Análisis de componentes principales
Ya sabes que un algoritmo de agrupamiento calcula la distancia entre los puntos y forma grupos
de puntos que están más cerca unos de otros. Por ejemplo, tomemos los valores RSI de JP
Morgan.
9 de agosto de 2021 40 25
10 de agosto de 2021 42 62
11 de agosto de 2021 60 25
12 de agosto de 2021 65 50
Se agrega un nuevo eje para capturar los valores ADX. El gráfico se convierte en un gráfico 2D
con RSI como eje x y ADX como eje y.
Machine Translated by Google
Se puede ver que, debido a la adición de ADX, los puntos de datos se alejaron.
Es difícil agrupar estos puntos de datos en dos grupos, por lo que se los agrupa en
cuatro grupos diferentes.
En el ejemplo de RSI y ADX, terminamos creando 4 clústeres. Cada clúster tenía solo 1
punto de datos. Básicamente, terminamos con lo que habíamos comenzado.
Comenzamos con 4 puntos y terminamos con 4 grupos. No hubo agrupación de estos 4
puntos. Para generalizar, demasiadas dimensiones o características hacen que cada
punto parezca equidistante de otros puntos. Si las distancias son todas aproximadamente
iguales, entonces todas las observaciones parecen igualmente iguales (así como
igualmente diferentes) y no se pueden formar grupos significativos.
191
Machine Translated by Google
9 de agosto de 2021 40 20
10 de agosto de 2021 45 25
11 de agosto de 2021 60 45
12 de agosto de 2021 65 50
13 de agosto de 2021 40 25
14 de agosto de 2021 45 20
15 de agosto de 2021 60 50
16 de agosto de 2021 65 45
17 de agosto de 2021 44 30
18 de agosto de 2021 65 55
Si dibuja un diagrama de dispersión para estos valores, se verá como se muestra a continuación:
La forma más sencilla de reducir las dimensiones es eliminar una de ellas. Por ejemplo,
eliminar ADX o eliminar los valores RSI. Pero eso provocaría una pérdida de información.
Si solo se mantuviera el RSI, los puntos de datos (40, 20) y (40, 25) se unirían.
Antes, los dos puntos estaban a una distancia de 5 unidades entre sí, pero ahora parece que son
el mismo punto, por lo que se pierde la información de que estos dos puntos son diferentes y no
iguales.
192
Machine Translated by Google
Puede ver que, aunque los puntos están más cerca en el nuevo eje, todavía se pueden ver
claramente. Simplemente gire o enderece esta línea para convertir los puntos de datos en una
sola dimensión. Y logró conservar parte de la información de ambas dimensiones. Esto es
esencialmente lo que hace el análisis de componentes principales, es decir, la reducción de la
dimensionalidad.
El análisis de componentes principales crea una nueva variable que contiene la mayor parte
de la información de las variables originales. Un ejemplo sería que nos dieran 5 años de datos
de precios de cierre de 10 empresas, es decir, aproximadamente (1265 * 10) puntos de datos.
Buscaríamos reducir este número de tal manera que se conserve la información.
193
Machine Translated by Google
Por lo tanto, utilizamos el análisis de componentes principales para asegurarnos de que se mantenga.
un mínimo.
La respuesta es valores propios. Bueno, esa no es la respuesta completa, pero en cierto modo lo
es. Antes de entrar en el tema matemático, refresquemos nuestros conceptos sobre la matriz (¡no,
no la película!).
Av = λv
El conjunto de vectores que no cambian de dirección al multiplicarse por una matriz se denomina
vectores propios. El cambio de magnitud correspondiente se denomina valor propio. Se representa
aquí con λ .
Recuerde que dijimos que el objetivo último del análisis de componentes principales es reducir el
número de variables. Bueno, los vectores propios y los valores propios ayudan en este sentido.
Una cosa que hay que tener en cuenta es que los vectores propios son para una matriz cuadrada,
es decir, una matriz con un número igual de filas y columnas. Pero también se pueden calcular
para matrices rectangulares.
Digamos que tenemos una matriz A, que consta de los siguientes elementos:
Matriz A
2 8
6 10
Ahora, tenemos que encontrar los vectores propios y los valores propios de tal manera que:
194
Machine Translated by Google
Av = λv
Dónde,
• λ es el valor propio.
Si bien puede parecer desalentador, existe un método simple para encontrar los vectores propios y
los valores propios.
Av − λIv = 0
Ahora, supongamos que la matriz de vectores propios no es cero. Por lo tanto, podemos hallar λ
hallando el determinante.
(2 − λ)(10 − λ) − (8 6) = 0
2 20 − 2λ − 10λ + λ − 48 = 0
2 λ − 12λ − 28 = 0
(λ − 14)(λ + 2) = 0
λ = 14, −2
Por lo tanto, podemos decir que los valores propios son 14, 2.
268
A=
10
incógnita
v=
y
Por lo tanto,
195
Machine Translated by Google
(4x + 6y) = 0
(8x + 12y) = 0
2x + 3y = 0, x = (3/2)y
x = 3, y = 2
3
2
¡Eso es genial! Hemos entendido cómo se forman los vectores y valores propios.
Ahora que sabemos cómo encontrar los valores propios y los vectores propios, hablemos
de sus propiedades.
Digamos que tenemos un gráfico con ciertos puntos mapeados en los ejes x e y.
Ahora puedes localizarlos dando las coordenadas (x, y) de un punto, pero nos damos
cuenta de que puede haber otra forma eficiente de mostrarlos de manera significativa.
¿Qué sucedería si trazáramos una línea de tal manera que pudiéramos ubicarlos usando
solo la distancia entre un punto en esta nueva línea y los puntos? Probemos eso ahora.
196
Machine Translated by Google
Digamos que las líneas verdes representan la distancia desde cada punto hasta la nueva
línea. Además, la distancia desde el primer punto de la línea proyectada, es decir, A, hasta
la proyección del último punto en la nueva línea, es decir, B, se denomina aquí dispersión. En
la figura anterior, se denota como la línea roja. La importancia de la dispersión es que nos
brinda información sobre cuán variado es el conjunto de datos. Cuanto mayor sea el valor,
más fácil será para nosotros diferenciar entre dos puntos de datos individuales.
Debemos tener en cuenta que si tuviéramos variables en dos dimensiones, obtendríamos dos
conjuntos de valores propios y vectores propios. La otra línea sería perpendicular a la primera.
Ahora tenemos un nuevo eje de coordenadas que se adapta mucho más a los puntos,
¿verdad?
Como estamos acostumbrados a ver los ejes de una manera particular, los rotaremos y los
mantendremos como se muestra en el siguiente diagrama.
Si tuviéramos que explicar los vectores propios y los valores propios mediante un diagrama,
197
Machine Translated by Google
Se puede decir que los vectores propios nos dan la dirección en la que se estira o transforma
y los valores propios son el valor en el que se estira. En ese sentido, los puntos proyectados
sobre la línea horizontal nos dan más información en cuanto a la extensión que los puntos
proyectados sobre la línea vertical.
Cuando dijimos que los valores propios nos dan el valor por el cual se estiran los puntos,
deberíamos agregar además que los valores propios con el número mayor correspondiente
nos dan más información que aquel con el valor propio de menor valor.
¡Ah, espera! Este capítulo habla sobre el análisis de componentes principales. Bueno, los
valores propios y los vectores propios son en realidad los componentes de los datos.
Pero todavía falta una pieza del rompecabezas. Como hemos visto en la ilustración, los
puntos de datos estaban agrupados y, por lo tanto, la distancia entre ellos no era tan
significativa.
Pero ¿qué sucedería si intentáramos comparar los precios de las acciones, una cuyo valor
fuera inferior a 10 dólares y otra cuyo valor fuera superior a 500 dólares? Obviamente, la
variación en el precio en sí llevaría a un resultado diferente. Por lo tanto, tratamos de encontrar
una forma de estandarizar los datos. Y como estamos tratando de encontrar la diferencia,
podemos utilizar la matriz de covarianza.
La varianza nos dice qué tan lejos están los valores del valor medio o promedio.
198
Machine Translated by Google
norte 2
2 i (xi − x¯)
Varianza(σ ∑)=
norte
2 2 2
2 (155 − 151) ) + (146 − 151) + (152 − 151)
Varianza(σ = = 14
3
Considerando que 152 está a sólo un punto de distancia y, por lo tanto, su cuadrado es sólo 1.
Otra razón es que elevar al cuadrado nos ayuda a dar la misma ponderación a los puntos que
están por encima o por debajo de la media. Un punto de datos que está a 2 unidades de la
media debería tener la misma ponderación independientemente de si está por encima o por
debajo del precio medio. Elevar al cuadrado la diferencia nos ayuda a lograrlo.
19.1.2 Covarianza
Xi = Varias observaciones de X
Yi = Varias observaciones de Y
N = Número de observaciones
199
Machine Translated by Google
σ21 = σ12
Muy bien. Sabemos que el análisis de componentes principales actúa como una herramienta
de compresión y busca reducir las dimensiones de los datos para facilitar el cálculo. También
vimos cómo los vectores propios y los valores propios simplifican la matriz original. Además,
sabemos que la covarianza simplifica en gran medida todo el aspecto de encontrar valores
propios y vectores propios.
Ahora bien, recuerda que al principio hablamos de cómo el análisis de componentes principales
busca reducir las dimensiones convirtiendo dos variables en una, creando una nueva
característica. ¿Ves una imagen formándose en tu cabeza sobre cómo podemos usarlo en el
trading?
Supongamos que encontramos los valores propios y los vectores propios de la matriz de
covarianza; diremos que el valor propio más grande tiene la mayor información sobre la matriz
de covarianza. Por lo tanto, podemos conservar la mayoría de los valores propios y sus
vectores propios correspondientes y aún así poder contener la mayor parte de la información
que estaba presente en la matriz de covarianza.
Eso es todo. Si tomamos el ejemplo anterior, si hubiéramos elegido el valor propio 14,
perderíamos algo de información, pero simplificaría mucho el cálculo y, en ese sentido,
habríamos reducido la dimensión de las variables.
¡Uf! Hemos entendido cómo funciona el análisis de componentes principales. Si tenemos que
añadir otra nota aquí e intentar reforzar el uso de vectores propios en el análisis de
componentes principales, podemos ver que la suma de los valores propios de la matriz de
covarianza es aproximadamente igual a la suma de la varianza total en nuestra matriz original.
200
Machine Translated by Google
Afortunadamente para nosotros, no tenemos que codificar toda la lógica del análisis de
componentes principales en Python. Simplemente importaremos la biblioteca sklearn y
usaremos la función PCA ya definida.
Como buscamos una implementación global, utilizaremos las acciones que cotizan en la Bolsa
de Nueva York.
Dado que trabajaremos con los datos de muchas empresas, hemos creado un archivo csv que
contiene los tickers de 20 empresas que cotizan en la Bolsa de Nueva York. Por el momento,
importaremos su precio de cierre ajustado. El código es el siguiente:
# Importar el conjunto de
datos df = pd.read_csv(path + "[Link]", index_col=0) [Link]
[23]: # Acciones
columnas df
201
Machine Translated by Google
Contamos con 502 días de datos para 20 acciones. Calcularemos los rendimientos diarios.
La agrupación en clústeres con más de 500 dimensiones de datos da como resultado un resultado
deficiente. Utilizaremos una técnica de reducción de dimensiones (PCA) para reducir las dimensiones
de más de 500 a solo 12. Es decir, los retornos de 500 días estarán representados por solo 12
números. El número 12 se eligió solo con fines ilustrativos.
[44]: pca.componentes_.forma
Como puede ver, hemos reducido los datos de 501 dimensiones a solo 12 dimensiones. Podemos
agrupar estas 20 acciones utilizando estas 12 dimensiones.
# Crear un dendrograma
[Link]([Link](pca.components_.T,
→method='ward'),labels=[Link])
202
Machine Translated by Google
[Link]('Dendrograma')
[Link]('Acciones')
[Link]('Distancia euclidiana ') [Link]()
Se puede ver que el algoritmo agrupó a GOOG y GOOGL, como era de esperar. Además,
podemos ver que Abbott Labs (ABT) y Stryker Corp (SYK), las dos empresas médicas, están
más cerca una de la otra y forman parte del mismo grupo.
Una vez que se forman estos grupos, se puede crear una cartera de activos diferentes.
Puede leer sobre la paridad de riesgo jerárquica para saber cómo hacerlo.
¡Genial! No solo hemos visto dos algoritmos no supervisados, sino que también hemos visto
cómo superar la maldición de la dimensionalidad. En los próximos capítulos, nos relajaremos
un poco e intentaremos comprender los conceptos de procesamiento del lenguaje natural y
aprendizaje por refuerzo.
203
Machine Translated by Google
20
El procesamiento del lenguaje natural o PNL tiene una amplia variedad de aplicaciones.
Veámoslos ahora.
Feeds y comunicados de prensa. En este capítulo, cubriremos la estructura básica necesaria para resolver
el problema de PNL desde la perspectiva de un trader.
Noticias y PNL Cualquiera que haya negociado algún tipo de instrumento financiero sabe que los
mercados tienen en cuenta constantemente todas las noticias que llegan a través de diversas fuentes.
La relación de causa y efecto entre las noticias impactantes y los movimientos del mercado se puede
observar directamente cuando uno intenta operar en el mercado durante la publicación de noticias
importantes, como los datos de nóminas no agrícolas.
Antes de que las redes sociales se convirtieran en una de las principales fuentes de información, los
comerciantes solían depender de los anuncios de radio o televisión para obtener la información más reciente.
ción.
Pero desde que Twitter se convirtió en una fuente de noticias que mueven el mercado (gracias a los
líderes políticos), a los operadores les resulta difícil rastrear manualmente toda la información que se
origina en diferentes cuentas de Twitter. Para evitar este problema, los operadores pueden usar paquetes
de procesamiento del lenguaje natural (PLN) para leer múltiples fuentes de noticias en un corto período
de tiempo y tomar una decisión rápida.
Obtener los datos Para crear un modelo de PNL para el trading, es necesario contar con una fuente de
datos confiable. Existen múltiples proveedores para este propósito.
En el texto del titular de la noticia, puedes buscar el símbolo o el nombre de la empresa para obtener el
titular de la noticia relacionado con ella. Por ejemplo, para obtener el titular de la noticia específico de
Apple Inc, puedes buscar AAPL o Apple. También puedes considerar incluir titulares de noticias que
mencionen productos de Apple, como el iPhone o Mac. Sin embargo, es posible que te pierdas noticias
que hagan referencia indirecta a Apple. Por ejemplo, "La mayor caída de precio observada en el teléfono
inteligente más vendido en los EE. UU."
205
Machine Translated by Google
¿Cómo obtener los últimos datos de titulares de noticias y la puntuación de sentimiento sobre ellos?
Puede obtener los datos de titulares de noticias más recientes en [Link]. Proporciona una API
de Python para extraer los titulares de las noticias.
Dividamos los datos en dos tipos y tratemos de abordar cada uno de ellos de forma diferente.
Los datos estructurados son aquellos que se publican en un formato predeterminado o consistente.
El lenguaje también es muy consistente.
Por ejemplo, un comunicado de prensa sobre las actas de la Reserva Federal o los resultados de una
empresa pueden considerarse datos estructurados. En este caso, la longitud del texto suele ser muy
grande.
Por el contrario, los datos no estructurados son aquellos en los que ni el lenguaje ni el formato son
uniformes. Por ejemplo, los feeds de Twitter, los blogs y los artículos pueden considerarse parte de
ellos. Estos textos suelen tener un tamaño limitado.
Preprocesamiento de datos Los datos no estructurados, como los feeds de Twitter, están compuestos
por muchos datos no textuales, como hashtags y menciones. Estos deben eliminarse antes de medir
el sentimiento del texto.
En el caso de los datos estructurados, el tamaño del texto puede fácilmente empañar su esencia.
Para solucionarlo, es necesario dividir el texto en oraciones individuales o aplicar
206
Machine Translated by Google
Convertir el texto en una puntuación numérica Convertir los datos de texto en una puntuación
numérica es una tarea complicada. Para textos no estructurados, puede utilizar paquetes
preexistentes como VADER para estimar el sentimiento de las noticias. Si el texto es un blog o
un artículo, puede intentar descomponerlo para que VADER le dé sentido.
Al construir una biblioteca de datos estructurados relevantes, se debe tener cuidado de considerar
textos de fuentes similares y las correspondientes reacciones del mercado a estos datos textuales.
Por ejemplo, si la Reserva Federal publica una declaración que dice que “las expectativas de
inflación están firmemente ancladas” y la cambia a “las expectativas de inflación son estables”,
entonces bibliotecas como VADER no podrán notar la diferencia, pero el mercado reaccionará
de manera significativa.
Generar un modelo comercial Una vez que tenga los puntajes de sentimiento del texto, puede
combinarlos con algún tipo de indicadores técnicos para filtrar el ruido y generar las señales de
compra y venta.
La parte esencial del procesamiento del lenguaje natural es convertir texto o información en un
número objetivo que pueda utilizarse para crear señales comerciales.
207
Machine Translated by Google
Una vez que tenga las puntuaciones de sentimiento, puede utilizar un modelo ML para generar señales
comerciales.
Realizar pruebas retrospectivas del modelo Una vez que el modelo esté listo, debe realizar pruebas
retrospectivas con los datos anteriores para verificar si el rendimiento del modelo se encuentra dentro
de los límites de riesgo. Durante las pruebas retrospectivas, asegúrese de no utilizar los mismos datos
que se utilizan para entrenar el modelo de árbol de decisiones.
El aprendizaje automático tiene diversas aplicaciones en el comercio y se puede utilizar según sus
necesidades. En el próximo capítulo, veamos algo que el mundo llama el futuro del aprendizaje
automático, es decir, el aprendizaje por refuerzo.
208
Machine Translated by Google
21
Aprendizaje por refuerzo
Aunque la mayoría de los jugadores de ajedrez saben que el objetivo final del ajedrez
es ganar, aun así intentan mantener la mayoría de las piezas en el tablero. Pero
AlphaZero entendió que no necesitaba todas sus piezas mientras pudiera tomar al rey
del oponente. Por lo tanto, sus movimientos se perciben como bastante arriesgados,
pero en última instancia, darían buenos resultados.
AlphaZero comprendió que para cumplir el objetivo a largo plazo del jaque mate, tendría
que sufrir pérdidas en el juego. A esto lo llamamos gratificación retrasada.
Lo que es impresionante es que antes de AlphaZero, a pocas personas se les ocurría
jugar de esta manera. Desde entonces, diversos expertos de diversas disciplinas han
estado trabajando en formas de adaptar el aprendizaje por refuerzo en sus investigaciones.
Este emocionante logro de AlphaZero despertó nuestro interés en explorar el uso del
aprendizaje de refuerzo para el trading.
¿Qué es el aprendizaje por refuerzo? El aprendizaje por refuerzo puede sonar exótico
y avanzado, pero el concepto subyacente de esta técnica es bastante
Machine Translated by Google
¡Es muy sencillo! ¡De hecho, todo el mundo lo sabe desde la infancia!
Cuando éramos niños, siempre nos daban una recompensa por destacar en los deportes o en los estudios.
También te regañaban o regañaban por hacer algo malo, como romper un jarrón. Esta era una forma de
cambiar tu comportamiento. Supón que te regalaran una bicicleta o una PlayStation por ser el primero,
practicarías mucho para ser el primero. Y como sabías que romper un jarrón significaba problemas,
tendrías cuidado con él. Esto se llama aprendizaje por refuerzo. La recompensa servía como refuerzo
positivo, mientras que el castigo servía como refuerzo negativo. De esta manera, tus mayores moldeaban
tu aprendizaje.
De manera similar, el algoritmo RL puede aprender a operar en los mercados financieros por sí solo
observando las recompensas o los castigos recibidos por las acciones.
Como humanos, nuestros agentes aprenden por sí mismos a lograr estrategias exitosas
que conducen a las mayores recompensas a largo plazo.
Este paradigma de aprendizaje por ensayo y error, únicamente a partir de recompensas
o castigos, se conoce como aprendizaje de refuerzo (LR).
¿Cómo aplicar el aprendizaje por refuerzo en el trading? En el ámbito del trading, el problema se puede
plantear de múltiples formas, como maximizar las ganancias, reducir las pérdidas o asignar la cartera. El
algoritmo de aprendizaje por refuerzo aprenderá la estrategia para maximizar las recompensas a largo
plazo.
Por ejemplo, el precio de las acciones de Amazon se mantuvo prácticamente estable desde finales de 2018
hasta principios de 2020. La mayoría de nosotros pensaría que una estrategia de reversión a la media
funcionaría mejor en este caso.
210
Machine Translated by Google
Pero si nos fijamos en los inicios de 2020, el precio subió y empezó a marcar tendencia.
Por lo tanto, desde principios de 2020, la implementación de una estrategia de reversión a la
media habría resultado en pérdidas. Si se observan las condiciones del mercado de reversión a la
media del año anterior, la mayoría de los operadores habrían salido del mercado cuando comenzó
a marcar una tendencia.
Pero si hubieras apostado a largo plazo y hubieras mantenido la acción, te habría beneficiado a
largo plazo. En este caso, habrías renunciado a tu recompensa actual a cambio de futuras
ganancias a largo plazo. Este comportamiento es similar al concepto de gratificación diferida del
que hablamos al principio del artículo.
El modelo RL puede captar patrones de precios de los años 2017 y 2018 y, teniendo en mente un
panorama más amplio, el modelo puede seguir manteniendo una acción para obtener ganancias
descomunales en el futuro. ¿En qué se diferencia el aprendizaje por refuerzo de los algoritmos de
aprendizaje automático tradicionales?
Como puede ver en el ejemplo anterior, no es necesario proporcionar etiquetas en cada paso de
tiempo al algoritmo RL. El algoritmo RL aprende inicialmente a operar mediante prueba y error, y
recibe una recompensa cuando se cierra la operación. Y luego optimiza la estrategia para
maximizar las recompensas. Esto es diferente de los algoritmos ML tradicionales que requieren
etiquetas en cada paso de tiempo o con una frecuencia determinada.
Por ejemplo, la etiqueta de destino puede ser el cambio porcentual después de cada hora. Los
algoritmos de ML tradicionales intentan clasificar los datos. Por lo tanto, el problema de la
gratificación retrasada sería difícil de resolver mediante algoritmos de ML convencionales.
Con el panorama más amplio en mente de lo que el algoritmo RL intenta resolver, aprendamos
los componentes básicos del modelo de aprendizaje de refuerzo.
211
Machine Translated by Google
Acciones Las acciones pueden pensarse en qué problema está resolviendo el algoritmo RL. Si el
algoritmo RL está resolviendo el problema del trading, entonces las acciones serían
Comprar, vender y mantener. Si el problema es la gestión de cartera, las acciones serían asignaciones
de capital a cada una de las clases de activos. ¿Cómo funciona el
¿El modelo RL decide qué acción tomar?
Pero para un análisis y una ejecución adecuados, los datos deben ser débilmente predictivos y
débilmente estacionarios. Es bastante fácil entender que los datos deben ser débilmente predictivos,
pero ¿qué quiere decir con débilmente estacionarios?
Débilmente estacionario significa que los datos deben tener una media constante y
varianza. Pero, ¿por qué es importante? La respuesta corta es que la máquina
Los algoritmos de aprendizaje funcionan bien con datos estacionarios. ¡Muy bien! ¿Cómo funciona el
¿El modelo RL aprende a mapear el estado a la acción a tomar?
Recompensas Una recompensa puede considerarse como el objetivo final que desea alcanzar.
que se desea alcanzar con el sistema de vida real. Por ejemplo, el objetivo final sería
212
Machine Translated by Google
Paso 1
• Estado y acción: supongamos que el precio de cierre de Apple fue $92 el 24 de julio de
2020. Según el estado (RSI y retornos de 10 días), el agente dio una señal de compra.
• Entorno: Para simplificar, decimos que la orden se realizó al inicio del siguiente día de
negociación, que es el 27 de julio. La orden se ejecutó a $92. Por lo tanto, el entorno
nos indica que tiene una posición larga en una acción de Apple a $92.
Paso 2
• Estado y acción: obtiene el siguiente estado del sistema creado con los últimos datos de
precios disponibles. Al cierre del 27 de julio, el precio había alcanzado los 94 dólares.
El agente analizaría el estado y daría la siguiente acción, por ejemplo, vender al entorno.
213
Machine Translated by Google
¡Genial! Hemos entendido cómo se combinan los diferentes componentes del modelo RL. Ahora,
intentemos entender la intuición de cómo el agente RL realiza la acción.
Tabla Q y aprendizaje Q
En cada paso de tiempo, el agente de RL debe decidir qué acción tomar. ¿Qué sucedería si el
agente de RL tuviera una tabla que le indicara qué acción le dará la máxima recompensa? Luego,
simplemente seleccione esa acción. Esta tabla es la tabla Q.
En la tabla Q, las filas son los estados (en este caso, los días) y las acciones son las columnas
(en este caso, mantener y vender). Los valores de esta tabla se denominan valores Q.
De la tabla Q anterior, el 23 de julio, ¿qué acción tomaría el agente de RL? Sí, así es. Se tomaría
una acción de "mantener", ya que tiene un valor Q de 0,966, que es mayor que el valor Q de
0,954 para la acción de venta.
Pero, ¿cómo crear la tabla Q? Vamos a crear una tabla Q con la ayuda de un ejemplo. Para
simplificar, tomemos el mismo ejemplo de datos de precios del 22 al 31 de julio de 2020. Hemos
agregado los rendimientos porcentuales y
214
Machine Translated by Google
22072020 0 0
23072020 0,95 0
24072020 0,95 0
27072020 0,98 0
28072020 0,96 0
29072020 0,98 0
30072020 0,99 0
31072020 1.09 1.09
Pero se espera que el precio aumente a $106 el 31 de julio, lo que resultará en una ganancia.
del 9%. Por lo tanto, conviene conservar las acciones hasta entonces. Tenemos que
representar esta información de tal manera que el agente RL pueda retenerla en lugar de
que vender. ¿Cómo hacerlo? Para ayudarnos con esto, necesitamos crear una Q
tabla. Puedes comenzar copiando la tabla de recompensas en la tabla Q y luego
Calcular la recompensa implícita utilizando la ecuación de Bellman para cada día.
Mantener la acción.
215
Machine Translated by Google
La ecuación de Bellman
Q(st , yo
soy ) = R(st , yo
soy )+γ Máx[Q(st+1, at+1)]
Primero comenzaremos con el valor q para la acción Hold del 30 de julio. La primera parte es la
recompensa por realizar esa acción. Como se ve en la tabla R, es 0. Supongamos que γ = 0,98. El valor
Q máximo para las acciones de venta y retención del día siguiente, es decir, el 31 de julio, es 1,09. Por
lo tanto, el valor q para la acción Hold del 30 de julio es 0 + 0,98 (1,09) = 1,06.
De esta manera rellenaremos los valores de las demás filas de la columna Hold para completar la tabla
Q.
Para superar este problema, se pueden utilizar redes neuronales profundas, también llamadas redes Q
profundas o DQN. Las redes Q profundas aprenden la tabla Q a partir de experiencias pasadas y,
cuando se les da un estado como entrada, pueden proporcionar el valor Q para cada una de las
acciones. Podemos seleccionar la acción a realizar con el valor Q máximo.
216
Machine Translated by Google
acción tomada y recompensa recibida por ella. Y use esta combinación para entrenar la red
neuronal.
Problemas en el aprendizaje por refuerzo Hay dos cuestiones principales que se deben tener
en cuenta al crear el modelo de aprendizaje por refuerzo. Son las siguientes:
Caos tipo 2 Puede parecer un concepto de ciencia ficción, pero es muy real. Mientras estamos
entrenando el modelo RL, estamos trabajando de forma aislada. Aquí, el modelo RL no está
interactuando con el mercado. Pero una vez que se implementa, no sabemos cómo afectará
al mercado. El caos tipo 2 se produce esencialmente cuando el observador de una situación
tiene la capacidad de influir en la situación. Este efecto es difícil de cuantificar mientras se
entrena el propio modelo RL. Sin embargo, se puede suponer razonablemente que el modelo
RL sigue aprendiendo incluso cuando se implementa y, por lo tanto, podrá corregirse a sí
mismo en consecuencia.
Ruido en los datos financieros Hay situaciones en las que el modelo RL podría detectar ruido
aleatorio que suele estar presente en los datos financieros y considerarlo como una entrada
sobre la que se debe actuar. Esto podría generar señales comerciales inexactas. Si bien
existen formas de eliminar el ruido, debemos tener cuidado con el equilibrio entre eliminar el
ruido y perder datos importantes.
Si bien estos problemas definitivamente no son algo que se pueda ignorar, hay varias
soluciones disponibles para reducirlos y crear un mejor modelo RL en el trading.
Conclusión
Hemos tocado apenas la superficie del aprendizaje por refuerzo con la introducción de los
componentes que conforman el sistema de aprendizaje por refuerzo. A medida que profundice,
podrá comprender los parámetros correctos que se deben utilizar y crear un modelo con
mayor exactitud y precisión.
Esto nos lleva a la parte no tan importante de este libro, es decir, su conclusión.
Desde comprender las tareas básicas del aprendizaje automático hasta examinar cómo
funcionan los diferentes algoritmos de aprendizaje automático, los humanos tenemos esta
propensión a intentar crear algo que lo explique todo. Si analizamos la física, siempre veremos
a los científicos intentando encontrar una ecuación que lo explique todo.
217
Machine Translated by Google
Pero en este momento, tenemos diferentes algoritmos de ML que se utilizan para diferentes
propósitos, cada uno con sus propias fortalezas y debilidades. Esperamos que
Disfruté de este viaje y adquirí algunos conocimientos con este libro. También esperamos
Te hizo sentir curiosidad por saber qué más hay en el mundo del ML y sus
Aplicación en el comercio.
Lectura adicional
3. Jerárquico grupo
Análisis [Capítulo] http://
[Link]/~michael/stanford/[Link]
4. Selección de cartera propia: un enfoque sólido para Sharpe
Maximización de ratios [Link]
finance/actuarialscience/seminarseries/documents/[Link]
218
Machine Translated by Google
Referencias
Al crear este libro electrónico, hemos recurrido a varios recursos para hacer...
Por supuesto, si quieres mudarte, asegúrate de que los conocimientos que te brindan sean profundos.
Más adelante en su viaje hacia el aprendizaje automático en el comercio, puede ir
a través de estos recursos mencionados a continuación.
¿Puede un algoritmo de IA ayudar a acabar con los préstamos injustos? Esta empresa dice que sí
[Link]
El auge de las máquinas: los fondos de inteligencia artificial superan a los fondos de cobertura
Punto de referencia: [Link]
fundsareoutperformingthehedgefundbenchmark
El próximo gran proyecto de inteligencia artificial de Facebook consiste en entrenar a sus máquinas
con vídeos públicos de los usuarios: [Link]
trainingaipublicvideosdigitalmemories
en
Python para aprendizaje automático https:// Finanzas[Curso]
[Link]/course/pythonmachinelearning
[Link]/machinelearning/problemframing/formulate
a
Cómo realizar pruebas retrospectivas a
Comercio Estrategia
[Link]
220
Machine Translated by Google