Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
Backtesting.py - Curso completo en python
Backtesting.py - Curso completo en python
Durante el tutorial, el instructor analiza los aspectos positivos y negativos del uso de backtesting.py como biblioteca para realizar pruebas retrospectivas de estrategias comerciales. La biblioteca está diseñada para enfocarse únicamente en los elementos esenciales del backtesting, omitiendo funciones como una biblioteca de indicadores o la integración con corredores u otras plataformas. Esta simplicidad permite que la biblioteca sea liviana y fácil de usar. La documentación proporcionada es clara y fácil de entender, lo que permite a los usuarios comprender rápidamente los conceptos y la funcionalidad de la biblioteca.
Una ventaja significativa de backtesting.py es su velocidad, especialmente cuando se prueban estrategias individuales. La biblioteca está optimizada para el rendimiento, lo que permite a los usuarios ejecutar pruebas retroactivas de manera eficiente y obtener resultados de manera oportuna. Esta velocidad es beneficiosa cuando se itera a través de múltiples estrategias o combinaciones de parámetros para encontrar la configuración óptima.
Sin embargo, existen algunas limitaciones a tener en cuenta al usar backtesting.py. En primer lugar, la biblioteca no admite el comercio con múltiples activos. Está diseñado principalmente para probar estrategias en un solo activo o seguridad. Además, backtesting.py no brinda soporte para acciones fraccionarias, lo que puede ser un inconveniente para los usuarios interesados en operar con tamaños de posición más pequeños.
A pesar de estas limitaciones, backtesting.py sigue siendo una excelente opción para aquellos que desean centrarse exclusivamente en realizar pruebas retrospectivas de sus estrategias comerciales. Su simplicidad y naturaleza liviana hacen que sea fácil de entender e integrar en los flujos de trabajo existentes.
En el tutorial, el instructor demuestra el uso de backtesting.py siguiendo los pasos para crear un entorno virtual e instalar las dependencias necesarias. Al importar los componentes necesarios, como los datos de prueba de los precios de las acciones de Google de 2006 a 2013, el instructor prepara el escenario para realizar una prueba retrospectiva.
Luego, el instructor procede a crear una clase de estrategia donde se definen las dos funciones esenciales, __init__ y next. En la función __init__, el instructor calcula el valor del indicador del índice de fuerza relativa (RSI). La siguiente función se utiliza para evaluar los criterios de compra en función de los valores RSI.
A continuación, el instructor explica cómo implementar una estrategia de cruce simple utilizando valores precalculados que se introducen en la siguiente función. La biblioteca cruzada de backtesting.py se importa para comparar el RSI con los valores límite superior e inferior. Cuando el RSI supera cierto valor, se genera una señal de venta, y cuando cae por debajo de otro valor, se activa una señal de compra. El instructor define los valores límite superior e inferior y los asigna a la clase para acceder a la siguiente función.
Para probar la estrategia, el instructor configura una prueba retrospectiva proporcionando los datos, seleccionando la cantidad inicial de efectivo e imprimiendo las estadísticas. El instructor enfatiza la facilidad de trazar los resultados de las pruebas retrospectivas utilizando backtesting.py y destaca cómo los cuadros rojos y verdes en la pantalla indican los meses.
El instructor procede a proporcionar una descripción general del tablero backtesting.py, que ofrece una vista integral de la información comercial, ganancias y pérdidas, valor de la cartera e indicadores, entre otras métricas útiles. El instructor demuestra cómo se puede lograr la optimización de la estrategia utilizando backtesting.py definiendo diferentes rangos para los límites superior e inferior de la ventana RSI. El optimizador genera estadísticas como la relación de Sharpe y simula varias combinaciones para encontrar la función más valiosa. El instructor enfatiza que los usuarios pueden definir métricas personalizadas y aplicar restricciones para mejorar los resultados de optimización.
Además, el instructor explica cómo aplicar restricciones para seleccionar un subconjunto de valores utilizando funciones lambda que devuelven verdadero o falso en función de parámetros específicos. El video demuestra cómo optimizar la estrategia utilizando la función de optimización para maximizar la relación de Sharpe y cómo definir la función de optimización como una función normal de Python. El instructor también analiza la creación de una métrica para maximizar las ganancias y minimizar el tiempo de permanencia en el mercado.
En el tutorial, el instructor agrega un número mínimo de filtros de operaciones a la función de optimización para evitar el sobreajuste. Al incluir este filtro, la función de backtesting se ve obligada a mirar más allá de un solo período de oscilación, lo que aumenta las posibilidades de descubrir combinaciones de parámetros más rentables. Además, el instructor muestra cómo crear archivos HTML de los resultados de las pruebas retrospectivas, lo que puede ser útil cuando se ejecutan múltiples pruebas retrospectivas y es necesario realizar un seguimiento de las diferentes combinaciones de parámetros. El instructor también brinda orientación sobre cómo nombrar y organizar los archivos generados para evitar saturar el directorio de trabajo.
El tutorial explora aún más el uso de la función de optimización en backtesting.py para optimizar una estrategia de manera eficiente sin tener que probar todas las combinaciones posibles. Al establecer un número máximo de intentos, el programa realiza una búsqueda en cuadrícula aleatoria de las combinaciones, lo que reduce el tiempo dedicado a las pruebas retrospectivas y el riesgo de sobreajuste. El instructor demuestra cómo generar mapas de calor para visualizar los efectos de diferentes valores en la estrategia variando los límites superior e inferior. Se utiliza un grupo de pandas por declaración para agrupar las columnas por los límites superior e inferior, y la media se calcula para obtener valores promedio para cada combinación.
El orador explica cómo la función en backtesting.py encuentra todas las combinaciones únicas de las columnas especificadas, como los límites superior e inferior. Luego, estas combinaciones se agrupan y se aplica una función de agregación, como la media. El resultado resultante es un mapa de calor que se puede trazar con el módulo Seaborn. El instructor demuestra la optimización de la proporción de Sharpe y el cambio del mapa de colores para el mapa de calor. Además, el instructor muestra cómo usar la función incorporada plot_heat_maps para trazar múltiples mapas de calor para más de dos parámetros.
El instructor demuestra cómo usar mapas de calor para la optimización de parámetros e implementar estrategias de marcos de tiempo múltiples usando la función de aplicación de remuestreo de la biblioteca backtesting.py. Los mapas de calor proporcionan una representación visual de cómo las variaciones en diferentes parámetros afectan las estrategias comerciales. Al combinar diferentes marcos de tiempo utilizando la función de aplicación de remuestreo, los comerciantes pueden crear estrategias más complejas que consideren diferentes condiciones de mercado.
El instructor explica cómo se pueden usar diferentes marcos de tiempo en una estrategia comercial utilizando la biblioteca backtesting.py. Mediante la reducción de la muestra y la aplicación de funciones, la biblioteca puede realizar el relleno hacia adelante y volver a indexar al marco de tiempo más pequeño, lo que facilita el análisis de diferentes marcos de tiempo. En el ejemplo proporcionado, la estrategia implica el uso de RSI diario y semanal para activar operaciones solo cuando se produce un cruce y el RSI está por encima o por debajo de cierto umbral. El instructor menciona que la estrategia se puede optimizar ajustando los parámetros y que la biblioteca admite experimentar con diferentes tipos de órdenes, como stop loss y take profit.
El presentador demuestra cómo iniciar una posición corta cuando el RSI cae por debajo del límite inferior y cerrar cualquier posición corta al comprar. De manera similar, el presentador demuestra que cuando el RSI supera el límite superior, vende cualquier posición larga e inicia una posición corta. Sin embargo, el presentador señala que no existe un código para evitar que el programa tome múltiples posiciones, lo que lleva al programa a perder el 80 por ciento del capital invertido. El presentador explica cómo solucionar este problema agregando una cláusula para iniciar una nueva operación solo si no hay una posición actual o si existe una posición larga/corta en la cartera.
El instructor demuestra cómo utilizar las órdenes stop-loss y take-profit en backtesting.py. Al establecer un stop-loss en un porcentaje específico por debajo del precio actual, la estrategia puede limitar las pérdidas en cada operación, mientras que establecer un nivel de obtención de beneficios permite salir de las operaciones con un determinado nivel de beneficio. El instructor también muestra cómo ajustar el parámetro de tamaño en el proceso de compra para asignar un porcentaje específico de los fondos disponibles a cada operación. Si bien hay algunos problemas con las tácticas de venta en el ejemplo, el video brinda información útil sobre el uso de backtesting.py para crear y probar estrategias comerciales.
El video analiza diferentes formas de implementar el tamaño de posición en backtesting. Un enfoque es comprar y vender una acción a la vez en lugar de un porcentaje del efectivo disponible. Este enfoque puede ser útil para estrategias que impliquen escalar a una posición o promediar el costo en dólares. El video demuestra la modificación de una estrategia cruzada a una estrategia basada en el indicador RSI. En esta estrategia modificada, las operaciones se ejecutan cuando el último valor RSI es menor que el límite inferior. El video también destaca que las operaciones se pueden extraer del backtest como un marco de datos de pandas, incluidas las fechas de entrada y salida y otras métricas importantes. Estos datos comerciales se pueden exportar a otras herramientas de visualización, como Excel u otras secuencias de comandos de Python, para su posterior análisis y examen.
El creador de backtesting.py presenta la función "barras desde", que es una poderosa herramienta para optimizar estrategias y evitar la necesidad de escribir numerosas declaraciones if para comparar datos de días anteriores. La función permite a los usuarios determinar el número de barras desde la última vez que se cumplió una condición comercial particular. Esta característica proporciona una forma conveniente de optimizar estrategias basadas en condiciones específicas basadas en el tiempo. Además, el creador enfatiza la naturaleza de código abierto de backtesting.py, alentando a los usuarios a personalizar la biblioteca de acuerdo con sus necesidades y preferencias específicas.
En conclusión, el tutorial sobre backtesting.py concluye con el instructor alentando a los espectadores a comunicarse con cualquier pregunta o inquietud. El instructor les desea suerte en sus esfuerzos de backtesting y les recuerda que se diviertan mientras exploran las posibilidades de backtesting y optimizan las estrategias comerciales utilizando backtesting.py. El instructor enfatiza la importancia de consultar la documentación de backtesting.py para obtener más detalles y descubrir funciones adicionales disponibles para construir y optimizar la infraestructura de backtesting.
En general, el tutorial proporciona una descripción general completa de backtesting.py, sus ventajas, limitaciones y diversas funciones. Guía a los usuarios a través del proceso de creación de un entorno de backtest, implementación de estrategias, optimización de parámetros, uso de mapas de calor para el análisis, incorporación de múltiples marcos de tiempo y aplicación de técnicas de dimensionamiento de posiciones. Al seguir el tutorial, los espectadores obtienen información valiosa y conocimientos prácticos que pueden ayudarlos a probar y refinar de manera efectiva sus estrategias comerciales utilizando backtesting.py.
Haga una prueba retrospectiva de su estrategia de costo promedio en dólares fácilmente en Python
Haga una prueba retrospectiva de su estrategia de costo promedio en dólares fácilmente en Python
En los próximos 20 minutos, implementaremos una estrategia de promedio de costos en dólares en Python. Esta estrategia le permitirá evaluar el desempeño del costo promedio en dólares para un activo o índice específico durante un cierto período de tiempo. Usaremos una herramienta llamada backtesting.py para implementar esta estrategia. Backtesting.py es un marco fácil de usar en Python que es menos intimidante que otras bibliotecas como Vectorbt o Backtrader. Si eres nuevo en Python, esta será una excelente opción para ti.
La estrategia de promedio de costo en dólares que implementaremos es relativamente simple, pero también le mostraré cómo extenderla. Nuestra estrategia consiste en comprar una cantidad fija en dólares de un activo en particular todos los lunes o martes y repetir este proceso hasta que nos quedemos sin datos. Para comenzar, abra una terminal y configure un nuevo entorno virtual para garantizar un entorno limpio para nuestra implementación. Una vez que haya configurado el entorno virtual, instale el paquete de backtesting usando pip:
backtesting de instalación de pip
Después de instalar el paquete, podemos continuar con nuestro archivo de Python. Tendremos que importar algunos módulos y datos necesarios. Desde backtesting, importe los módulos de backtest y estrategia. Además, importe algunos datos ficticios de backtesting.test, específicamente los datos de Google. También necesitaremos el módulo pandas para la manipulación de datos.
Ahora, definamos nuestra clase de estrategia. Cree una clase llamada DCA (promedio de costo en dólares) que herede de la clase de estrategia. Dentro de esta clase, estableceremos una variable de clase llamada cantidad_para_invertir, que representa la cantidad fija en dólares que queremos invertir. Inicialmente, configúrelo en 10.
A continuación, necesitamos definir dos funciones dentro de esta clase: __init__ y next. La función __init__ se llama durante la inicialización y se usa para calcular previamente cualquier valor que podamos necesitar más adelante. En nuestro caso, crearemos un indicador que nos de el día de la semana. Para ello, utilizaremos el método self.indicator proporcionado por backtesting.py. Podemos definir nuestro indicador como self.day_of_week = self.indicator(lambda x: x, self.data.close.s.dt.dayofweek). Este indicador devolverá una matriz de los valores del día de la semana (0-6, donde el lunes es 0 y el domingo es 6) para nuestros datos.
Ahora, pasemos a la siguiente función, que es donde implementamos nuestra lógica comercial. Esta función se llama para cada barra de datos y nos permite tomar decisiones en base a los datos actuales. En nuestro caso, comprobaremos si el día de la semana es igual a 1 (martes) usando if self.day_of_week == 1:. Si es martes, activaremos una señal de compra. Para ejecutar la orden de compra, utilizaremos la función self.buy proporcionada por backtesting.py. Podemos calcular el tamaño de la orden de compra dividiendo la cantidad a invertir por el precio de cierre actual del activo. Para asegurarnos de comprar un número entero de acciones, podemos usar math.floor para redondear el resultado.
Para manejar acciones fraccionarias, podemos dividir las acciones multiplicando el activo por un número pequeño, como 10 ** -6. Esto dividirá las acciones en microacciones, que luego se pueden volver a convertir a la cantidad real de acciones compradas dividiéndolas por el mismo número pequeño.
Finalmente, necesitamos ejecutar el backtest y extraer las estadísticas. Para hacer esto, podemos usar bt.run() y asignar el resultado a una variable llamada stats. También podemos graficar los resultados usando bt.plot().
Como aún no hemos implementado la lógica de venta, el gráfico aparece como una línea continua sin puntos de venta. Lo arreglaremos pronto. Pero antes de hacerlo, extraigamos algunas estadísticas de los resultados del backtest.
Para hacer esto, usaremos la variable stats que definimos anteriormente. Podemos imprimir varias estadísticas como el rendimiento total, el rendimiento anualizado, la reducción máxima y más.
Siéntase libre de agregar más estadísticas si está interesado en explorar métricas de rendimiento adicionales.
Ahora pasemos a implementar la lógica de venta. Dado que estamos usando una estrategia de promedio de costo en dólares, venderemos la misma cantidad fija en dólares cada semana. En nuestro caso, venderemos los viernes.
Aquí, verificamos si el día de la semana es 4 (viernes) usando el indicador day_of_week que creamos anteriormente. Si es viernes, vendemos la misma cantidad de dólares que compramos antes dividiendo la cantidad a invertir por el precio de cierre actual. Esto asegura que vendamos la cantidad adecuada de acciones para igualar el monto de nuestra inversión.
Ahora, cuando ejecutemos el backtest, deberíamos ver puntos de venta en el gráfico, indicando los viernes en los que vendemos nuestra posición.
Siéntase libre de experimentar con diferentes variaciones de esta estrategia, como ajustar los días de compra/venta o implementar condiciones adicionales basadas en los movimientos de precios. Este marco le permite ampliar y personalizar fácilmente su estrategia de acuerdo con sus requisitos.
Recuerde ajustar la variable cantidad a invertir y explorar diferentes datos de activos para ver cómo funciona la estrategia.
Espero que esto lo ayude a implementar y explorar la estrategia de promedio de costo en dólares utilizando la biblioteca backtesting.py en Python. ¡Déjame saber si tienes más preguntas!
Indicadores personalizados en Backtesting.py - Python Deep Dive
Indicadores personalizados en Backtesting.py - Python Deep Dive
En este video, vamos a explorar el proceso de creación de indicadores personalizados en la biblioteca backtesting.py. Esta característica nos permitirá probar fácilmente cualquier estrategia comercial mediante la creación de indicadores y la traducción de las funciones de Python a un formato compatible con el ecosistema backtesting.py.
Antes de profundizar en los detalles de la creación de indicadores, se recomienda consultar un curso disponible gratuitamente en YouTube que cubre la mayoría de los aspectos de backtesting.py. Este curso proporcionará una comprensión de alto nivel de la biblioteca, lo que será beneficioso al explorar la creación de indicadores en este video.
En este video, nos enfocaremos en tres ejemplos diferentes para cubrir varias ideas de indicadores. El primer ejemplo implica el uso de señales generadas en un programa Python externo e integrarlas en backtesting.py. Este enfoque es útil cuando ya tiene señales de compra y venta de una fuente externa y desea incorporarlas en su proceso de backtesting.
El segundo ejemplo demostrará el uso de la biblioteca pandas-ta para devolver múltiples valores para cada indicador. Específicamente, trabajaremos con el indicador de Bandas de Bollinger y mostraremos cómo devolver un marco de datos que contenga las bandas inferior y superior, en lugar de solo una matriz numpy simple. Este ejemplo resaltará la versatilidad de crear indicadores con múltiples valores.
Finalmente, codificaremos a mano una estrategia de impulso para demostrar cómo se pueden crear indicadores personalizados utilizando Python puro. Este ejemplo mostrará la flexibilidad de crear indicadores utilizando la programación de Python, lo que permite posibilidades ilimitadas en el diseño de indicadores.
Para seguir con los ejemplos, asegúrese de tener instaladas las bibliotecas necesarias, incluidas backtesting, pandas y pandas-ta. Una vez que haya instalado estas bibliotecas, cree un archivo de Python para los ejemplos de código.
La parte inicial del código establece el modelo necesario cuando se usa backtesting.py. Importa las clases requeridas, "backtest" y "estrategia", e importa datos de muestra para las acciones de Google desde backtesting.py. Los datos importados son un marco de datos de pandas que contiene datos de precios diarios, incluidos apertura, máximo, mínimo, cierre y volumen, con un índice de fecha y hora.
Para el primer ejemplo, asumimos que ya generó algunas señales en un programa externo y desea transferirlas a backtesting.py. Para demostrar esto, creamos señales aleatorias usando numpy y las agregamos al marco de datos de Google. Estas señales podrían representar cualquier indicador que haya programado en Python, donde -1 indica una señal de venta, 0 indica que no hay acción y 1 representa una señal de compra.
A continuación, definimos una clase de estrategia llamada "SignalStrategy" que hereda de la clase "Strategy" importada anteriormente. Esta clase será la encargada de implementar la lógica de compra y venta en base a las señales. La clase incluye la función de inicialización " init " y la función "siguiente".
En la función " init ", no tenemos mucho que hacer en este ejemplo en particular, pero es una buena práctica incluirla. La función "siguiente" es donde se implementará la lógica de compra y venta en función de las señales.
Para ejecutar el backtest, creamos una instancia de la clase backtest, pasando el marco de datos de Google y la clase "SignalStrategy". También establecemos el valor de caché en 10.000. Luego, ejecutamos el backtest y almacenamos los resultados en la variable "stats". Finalmente, imprimimos las estadísticas para ver el rendimiento de la estrategia.
Ejecutar el código en este punto no generará ningún intercambio porque aún no hemos implementado la lógica de compra y venta. Sin embargo, podemos acceder a los valores de la señal usando "self.data.signal" dentro de la función "siguiente", que nos dará el último valor de la señal.
Para implementar la lógica de compra y venta, verificamos el valor de la señal actual y la posición actual. Si la señal es 1 (señal de compra) y no existe una posición, ejecutamos una orden de compra usando "self.buy". Si la señal es -1 (señal de venta) y existe una posición larga, ejecutamos una orden de venta usando "self.sell".
Estrategia de señal externa:
Uso de pandas-ta para indicadores personalizados:
Recuerde reemplazar los marcadores de posición como GOOG con sus datos reales y personalice las estrategias de acuerdo con sus requisitos específicos.
Stop Loss en Backtesting.py
Stop Loss en Backtesting.py
En este video, vamos a explorar el concepto de stop loss en la biblioteca "backtesting.py". El video cubrirá tres ejemplos de complejidad y profundidad crecientes, brindando una comprensión integral de las pérdidas limitadas en "backtesting.py". El presentador asume algún conocimiento previo de "backtesting.py" y recomienda ver un curso gratuito en YouTube para principiantes antes de sumergirse en este tema avanzado.
Para comenzar, abra una terminal y asegúrese de que "backtesting.py" esté instalado ejecutando el comando "pip install backtesting". Esto instalará todos los paquetes necesarios. Luego, cree un nuevo archivo de Python, llamémoslo "example.py", e importe los módulos requeridos: "backtest" y "strategy" de "backtesting", y "googledale" de "backtesting.test". "googledale" es un conjunto de datos de prueba que viene con "backtesting.py".
A continuación, defina la clase de estrategia creando una clase llamada "Strats" que herede de la clase de "estrategia". Implemente las dos funciones requeridas: " init " y "next". En este punto, estamos listos para ejecutar nuestro backtest. Inicialice un nuevo objeto de backtest, "bt", utilizando la función "backtest". Pase los datos de "googledale" y la clase de estrategia que acabamos de definir. Establezca el valor en efectivo inicial en $ 10,000. Finalmente, ejecute el backtest usando el método "bt.run" y trace los resultados usando "bt.plot".
Inicialmente, la clase de estrategia no realiza ninguna acción comercial. Para demostrar un ejemplo simple de stop-loss, agregaremos una lógica básica de compra y venta. Si tenemos una posición existente, no tomaremos ninguna acción. Sin embargo, si no tenemos una posición, colocaremos una orden de compra utilizando el método "self.to_buy", especificando el tamaño de la posición (por ejemplo, 1 acción). Además, agregaremos un stop loss y una toma de ganancias. El stop loss se establecerá en 10 unidades por debajo del precio de cierre actual, mientras que el take profit se establecerá en 20 unidades por encima del precio de cierre actual.
Ejecutar el backtest generará una gran cantidad de operaciones. Tan pronto como se cierre una operación, se abrirá una nueva operación en la barra siguiente a menos que se active el stop loss o el take profit. Es importante entender cómo "backtesting.py" maneja las pérdidas y las ganancias. En los casos en que tanto el stop loss como el take profit se activan en la misma barra, la biblioteca asume que el stop loss se activa primero. Este comportamiento puede generar resultados inesperados, especialmente cuando se trata de datos diarios que pueden tener brechas significativas.
Para gestionar stop loss de forma más eficaz, podemos ampliar la clase de estrategia y utilizar la "estrategia de seguimiento" proporcionada por "backtesting.py". Importe los módulos necesarios, incluidos "cruce" y "estrategia de seguimiento" desde "backtesting.lib". En la nueva clase de estrategia, herede de la "estrategia final" en lugar de la clase de "estrategia" base. Anule la función " init " para llamar a la función " init " de la clase principal usando "super". Luego, use la función "set_trailing_stop_loss" de la clase principal para establecer un valor de stop loss dinámico.
En la siguiente sección del video, el presentador explica con más detalle cómo funciona la "estrategia de rastreo" y cómo personalizarla para requisitos específicos. Sin embargo, en esta sección, la atención se centra en utilizar la "estrategia de rastreo" en nuestro código. Al llamar a la función " init " de la clase principal y usar la función "set_trailing_stop_loss", podemos aprovechar la funcionalidad de trailing stop loss en nuestro backtest.
En general, el video proporciona una explicación paso a paso de la implementación de stop loss en "backtesting.py". Cubre ejemplos simples, así como conceptos más avanzados, como rastrearlo en un valor de 10, lo que significa que nuestro límite de pérdida seguirá el precio en 10 unidades.
Ahora que hemos configurado nuestra función de inicialización, pasemos a la siguiente función. Aquí es donde se implementará la mayor parte de nuestra lógica comercial. Dentro de la siguiente función, primero llamaremos a la siguiente función de la clase principal usando super().next(). Esto asegura que la funcionalidad de trailing stop loss se ejecute junto con la otra lógica comercial.
A continuación, agregaremos un código para ajustar nuestro stop loss dinámico. Usaremos una declaración condicional para verificar si tenemos una posición abierta (self.position no es None). Si tenemos una posición, actualizaremos el stop loss dinámico utilizando el método update_trailing_sl proporcionado por la clase trailing_strategy. Este método toma el precio actual como argumento y actualiza el stop loss en consecuencia.
Validación de backtest en Python (engañado por la aleatoriedad)
Validación de backtest en Python (engañado por la aleatoriedad)
Todos hemos estado en esa situación en la que creamos una estrategia comercial, la probamos y, cuando finalmente la implementamos, no funciona como se esperaba. Una de las principales razones de esta decepción es adaptar la estrategia a un conjunto específico de datos históricos utilizados en el backtest. En este video, demostraré una estrategia para combatir el sobreajuste y garantizar que no confíes en estrategias que carezcan de una base sólida o te dejes engañar por la aleatoriedad.
Vamos a sumergirnos en un ejemplo específico. Realicé una prueba retrospectiva en una estrategia simple basada en RSI utilizando Bitcoin como activo. La estrategia implica vender cuando el RSI es alto y comprar cuando el RSI es bajo. Los resultados del backtest mostraron un rendimiento modesto de alrededor del tres por ciento, a pesar de que Bitcoin experimentó una disminución del 15 por ciento en el período de prueba. A primera vista, puede parecer una estrategia prometedora para los mercados bajistas.
Sin embargo, es fundamental examinar el rendimiento de la estrategia en varios períodos de tiempo para determinar si identifica oportunidades rentables de manera consistente o si simplemente tuvo suerte con los valores de los parámetros elegidos durante el backtest. Para lograr esto, realicé múltiples pruebas retrospectivas de 30 días, cubriendo diferentes períodos a lo largo del año.
Al trazar la distribución de los rendimientos de estas pruebas retrospectivas, podemos obtener información sobre la efectividad de la estrategia. El gráfico muestra cada ventana de 30 días como un punto, que representa los rendimientos obtenidos durante ese período. El diagrama de caja adjunto muestra el rendimiento medio, los cuartiles y los valores máximo y mínimo. Al analizar el gráfico, se hace evidente que el rendimiento medio durante un período de 30 días es -8,5 por ciento. Además, la distribución de los rendimientos parece ser aleatoria, similar a los resultados que cabría esperar de un conjunto generador de números aleatorios entre -35 y 15. Estos resultados indican claramente que la estrategia no es única ni eficaz más allá de los datos históricos específicos utilizados en el prueba retrospectiva
Para validar la estrategia y mitigar la influencia del sobreajuste, debemos realizar pruebas retrospectivas en una gama más amplia de datos. Para este propósito, descargué varios archivos de datos que cubrían todo el año, desde principios de 2022 hasta finales de 2022. Combiné estos archivos en un CSV maestro que contenía datos de velas de un minuto para todo el período.
En el código de validación, hice algunos ajustes menores para acomodar el conjunto de datos extendido. La estrategia central sigue siendo la misma, centrándose en la lógica comercial basada en RSI. Sin embargo, introduje un ciclo para realizar pruebas retrospectivas en ventanas de 30 días en todos los datos. Cada backtest calcula los rendimientos, que luego se agregan a una lista para su posterior análisis.
Al generar un diagrama de caja utilizando los rendimientos recopilados, podemos visualizar la distribución del rendimiento de la estrategia en varias ventanas de 30 días. Este gráfico revela la variabilidad de los rendimientos y proporciona una imagen más clara de cómo funciona la estrategia en diferentes intervalos de tiempo. En este ejemplo específico, la gráfica indica rendimientos predominantemente negativos para casi todos los meses, lo que sugiere que la estrategia carece de una rentabilidad constante.
Estas técnicas para validar y verificar estrategias comerciales se pueden aplicar a cualquier marco de backtesting de su elección. El código proporcionado utiliza la biblioteca backtesting.py, pero puede adaptarlo a otras bibliotecas como vectorbt o backtrader. La idea clave es asegurarse de que su estrategia demuestre solidez en diversos marcos de tiempo y no sea simplemente un producto de sobreajuste a un conjunto específico de datos históricos.
Al seguir estos pasos de validación, puede reducir el riesgo de confiar en estrategias que no se basan en la realidad o de ser víctima de resultados aleatorios. Es esencial ir más allá del rendimiento del backtest y considerar la efectividad de la estrategia en diferentes condiciones de mercado para tomar decisiones informadas al implementar estrategias comerciales.
Después de analizar los resultados del backtest y la distribución de los rendimientos en diferentes períodos de tiempo, descubrimos que el rendimiento de la estrategia era esencialmente aleatorio. No proporcionó una rentabilidad constante fuera del período de tiempo específico utilizado para el backtesting. Esto indica que la estrategia sufría de sobreajuste y carecía de robustez.
Para evitar caer en la trampa del sobreajuste y aumentar las posibilidades de desarrollar estrategias comerciales confiables, aquí hay algunas recomendaciones:
Use datos suficientes y diversos: asegúrese de que su backtest incorpore una cantidad significativa de datos históricos para cubrir diversas condiciones del mercado. Esto ayuda a capturar una gama más amplia de escenarios y reduce la probabilidad de sobreajuste a condiciones de mercado específicas.
Valide en múltiples marcos de tiempo: en lugar de confiar únicamente en un solo período de tiempo para realizar pruebas retrospectivas, pruebe su estrategia en diferentes marcos de tiempo. Esto proporciona información sobre su rendimiento en diversas condiciones de mercado y ayuda a identificar si la estrategia tiene una rentabilidad constante o si los resultados observados se debieron a la aleatoriedad.
Implemente pruebas fuera de muestra: reserve una parte de sus datos históricos para pruebas fuera de muestra. Después de realizar su prueba retrospectiva principal en el conjunto de datos inicial, valide la estrategia en los datos reservados que el modelo no ha visto antes. Esto ayuda a evaluar la capacidad de la estrategia para adaptarse a condiciones de mercado invisibles y proporciona una evaluación más realista de su desempeño.
Tenga cuidado con el ajuste de curvas: evite la optimización excesiva o el ajuste de parámetros para que la estrategia se ajuste demasiado a los datos históricos. Las estrategias que están demasiado adaptadas a patrones de datos específicos tienen más probabilidades de fallar en el comercio del mundo real. Apunte a la solidez en lugar de perseguir un rendimiento excepcional solo con datos históricos.
Considere el análisis Walk-Forward: en lugar de confiar únicamente en backtest estáticos, considere usar el análisis Walk-Forward. Esto implica volver a optimizar y probar periódicamente su estrategia a medida que haya nuevos datos disponibles. Le permite adaptar y afinar su estrategia continuamente, mejorando su desempeño en condiciones cambiantes del mercado.
Utilice pruebas de significación estadística: aplique pruebas estadísticas para evaluar la importancia del rendimiento de su estrategia. Esto ayuda a determinar si los resultados observados son estadísticamente significativos o simplemente se deben al azar. Las pruebas estadísticas comunes utilizadas en las pruebas retrospectivas incluyen pruebas t, pruebas de arranque y simulaciones de Monte Carlo.
Al seguir estas pautas, puede reducir el riesgo de desarrollar estrategias que se ajusten demasiado a los datos históricos y aumentar la probabilidad de crear enfoques comerciales sólidos y confiables.
Recuerde, el objetivo es desarrollar estrategias comerciales que demuestren una rentabilidad constante en diferentes condiciones de mercado, en lugar de estrategias que simplemente funcionan bien con datos históricos.
Una introducción rápida a Python para ingenieros de aprendizaje automático
Una introducción rápida a Python para ingenieros de aprendizaje automático
El instructor del curso comienza introduciendo el concepto de modelado predictivo y su importancia en la industria. El modelado predictivo se centra en el desarrollo de modelos que pueden hacer predicciones precisas, incluso si es posible que no brinden una explicación de por qué se hacen esas predicciones. El instructor enfatiza que el curso se enfocará específicamente en datos tabulares, como hojas de cálculo o bases de datos. El objetivo es guiar a los estudiantes para que pasen de ser desarrolladores interesados en el aprendizaje automático en Python a dominar el trabajo con nuevos conjuntos de datos, el desarrollo de modelos predictivos de extremo a extremo y el aprovechamiento de Python y la biblioteca SCIPy para tareas de aprendizaje automático.
Para empezar, el instructor ofrece un curso intensivo de sintaxis de Python. Cubren conceptos fundamentales como variables y asignaciones, aclarando la distinción entre el signo "igual" que se usa para la asignación y el signo "doble igual" que se usa para las comparaciones de igualdad. El instructor demuestra cómo usar Jupyter Notebook para la codificación de Python y brinda sugerencias para la navegación, como la creación de un nuevo cuaderno, el uso de alias para bibliotecas, la ejecución de celdas y la copia o el movimiento de celdas. También explican la función de guardado automático y el guardado manual de los cuadernos. Finalmente, el video toca brevemente cómo detener la ejecución del kernel.
Continuando, el instructor explica cómo usar la barra de herramientas en Jupyter Notebook para la navegación del motor Python y cómo anotar cuadernos usando Markdown. El video cubre declaraciones de control de flujo esenciales, incluidas las condiciones if-then-else, bucles for y bucles while. Estas declaraciones permiten la toma de decisiones y la repetición dentro del código de Python. Luego, el instructor presenta tres estructuras de datos cruciales para el aprendizaje automático: tuplas, listas y diccionarios. Estas estructuras de datos proporcionan formas eficientes de almacenar y manipular datos. Además, el video incluye un curso intensivo sobre NumPy, una biblioteca que permite operaciones numéricas en Python. Abarca la creación de matrices, el acceso a datos y la realización de operaciones aritméticas con matrices.
El video procede a discutir dos bibliotecas esenciales, Matplotlib y Pandas, que se usan comúnmente en el aprendizaje automático para el análisis y la visualización de datos. Matplotlib permite a los usuarios crear varios diagramas y gráficos, lo que facilita la visualización de datos. Pandas, por otro lado, proporciona estructuras de datos y funciones para la manipulación y el análisis de datos, particularmente a través de estructuras de series y marcos de datos. El video destaca la importancia de la función read_csv de Pandas para cargar archivos CSV, el formato más común en las aplicaciones de aprendizaje automático. También enfatiza la utilidad de las funciones de Pandas para resumir y trazar datos para obtener información y preparar datos para tareas de aprendizaje automático. Las estadísticas descriptivas en Python se mencionan como una herramienta crucial para comprender las características y la naturaleza de los datos.
El video se sumerge en técnicas específicas de visualización de datos que pueden ayudar al análisis de datos antes de aplicar técnicas de aprendizaje automático. Se presentan histogramas, diagramas de densidad y diagramas de caja como formas de observar la distribución de atributos e identificar posibles valores atípicos. Las matrices de correlación y las matrices de diagramas de dispersión se presentan como métodos para identificar relaciones entre pares de atributos. El video enfatiza la importancia de volver a escalar, estandarizar, normalizar y binarizar los datos como pasos de preprocesamiento necesarios para preparar los datos para los algoritmos de aprendizaje automático. El método de ajuste y transformación se explica como un enfoque común para el preprocesamiento de datos.
El siguiente tema discutido son las técnicas de preprocesamiento de datos en el aprendizaje automático. El video cubre la normalización y la estandarización como dos técnicas importantes. La normalización implica cambiar la escala de los atributos para que tengan la misma escala, mientras que la estandarización implica transformar los atributos para que tengan una media de cero y una desviación estándar de uno. También se explica la binarización, que establece el umbral de los datos para crear atributos binarios o valores nítidos. Se enfatiza la importancia de la selección de funciones, ya que las funciones irrelevantes o parcialmente irrelevantes pueden afectar negativamente el rendimiento del modelo. El video presenta la selección univariada como un enfoque estadístico para la selección de características y destaca el uso de métodos recursivos de eliminación de características y de importancia de características que utilizan conjuntos de árboles de decisión como bosques aleatorios o árboles adicionales. El análisis de componentes principales (PCA) también se analiza como una técnica de reducción de datos que puede comprimir el conjunto de datos en un número menor de dimensiones utilizando álgebra lineal.
El video enfatiza la importancia de los métodos de remuestreo para evaluar el rendimiento de los algoritmos de aprendizaje automático en datos ocultos. Advierte contra la evaluación de algoritmos en el mismo conjunto de datos utilizado para el entrenamiento, ya que puede provocar un sobreajuste y una mala generalización de los nuevos datos. Técnicas como conjuntos divididos de prueba de tren, validación cruzada de k-fold, validación cruzada de exclusión y divisiones de prueba aleatorias repetidas se explican como formas de obtener estimaciones confiables del rendimiento del algoritmo. El video concluye con una discusión de varias métricas de rendimiento para algoritmos de aprendizaje automático, como precisión de clasificación, pérdida logarítmica, área bajo la curva, matriz de confusión e informe de clasificación.
El video profundiza en las métricas de rendimiento utilizadas para evaluar las predicciones realizadas por los modelos de aprendizaje automático. Abarca la precisión de la clasificación, la pérdida de registros (para evaluar las probabilidades), el área bajo la curva característica operativa del receptor (ROC) (para problemas de clasificación binaria), la matriz de confusión (para evaluar la precisión del modelo con varias clases) y el informe de clasificación (que proporciona información de precisión). , recuerdo, puntaje F1 y soporte para cada clase). Además, el video explica tres métricas de regresión comunes: error absoluto medio, error cuadrático medio y R-cuadrado. Se muestran ejemplos prácticos para ilustrar cómo calcular estas métricas usando Python.
El orador presenta el concepto de verificación puntual para determinar qué algoritmos de aprendizaje automático funcionan bien para un problema específico. La comprobación puntual implica la evaluación de varios algoritmos y la comparación de sus actuaciones. El video demuestra la verificación puntual de seis modelos diferentes de aprendizaje automático, incluidos algoritmos lineales y no lineales, utilizando Python con la biblioteca scikit-learn. El ponente destaca que los resultados pueden variar debido a la naturaleza estocástica de los modelos. La sección concluye con una introducción a los modelos de aprendizaje automático de regresión, preparando a los espectadores para la próxima sección sobre la verificación puntual de esos modelos.
A continuación, el orador presenta modelos de aprendizaje automático lineales y no lineales utilizando el conjunto de datos de precios de la vivienda de Boston como ejemplo. Se emplea un arnés de prueba con validación cruzada de 10 veces para demostrar cómo verificar cada modelo, y el error cuadrático medio se usa como indicador de rendimiento (invertido debido a una peculiaridad en la función de puntuación de archivos cruzados). Se analiza el modelo de regresión lineal, asumiendo una distribución gaussiana para las variables de entrada y su relevancia para la variable de salida. También se explica la regresión de cresta, una modificación de la regresión lineal que minimiza la complejidad del modelo. El orador destaca la importancia de comprender la canalización o el proceso en lugar de quedar atrapado en la implementación del código específico en esta etapa.
El video explora el proceso de comprensión y visualización de variables de entrada para un problema de aprendizaje automático. Sugiere el uso de gráficos univariados, como gráficos de caja y bigotes e histogramas, para comprender la distribución de las variables de entrada. Para el análisis multivariado, los diagramas de dispersión pueden ayudar a identificar las relaciones estructurales entre las variables de entrada y revelar altas correlaciones entre pares de atributos específicos. El video también analiza el proceso de evaluación, utilizando un arnés de prueba con validación cruzada de 10 veces para evaluar el rendimiento del modelo. Se enfatiza la importancia de crear un conjunto de datos de validación para evaluar de forma independiente la precisión del mejor modelo. Se evalúan seis modelos diferentes de aprendizaje automático y se selecciona el más preciso para hacer predicciones. El informe de clasificación, la matriz de confusión y la estimación de precisión se utilizan para evaluar las predicciones. Finalmente, el video toca la regresión de regularización, destacando la construcción de modelos Lasso y Elastic Net para reducir la complejidad de los modelos de regresión.
El video presenta un problema de clasificación binaria en el aprendizaje automático, con el objetivo de predecir el metal de la roca utilizando el conjunto de datos Sonar Mines versus Rocks. El conjunto de datos contiene 208 instancias con 61 atributos, incluido el atributo de clase. Se analizan las estadísticas descriptivas, lo que indica que aunque los datos están en el mismo rango, las diferentes medias sugieren que la estandarización de los datos podría ser beneficiosa. Se exploran visualizaciones de datos unimodales y multimodales, como histogramas, gráficos de densidad y visualizaciones de correlación, para obtener información sobre los datos. Se crea un conjunto de datos de validación y se establece una línea de base para el rendimiento del modelo mediante la prueba de varios modelos, incluida la regresión lineal, la regresión logística, el análisis discriminante lineal, los árboles de regresión de clasificación, las máquinas de vectores de soporte (SVM), el bayesiano ingenuo y los k-vecinos más cercanos ( KNN). La precisión de cada algoritmo se calcula utilizando una validación cruzada de 10 veces y se compara.
En el siguiente segmento, el video analiza cómo evaluar diferentes algoritmos de aprendizaje automático utilizando datos y ajustes estandarizados. La estandarización implica transformar los datos, por lo que cada atributo tiene una media de 0 y una desviación estándar de 1, lo que puede mejorar el rendimiento de ciertos modelos. Para evitar la fuga de datos durante el proceso de transformación, se recomienda una canalización que estandarice los datos y cree el modelo para cada pliegue en el arnés de prueba de validación cruzada. El video demuestra técnicas de ajuste para k-vecinos más cercanos (KNN) y máquinas de vectores de soporte (SVM) utilizando una búsqueda de cuadrícula con validación cruzada de 10 veces en la copia estandarizada del conjunto de datos de entrenamiento. Se identifican las configuraciones óptimas para KNN y SVM y se evalúa la precisión de los modelos. Finalmente, el video analiza brevemente KNN, la regresión del árbol de decisiones y SVM como modelos de aprendizaje automático no lineal.
Estadística aplicada para ingenieros de aprendizaje automático
Estadística aplicada para ingenieros de aprendizaje automático
El instructor del video presenta el campo de la estadística y destaca su importancia al trabajar con problemas de modelado predictivo en el aprendizaje automático. Explican que la estadística ofrece una variedad de técnicas, desde simples estadísticas de resumen hasta pruebas de hipótesis y estadísticas de estimación. El curso está diseñado para proporcionar una base paso a paso en métodos estadísticos, con ejemplos prácticos en Python. Cubre seis aspectos básicos de las estadísticas para el aprendizaje automático y se centra en las aplicaciones del mundo real, lo que lo hace adecuado para los ingenieros de aprendizaje automático.
El instructor enfatiza la estrecha relación entre el aprendizaje automático y las estadísticas y sugiere que los programadores pueden beneficiarse al mejorar sus habilidades estadísticas a través de este curso. Clasifican el campo de la estadística en dos categorías: estadística descriptiva y estadística inferencial. Las estadísticas descriptivas implican resumir y describir datos utilizando medidas como promedios y representaciones gráficas. Las estadísticas inferenciales, por otro lado, se utilizan para hacer inferencias sobre una población más grande con base en datos de muestra.
También se destaca la importancia del tratamiento adecuado de los datos, lo que incluye abordar la pérdida de datos, la corrupción y los errores. Luego, el video profundiza en los diversos pasos involucrados en la preparación de datos para modelos de aprendizaje automático. Esto incluye la limpieza de datos, la selección de datos, el muestreo de datos y la transformación de datos utilizando métodos estadísticos como la estandarización y la normalización. También se enfatiza la evaluación de datos, y el video analiza el diseño experimental, el remuestreo de datos y la selección de modelos para estimar la habilidad de un modelo. Para predecir nuevos datos, el video recomienda usar estadísticas de estimación.
El video explica las diferentes escalas de medición utilizadas en estadística, a saber, escalas nominales, ordinales, de intervalo y de razón. Discute las técnicas estadísticas aplicables a cada escala y cómo se pueden implementar en el aprendizaje automático. Se enfatiza la importancia de comprender y reportar la incertidumbre en el modelado, especialmente cuando se trabaja con conjuntos de muestras. Luego, el video se enfoca en la distribución normal, que se observa comúnmente en varios conjuntos de datos. Demuestra cómo generar datos de muestra y evaluar visualmente su ajuste a una distribución gaussiana mediante un histograma. Si bien la mayoría de los conjuntos de datos no tienen una distribución gaussiana perfecta, a menudo exhiben propiedades de tipo gaussiano.
Se destaca la importancia de seleccionar una forma granular de dividir los datos para exponer la distribución gaussiana subyacente. Se exploran medidas de tendencia central, como la media y la mediana, junto con la varianza y la desviación estándar como medidas de dispersión de la distribución. La aleatoriedad se analiza como una herramienta esencial en el aprendizaje automático, que ayuda a que los algoritmos se vuelvan más robustos y precisos. Se explican varias fuentes de aleatoriedad, incluidos errores de datos y ruido.
El video explica que los algoritmos de aprendizaje automático a menudo aprovechan la aleatoriedad para lograr un mejor rendimiento y generar modelos más óptimos. La aleatoriedad permite que los algoritmos exploren diferentes posibilidades y encuentren mejores asignaciones de datos. Se analizan las fuentes de aleatoriedad controlables e incontrolables, y se explica el uso de la función semilla para hacer que la aleatoriedad sea coherente dentro de un modelo. El video proporciona un ejemplo del uso del módulo aleatorio de Python para generar números aleatorios y destaca la diferencia entre el generador de números pseudoaleatorios de la biblioteca numpy y el generador de números pseudoaleatorios de la biblioteca estándar. También se analizan dos casos sobre cuándo sembrar el generador de números aleatorios, a saber, durante la preparación de datos y las divisiones de datos.
Se enfatiza la división constante de los datos y el uso de generadores de números pseudoaleatorios al evaluar un algoritmo. El video recomienda evaluar el modelo de una manera que incorpore la incertidumbre medida y el rendimiento del algoritmo. La evaluación de un algoritmo en múltiples divisiones de los datos proporciona información sobre cómo varía su rendimiento con diferentes datos de entrenamiento y prueba. La evaluación de un algoritmo varias veces en las mismas divisiones de datos ayuda a comprender cómo varía su rendimiento por sí solo. El video también presenta la ley de los grandes números y el teorema del límite central, destacando que tener más datos mejora el rendimiento del modelo y que a medida que aumenta el tamaño de la muestra, la distribución de la media se acerca a una distribución gaussiana.
El video demuestra el teorema del límite central usando tiradas de dados y código, y muestra cómo las medias muestrales se aproximan a una distribución gaussiana a medida que aumenta el tamaño de la muestra.
El video enfatiza la importancia de evaluar modelos de aprendizaje automático y comprender la incertidumbre involucrada en sus predicciones. Introduce métricas de evaluación como exactitud, precisión, recuperación y puntaje F1, que se usan comúnmente para evaluar el rendimiento de los modelos de clasificación. El video explica que la precisión mide la corrección general de las predicciones, la precisión mide la proporción de predicciones positivas verdaderas de todas las predicciones positivas, la memoria mide la proporción de predicciones positivas verdaderas de todas las instancias positivas reales, y la puntuación F1 combina precisión y memoria en una sola métrica. También analiza el concepto de matriz de confusión, que proporciona una visión más detallada del rendimiento de un modelo de clasificación al mostrar el número de predicciones positivas verdaderas, negativas verdaderas, positivas falsas y negativas falsas.
El orador demuestra cómo calcular estas métricas de evaluación utilizando la biblioteca scikit-learn de Python. Muestra cómo importar los módulos necesarios, dividir los datos en conjuntos de entrenamiento y prueba, entrenar un modelo de clasificación, hacer predicciones en el conjunto de prueba y evaluar el rendimiento del modelo mediante la exactitud, la precisión, la recuperación y la puntuación F1. El video destaca la importancia de evaluar modelos en datos no vistos para garantizar sus capacidades de generalización.
Además, el video presenta el concepto de curvas características operativas del receptor (ROC) y el área bajo la curva (AUC) como métricas de evaluación para modelos de clasificación binaria. Las curvas ROC trazan la tasa de verdaderos positivos frente a la tasa de falsos positivos en varios umbrales de clasificación, lo que proporciona una representación visual del rendimiento del modelo en diferentes valores de umbral. El AUC representa el área bajo la curva ROC y proporciona una métrica única para comparar el rendimiento de diferentes modelos. El video explica cómo trazar una curva ROC y calcular el AUC usando la biblioteca scikit-learn de Python.
El concepto de sobreajuste se analiza como un problema común en el aprendizaje automático, donde un modelo funciona bien en los datos de entrenamiento pero no se puede generalizar a datos nuevos e invisibles. El video explica que el sobreajuste ocurre cuando un modelo se vuelve demasiado complejo y aprende patrones específicos de los datos de entrenamiento que no se cumplen en la población general. El video demuestra cómo se puede visualizar el sobreajuste al comparar el rendimiento de entrenamiento y prueba de un modelo. Explica que un modelo sobreajustado tendrá un error de entrenamiento bajo pero un error de prueba alto, lo que indica una generalización deficiente. El video sugiere técnicas de regularización como la regresión de cresta y la regresión de Lasso como formas de mitigar el sobreajuste al agregar un término de penalización a la función objetivo del modelo.
Se introduce el concepto de validación cruzada como una técnica para evaluar el rendimiento y la generalización de los modelos de aprendizaje automático. El video explica que la validación cruzada implica dividir los datos en varios subconjuntos, entrenar el modelo en una parte de los datos y evaluar su rendimiento en la parte restante. Este proceso se repite varias veces, con diferentes subconjuntos utilizados para el entrenamiento y la prueba, y los resultados se promedian para proporcionar una estimación del rendimiento del modelo. El video demuestra cómo realizar una validación cruzada usando la biblioteca scikit-learn de Python, específicamente el método de validación cruzada K-fold.
A continuación, el video analiza el concepto de selección de funciones y su importancia en el aprendizaje automático. Explica que la selección de características implica identificar las características o variables más relevantes que contribuyen al rendimiento del modelo. El video destaca la importancia de seleccionar características informativas para mejorar la precisión del modelo, reducir el sobreajuste y mejorar la interpretabilidad. Introduce diferentes técnicas de selección de características, como la selección univariada, la eliminación recursiva de características y las puntuaciones de importancia de características. El video demuestra cómo implementar la selección de funciones usando la biblioteca scikit-learn de Python.
El concepto de reducción de dimensionalidad también se analiza como una técnica para abordar la maldición de la dimensionalidad en el aprendizaje automático. El video explica que la reducción de la dimensionalidad implica reducir la cantidad de características o variables en un conjunto de datos mientras se conserva la mayor parte de la información relevante. Introduce el análisis de componentes principales (PCA) como una técnica de reducción de dimensionalidad de uso común. PCA tiene como objetivo transformar los datos en un espacio de menor dimensión mediante la identificación de las direcciones de máxima variación en los datos. El video explica que PCA crea nuevas características, llamadas componentes principales, que son combinaciones lineales de las características originales. Estos componentes principales capturan la información más importante de los datos y se pueden utilizar como entrada para modelos de aprendizaje automático.
El video demuestra cómo realizar PCA usando la biblioteca scikit-learn de Python. Muestra cómo importar los módulos necesarios, estandarizar los datos, inicializar un objeto PCA, ajustar el modelo PCA a los datos y transformar los datos en el espacio de menor dimensión. El video también explica cómo determinar el número óptimo de componentes principales para retener en función de la relación de varianza explicada.
El concepto de aprendizaje conjunto se presenta como una técnica para mejorar el rendimiento de los modelos de aprendizaje automático mediante la combinación de múltiples modelos individuales. El video explica que el aprendizaje conjunto aprovecha la sabiduría de las multitudes, donde cada modelo individual contribuye con sus propias predicciones, y la predicción final se determina en función de un mecanismo de votación o promedio. El video analiza dos métodos populares de aprendizaje de conjuntos: embolsado y potenciado. El embolsado implica entrenar varios modelos en diferentes subconjuntos de datos y agregar sus predicciones, mientras que impulsar se enfoca en entrenar modelos secuencialmente, y cada modelo le da más importancia a las instancias que los modelos anteriores clasificaron incorrectamente.
El video demuestra cómo implementar el aprendizaje conjunto usando la biblioteca scikit-learn de Python. Muestra cómo importar los módulos necesarios para embolsar y aumentar, inicializar los modelos de conjunto, ajustarlos a los datos y hacer predicciones utilizando los modelos de conjunto. El video enfatiza que el aprendizaje conjunto a menudo puede mejorar el rendimiento general y la solidez de los modelos de aprendizaje automático.
Finalmente, el video toca brevemente temas avanzados en el aprendizaje automático, como el aprendizaje profundo y el procesamiento del lenguaje natural (NLP). Menciona que el aprendizaje profundo implica entrenar redes neuronales profundas con múltiples capas para aprender patrones complejos en los datos. NLP se centra en el desarrollo de modelos y técnicas para comprender y procesar el lenguaje humano, lo que permite aplicaciones como la clasificación de textos, el análisis de sentimientos y la traducción automática. El video concluye destacando que el aprendizaje automático es un campo vasto y en rápida evolución con numerosas aplicaciones y oportunidades para una mayor exploración y aprendizaje.
El video proporciona una descripción general completa de los conceptos y técnicas esenciales en el aprendizaje automático, incluida la evaluación del modelo, el sobreajuste, la regularización, la validación cruzada, la selección de características, la reducción de la dimensionalidad, el aprendizaje conjunto y una introducción al aprendizaje profundo y la PNL. Demuestra implementaciones prácticas usando Python y la biblioteca scikit-learn, lo que lo convierte en un recurso valioso para principiantes y aquellos que buscan mejorar su comprensión del aprendizaje automático.
Álgebra lineal aplicada para ingenieros de aprendizaje automático
Álgebra lineal aplicada para ingenieros de aprendizaje automático
El video enfatiza la importancia de aprender álgebra lineal para los ingenieros de aprendizaje automático, ya que sirve como un componente fundamental para comprender el cálculo y la estadística, que son esenciales en el aprendizaje automático. Tener una comprensión más profunda del álgebra lineal proporciona a los profesionales una mejor intuición de cómo funcionan los métodos de aprendizaje automático, lo que les permite personalizar algoritmos y desarrollar otros nuevos.
El curso adopta un enfoque de arriba hacia abajo para enseñar los conceptos básicos de álgebra lineal, utilizando ejemplos concretos y estructuras de datos para demostrar operaciones en matrices y vectores. El álgebra lineal se describe como las matemáticas de matrices y vectores, proporcionando un lenguaje para la manipulación de datos y permitiendo la creación de nuevas columnas o matrices de números a través de operaciones en estas estructuras de datos. Inicialmente desarrollado a fines del siglo XIX para resolver sistemas de ecuaciones lineales, el álgebra lineal se ha convertido en un requisito previo clave para comprender el aprendizaje automático.
El disertante introduce el concepto de álgebra lineal numérica, que implica la aplicación del álgebra lineal en computadoras. Esto incluye implementar operaciones de álgebra lineal y abordar los desafíos que surgen cuando se trabaja con una precisión de coma flotante limitada en computadoras digitales. El álgebra lineal numérica juega un papel crucial en el aprendizaje automático, particularmente en los algoritmos de aprendizaje profundo que dependen en gran medida de las unidades de procesamiento gráfico (GPU) para realizar cálculos de álgebra lineal de manera eficiente. Varias bibliotecas de álgebra lineal numérica de código abierto, con bibliotecas basadas en Fortran como base, se usan comúnmente para calcular operaciones de álgebra lineal, a menudo junto con lenguajes de programación como Python.
Se destaca la importancia del álgebra lineal en las estadísticas, particularmente en el análisis estadístico multivariado, el análisis de componentes principales y la resolución de problemas de regresión lineal. El video también menciona la amplia gama de aplicaciones del álgebra lineal en campos como el procesamiento de señales, los gráficos por computadora e incluso la física, con ejemplos como la teoría de la relatividad de Albert Einstein que utiliza tensores y cálculo de tensores, un tipo de álgebra lineal.
El video explora aún más la aplicación práctica del álgebra lineal en tareas de aprendizaje automático. Introduce el concepto de usar operaciones de álgebra lineal, como recortar, escalar y cortar, para manipular imágenes, demostrando cómo se pueden emplear la notación y las operaciones de álgebra lineal en este contexto. Además, el video explica la popular técnica de codificación llamada codificación one-hot para variables categóricas. Se presenta la principal estructura de datos utilizada en el aprendizaje automático, matrices N-dimensionales o matrices ND, y se analiza la biblioteca NumPy en Python como una herramienta poderosa para crear y manipular estas matrices. El video cubre funciones importantes, como v-stack y apilamiento horizontal, que permiten la creación de nuevos arreglos a partir de arreglos existentes.
Se explica la manipulación y el acceso a datos en arreglos NumPy, comúnmente utilizados para representar datos de aprendizaje automático. El video demuestra cómo convertir listas unidimensionales en matrices usando la función de matriz y cómo crear matrices de datos bidimensionales usando listas de listas. También cubre operaciones de indexación y división en matrices NumPy, incluido el uso del operador de dos puntos para división e indexación negativa. Se destaca la importancia del corte en la especificación de variables de entrada y salida en el aprendizaje automático.
En el video se analizan las técnicas para trabajar con conjuntos de datos multidimensionales en el aprendizaje automático. Comienza con el corte unidimensional y progresa al corte bidimensional, junto con la separación de datos en valores de entrada y salida para entrenamiento y prueba. Se cubre la remodelación de matrices, que explica cómo remodelar matrices unidimensionales en matrices bidimensionales con una columna y transformar datos bidimensionales en matrices tridimensionales para algoritmos que requieren múltiples muestras de uno o más pasos de tiempo y características. Se introduce el concepto de transmisión de matriz, que permite utilizar matrices con diferentes tamaños en operaciones aritméticas, lo que permite procesar conjuntos de datos con diferentes tamaños de manera efectiva.
El video también aborda las limitaciones de la aritmética de matrices en NumPy, específicamente que las operaciones aritméticas solo se pueden realizar en matrices con las mismas dimensiones y dimensiones con el mismo tamaño. Sin embargo, esta limitación se supera con la función de transmisión integrada de NumPy, que replica la matriz más pequeña a lo largo de la última dimensión no coincidente, lo que permite la aritmética entre matrices con diferentes formas y tamaños. El video proporciona tres ejemplos de transmisión, incluidos arreglos escalares y unidimensionales, escalar en un arreglo bidimensional y arreglo unidimensional en un arreglo bidimensional. Se observa que la transmisión sigue una regla estricta, que establece que la aritmética solo se puede realizar cuando la forma de cada dimensión en las matrices es igual o una de ellas tiene un tamaño de dimensión de uno.
Continuando, el disertante introduce el concepto de vectores, que son tuplas de uno o más valores llamados escalares. Los vectores a menudo se representan usando caracteres en minúsculas como "v" y se pueden ver como puntos o coordenadas en un espacio n-dimensional, donde "n" representa el número de dimensiones. Se explica la creación de vectores como arreglos NumPy en Python. El video también cubre las operaciones aritméticas de vectores, como la suma y resta de vectores, que se realizan por elementos para vectores de igual longitud, lo que da como resultado un nuevo vector de la misma longitud. Además, el orador explica cómo los vectores se pueden multiplicar por escalares para escalar su magnitud y demuestra cómo realizar estas operaciones utilizando matrices NumPy en Python. También se analiza el producto escalar de dos vectores, que produce un escalar y se puede usar para calcular la suma ponderada de un vector.
Luego, el enfoque cambia a las normas vectoriales y su importancia en el aprendizaje automático. Las normas de vectores se refieren al tamaño o la longitud de un vector y se calculan utilizando una medida que resume la distancia del vector desde el origen del espacio vectorial. Se enfatiza que las normas vectoriales son siempre positivas, excepto por un vector de todos los valores cero. El video presenta cuatro cálculos de normas vectoriales comunes utilizados en el aprendizaje automático. Comienza con la norma vectorial L1, seguida de la norma L2 (norma euclidiana) y la norma máxima. La sección también define matrices y explica cómo manipularlas en Python. Se analiza la aritmética matricial, incluida la multiplicación matriz-matriz (producto escalar), la multiplicación matriz-vector y la multiplicación escalar. Una matriz se describe como una matriz bidimensional de escalares con una o más columnas y una o más filas, típicamente representada por letras mayúsculas como "A".
A continuación, se introduce el concepto de operaciones matriciales para el aprendizaje automático. Esto incluye la multiplicación de matrices, la división de matrices y la multiplicación escalar de matrices. La multiplicación de matrices, también conocida como producto escalar de matrices, requiere que el número de columnas en la primera matriz sea igual al número de filas en la segunda matriz. El video menciona que la función de punto en NumPy se puede usar para implementar esta operación. También se explica el concepto de transposición de matriz, donde se crea una nueva matriz al invertir el número de filas y columnas de la matriz original. Finalmente, se analiza el proceso de inversión de matrices, que consiste en encontrar otra matriz que, cuando se multiplica con la matriz original, da como resultado una matriz identidad.
Continuando con la discusión de la inversión de matriz, el video explora más este concepto. La inversión de una matriz se indica con un superíndice negativo 1 al lado de la matriz. El video explica que la inversión de matrices implica encontrar métodos numéricos eficientes. Se introduce la operación de rastreo de una matriz cuadrada, que calcula la suma de los elementos diagonales y se puede calcular usando la función de rastreo en NumPy. El determinante de una matriz cuadrada se define como una representación escalar del volumen de la matriz y también se puede calcular usando la función det en NumPy. Se menciona brevemente el rango de una matriz, que estima el número de filas o columnas linealmente independientes en la matriz y comúnmente se calcula mediante la descomposición de valores singulares. Por último, se explica el concepto de matrices dispersas, destacando que contienen predominantemente valores cero y pueden ser computacionalmente costosos de representar y trabajar con ellas.
Luego, el video profundiza en las matrices dispersas, que son matrices compuestas principalmente de valores cero y se diferencian de las matrices densas que en su mayoría tienen valores distintos de cero. La dispersión se cuantifica calculando la puntuación de dispersión, que es el número de valores cero dividido por el número total de elementos de la matriz. El video enfatiza dos problemas principales asociados con la escasez: la complejidad del espacio y la complejidad del tiempo. Se observa que representar y trabajar con matrices dispersas puede ser computacionalmente costoso.
Para abordar estos desafíos, el video menciona que Scipy proporciona herramientas para crear y manipular matrices dispersas. Además, destaca que muchas funciones de álgebra lineal en NumPy y Scipy pueden operar en matrices escasas, lo que permite cálculos y operaciones eficientes en datos escasos.
Las matrices dispersas se usan comúnmente en el aprendizaje automático aplicado para la observación y preparación de datos. Su escasez permite un almacenamiento y procesamiento más eficientes de grandes conjuntos de datos con una cantidad significativa de valores cero. Al aprovechar la estructura de escasez, los algoritmos de aprendizaje automático pueden beneficiarse de un uso reducido de la memoria y cálculos más rápidos.
Continuando, el video analiza diferentes tipos de matrices comúnmente utilizadas en álgebra lineal, particularmente aquellas relevantes para el aprendizaje automático. Se introducen matrices cuadradas, donde el número de filas es igual al número de columnas. También se mencionan las matrices rectangulares, que tienen diferente número de filas y columnas. El video explica la diagonal principal de una matriz cuadrada, que consta de elementos con los mismos índices de fila y columna. También se cubre el orden de una matriz cuadrada, definida como el número de filas o columnas.
Además, el video presenta matrices simétricas, que son matrices cuadradas que son iguales a su transpuesta. Se explican las matrices triangulares, incluidas las matrices triangulares superior e inferior. También se analizan las matrices diagonales, donde todos los elementos no diagonales son cero. Las matrices de identidad, que son matrices cuadradas con unos en la diagonal principal y ceros en otros lugares, se explican en el contexto de su papel como identidades multiplicativas. También se introducen las matrices ortogonales, formadas cuando dos vectores tienen un producto escalar igual a cero.
El video continúa discutiendo matrices ortogonales y tensores. Una matriz ortogonal es un tipo específico de matriz cuadrada donde las columnas y las filas son vectores unitarios ortogonales. Estas matrices son computacionalmente eficientes y estables para calcular su inversa, lo que las hace útiles en varias aplicaciones, incluidos los modelos de aprendizaje profundo. El video menciona además que en TensorFlow, los tensores son una estructura de datos fundamental y una generalización de vectores y matrices. Los tensores se representan como matrices multidimensionales y se pueden manipular en Python utilizando matrices n-dimensionales, similares a las matrices. El video destaca que las operaciones de tensor de elementos, como la suma y la resta, se pueden realizar en tensores, matrices y vectores, proporcionando una intuición para dimensiones más altas.
A continuación, el video presenta la descomposición de matrices, que es un método para descomponer una matriz en sus partes constituyentes. La descomposición de matrices simplifica las operaciones complejas de matrices y permite cálculos eficientes. Se cubren dos técnicas de descomposición de matrices ampliamente utilizadas: descomposición LU (inferior-superior) para matrices cuadradas y descomposición QR (factorización QR) para matrices rectangulares.
La descomposición LU puede simplificar ecuaciones lineales en el contexto de problemas de regresión lineal y facilitar cálculos como el determinante y el inverso de una matriz. La descomposición QR tiene aplicaciones en la resolución de sistemas de ecuaciones lineales. Ambos métodos de descomposición se pueden implementar usando funciones integradas en el paquete NumPy en Python, proporcionando soluciones eficientes y confiables para varios problemas de álgebra lineal.
Además, el video analiza la descomposición de Cholesky, que se usa específicamente para matrices simétricas y definidas positivas. La descomposición de Cholesky está representada por una matriz triangular inferior y se considera casi el doble de eficiente que la descomposición LU para descomponer matrices simétricas.
El video menciona brevemente que los métodos de descomposición de matrices, incluida la descomposición Eigen, se emplean para simplificar operaciones complejas. La descomposición Eigen descompone una matriz en sus vectores propios y valores propios. Los vectores propios son coeficientes que representan direcciones, mientras que los valores propios son escalares. Tanto los vectores propios como los valores propios tienen aplicaciones prácticas, como la reducción de la dimensionalidad y la realización de operaciones matriciales complejas.
Por último, el video toca el concepto de descomposición de valores singulares (SVD) y sus aplicaciones en el aprendizaje automático. SVD se utiliza en varias operaciones matriciales y métodos de reducción de datos en el aprendizaje automático. Desempeña un papel crucial en cálculos como la regresión lineal de mínimos cuadrados, la compresión de imágenes y los datos de eliminación de ruido.
El video explica que SVD permite que una matriz se descomponga en tres matrices separadas: U, Σ y V. La matriz U contiene los vectores singulares de la izquierda, Σ es una matriz diagonal que contiene los valores singulares y V contiene los vectores singulares de la derecha. Al reconstruir la matriz original a partir de estos componentes, se puede obtener una aproximación de los datos originales mientras se reduce su dimensionalidad.
Una de las principales aplicaciones de SVD es la reducción de dimensionalidad. Al seleccionar un subconjunto de los valores singulares más significativos y sus vectores singulares correspondientes, es posible representar los datos en un espacio de menor dimensión sin perder información crucial. Esta técnica es particularmente útil en los casos en que los datos tienen una gran dimensionalidad, ya que permite un almacenamiento y un cálculo más eficientes.
El video destaca que SVD se ha aplicado con éxito en el procesamiento del lenguaje natural utilizando una técnica llamada análisis semántico latente (LSA) o indexación semántica latente (LSI). Al representar documentos de texto como matrices y realizar SVD, LSA puede capturar la estructura semántica subyacente de los documentos, lo que permite tareas como la similitud de documentos y el modelado de temas.
Además, el video presenta la clase SVD truncada, que implementa directamente la capacidad de reducir la dimensionalidad de una matriz. Con el SVD truncado, es posible transformar la matriz original en una representación de menor dimensión mientras se conserva la información más importante. Esta técnica es particularmente beneficiosa cuando se trata de grandes conjuntos de datos, ya que permite un procesamiento y análisis más eficiente.
En resumen, el video ha cubierto varios temas relacionados con el álgebra lineal para el aprendizaje automático. Ha enfatizado la importancia de aprender álgebra lineal como un componente fundamental para comprender el cálculo y la estadística en el contexto del aprendizaje automático. El video ha discutido las aplicaciones del álgebra lineal en el aprendizaje automático, como la personalización y el desarrollo de algoritmos, el álgebra lineal numérica, el análisis estadístico y varios otros campos como el procesamiento de señales y los gráficos por computadora.
Además, el video ha explorado conceptos clave en álgebra lineal, incluidos vectores, matrices, operaciones con matrices, normas vectoriales, técnicas de descomposición de matrices y matrices dispersas. Ha explicado cómo se utilizan estos conceptos en el aprendizaje automático y ha proporcionado información sobre sus aplicaciones prácticas.
Al comprender el álgebra lineal, los profesionales del aprendizaje automático pueden obtener una intuición más profunda de los fundamentos matemáticos subyacentes de los algoritmos de aprendizaje automático y aplicarlos de manera efectiva a los problemas del mundo real. El álgebra lineal sirve como una herramienta poderosa para la manipulación de datos, la reducción de la dimensionalidad y la optimización, lo que permite soluciones de aprendizaje automático eficientes y efectivas.
Una introducción completa a XGBoost para ingenieros de aprendizaje automático
Una introducción completa a XGBoost para ingenieros de aprendizaje automático
En el video, el instructor proporciona una introducción completa a XGBoost para ingenieros de aprendizaje automático. Explican que XGBoost es una biblioteca de aprendizaje automático de código abierto conocida por su capacidad para crear rápidamente modelos de clasificación y regresión de alta precisión. Ha ganado popularidad como la mejor opción para construir modelos del mundo real, particularmente cuando se trata de conjuntos de datos altamente estructurados. XGBoost fue creado por Taiki Chen y se basa en la técnica de árboles de decisión de impulso de gradiente, que permite la construcción de modelos rápida y eficiente.
El instructor destaca que XGBoost admite múltiples interfaces, incluidas las implementaciones de Python y scikit-learn. Proceden a dar una demostración de XGBoost, mostrando varios módulos para cargar datos y construir modelos.
Luego, el video se enfoca en preparar el conjunto de datos para entrenar un modelo XGBoost. El instructor enfatiza la importancia de separar los datos en conjuntos de entrenamiento y prueba. Identifican la variable de destino como un problema de clasificación binaria y explican el proceso de configuración de los hiperparámetros necesarios para el modelo XGBoost. Una vez que el modelo se entrena en los datos de entrenamiento, evalúan su precisión en los datos de prueba utilizando la puntuación de precisión como métrica.
Para proporcionar una mejor comprensión de XGBoost, el instructor profundiza en el concepto de aumento de gradiente y su función en la categoría más amplia de modelos tradicionales de aprendizaje automático. Explican que el aumento de gradiente es una técnica que combina un modelo débil con otros modelos del mismo tipo para crear un modelo más preciso. En este proceso, cada árbol sucesivo se construye para los residuos de predicción del árbol anterior. El instructor enfatiza que los árboles de decisión se utilizan en la potenciación de gradientes, ya que brindan una representación gráfica de posibles soluciones de decisión basadas en condiciones dadas. También mencionan que diseñar un árbol de decisiones requiere un proceso de pensamiento bien documentado para identificar soluciones potenciales de manera efectiva.
El video explora aún más la creación de árboles de decisión binarios mediante la división binaria recursiva. Este proceso implica evaluar todas las variables de entrada y los puntos de división de manera codiciosa para minimizar una función de costo que mide la proximidad de los valores predichos a los valores reales. El instructor explica que se elige la división con el costo más bajo y los grupos resultantes se pueden subdividir recursivamente. Destacan que el algoritmo utilizado es codicioso, ya que se enfoca en tomar la mejor decisión en cada paso. Sin embargo, se prefiere tener árboles de decisión con menos divisiones para garantizar una mejor comprensión y reducir el riesgo de sobreajustar los datos. El instructor destaca que XGBoost proporciona mecanismos para evitar el sobreajuste, como limitar la profundidad máxima de cada árbol y podar ramas irrelevantes. Además, cubren la codificación de etiquetas y demuestran cómo cargar el conjunto de datos del iris usando scikit-learn.
Continuando, el video cubre el proceso de codificación de la etiqueta de destino como una variable numérica usando el método del codificador de etiquetas. Después de dividir los datos en conjuntos de datos de entrenamiento y prueba, el instructor define y entrena el clasificador XGBoost en los datos de entrenamiento. Luego usan el modelo entrenado para hacer predicciones sobre el conjunto de datos de prueba, logrando una precisión del 90 %. El concepto de aprendizaje conjunto se presenta como un método para combinar múltiples modelos para mejorar la precisión de la predicción y, en última instancia, mejorar la eficiencia del algoritmo de aprendizaje. El instructor enfatiza la importancia de seleccionar el modelo correcto para problemas de clasificación o regresión para lograr resultados óptimos.
El video se sumerge en el concepto de sesgo y variación en los modelos de aprendizaje automático y enfatiza la necesidad de un equilibrio entre los dos. El aprendizaje conjunto se presenta como una técnica para abordar este equilibrio al combinar grupos de alumnos débiles para crear modelos más complejos. Se introducen dos técnicas de conjunto, bagging y boosting. El embolsado tiene como objetivo reducir la varianza mediante la creación de subconjuntos de datos para entrenar árboles de decisión y crear un conjunto de modelos con alta varianza y bajo sesgo. El boosting, por otro lado, involucra modelos de aprendizaje secuencial con árboles de decisión, lo que permite la corrección de errores cometidos por modelos anteriores. El instructor destaca que el aumento de gradiente es un tipo específico de aumento que optimiza una función de pérdida diferenciable utilizando aprendices débiles en forma de árboles de regresión.
El video explica en detalle el concepto de aumento de gradiente y describe su proceso de tres pasos. El primer paso implica la adición iterativa de alumnos débiles (por ejemplo, árboles de decisión) para minimizar la pérdida. El segundo paso es la adición secuencial de árboles y el paso final se enfoca en reducir el error del modelo a través de más iteraciones. Para demostrar el proceso, el video muestra el uso de la validación cruzada k-fold para segmentar los datos. A través de XGBoost se obtienen puntuaciones por cada pliegue. El instructor elige árboles de decisión como aprendices débiles, asegurando una profundidad superficial para evitar el sobreajuste. Finalmente, una función de pérdida se define como una medida de qué tan bien se ajusta el modelo de aprendizaje automático a los datos.
Se explican los pasos básicos del aumento de gradiente, que incluyen la optimización de la función de pérdida, la utilización de alumnos débiles (a menudo árboles de decisión) y la combinación de múltiples alumnos débiles de manera aditiva a través del aprendizaje en conjunto. El video también cubre aspectos prácticos del uso de XGBoost, como el manejo de valores faltantes, el almacenamiento de modelos en el disco y el empleo de la detención anticipada. Se proporcionan demostraciones utilizando código Python para ilustrar varios casos de uso de XGBoost. Además, el video enfatiza la importancia de la limpieza de datos, incluidas las técnicas para manejar los valores faltantes, como la imputación del valor medio.
El orador analiza la importancia de limpiar los datos correctamente en lugar de depender únicamente de algoritmos para hacer el trabajo. Demuestran cómo la eliminación de valores vacíos puede mejorar la precisión del modelo y la precaución contra los algoritmos que manejan valores vacíos. El concepto de decapado, que implica guardar modelos entrenados en el disco para su uso posterior, se presenta mediante la biblioteca de decapado en Python. El orador demuestra cómo guardar y cargar modelos. También muestran cómo trazar la importancia de cada atributo en un conjunto de datos utilizando la función de importancia de trazado en XGBoost y la biblioteca matplotlib.
El orador analiza la importancia de analizar y probar diferentes escenarios al crear modelos de aprendizaje automático, y enfatiza que las puntuaciones de importancia de las funciones de XGBoost pueden no siempre reflejar el impacto real de una función en la precisión del modelo. Utilizan el ejemplo del conjunto de datos Titanic para demostrar cómo agregar el atributo "sexo" mejora la precisión del modelo, a pesar de tener una clasificación baja en las puntuaciones de importancia de las características. El orador enfatiza la importancia de probar varios escenarios y no confiar únicamente en los puntajes de importancia de las características. También mencionan que XGBoost puede evaluar e informar el rendimiento de un conjunto de prueba durante el entrenamiento.
El video explica cómo monitorear el rendimiento de un modelo XGBoost durante el entrenamiento especificando una métrica de evaluación y pasando una matriz de pares x e y. El rendimiento del modelo en cada conjunto de evaluación se almacena y está disponible después del entrenamiento. El video cubre las curvas de aprendizaje, que brindan información sobre el comportamiento del modelo y ayudan a prevenir el sobreajuste al detener el aprendizaje temprano. La detención anticipada se presenta como una técnica para detener el entrenamiento después de un número fijo de épocas si no se observa una mejora en la puntuación de validación.
El video cubre el uso de rondas de detención temprana en XGBoost y demuestra la construcción de un modelo de regresión para evaluar los precios de las viviendas en Boston. Se analizan los beneficios del paralelismo en la potenciación de gradientes, centrándose en la construcción de árboles individuales y la preparación eficiente de los datos de entrada. El video proporciona una demostración del soporte de subprocesos múltiples, que utiliza todos los núcleos del sistema para ejecutar cálculos simultáneamente, lo que resulta en una ejecución más rápida del programa. Aunque XGBoost está orientado principalmente a problemas de clasificación, el video también destaca su capacidad para sobresalir en la creación de modelos de regresión.
El orador crea una lista para contener el número de iteraciones de un ejemplo y utiliza un bucle for para probar la velocidad de ejecución del modelo en función del número de subprocesos. Imprimen la velocidad de la compilación para cada iteración y trazan los resultados, mostrando cómo disminuye la velocidad del modelo a medida que aumenta la cantidad de subprocesos. Luego, el orador analiza el ajuste de hiperparámetros, que implica ajustar los parámetros en un modelo para mejorar su rendimiento. Exploran los parámetros predeterminados para XGBoost y scikit-learn y mencionan que ajustar los hiperparámetros es esencial para optimizar el rendimiento de un modelo XGBoost. El video explica que los hiperparámetros son configuraciones que no se aprenden de los datos, sino que el usuario las configura manualmente. El ajuste de hiperparámetros implica la búsqueda sistemática de la mejor combinación de valores de parámetros que den como resultado el mayor rendimiento del modelo.
Para realizar el ajuste de hiperparámetros, el video presenta dos enfoques comunes: búsqueda en cuadrícula y búsqueda aleatoria. La búsqueda en cuadrícula implica definir una cuadrícula de valores de hiperparámetros y evaluar exhaustivamente cada combinación. La búsqueda aleatoria, por otro lado, muestra aleatoriamente combinaciones de hiperparámetros de un espacio de búsqueda predefinido. El video recomienda usar la búsqueda aleatoria cuando el espacio de búsqueda es grande o la cantidad de hiperparámetros es alta.
El video demuestra el ajuste de hiperparámetros usando la clase RandomizedSearchCV de scikit-learn. Definen una cuadrícula de parámetros que contiene diferentes valores para los hiperparámetros, como la tasa de aprendizaje, la profundidad máxima y la relación de submuestra. La clase RandomizedSearchCV realiza una búsqueda aleatoria con validación cruzada, evaluando el rendimiento de cada combinación de parámetros. Después del ajuste, se seleccionan los mejores hiperparámetros y el modelo se entrena con estos valores óptimos.
El orador explica que el ajuste de hiperparámetros ayuda a encontrar el mejor equilibrio entre el ajuste insuficiente y el ajuste excesivo. Es importante lograr un equilibrio y evitar el sobreajuste seleccionando cuidadosamente los hiperparámetros en función del conjunto de datos específico y el problema en cuestión.
Además del ajuste de hiperparámetros, el video analiza la importancia de las funciones en los modelos XGBoost. La importancia de las características proporciona información sobre qué características tienen el impacto más significativo en las predicciones del modelo. El ponente explica que la importancia de la función está determinada por la ganancia media, que mide la mejora en la función de pérdida que aporta una función cuando se utiliza en un árbol de decisión. Una ganancia promedio más alta indica una importancia más alta.
El video demuestra cómo extraer y visualizar la importancia de las características utilizando la biblioteca XGBoost. Trazan un gráfico de barras que muestra las características principales y sus puntuaciones de importancia correspondientes. El orador señala que la importancia de las características puede ayudar en la selección de características, la reducción de la dimensionalidad y la obtención de información sobre el problema subyacente.
Hacia el final del video, el orador menciona brevemente otros temas avanzados relacionados con XGBoost. Abordan el manejo de conjuntos de datos desequilibrados mediante el ajuste del hiperparámetro scale_pos_weight, el manejo de valores faltantes mediante la capacidad integrada de XGBoost y el manejo de variables categóricas a través de la codificación one-hot o mediante el soporte integrado para características categóricas en XGBoost.
El video proporciona una descripción general completa de XGBoost, que cubre sus conceptos clave, implementación, ajuste de hiperparámetros y análisis de importancia de características. Las demostraciones y los ejemplos de código ayudan a ilustrar los aspectos prácticos de trabajar con XGBoost en Python. Sirve como un recurso valioso para los ingenieros de aprendizaje automático que buscan utilizar XGBoost para sus tareas de clasificación y regresión.
Aprendizaje automático con BigQuery en la plataforma en la nube de Google
Aprendizaje automático con BigQuery en la plataforma en la nube de Google
El video analiza el contenido de un curso que se enfoca en el uso de BigQuery para el aprendizaje automático. BigQuery es un almacén de datos empresarial que inicialmente se usó internamente en Google y luego se convirtió en un servicio en la nube. Es altamente escalable y sin servidor, capaz de acomodar petabytes de datos y proporcionar resultados de consulta rápidos. La instrucción del curso se basa en estudios de casos del mundo real, guiando a los alumnos a través del proceso de construcción de modelos de aprendizaje automático desde el abastecimiento de datos hasta la creación de modelos. A lo largo del curso, los alumnos utilizan BigQuery para construir sus modelos, lo que requiere que configuren una cuenta de Google Cloud Platform (GCP) específica para BigQuery.
El video explica los principios rectores de Google para escalar los recursos de hardware y enfatiza la decisión de escalar horizontalmente en lugar de escalar verticalmente. Google reconoce que el hardware puede fallar en cualquier momento, por lo que los diseños deben tener en cuenta las posibles fallas. Además, Google utiliza hardware básico, que es asequible y permite la flexibilidad del proveedor. Se prefiere escalar horizontalmente a escalar verticalmente debido al alto costo del hardware. Google ha desarrollado tecnologías como GFS, MapReduce y Bigtable, que han llevado a una arquitectura de hardware escalable. Colossus reemplazó a GFS y sirve como el subsistema distribuido subyacente para las tecnologías de Google, incluido BigQuery.
El disertante brinda una descripción general de la solución de base de datos de Google, Spanner, que se distribuye globalmente y depende de Colossus para administrar transacciones distribuidas. El video también demuestra el proceso de registro y administración de cuentas de facturación dentro de Google Cloud Platform. Los usuarios pueden crear una cuenta de GCP visitando el sitio web de la plataforma, aceptando los términos y proporcionando la información necesaria. A los nuevos usuarios se les otorga un crédito de $ 300 para usar en GCP, que se puede monitorear a través de la sección de facturación. El ponente aconseja configurar alertas de presupuesto para recibir notificaciones cuando se alcancen determinados objetivos de facturación.
La creación y el propósito de BigQuery se analizan en detalle. El crecimiento exponencial de datos de Google hizo necesario el desarrollo de BigQuery, que permite realizar consultas interactivas sobre grandes conjuntos de datos. BigQuery puede manejar consultas sin importar si involucran 50 filas o 50 mil millones de filas. Su dialecto SQL no estándar facilita una curva de aprendizaje corta y puede paralelizar la ejecución de SQL en miles de máquinas. Si bien BigQuery almacena datos estructurados, se diferencia de las bases de datos relacionales en que admite tipos de registros anidados dentro de las tablas, lo que permite el almacenamiento de estructuras anidadas.
Se explica la arquitectura de BigQuery, destacando su enfoque de paralelización. A diferencia de la mayoría de los sistemas de bases de datos relacionales que ejecutan una consulta por núcleo, BigQuery está diseñado para ejecutar una sola consulta en miles de núcleos, lo que mejora significativamente el rendimiento en comparación con los enfoques tradicionales. El motor Dremel habilita la canalización de consultas, lo que permite que otras consultas utilicen núcleos disponibles mientras algunas esperan E/S. BigQuery emplea un enfoque de múltiples inquilinos, lo que permite que varios clientes ejecuten consultas simultáneamente en el mismo hardware sin afectar otras ubicaciones. La interfaz de BigQuery consta de tres paneles principales, que incluyen el historial de consultas, las consultas guardadas, el historial de trabajos y las secciones de recursos para organizar el acceso a tablas y vistas.
El video brinda una explicación detallada de las pantallas y los paneles dentro de Google Cloud Console específicos para BigQuery. El menú de navegación muestra los recursos de BigQuery, como conjuntos de datos y tablas, mientras que la sección del espacio de trabajo de SQL permite a los usuarios crear consultas, trabajar con tablas y ver su historial de trabajos. El panel Explorador enumera los proyectos actuales y sus recursos, mientras que el panel Detalles proporciona información sobre los recursos seleccionados y permite modificar los esquemas de tablas, exportar datos y otras funciones. Se aclara que BigQuery no es adecuado para aplicaciones OLTP debido a su falta de soporte para actualizaciones frecuentes de nivel de fila pequeñas. Si bien no es una base de datos NoSQL, BigQuery usa un dialecto de SQL y está más cerca de una base de datos OLAP, lo que brinda beneficios similares y es adecuado para muchos casos de uso de OLAP.
Se analiza más a fondo la definición de BigQuery de Google, con énfasis en su nube rápida, rentable, altamente escalable y totalmente administrada.
Aquí hay puntos adicionales discutidos en el video:
Formato de almacenamiento de BigQuery: BigQuery usa un formato de almacenamiento en columnas, que está optimizado para el rendimiento de las consultas. Almacena datos de forma comprimida y en columnas, lo que permite un procesamiento eficiente de columnas específicas en una consulta sin acceder a datos innecesarios. Este formato es especialmente beneficioso para las cargas de trabajo analíticas que involucran agregaciones y filtrado.
Ingesta de datos: BigQuery admite varios métodos de ingesta de datos. Puede cargar datos directamente de fuentes como Google Cloud Storage, Google Sheets y Google Cloud Bigtable. También ofrece integraciones con otras herramientas de procesamiento de datos, como Dataflow y Dataprep, para operaciones ETL (Extracción, Transformación, Carga).
Particionamiento y agrupación de datos: para optimizar el rendimiento de las consultas, BigQuery proporciona funciones como partición y agrupación. La partición implica dividir grandes conjuntos de datos en partes más pequeñas y manejables en función de una columna elegida (p. ej., fecha). La agrupación organiza aún más los datos dentro de cada partición, en función de una o más columnas, para mejorar el rendimiento de las consultas al reducir la cantidad de datos escaneados.
Seguridad y controles de acceso a los datos: BigQuery ofrece controles de acceso sólidos para administrar la seguridad de los datos. Se integra con Google Cloud Identity and Access Management (IAM), lo que permite a los usuarios definir permisos de acceso detallados a nivel de proyecto, conjunto de datos y tabla. BigQuery también admite el cifrado en reposo y en tránsito, lo que garantiza la protección de los datos confidenciales.
Precios de datos y optimización de costos: el video aborda brevemente el modelo de precios de BigQuery. Opera sobre una base de pago por uso, cobrando a los usuarios en función de la cantidad de datos procesados por las consultas. BigQuery ofrece funciones como el almacenamiento en caché de consultas, que puede reducir los costos al evitar el procesamiento de datos redundantes. Es importante optimizar las consultas y evitar el escaneo de datos innecesarios para minimizar los costos.
Aprendizaje automático con BigQuery: el curso cubre el uso de BigQuery para tareas de aprendizaje automático. BigQuery se integra con los servicios de aprendizaje automático de Google Cloud, como AutoML y TensorFlow, lo que permite a los usuarios aprovechar el poder de BigQuery para la preparación de datos y la ingeniería de funciones antes de entrenar modelos de aprendizaje automático.
Casos de uso y ejemplos: el disertante menciona varios casos de uso del mundo real en los que BigQuery sobresale, como el análisis de grandes volúmenes de datos de registro, la realización de estudios de mercado, la realización de segmentaciones de clientes y la ejecución de consultas analíticas complejas en conjuntos de datos masivos.
En general, el video brinda una descripción general de las capacidades, la arquitectura y las funciones clave de BigQuery, y destaca su idoneidad para el análisis de datos a gran escala y las tareas de aprendizaje automático. Enfatiza los beneficios de usar una solución basada en la nube totalmente administrada y altamente escalable como BigQuery para manejar grandes cantidades de datos de manera eficiente.