¿Puedes pasar los artículos que leíste? En especial me interesa que modelo estás utilizando con ese code. Algún articulo científico que me brindes, te lo agradecería
hermano gracias de verdad estas llenando lo que hasta ahora era un vacio para los hispanoablantes que estudiamos el machine learning las redes recurrentes no tienen gran explicacion en la red por lo que uno se ve frenado a la hora de implementarlas por no poder entenderlas de modo que agradezco sinceramente tu trabajo
Felicitaciones Miguel. Excelente serie de videos. Tu explicacion fue igual o superior a la de Ava Soleimany del MIT. Gracias por compartir tu valioso conococimiento.
Hola, muy clara la explicación muchas gracias. ´Para predecir más de 1 dato futuro despues de entrenada la red, se repite todos los pasos con todo el dataseet y como se ajustarian los parámetros para que por ejemplo la predicción se a 18 meses?
Si pudieras hacer un video explicando funciones especificas de tensorflow y keras segun y otros terminos las que he anotado: Softmax, Sigmoid, Acuracy, Dense(), Sequential(), ModelDataPoint(), Batch, BatchSize, One-hot, Metrics, Droput, CuDNNLSTM, BatchNormalization, TensorBoard(), .Evaluate(), .Fit(), input_shape, keras.optimizer.Adam, K-fold, ReturnSeq, df.shift(), preprocessing.scale(), compile(), reshape()
Wow! Es un listado bastante grande... Algunos de estos temas ya los he cubierto en otros videos: - Dense, Sequential, BatchSize, fit, input_shape, compile: todos ellos los reviso en el tutorial introductorio a Keras. Acá está el enlace: ua-cam.com/video/F6oKf06WmnM/v-deo.html - Sigmoid: en el video de regresión logística puedes encontrar más información. También en el video de las funciones de activación. Acá los dos enlaces: ua-cam.com/video/lFODTDO8mMw/v-deo.html, ua-cam.com/video/eHOHIgxRoHE/v-deo.html - Softmax: en los videos sobre regresión multiclase encuentras detalles. Los enlaces: ua-cam.com/video/IjlzULcQdvk/v-deo.html, ua-cam.com/video/MuPh3h7hwb4/v-deo.html Sobre los otros temas: muchas gracias por tu comentario. Ya tomé nota de estos temas, y poco a poco iré subiendo videos donde hablaré en detalle de los mismos. Un saludo!
codificandobits muchas gracias iré viendo, pasa que me llama mucho la atención redes neuronales recurrentes LSTM y convolucionales e hiperparametros y he anotado varías funciones para entender primero el abc de las funciones para poder modificar algoritmos según lo que necesite y veo que esto es como aprender a leer en mi caso aprendí el abcedario luego fui uniendo letras con letras para armar palabras y así esto IA algunas cosas son mecánicas por lo que veo hay funciones con más parámetros para adaptar
Hola gracias x compartir tu conocimiento! De casualidad quise ingresar al codigo pero me dice que ya no existe la pagina. Puede ser que lo pueda encontrar en alguna otra pagina? desde ya muchas gracias!
Hola. Buen video explicado LSTM y series temporales. Solo que finalmente el "for" finalmente no hace predicción del futuro. Ya que ingresas los mismo datos del 2017 al modelo. Debieras ingresarle los 60 últimos datos de "entrenamiento" para que comience a predecir el valor 61 y más pero del 2017. Y el conjunto de validación solo se ocupa para comparar la predicción y no para usarla en ña funcion predict. Por eso no se puede predecir para nuevos tiempos con este algoritmo. Gracias de todas maneras por su video.
@@matiasfernandez6180 Si sirve. pero para darle una aplicación a algún caso real, no se describe en el video. Se debe hacer un ciclo FOR diferente que prediga el futuro de la variable Serie temporal, que no está en este video.
Muchas gracias por esas magníficas explicaciones!! Tengo una consulta, cómo se podría hacer el generador de nombres de dinosaurio con esta arquitectura (LSTM) ?
Excelente trabajo, todo muy claro y didáctico. Lo he podido replicar sin problema. Me ha sido de gran ayuda!! Mi duda surge en cuanto al poder de predicción de la arquitectura propuesta LTSM. Entiendo que los valores que predice la red para el dia siguiente se parecen bastante al valor real, pero no entiendo porque quedan tan lejos, ya sea en el conjunto de test como en el de entrenamiento. En el conjunto de test es normal, ya que dichos datos la red no los ha visto nunca, pero en el conjunto de entrenamiento el error, en mi opinión, debería ser más bajo. Me explico: con una predición tan sencilla como "el precio de mañana será el precio de hoy" creo que se obtiene menos error que con la predicción de la red LTSM, no solo en el conjunto de Test sinó también en el de entrenamiento. Llevo varios dias dandole vueltas a esto y no se donde puede estar el error conceptual, ya que con el conjunto de entrenamiento se ha hecho una optimización de minimos cuadrados, y teoricamente debería predecir mejor que "tomar el precio de hoy". Gracias por tu trabajo !!
Añado que he hecho variaciones poniendo mas capas ocultas LTSM, también otras tipo DENSE, incluso he acortado las entradas en lugar de los 60 dias anteriores, a un solo dia, o sea hoy. En ningún caso he conseguido que el error de la red sea inferior al predictor sencillo del precio de hoy.
Estoy totalmente de acuerdo. La predicción de esta red, en este ejemplo, es engañosa. Si fuera real, más de uno ya se habría hecho rico. Se dice que la mejor predicción para el día de mañana es la cotización de hoy. Y es que en este entorno, hay que distinguir lo que se llama serie de nivel y serie de diferencias. En la serie de nivel hay una alta autocorrelación. Es muy difícil que si hoy vale 1,220 mañana valga 987 y pasado mañana 1.829. Un modelo naif que prediga el valor de hoy (1.220) parecerá muy bueno cuando se muestre en la gráfica. Las diferencias son pequeñas. Pero el problema está sin resolver. Lo que hay que predecir es la serie de diferencias. Típicamente estas son incorreladas, y son casi imposible de pronosticar.
Que tal . Muy educativos tus videos. Quería preguntarte si conoses de alguna librería, plataforma... donde se pueda aprender sobre redes neuronales evolutivas.
Hola Manuel. Aunque no la he usado, hay una librería en Python que se llama NEAT (github.com/CodeReclaimers/neat-python) para implementar este tipo de redes. Con respecto a bibliografía puedes buscar "evolutionary neural networks" en Google Académico y encontrarás artículos recientes sobre el tema. Un saludo!
Si quisiera predecir los valores para el primer mes 2018... Con ese mismo dataset. Como lo hiciéramos? Ya que en ese escenario no conocemos ningún dato de entrada
¡Hola Rafael! En principio se podrían usar las predicciones hechas para el 2017, pero lo ideal es contar con datos más recientes, al menos del año anterior, para lograr que la predicción se acerque más al comportamiento real. Si la predicción la hago no sobre datos reales sino a partir de predicciones anteriores, muy probablemente con el tiempo la diferencia entre la predicción y el valor obtenido va a comenzar a ser cada vez más grande. ¡Un saludo!
Si actualizo el database, podria prevenir con su codigo base el dia de mañana de apple, porque mas reciente, mas precision quisiera saber si se puede hacer, Gracias (:
Hola buenas noches, primero que todo agradecer todo el material que has subido a tu canal, esta super bien explicado y de manera sencilla, super recomendando a las personas que están integrándose a este mundo. En lo particular tengo una duda, por ejemplo si quisiera predecir valor de las acciones de apple y para mejorar esta predicción me gustaría adicionar covariables como por ejemplo valor del dolar, petroleo, etc. ¿Cómo debería ser el planteamiento?. ¿Tienes algún material de lectura que me ayude abordar este problema?. Nuevamente muchísimas gracias y felices fiestas.
Hola! Excelente canal y saludos desde Chile! Estaba viendo tus videos del canal y me surgió la siguiente duda, para poder predecir los precios de las acciones futuros en base a tu opinión/conocimiento que sería mejor MLP o LSTM ? Gracias de antemano y saludos!
Hola Felipe. Definitivamente LSTM, porque el perceptrón multicapa no está en capacidad de analizar secuencias (como por ejemplo la variación de las acciones en el tiempo). Aunque creo que otra estrategia pueden ser las redes transformer, una nueva arquitectura que resulta ser mucho más prometedora que las redes LSTM. Sobre estas redes publiqué un video recientemente, acá te dejo el enlace por si te interesa: ua-cam.com/video/Wp8NocXW_C4/v-deo.html
Excelente video, pero me ciónqueda una duda cuando usas el modelo, poruqe no especificas una funcion de activación dentro de la red, o acaso queda alguna por defecto?
Hola Benjamín. Cuando se realizó el entrenamiento se utilizó una transformación que garantizaba que los datos estuviesen en el rango 0 a 1 (línea 42). Con esto se garantiza la convergencia del algoritmo de entrenamiento. Sin embargo, los valores de las acciones en realidad no están en ese rango, así que al hacer la predicción es necesario hacer el proceso inverso para que la predicción de estos valores esté en el rango real. Esto es precisamente lo que hace inverse_transform. Un saludo!
Esta super bueno el video, gracias por la informacion. sin embargo tengo una duda, el modelo en pantalla sirve para encontrar solo un valor futuro. como hago yo para predecir mas de un valor futuro? nota: trate cambiando el valor de la variable dim_salida = 3 y me arroja un erro. agradecería su respuesta
Hola Víctor. En este caso debes generar uno a uno los datos de la predicción. Por ejemplo: - Iteración 1: ingresas los datos 1 al 60, y predices el dato 61 - Iteración 2: ingresas los datos 2 al 61 (siendo el 61 la predicción anterior) y predices el dato 62 - Iteración 3: ingresas los datos 3 al 62 (siendo el 62 la predicción anterior) y predices el dato 63 y así sucesivamente! Un saludo!
hola exceñentr, como tendria que hqcer para pronosticar en vez de un dia 30 dias? si no es sencillo podrias hacer un video? estoy trabajando usando ARIMA y SARIMAx y quisiera poder compararlos en ese horizonte de 30 dias. gracias!!! por todo
Hola Jorge. Te sugiero el video de predicción univariada + multistep con Redes LSTM. Acá te comparto el enlace: ua-cam.com/video/TEzTfl_E-3o/v-deo.html Un saludo!
Hola, como estas? Probé el codigo y no pareciera que es un entrenamiento real. Cuando pones time_step = 1 la IA copia el valor de la acción y no tiene sentido.
También si pudieras hacer un video de un ejemplo manejando LSTM con señales de actividad humana por allí esta un git de ejemplo pero es de unos años usando la data oportunity
Hola. Gracias por el video ! Tengo un problema al cargar la linea6 >> from keras.models import Sequential ...Failed to load the native TensorFlow runtime. Gracias y Saludos
Hola Marcelo. Usualmente este tipo de errores se deben a que keras (o tensorflow) no están en el "PATH" de Python. ¿Me podrías enviar un pantallazo completo a codificandobits@gmail.com para mirar más en detalle? ¡Un saludo!
hola buenos dias tengo una pregunta que versión de python se utilizo es que estoy desarrollando el ejercicio en anaconda y tengo un conflicto con las versiones
Hola Juan. En ese caso debes buscar el set de datos con el histórico del comportamietno de estas acciones; luego debes reentrenar el modelo y verificar qué también logra hacer la predicción. Un saludo!
Tienes unos vídeos excelentes. Me han ayudado mucho a entender mejor los conceptos de las redes LSTM. Tengo una pregunta. Luego que tienes desarrollado el modelo ya entrenado, como lo probarias con nuevos datos para ver su performance? Digamos testearlo con un nuevo archivo .csv del valor de las acciones.
Hola! De antemano muchas gracias por compartir el conocimiento, me ha servido de mucho y queria consultar sobre una duda. Al realizar la predicción esta arroja una grafica del valor de la accion por un lapso en el tiempo en el eje X, sin embargo en este eje solo muestra numeros y no fechas. Alguien me podria explicarme por favor?
¡Hola Juan Felipe, y gracias por tu comentario! Los números en el eje "x" de la gráfica de predicción que obtuviste se refieren a días. Como la predicción se hizo para el 2017, el número 2 se refiere al 2º día de 2017, el número 10 al décimo día y así sucesivamente. ¡Un saludo!
Hola, suscrito y muy interesante el canal y para verlo varias veces, veo que se hace todo el proceso y el ultimo gráfico no aparece en el código, cuando veo el set_validacion y la prediccion su forma me resultan 2 arrays que tienen diferente size, una de 251 filas y otro de 191 filas, me puedes ayudar y decirme como se puede ordenar esto en dos columnas para gratificarlo?? Gracias
Hola como hago si quiero agregar otras variables que influyen en los valores pasados, dónde las agrego? y una vez agregadas puedo predecir solo los valores futuros de la bolsa pero estos valores ya van a tener en cuenta la evolución de las otras variables, muchas gracias excelentes videos, saludos desde Paraguay
Hola Franco y qué buena pregunta. Las variables adicionales las puedes incluir en el set de datos original (archivo .csv que encuentras en Github). Posteriormente, durante el pre-procesamiento (líneas 28-61 del código en Github) debes modificar el código para incluir los nuevos datos en los sets de entrenamiento y validación. Con esto debería ser suficiente para entrenar la red LSTM y hacer que sea capaz de tener en cuenta las nuevas variables para hacer la predicción. Un saludo!
Muchas gracias por el video. Ojala puedas responder la siguiente pregunta que nadie me ha podido ayudar. En el video vemos la validación del modelo, pero como hago para modelar los valores futuros. En este caso específico como hago para predecir los 30 días del mes de enero del 2018?. Que parte del código cambiarías para lograr predecir estos valores futuros? Esa parte no la he podido ver en ningún video.
Buenas tardes, si deseo escoger cual es el periodo de tiempo que deseo predecir sin tener los datos reales para hacer la comparación, cual seria la modificación en el código?
Buen video estana viendo tu pagina y me gustaria estudiar contigo, te cuento que no se nada de programacion y ciencia de datos desde que modulo deberia empezar?
Hola! Deberías comenzar con el curso "Introducción a la Ciencia de Datos" y luego seguir con los cursos de programación en Python niveles básico, intermedio y avanzado. Un saludo!
Como podría realizar una red neuronal LSTM que tenga varios datos de entrada, es decir, que no tome solo el máximo valor de la acción, sino también el mínimo, el valor de apertura y cierre y demás?
Hola Julio y ¡qué buena pregunta! Esto se conoce como predicción multivariada (múltiples variables). En esencia se puede usar el mismo esquema que se muestra en el video, con una diferencia importante: en lugar de una sola característica (el valor máximo de la acción), cada dato del set de entrenamiento tendría cuatro características (máximo, mínimo, valor de apertura y de cierre). En todo caso la capa de salida seguiría igualmente generando un sólo valor: la predicción de la acción. Claro, es probable que con estos cambios la complejidad de la red cambie. Es decir que podría ser necesario agregar más capas ocultas y/o neuronas, y verificar durante el entrenamiento/validación cuál es el valor más adecuado para estos parámetros. ¡Un saludo!
Hola, lo que noto en la predicción es que tiende mucho a copiar el último valor de la serie de 60 valores. La predicción hace como un shift de la función real.A que se debe? Muchísimas gracias por tus vídeos, son muy claros. Es de lo más pedagógico que he visto en redes neuronales
Muy buena explicación...estoy trabajando en un proyecto de DL para la escuela y tengo 2 o 3 dudas. Existe alguna forma de poder enviarte un doc con algunas imagenes y las dudas, le des un vistazo y puedas ayudarme??? Salu2
@@codificandobits gracias por tu respuesta. Miguel tengo una duda al momento de predecir valores futuros, incluso más allá del set de entrenamiento. Te puedo mandar un email? Gracias!!
@@cristhiancastrochavez5962 . Hola, buenas tardes. Pudiste resolver el problema, de como predecir valores futuros mas allá del set de entrenamiento? No sabes si hay algún parámetro que se pueda modificar para lograrlo?. Gracias desde ya.
En el ejemplo se entreno la RED LSTM con datos al 30/Diciembre 2016, y utilizamos datos para validación del 2017... como se hace para predecir mas adelante de los datos de entrenamiento y test ... Ejemplo: entreno mi RED LSTM al día de ayer, ¿Como puedo predecir de hoy a 30 días adelante ?
Hola buenas tardes. encontraste la solución a tu pregunta. Porque me gustaría saber como hacer lo mismo. tener 2, 3 días o un mes de predicción. Te agradecería que que compartieras la solución si la encontraste. gracias.
hola muchas gracias por tu video, alguien me podria explicar por favor por que hace la predicion con prediccion = modelo.predict(X_test) donde x text es igual a set validacion x_test = set_validacion lo que trato de decir es por que hace la predicion usando los datos que queremos predecir
Hola Jefferson. Ten en cuenta que 'x_test' contiene bloques de 60 datos históricos. Estos 60 datos ingresan a la Red LSTM, y la red predice el dato 61.
@@codificandobits en este caso que de donde sacarial el X-test si quiero predecir el año 2018 2019 que no estan en nuestro archivo csv "agradesco su tiempo"
Muchas gracias crack! Genial el video, pero tengo una duda, que quizás alguien acá me pueda responder. Me puse a jugar con el código cambiando el tamaño del input, por ejemplo con bloques de 20 y 100 precios en vez de 60 y me di cuenta que el resultado siempre es un gráfico muy parecido pero corrido en el eje X. Y veo que en tu caso ocurre lo mismo, si corres el gráfico de tu predicción 60 unidades a la derecha te da una predicción muuuuuy precisa. Entonces, lo que no entiendo son dos cosas: 1- Por qué ocurre el corrimiento. 2- ¿Cómo la predicción puede ser taaan precisa?
Bien, ya entendí: 1- El corrimiento se debe a que la primer predicción es del momento 61 en el tiempo, los primeros 60 no se predicen, se usan como input. 2- La extrema precisión se debe a que se predice de un valor a la vez y usando los valores reales anteriores, es decir se dan pasos muy chicos como para que la predicción pueda desviarse de los valores reales. Creo que algo más razonable sería usar como inputs los predicciones que se van haciendo, o aumentar el tamaño de loa outputs.
@@wariowadillo4139 Hola. De casualidad encontré el notebook donde estaba esto, pero no me hago cargo de lo que hice hace 5 meses jaja. No hice nada muy elegante, armé un loop for y en cada vuelta hacía la predicción y sumaba ese valor como input para la próxima iteración ( y quitando un valor tipo FIFO). Igual desde ese momento no volví a meterme en el tema así que tomalo con pinzas, seguramente hay un modo más elegante de hacerlo.
Buenas, antes de nada muchas gracias por el vídeo. Me gustaría realizarte una pregunta, si lo que quisiera es la predicción del dato 121 en lugar del dato 61... sería posible?
Hola Javier. En este caso deberías modificar el tamaño de la secuencia presentada al modelo durante el entrenamiento: en lugar de usar 60 datos debes usar 120. Así, una vez hecho el entrenamiento, podrás predecir el dato 121. Un saludo!
Hola! Me vi la lista de reproducción completa. Mi pregunta es, ¿Y si solo quiero saber el precio de cotización de "mañana"? De qué manera se logra? De manera que tenga una aplicación práctica y no quede la "predicción" en algo que sucedió tiempo atrás como una anécdota de "oh, funcionó bien"... Gracias. Saludos desde Argentina.
Hasta cierto punto bien entrenada.. Y muy difícilmente tendrías algo certero Porque por ejemplo.. Poniendo el caso de los dolares y pesos mexicanos Solo por el hecho qie trump iba a ganar el peso empezó a caer y caer
Hola José. Esa es la gran pregunta cuando se desarrolla cualquier modelo "Deep Learning": ¿cuántas neuronas (y/o cuántas capas) uso? Realmente no existe una respuesta adecuada o que tenga algún sustento matemático, pues el número de neuronas/capas dependerá de la complejidad de los datos que procese la red, y estos datos pueden ser de cualquier tipo!!! (imágenes, videos, texto, audio, etc.) Así que la forma convencional de definir este número de neuronas/capas es analizando el entrenamiento y la forma como se comporta el error durante el entrenamiento y la validación. Generalmente se crean varios modelos, cada uno con diferentes capas y número de neuronas, y aquel con los menores niveles de error será el que resulta más adecuado para una aplicación en particular. Un saludo!
Hola Óscar. Depende del tipo de dato que quieras clasificar. Si estamos hablando de secuencias (por ejemplo en el caso de clasificación de emociones) entonces sí es posible. En otro casos las redes neuronales y las convolucionales se pueden usar también en procesos de clasificación, pero todo depende en últimas del tipo de dato. Un saludo!
@@codificandobits es para el caso de señales como de ritmo cardíaco (que pienso son como series temporales) para saber si sufre o no de alguna patología, entrenarla con señales con y sin la patología y la red defina si la puede sufrir o no con una nueva señal, de nuevo gracias con tu explicación anterior entiendo mejor
Me pregunto si no hay forma de tomar los errores que cometió el modelo en cada punto de la gráfica y predecir el próximo error de la misma, sumarle ese error estimado al modelo, y de esa manera tener un gráfico mejor ajustado, luego con el nuevo gráfico mejorado, hacer lo mismo y así sucesivamente hasta tener convergencia. Saludos
Hola! Realmente es un poco más complicado, pues este error se incrementará con el tiempo debido a que el dato real fluctúa constantemente. Así que lo que tenemos se conoce como "model drifting": después de un tiempo el modelo entrenado inicialmente ya no tendrá un buen desempeño porque los datos han cambiado pero el modelo no ha sido re-entrenado. Este es un problema que enfrentan todos los modelos de machine/deep learning cuando son llevados a producción. Para evitar este drifting la única solución es periódicamente reentrenar el modelo con datos actualizados, monitorear el desempeño y si este decae re-entrenar nuevamente, y repetir el proceso una y otra vez. Un saludo!
Hola! Lo ideal es que todos los valores estén normalizados al mismo rango, bien sea 0 a +1 ó -1 a +1 (pero no ambos). De lo contrario el entrenamiento no resultaría adecuado y el rango escogido influiría en la predicción obtenida. Un saludo!
Hola buenas noches estoy jugando un poco con el código y hay una parte que no entiendo bien. 1) ¿Porque usas? x_test = set_validacion.values x_test = sc.transform(x_test) en lugar de sc.fit_transform(set_validacion.values). 2) cuando usas predicción = modelo.predict(X_test) te devuelve una lista de valores en que el primer valor correspondería al día 61 (time_step + 1)?
después del for la longitud del conjunto cambia, sabes por qué? siento que con eso entonces esta saliendo mal la gráfica. for i in range(time_step,len(x_test)): X_test.append(x_test[i-time_step:i,0])
Hola excelente canal, he buscado muchas explicaciones de estos temas pero seguía con dudas, la metodología que usas para explicar es increíble, felicidades por el canal. Quisiera preguntar algo teórico referente a la arquitectura de una red LSTM. Supongamos que quiero filtrar señales de audio, tengo 10 señales y cada una dura entre 30 y 60 segundos, todas tienen tiempos diferentes. Para entrenar la red decido crear sub-muestras de las primeras 8 señales, pasando una ventana de tiempo de 5 segundos con un solapamiento de 1 segundo (esto lo hago para tener más datos y que la RED pueda aprender mejor), y así me quedan de las primeras 8 señales, digamos que 1000 sub-señales de 5 segundos. Mi pregunta sería, ¿existe una forma de realizar una predicción con las 2 señales de testeo (que duran digamos que 45 y 57 segundos respectivamente), sin necesidad de subdividirlas en segmentos de 5 segundos como hice en el entrenamiento? Muchas gracias.
Hola Deivid, qué buena pregunta. Te respondo por partes: en primer lugar te sugiero no usar la señal de audio directamente, y mejor una representación tiempo-frecuencia (acá un ejemplo: medium.com/manash-en-blog/building-a-dead-simple-word-recognition-engine-using-convnet-in-keras-25e72c19c12b). Y en segundo lugar claro que sí, una vez entrenado el modelo puedes usar datos de tamaño variable. Lo importante es que al crear la red LSTM, en el parámetro "input_shape" definas como "None" el primer valor para que la red "entienda" que durante la predicción usará datos de tamaño variable. Acá un ejemplo: datascience.stackexchange.com/questions/26366/training-an-rnn-with-examples-of-different-lengths-in-keras Un saludo!
Hola saludos desde Colombia! Me encantan tus vídeos, quisiera saber dónde aprendes todo esto, todos los comandos y como usarlos? Algún libro o artículo para aprender.
Gracias por tu comentario Sebastián! Pues realmente no existe un solo recurso, como un libro o un sitio web en particular. Te puedo sugerir de entrada un libro muy completo que aborda todos estos temas en profundidad (claro, desde un punto de vista teórico, sin nada de programación): el libro se llama "The Deep Learning Book" (www.deeplearningbook.org/). Es el referente en este tema. Un saludo!
Hola, esperando que te encuentres bien, te escribo principalmente para hacerte la siguiente pregunta ¿Una red LSTM puede tener múltiples inputs (por ejemplo, precio, volumen, producto interno bruto, etc) y que se obtenga una sola salida? si es posible hacer eso, me podrías guiar o aconsejar por favor!
Hola Felipe. Sí, es posible. Esto se llama análisis multivariado de series de tiempo. Acá encuentras un ejemplo: towardsdatascience.com/time-series-analysis-on-multivariate-data-in-tensorflow-2f0591088502 Un saludo!
Hola Joaquín. Tanto el video como el código están en el mismo orden. Pero en el código encuentras más detalles, te sugiero usarlo (lo encuentras en Github, el enlace está en la descripción del video). Un saludo!
Ummm... el resultado debería ser el mismo. Verifica que la semilla del generador aleatorio esté en el mismo valor siempre (np.random.seed..., o algo por el estilo). Un saludo!
Otra cosa si pudieras hacer un video donde trabajes con cuDNNLSTM según es para multiplicar por 10 la velocidad de entrenamiento en la pc intente pero me da muchos errores en la instalación de cudnn de nvidia y para pruebas sería muy util para probar GPU
Sí, las librerías cuDNN y la puesta en funcionamiento de tensorflow con GPU es un poco enredada. Más adelante espero hacer un tutorial paso a paso, pero el problema es que en últimas la instalación de estas librerías depende de la tarjeta GPU que se tenga en particular, así como de las versiones de Python y de tensorflow que se estén usando. Un saludo!
@@codificandobits Exactamente es un enorme proceso mediante el cual... dos dias al final como que no me funciono, hay que tomar en cuenta la version del CuDNN, ejemplo 7.05 + de la 8,9 o 10 de otra cosa y se escoge segun el sistema operativo la version mas que todo el linux, no uso windows... pero seria genial poder trabajar con GPU segun la teoria dice que el entrenamiento corre ejemplo algo de 10 min baja a 2 min. Una barbaridad de ahorro de tiempo...
@@elingenierodelaweb Exactamente. El problema es que las versiones de la diferentes coincidan. La otra alternativa es tomar el código fuente y compilarlo, pero esto tampoco es tan fácil. Pero en últimas el ahorro de tiempo es significativo.
Excelente tutorial ,muy didáctico y de mucha ayuda. Me parece que hay un pequeño error en el codigo, en la funcion de plotter se grafica los datos de 0 a 191(len(predicciones)), sin embargo se precide el dato 61 usando los primeros 60 datos, por lo cual se deberia graficar desde 61 hasta 251(len(real)). Al hacer ese cambio la predicciones son casi identicas a los datos reales
Hola mucho gusto, lamento comentar tan tarde. Es posible agregar mas capas LSTM una tras otras para conseguir mejores resultados ? Mi pregunta va por el motivo de que al final dijiste algo de ese estilo. Muy buenos videos por cierto!
Hola César. Claro que sí es posible. Si miras el código fuente, en la línea 71 usas la directiva "modelo.add(LSTM ...)". Puedes añadir una línea similar a esta para agregar las capas que consideres necesarias. Un saludo!
@@codificandobits hola, si lo descubri hace tiempo gracias de todas formas, una pregunta... cual es la diferencia entre rnn y lstm, en cuanto a u problema de time prediction
@@kascesar La RNN convencional tiene, por decirlo así, una "memoria limitada". Es decir, para este caso de la predicción de acciones no se podrían usar ventanas históricas de 60 días, tal vez la RNN soportaría 10 días o menos y por tanto la predicción no sería adecuada. En cambio las LSTM logran analizar secuencias más extensas, como se muestra en este ejemplo. Un saludo!
@@codificandobits Mi pregunta va por el motivo de que a las redes LSTM las entrenas con batches de set de datos, me refieroa que en el entrenamiento a la red le pasas tensores tipo MxNxL, en el ejemplo en el que trabajo son batches de 10x10x3 ... mi pregunta viene a que cuando hago inferencia con el set de prueba, la red me devuelve 10 resultados, siendo que la ultima capa es una capa densa con una unica neurona. tiene algun sentido hacer inferencia con tensores de 1x10x3 a pesar de que en el entrenamiento lo hice con size de 10x10x3 ?
Buenos días, me surge una duda... Si los datos de entrada son normalizados (de 0 a 1), las salidas siempre estarán también entre 0 y 1, ¿no? En ese caso, no podremos predecir si las acciones van a subir por encima del máximo con el que se entrenó la red. A no ser que la red pueda recibir datos entre 0 y 1 y dar valores como 1'5.
En principio tanto la entrada como la salida están normalizadas al rango 0 a 1. Sin embargo, una vez hecha la predicción se debe re-escalar la salida al rango en el que se encuentran los datos originales. Esto se realiza en el código fuente en la línea 90 (prediccion = sc.inverse_transform(prediccion)). Un saludo!
Hola, te has olvidado del problema de la no estacionariedad de la serie. Si la serie es no estacionaria (los datos de entrada tienen tendencia, la varianza no es constante y hay autocorrelación) la predicción en base a un LSTM no es válida, dado que toma como hipótesis la estacionariedad de la serie.
Hola Sergio, tienes razón, la no estacionariedad es un aspecto que se debe tener en cuenta. Partamos del hecho de que el modelo LSTM aprende una representación simplificada de los datos, simplificada en el sentido de que nunca será posible contar con un set de entrenamiento que capture todas las posibles variaciones de la acción en la bolsa. En este sentido la red LSTM siempre tendrá una limitación. Sin embargo es importante tener en cuenta que una red recurrente (como las redes LSTM) está en capacidad de aprender no linealidades en los datos, o tendencias en su comportamiento. En particular las redes LSTM son muy buenas en esto, así que el problema de la no estacionariedad no resulta tan crítico en estos casos. Claro siempre hay un pero, nada es totalmente gratis: para poder tener una predicción robusta se requiere una red LSTM lo suficientemente compleja, capaz de aprender dependencias amplias en el tiempo, y para ello desafortunadamente se requieren muchos, pero muchos datos. Un saludo y gracias por tu comentario!
Hola. De donde has sacado estos datos? Solo llegan hasta el 2018. Seria bueno poder tenerlos a ultima fecha para así, poder manejar algo mas real. Y no solamente APPL si no otros valores donde practicar. Gracias!
Muy buen vídeo, como todos los de la serie. No obstante, ¿por qué no has intentado predecir la serie de diferencias de cotizaciones en lugar de la serie de nivel? El pronóstico de la serie de nivel siempre es engañoso. Parece mejor de lo que es, porque la predicción suele estar siempre cerca del valor real (porque son niveles, no diferencias).
Hola Antonio. Tienes razón, aunque no soy especialista en el tema de las acciones, creo que sería una buena alternativa. En este caso bastaría con tomar el set de datos y calcular las diferencias, y luego usar esa información como entrada para el entrenamiento del modelo. Un saludo!
Pero no predice el futuro ya que tú le das unas valores de validación, no? Si yo quiero predecir los proximos 5 dias, no metiendo los valores, si no diciéndole los 5 siguientes días, cómo se haría? Creo que tu video es bueno pero es necesario lo que yo digo pues así es un caso real. Gracias, espero respuesta.
¡Hola y gracias por tu comentario! En el video se muestra efectivamente una predicción, pues el modelo sólo conoce los datos de 2006 a 2016, y con esta información predice lo que ocurrirá en 2017. Lo que ocurre es que en el mismo video (cerca del minuto 4:00) muestro dos gráficas: el resultado de la predicción (en azul) y el valor real de la acción (2017) que no lo conoce la red pero que lo dibujo simplemente para poder hacer una comparación de qué también lo está haciendo el modelo. ¡Un saludo!
@@codificandobits Creo que no me has entendido o yo no me he explicado. Lo que me refiero, es que si realmente fuera una predicción futura, no tendrías por qué meterle los datos en x_test. Tú a x_test le metes los datos que LA RED VA A PREDECIR. Por tanto, ya le estás pasando unos valores, tú mismo puedes comprobarlo si le metes otros valores, te da unos resultados muy muy distintos. Yo lo que quiero saber, es cómo me puede predecir la curva que te predice pero SIN METERLE DATOS EN EL x_test, es decir, quiero saber cómo decirle que me prediga unas fechas, meterle en el x_test unas fechas, no unos valores, yo a la red no le quiero decir absolutamente nada de valores, no quiero que sepa nada de nada porque quiero que me los prediga. Yo quiero entrenarla con valores en unas fechas y después, para PREDECIR, quiero decirle a la red: "Quiero que me predigas desde el 7 de Abril hasta el 20 de Octubre" por ejemplo. He visto más de 10 veces el vídeo y el minuto 4:00 y lo que te digo es que no le quiero meter valores, no quiero meterle los valores que va a predecir, solo quiero meterle fechas, porque si le meto valores, no sé por qué le influye y cambia mucho mucho. Un ejemplo es, por si no me he explicado: TRAIN: Del 1/1/2020 al 5/2/2020 me he comido X manzanas cada dia. Test: ¿Cuántas manzanas me comeré del 6/2/2020 al 9/2/2020? Muchas gracias por tu atención, espero tu respuesta ya que quiero entenderlo, y , si puedes poner un ejemplo aqui adjunto de lo que yo digo, seria perfecto. Un saludo muy grande.
@@MavsFit Hola de nuevo. Ya te entiendo la pregunta... Aunque me dejas pensando, pues no creo que lo que buscas hacer sea posible pues el mismo principio de funcionamiento de la red LSTM es precisamente tomar una secuencia de entrada, analizar su patrón de comportamiento, y generar así una secuencia de salida. Si eliminamos la secuencia de entrada no sería posible hacer una predicción. Pero tu pregunta es muy buena y me deja con curiosidad. Con una red LSTM/recurrente no sería posible, pero déjame investigo si se lograría hacer con otra arquitectura y te cuento. ¡Un saludo!
@@MavsFit Yo no sé si te he entendido. Lo que quieres es predecir 5 días futuros (o los días que sean), pero obviamente no dispones de los datos aún. No puedes entonces ir montando esa ventana móvil de 60 días para predecir hasta el quinto día futuro, porque no tienes el de mañana, ni del de pasado mañana, etc. Si es esto lo que planteas, la solución es conocida y ya la ha planteado codificandobits en otra respuesta a otro suscriptor. Has de adaptar el código para ir tomando como valores reales los que te vaya prediciendo la red. Para la predicción de mañana dispones ya de los 60 datos reales anteriores. Para la predicción de pasado mañana (predicción que también haces hoy) tomas como dato real de mañana la predicción que obtuviste para mañana. Y así sucesivamente para todos los días futuros hasta llegar a la última fecha que quieres predecir.
Hola Andrés Felipe. Esta es "la pregunta del millón", y en Deep Learning realmente no existe, hasta el momento, un desarrollo teórico que nos permita determinar cuál es el tamaño más adecuado (en términos del número de neuronas y el número de capas). Esto depende mucho de los datos que se estén procesando y del desempeño que vayamos observando en el modelo entrenado. Un saludo!
@@andresfelipeestradarodrigu301 te sugiero este artículo arxiv.org/pdf/1506.00019.pdf, que aunque es un poco denso y extenso explica en detalle todo lo relacionado con las RNN y las LSTM. Un saludo!
Por que utilizas transform() para la validación y fit_transform() para el entrenamiento? He mostrando los valores puedo ver que al usar fit_transform() sí el rango es de 0-1, pero empleando transform() no es de 0 a 1. Tambien preguntarte por que no hacer en el conjunto de validacion esto: x_test = sc.transform(set_validacion) En vez de como está: x_test = set_validacion.values x_test = sc.transform(x_test) Hay alguna diferencia que se me escapa? Mil gracias por este tutorial Miguel, me ha ayudado mucho, de verdad te lo agradezco.
Respondiendo a mi yo del pasado: datascience.stackexchange.com/questions/12321/difference-between-fit-and-fit-transform-in-scikit-learn-models Espero ayudar a alguien más...
Claro que sí. PyCharm es un entorno para programar en Python y por tanto no debería haber problema. Lo que sí debes tener en cuenta es que en tu instalación de python se encuentren las librerías requeridas para este tutorial
@@EduardoCollazos15 No. Debes instalar las librerías requeridas (tensorflow, keras y scikit learn). La actualización de Python instalaría la versión más reciente del lenguaje de programación, pero no las librerías.
Creo que está comparando los valores reales 60 días desfasados con respecto a las predicciones. Dentro de la función graficar_predicciones, ¿no tendría más sentido que compare con los valores predichos los elementos del vector real[60:len(prediccion)+60]? def graficar_predicciones(real, prediccion): plt.plot(real[60:len(prediccion)+60],color='red', label='Valor real de la acción') en lugar de: def graficar_predicciones(real, prediccion): plt.plot(real[0:len(prediccion)],color='red', label='Valor real de la acción') Si lo hace verá que al graficar los datos de la predicción son mucho más parejos, el resultado es mucho mejor. Muy bueno el video y muy sencillo el código
😂😂😂😂😂😂😂. La bolsa no se puede predecir. Tienes que leerte la teoría del caos, la teoría de eficiencia en los mercados, tienes que leer a Jim Rickards, Michael Hudson, Nate Haggens. Por favor no te tires tus análisis. Si eso fuera así, todo el mundo lo haría.
🔥🔥Academia Online: codificandobits.com 🔥🔥
🔥🔥Asesorías y formación personalizada: codificandobits.com/servicios 🔥🔥
I know it is kind of randomly asking but do anybody know a good place to stream newly released tv shows online?
@Orion Sonny flixportal =)
@Gunnar Vance thank you, signed up and it seems to work :) I really appreciate it!!
@Orion Sonny Happy to help xD
¿Puedes pasar los artículos que leíste? En especial me interesa que modelo estás utilizando con ese code. Algún articulo científico que me brindes, te lo agradecería
hermano gracias de verdad estas llenando lo que hasta ahora era un vacio para los hispanoablantes que estudiamos el machine learning las redes recurrentes no tienen gran explicacion en la red por lo que uno se ve frenado a la hora de implementarlas por no poder entenderlas de modo que agradezco sinceramente tu trabajo
Gracias por tu comentario Abraham. Un saludo!
Excelente contenido, agradezco tu esfuerzo y dedicación por compartir tus conocimientos 👏
Hola, la gráfica del minuto 4:09 tiene un desfase. Si corrigen la curva azul y la desplazan a la derecha verán que ambas gráficas se solapan.
Muy bueno, lo que andaba buscando mas que todo en la parte donde explica que hace cada linea...
Felicitaciones Miguel. Excelente serie de videos. Tu explicacion fue igual o superior a la de Ava Soleimany del MIT. Gracias por compartir tu valioso conococimiento.
Gracias por tu comentario Jorge. No he visto el video de Ava Soleimany, pero me causa curiosidad.
Un saludo!
Excelente tu aporte amigo, gracias por tu gran esfuerzo de compartir tus conocimientos con el mundo.
Hola, gracias por tu comentario. Un saludo!
muchas gracias Don Miguel, muy didáctico y claro.
Muchas gracias por los datos y muy buena tu explicacion!!!!
Excelente canal, felicitaciones. La información muy clara y precisa.
Hola, muy interesante el canal. Muchas gracias por el trabajo que haces. Saludos.
Hola Miguel, gracias por tu comentario. Un saludo!
Muchas gracias! Esta muy bien explicado
Que buena explicación, gracias por el aporte
Hola, muy clara la explicación muchas gracias. ´Para predecir más de 1 dato futuro despues de entrenada la red, se repite todos los pasos con todo el dataseet y como se ajustarian los parámetros para que por ejemplo la predicción se a 18 meses?
Excelente video. Muy claro. Gracias
😉
Genial! Muchas gracias! Es un trabajo muy bueno el que estas haciendo en el canal.
Muchas gracias por tu contribución, Excelente trabajo. (Nuevo subscriptor)
A ti por seguir el canal. Un saludo y bienvenido!
Genial!!! Como todos tus vídeos
;)
Excelente Canal. Gracias.
Gracias José Manuel. Un saludo!
Genial vídeo, felicitaciones
:) gracias por tu comentario Henry. Un saludo!
Si pudieras hacer un video explicando funciones especificas de tensorflow y keras segun y otros terminos las que he anotado: Softmax, Sigmoid, Acuracy, Dense(), Sequential(), ModelDataPoint(), Batch, BatchSize, One-hot, Metrics, Droput, CuDNNLSTM, BatchNormalization, TensorBoard(), .Evaluate(), .Fit(), input_shape, keras.optimizer.Adam, K-fold, ReturnSeq, df.shift(), preprocessing.scale(), compile(), reshape()
Wow! Es un listado bastante grande...
Algunos de estos temas ya los he cubierto en otros videos:
- Dense, Sequential, BatchSize, fit, input_shape, compile: todos ellos los reviso en el tutorial introductorio a Keras. Acá está el enlace: ua-cam.com/video/F6oKf06WmnM/v-deo.html
- Sigmoid: en el video de regresión logística puedes encontrar más información. También en el video de las funciones de activación. Acá los dos enlaces: ua-cam.com/video/lFODTDO8mMw/v-deo.html, ua-cam.com/video/eHOHIgxRoHE/v-deo.html
- Softmax: en los videos sobre regresión multiclase encuentras detalles. Los enlaces: ua-cam.com/video/IjlzULcQdvk/v-deo.html, ua-cam.com/video/MuPh3h7hwb4/v-deo.html
Sobre los otros temas: muchas gracias por tu comentario. Ya tomé nota de estos temas, y poco a poco iré subiendo videos donde hablaré en detalle de los mismos.
Un saludo!
codificandobits muchas gracias iré viendo, pasa que me llama mucho la atención redes neuronales recurrentes LSTM y convolucionales e hiperparametros y he anotado varías funciones para entender primero el abc de las funciones para poder modificar algoritmos según lo que necesite y veo que esto es como aprender a leer en mi caso aprendí el abcedario luego fui uniendo letras con letras para armar palabras y así esto IA algunas cosas son mecánicas por lo que veo hay funciones con más parámetros para adaptar
muchas gracias por el video , pero de que sirve tener los datos que sean cercanos si no predice los 10 siguientes precio o X precios?
Excelente serie de videos, creo que para completar la serie te faltaría ejemplos considerando la no estacionariedad. Seria muy interesante, saludos.
Gracias Jairo por tu sugerencia. La voy a tener en cuenta para complementar esta serie. Saludos!
Hola gracias x compartir tu conocimiento! De casualidad quise ingresar al codigo pero me dice que ya no existe la pagina. Puede ser que lo pueda encontrar en alguna otra pagina? desde ya muchas gracias!
Hola. Buen video explicado LSTM y series temporales. Solo que finalmente el "for" finalmente no hace predicción del futuro. Ya que ingresas los mismo datos del 2017 al modelo. Debieras ingresarle los 60 últimos datos de "entrenamiento" para que comience a predecir el valor 61 y más pero del 2017. Y el conjunto de validación solo se ocupa para comparar la predicción y no para usarla en ña funcion predict. Por eso no se puede predecir para nuevos tiempos con este algoritmo. Gracias de todas maneras por su video.
o sea que en definitiva no sirve?. donde puedo estudiar esto, me interesa como para meterme en este mundillo.
@@matiasfernandez6180 Si sirve. pero para darle una aplicación a algún caso real, no se describe en el video. Se debe hacer un ciclo FOR diferente que prediga el futuro de la variable Serie temporal, que no está en este video.
Se trataria de un FOR con el rango "m" (tamaño del set)?
Muchas gracias por esas magníficas explicaciones!!
Tengo una consulta, cómo se podría hacer el generador de nombres de dinosaurio con esta arquitectura (LSTM) ?
hola gracias por este contenido tan bueno. Como puedo hacer para generar mas de 1 predicción en el futuro por ejemplo 10 pasos al futuro
Excelente trabajo, todo muy claro y didáctico. Lo he podido replicar sin problema. Me ha sido de gran ayuda!!
Mi duda surge en cuanto al poder de predicción de la arquitectura propuesta LTSM. Entiendo que los valores que predice la red para el dia siguiente se parecen bastante al valor real, pero no entiendo porque quedan tan lejos, ya sea en el conjunto de test como en el de entrenamiento.
En el conjunto de test es normal, ya que dichos datos la red no los ha visto nunca, pero en el conjunto de entrenamiento el error, en mi opinión, debería ser más bajo.
Me explico: con una predición tan sencilla como "el precio de mañana será el precio de hoy" creo que se obtiene menos error que con la predicción de la red LTSM, no solo en el conjunto de Test sinó también en el de entrenamiento. Llevo varios dias dandole vueltas a esto y no se donde puede estar el error conceptual, ya que con el conjunto de entrenamiento se ha hecho una optimización de minimos cuadrados, y teoricamente debería predecir mejor que "tomar el precio de hoy". Gracias por tu trabajo !!
Añado que he hecho variaciones poniendo mas capas ocultas LTSM, también otras tipo DENSE, incluso he acortado las entradas en lugar de los 60 dias anteriores, a un solo dia, o sea hoy. En ningún caso he conseguido que el error de la red sea inferior al predictor sencillo del precio de hoy.
Estoy totalmente de acuerdo. La predicción de esta red, en este ejemplo, es engañosa. Si fuera real, más de uno ya se habría hecho rico. Se dice que la mejor predicción para el día de mañana es la cotización de hoy. Y es que en este entorno, hay que distinguir lo que se llama serie de nivel y serie de diferencias. En la serie de nivel hay una alta autocorrelación. Es muy difícil que si hoy vale 1,220 mañana valga 987 y pasado mañana 1.829. Un modelo naif que prediga el valor de hoy (1.220) parecerá muy bueno cuando se muestre en la gráfica. Las diferencias son pequeñas. Pero el problema está sin resolver. Lo que hay que predecir es la serie de diferencias. Típicamente estas son incorreladas, y son casi imposible de pronosticar.
Que tal . Muy educativos tus videos. Quería preguntarte si conoses de alguna librería, plataforma... donde se pueda aprender sobre redes neuronales evolutivas.
Hola Manuel. Aunque no la he usado, hay una librería en Python que se llama NEAT (github.com/CodeReclaimers/neat-python) para implementar este tipo de redes.
Con respecto a bibliografía puedes buscar "evolutionary neural networks" en Google Académico y encontrarás artículos recientes sobre el tema. Un saludo!
@@codificandobits Muchas gracias por la info👍🏻
Si quisiera predecir los valores para el primer mes 2018... Con ese mismo dataset. Como lo hiciéramos? Ya que en ese escenario no conocemos ningún dato de entrada
¡Hola Rafael! En principio se podrían usar las predicciones hechas para el 2017, pero lo ideal es contar con datos más recientes, al menos del año anterior, para lograr que la predicción se acerque más al comportamiento real.
Si la predicción la hago no sobre datos reales sino a partir de predicciones anteriores, muy probablemente con el tiempo la diferencia entre la predicción y el valor obtenido va a comenzar a ser cada vez más grande.
¡Un saludo!
Gran video muy interesante
😉
Si actualizo el database, podria prevenir con su codigo base el dia de mañana de apple, porque mas reciente, mas precision quisiera saber si se puede hacer, Gracias (:
En teoría es posible, claro que sí. Lo único que se requiere es lograr acceder a esta base de datos actualizada. Un saludo!
Hola buenas noches, primero que todo agradecer todo el material que has subido a tu canal, esta super bien explicado y de manera sencilla, super recomendando a las personas que están integrándose a este mundo.
En lo particular tengo una duda, por ejemplo si quisiera predecir valor de las acciones de apple y para mejorar esta predicción me gustaría adicionar covariables como por ejemplo valor del dolar, petroleo, etc. ¿Cómo debería ser el planteamiento?. ¿Tienes algún material de lectura que me ayude abordar este problema?.
Nuevamente muchísimas gracias y felices fiestas.
Hola Sergio, gracias por tu comentario!
Un saludo!
Hola! Excelente canal y saludos desde Chile! Estaba viendo tus videos del canal y me surgió la siguiente duda, para poder predecir los precios de las acciones futuros en base a tu opinión/conocimiento que sería mejor MLP o LSTM ? Gracias de antemano y saludos!
Hola Felipe. Definitivamente LSTM, porque el perceptrón multicapa no está en capacidad de analizar secuencias (como por ejemplo la variación de las acciones en el tiempo). Aunque creo que otra estrategia pueden ser las redes transformer, una nueva arquitectura que resulta ser mucho más prometedora que las redes LSTM. Sobre estas redes publiqué un video recientemente, acá te dejo el enlace por si te interesa: ua-cam.com/video/Wp8NocXW_C4/v-deo.html
@@codificandobits Muchas gracias por tu respuesta! un abrazo cordial.
Excelente video, pero me ciónqueda una duda cuando usas el modelo, poruqe no especificas una funcion de activación dentro de la red, o acaso queda alguna por defecto?
Esta red tiene un gran problema, cuando pongo el time_step entre 1 y 20 logra predecir la grafica a la perfeccion, parece que hace overfiting
@codificandobits
Excelente video ! Una consulta como trabaja específicamente la función "inverse_transform"?
Hola Benjamín. Cuando se realizó el entrenamiento se utilizó una transformación que garantizaba que los datos estuviesen en el rango 0 a 1 (línea 42). Con esto se garantiza la convergencia del algoritmo de entrenamiento.
Sin embargo, los valores de las acciones en realidad no están en ese rango, así que al hacer la predicción es necesario hacer el proceso inverso para que la predicción de estos valores esté en el rango real. Esto es precisamente lo que hace inverse_transform.
Un saludo!
@@codificandobits Perfecto muchas gracias!!!!
Esta super bueno el video, gracias por la informacion. sin embargo tengo una duda, el modelo en pantalla sirve para encontrar solo un valor futuro. como hago yo para predecir mas de un valor futuro? nota: trate cambiando el valor de la variable dim_salida = 3 y me arroja un erro. agradecería su respuesta
Hola Víctor. En este caso debes generar uno a uno los datos de la predicción. Por ejemplo:
- Iteración 1: ingresas los datos 1 al 60, y predices el dato 61
- Iteración 2: ingresas los datos 2 al 61 (siendo el 61 la predicción anterior) y predices el dato 62
- Iteración 3: ingresas los datos 3 al 62 (siendo el 62 la predicción anterior) y predices el dato 63
y así sucesivamente!
Un saludo!
@@codificandobits tu solución en python como quedaría escrita?
hola exceñentr, como tendria que hqcer para pronosticar en vez de un dia 30 dias? si no es sencillo podrias hacer un video? estoy trabajando usando ARIMA y SARIMAx y quisiera poder compararlos en ese horizonte de 30 dias. gracias!!! por todo
Hola Jorge. Te sugiero el video de predicción univariada + multistep con Redes LSTM. Acá te comparto el enlace: ua-cam.com/video/TEzTfl_E-3o/v-deo.html
Un saludo!
Nuevo suscriptor amigo!!!
Hola, como estas?
Probé el codigo y no pareciera que es un entrenamiento real. Cuando pones time_step = 1 la IA copia el valor de la acción y no tiene sentido.
Me pasó lo mismo, modifique el dataset poniendo información falsa para ver cómo resultaba la predicción y lo copió a la perfección.
También si pudieras hacer un video de un ejemplo manejando LSTM con señales de actividad humana por allí esta un git de ejemplo pero es de unos años usando la data oportunity
Sí, ese es un video que espero publicar más adelante.
Espectacular, no se si hay un tutorial de Keras realizado por usted!
@Lucca Cason Thanks for answer
Hola Pablo. Sí, en el canal hay un video tutorial de Keras para principiantes. Un saludo!
Hola. Gracias por el video ! Tengo un problema al cargar la linea6 >> from keras.models import Sequential
...Failed to load the native TensorFlow runtime.
Gracias y Saludos
Hola Marcelo. Usualmente este tipo de errores se deben a que keras (o tensorflow) no están en el "PATH" de Python. ¿Me podrías enviar un pantallazo completo a codificandobits@gmail.com para mirar más en detalle?
¡Un saludo!
hola buenos dias tengo una pregunta que versión de python se utilizo es que estoy desarrollando el ejercicio en anaconda y tengo un conflicto con las versiones
Con acciones argentinas compense hace ? Muy bueno el video
Hola Juan. En ese caso debes buscar el set de datos con el histórico del comportamietno de estas acciones; luego debes reentrenar el modelo y verificar qué también logra hacer la predicción. Un saludo!
Tienes unos vídeos excelentes. Me han ayudado mucho a entender mejor los conceptos de las redes LSTM.
Tengo una pregunta. Luego que tienes desarrollado el modelo ya entrenado, como lo probarias con nuevos datos para ver su performance?
Digamos testearlo con un nuevo archivo .csv del valor de las acciones.
Tengo la misma pregunta, como implementarlo para predecir en momentos que no estás en el dataframe
Hola! De antemano muchas gracias por compartir el conocimiento, me ha servido de mucho y queria consultar sobre una duda. Al realizar la predicción esta arroja una grafica del valor de la accion por un lapso en el tiempo en el eje X, sin embargo en este eje solo muestra numeros y no fechas. Alguien me podria explicarme por favor?
¡Hola Juan Felipe, y gracias por tu comentario!
Los números en el eje "x" de la gráfica de predicción que obtuviste se refieren a días. Como la predicción se hizo para el 2017, el número 2 se refiere al 2º día de 2017, el número 10 al décimo día y así sucesivamente.
¡Un saludo!
@@codificandobits Entendido, mil gracias!
Hola, suscrito y muy interesante el canal y para verlo varias veces, veo que se hace todo el proceso y el ultimo gráfico no aparece en el código, cuando veo el set_validacion y la prediccion su forma me resultan 2 arrays que tienen diferente size, una de 251 filas y otro de 191 filas, me puedes ayudar y decirme como se puede ordenar esto en dos columnas para gratificarlo??
Gracias
Hola como hago si quiero agregar otras variables que influyen en los valores pasados, dónde las agrego? y una vez agregadas puedo predecir solo los valores futuros de la bolsa pero estos valores ya van a tener en cuenta la evolución de las otras variables, muchas gracias excelentes videos, saludos desde Paraguay
Hola Franco y qué buena pregunta.
Las variables adicionales las puedes incluir en el set de datos original (archivo .csv que encuentras en Github). Posteriormente, durante el pre-procesamiento (líneas 28-61 del código en Github) debes modificar el código para incluir los nuevos datos en los sets de entrenamiento y validación. Con esto debería ser suficiente para entrenar la red LSTM y hacer que sea capaz de tener en cuenta las nuevas variables para hacer la predicción.
Un saludo!
Muchas gracias por el video. Ojala puedas responder la siguiente pregunta que nadie me ha podido ayudar. En el video vemos la validación del modelo, pero como hago para modelar los valores futuros. En este caso específico como hago para predecir los 30 días del mes de enero del 2018?. Que parte del código cambiarías para lograr predecir estos valores futuros? Esa parte no la he podido ver en ningún video.
Alguien que me ayude con este tema por favor??
@@santiagogongora5506 lograste resolverlo ???
Excelente!!!!!
excelente video, sin embargo me queda la duda de como se escoge el tamaño del batch, que fue 32 en este caso, y para el numero de neuronas
Por prueba y error, vas probabdo y el que mejor te da te lo quedas
Buenas tardes, si deseo escoger cual es el periodo de tiempo que deseo predecir sin tener los datos reales para hacer la comparación, cual seria la modificación en el código?
Hola María Camila. En el código disponible en Github deberías modificar la línea 47 (variable "time_step"). Un saludo!
@@codificandobits Como quedaría esa modificación?
Buen video estana viendo tu pagina y me gustaria estudiar contigo, te cuento que no se nada de programacion y ciencia de datos desde que modulo deberia empezar?
Hola! Deberías comenzar con el curso "Introducción a la Ciencia de Datos" y luego seguir con los cursos de programación en Python niveles básico, intermedio y avanzado. Un saludo!
Como podría realizar una red neuronal LSTM que tenga varios datos de entrada, es decir, que no tome solo el máximo valor de la acción, sino también el mínimo, el valor de apertura y cierre y demás?
Hola Julio y ¡qué buena pregunta!
Esto se conoce como predicción multivariada (múltiples variables).
En esencia se puede usar el mismo esquema que se muestra en el video, con una diferencia importante: en lugar de una sola característica (el valor máximo de la acción), cada dato del set de entrenamiento tendría cuatro características (máximo, mínimo, valor de apertura y de cierre). En todo caso la capa de salida seguiría igualmente generando un sólo valor: la predicción de la acción.
Claro, es probable que con estos cambios la complejidad de la red cambie. Es decir que podría ser necesario agregar más capas ocultas y/o neuronas, y verificar durante el entrenamiento/validación cuál es el valor más adecuado para estos parámetros.
¡Un saludo!
Muy buen Video
😉
Hola, lo que noto en la predicción es que tiende mucho a copiar el último valor de la serie de 60 valores. La predicción hace como un shift de la función real.A que se debe?
Muchísimas gracias por tus vídeos, son muy claros. Es de lo más pedagógico que he visto en redes neuronales
porque es una función rezagada
Muy buena explicación...estoy trabajando en un proyecto de DL para la escuela y tengo 2 o 3 dudas. Existe alguna forma de poder enviarte un doc con algunas imagenes y las dudas, le des un vistazo y puedas ayudarme??? Salu2
Claro Ariel, no hay inconveniente. codificandobits@gmail.com. Un saludo!
Muy bueno, muchas gracias! Una pregunta, esto también serviría para predecir valores futuros? Osea por encima de la última fecha registrada? Gracias!
Claro que sí Cristhian, de hecho esa es precisamente la idea, que el modelo toma como base valores pasados para predecir valores futuros.
Un saludo!
@@codificandobits gracias por tu respuesta. Miguel tengo una duda al momento de predecir valores futuros, incluso más allá del set de entrenamiento. Te puedo mandar un email? Gracias!!
@@cristhiancastrochavez5962 . Hola, buenas tardes. Pudiste resolver el problema, de como predecir valores futuros mas allá del set de entrenamiento?
No sabes si hay algún parámetro que se pueda modificar para lograrlo?. Gracias desde ya.
En el ejemplo se entreno la RED LSTM con datos al 30/Diciembre 2016, y utilizamos datos para validación del 2017... como se hace para predecir mas adelante de los datos de entrenamiento y test ... Ejemplo: entreno mi RED LSTM al día de ayer, ¿Como puedo predecir de hoy a 30 días adelante ?
Hola buenas tardes. encontraste la solución a tu pregunta. Porque me gustaría saber como hacer lo mismo. tener 2, 3 días o un mes de predicción. Te agradecería que que compartieras la solución si la encontraste. gracias.
hola muchas gracias por tu video, alguien me podria explicar por favor por que hace la predicion con prediccion = modelo.predict(X_test)
donde x text es igual a set validacion x_test = set_validacion
lo que trato de decir es por que hace la predicion usando los datos que queremos predecir
Hola Jefferson. Ten en cuenta que 'x_test' contiene bloques de 60 datos históricos. Estos 60 datos ingresan a la Red LSTM, y la red predice el dato 61.
@@codificandobits hola muchas gracias por tu respuesta
soy muy nuevo en estoy pero no entiendo por que X_test se saca de los set de datos del 2017 año que es el que quiero predecir
@@codificandobits en este caso que de donde sacarial el X-test si quiero predecir el año 2018 2019 que no estan en nuestro archivo csv "agradesco su tiempo"
Hola, podrías compartir el dataset para realizar el ejercicio? Gracias!!
Amigo yo tengo un código funcional en python pero es usado en consola , estoy tratando de hacer mi Back y fronted en base a este.
Muchas gracias crack! Genial el video, pero tengo una duda, que quizás alguien acá me pueda responder.
Me puse a jugar con el código cambiando el tamaño del input, por ejemplo con bloques de 20 y 100 precios en vez de 60 y me di cuenta que el resultado siempre es un gráfico muy parecido pero corrido en el eje X. Y veo que en tu caso ocurre lo mismo, si corres el gráfico de tu predicción 60 unidades a la derecha te da una predicción muuuuuy precisa. Entonces, lo que no entiendo son dos cosas:
1- Por qué ocurre el corrimiento.
2- ¿Cómo la predicción puede ser taaan precisa?
Bien, ya entendí:
1- El corrimiento se debe a que la primer predicción es del momento 61 en el tiempo, los primeros 60 no se predicen, se usan como input.
2- La extrema precisión se debe a que se predice de un valor a la vez y usando los valores reales anteriores, es decir se dan pasos muy chicos como para que la predicción pueda desviarse de los valores reales. Creo que algo más razonable sería usar como inputs los predicciones que se van haciendo, o aumentar el tamaño de loa outputs.
Wow, gracias por tu aclaración y explicación. Mejor explicado imposible!
Un saludo!
@@pochengueTV como puedo usar como inputs los predicciones que se van haciendo?
@@wariowadillo4139 Hola. De casualidad encontré el notebook donde estaba esto, pero no me hago cargo de lo que hice hace 5 meses jaja. No hice nada muy elegante, armé un loop for y en cada vuelta hacía la predicción y sumaba ese valor como input para la próxima iteración ( y quitando un valor tipo FIFO). Igual desde ese momento no volví a meterme en el tema así que tomalo con pinzas, seguramente hay un modo más elegante de hacerlo.
Buenas, antes de nada muchas gracias por el vídeo. Me gustaría realizarte una pregunta, si lo que quisiera es la predicción del dato 121 en lugar del dato 61... sería posible?
Hola Javier. En este caso deberías modificar el tamaño de la secuencia presentada al modelo durante el entrenamiento: en lugar de usar 60 datos debes usar 120. Así, una vez hecho el entrenamiento, podrás predecir el dato 121. Un saludo!
Gracias :)!!!
Hola! Me vi la lista de reproducción completa. Mi pregunta es, ¿Y si solo quiero saber el precio de cotización de "mañana"? De qué manera se logra? De manera que tenga una aplicación práctica y no quede la "predicción" en algo que sucedió tiempo atrás como una anécdota de "oh, funcionó bien"... Gracias. Saludos desde Argentina.
Hasta cierto punto bien entrenada.. Y muy difícilmente tendrías algo certero
Porque por ejemplo.. Poniendo el caso de los dolares y pesos mexicanos
Solo por el hecho qie trump iba a ganar el peso empezó a caer y caer
yo dejaria entrenandola un par de años y la iria testeando y comparando. El dia que tenga gran capacidad de prediccion podria darle provecho
¿Como sé el numero de neuronas que necesito para la LSTM?
tengo la misma duda, porque usaste 50 neuronas?
Hola José. Esa es la gran pregunta cuando se desarrolla cualquier modelo "Deep Learning": ¿cuántas neuronas (y/o cuántas capas) uso? Realmente no existe una respuesta adecuada o que tenga algún sustento matemático, pues el número de neuronas/capas dependerá de la complejidad de los datos que procese la red, y estos datos pueden ser de cualquier tipo!!! (imágenes, videos, texto, audio, etc.)
Así que la forma convencional de definir este número de neuronas/capas es analizando el entrenamiento y la forma como se comporta el error durante el entrenamiento y la validación. Generalmente se crean varios modelos, cada uno con diferentes capas y número de neuronas, y aquel con los menores niveles de error será el que resulta más adecuado para una aplicación en particular.
Un saludo!
@@codificandobits Muchas gracias por tomarse el tiempo de contestar y gracias por la respuesta
@@codificandobits como pongo otra capa LSTM?
Hola, me queda una duda está arquitectura se puede utilizar para clasificación? Te agradezco de antemano
Hola Óscar. Depende del tipo de dato que quieras clasificar. Si estamos hablando de secuencias (por ejemplo en el caso de clasificación de emociones) entonces sí es posible.
En otro casos las redes neuronales y las convolucionales se pueden usar también en procesos de clasificación, pero todo depende en últimas del tipo de dato.
Un saludo!
@@codificandobits es para el caso de señales como de ritmo cardíaco (que pienso son como series temporales) para saber si sufre o no de alguna patología, entrenarla con señales con y sin la patología y la red defina si la puede sufrir o no con una nueva señal, de nuevo gracias con tu explicación anterior entiendo mejor
@@oscarriojas2023 En estos casos se pueden usar variantes de redes convolucionales. Un saludo!
Me pregunto si no hay forma de tomar los errores que cometió el modelo en cada punto de la gráfica y predecir el próximo error de la misma, sumarle ese error estimado al modelo, y de esa manera tener un gráfico mejor ajustado, luego con el nuevo gráfico mejorado, hacer lo mismo y así sucesivamente hasta tener convergencia. Saludos
Hola! Realmente es un poco más complicado, pues este error se incrementará con el tiempo debido a que el dato real fluctúa constantemente. Así que lo que tenemos se conoce como "model drifting": después de un tiempo el modelo entrenado inicialmente ya no tendrá un buen desempeño porque los datos han cambiado pero el modelo no ha sido re-entrenado.
Este es un problema que enfrentan todos los modelos de machine/deep learning cuando son llevados a producción. Para evitar este drifting la única solución es periódicamente reentrenar el modelo con datos actualizados, monitorear el desempeño y si este decae re-entrenar nuevamente, y repetir el proceso una y otra vez.
Un saludo!
Saludos, muy bonito el ejemplo, pero como puedo predecir valores al futuro a partir de estas lineas de código ?. De antemano, gracias
Hola Willian. En el tutorial precisamente se explica cómo realizar esta predicción. Te sugiero revisar del minuto 3:54 en adelante. Un saludo!
Si coges varios valores puedes meter unos de rango 0 a +1 y otros de rango -1 a +1 por ejemplo? Se podría hacer eso?
Hola! Lo ideal es que todos los valores estén normalizados al mismo rango, bien sea 0 a +1 ó -1 a +1 (pero no ambos). De lo contrario el entrenamiento no resultaría adecuado y el rango escogido influiría en la predicción obtenida.
Un saludo!
Hola buenas noches estoy jugando un poco con el código y hay una parte que no entiendo bien.
1) ¿Porque usas? x_test = set_validacion.values
x_test = sc.transform(x_test)
en lugar de sc.fit_transform(set_validacion.values).
2) cuando usas predicción = modelo.predict(X_test) te devuelve una lista de valores en que el primer valor correspondería al día 61 (time_step + 1)?
después del for la longitud del conjunto cambia, sabes por qué? siento que con eso entonces esta saliendo mal la gráfica.
for i in range(time_step,len(x_test)):
X_test.append(x_test[i-time_step:i,0])
Excelente.
Hola!
No he entendido lo de batch_size=32. No se habían tomado bloques de 60 datos?
Gracias y un saludo!
Es el tamaño de cada uno de los bloques
Hola excelente canal, he buscado muchas explicaciones de estos temas pero seguía con dudas, la metodología que usas para explicar es increíble, felicidades por el canal.
Quisiera preguntar algo teórico referente a la arquitectura de una red LSTM. Supongamos que quiero filtrar señales de audio, tengo 10 señales y cada una dura entre 30 y 60 segundos, todas tienen tiempos diferentes. Para entrenar la red decido crear sub-muestras de las primeras 8 señales, pasando una ventana de tiempo de 5 segundos con un solapamiento de 1 segundo (esto lo hago para tener más datos y que la RED pueda aprender mejor), y así me quedan de las primeras 8 señales, digamos que 1000 sub-señales de 5 segundos. Mi pregunta sería, ¿existe una forma de realizar una predicción con las 2 señales de testeo (que duran digamos que 45 y 57 segundos respectivamente), sin necesidad de subdividirlas en segmentos de 5 segundos como hice en el entrenamiento?
Muchas gracias.
Hola Deivid, qué buena pregunta.
Te respondo por partes: en primer lugar te sugiero no usar la señal de audio directamente, y mejor una representación tiempo-frecuencia (acá un ejemplo: medium.com/manash-en-blog/building-a-dead-simple-word-recognition-engine-using-convnet-in-keras-25e72c19c12b).
Y en segundo lugar claro que sí, una vez entrenado el modelo puedes usar datos de tamaño variable. Lo importante es que al crear la red LSTM, en el parámetro "input_shape" definas como "None" el primer valor para que la red "entienda" que durante la predicción usará datos de tamaño variable. Acá un ejemplo: datascience.stackexchange.com/questions/26366/training-an-rnn-with-examples-of-different-lengths-in-keras
Un saludo!
@@codificandobits ok, genial, muchas gracias !
Hola saludos desde Colombia!
Me encantan tus vídeos, quisiera saber dónde aprendes todo esto, todos los comandos y como usarlos? Algún libro o artículo para aprender.
Gracias por tu comentario Sebastián! Pues realmente no existe un solo recurso, como un libro o un sitio web en particular. Te puedo sugerir de entrada un libro muy completo que aborda todos estos temas en profundidad (claro, desde un punto de vista teórico, sin nada de programación): el libro se llama "The Deep Learning Book" (www.deeplearningbook.org/). Es el referente en este tema.
Un saludo!
Hola, esperando que te encuentres bien, te escribo principalmente para hacerte la siguiente pregunta ¿Una red LSTM puede tener múltiples inputs (por ejemplo, precio, volumen, producto interno bruto, etc) y que se obtenga una sola salida? si es posible hacer eso, me podrías guiar o aconsejar por favor!
Hola Felipe. Sí, es posible. Esto se llama análisis multivariado de series de tiempo. Acá encuentras un ejemplo: towardsdatascience.com/time-series-analysis-on-multivariate-data-in-tensorflow-2f0591088502
Un saludo!
@@codificandobits Muchas gracias por tu respuesta!
hola, se hace en el orden de tu video? o en el orden en el que esta puesto el codigo?
Hola Joaquín. Tanto el video como el código están en el mismo orden. Pero en el código encuentras más detalles, te sugiero usarlo (lo encuentras en Github, el enlace está en la descripción del video). Un saludo!
Pregunta: Por que cuando se corre el mismo código otra vez, el resultado es diferente :(
Ummm... el resultado debería ser el mismo. Verifica que la semilla del generador aleatorio esté en el mismo valor siempre (np.random.seed..., o algo por el estilo). Un saludo!
Otra cosa si pudieras hacer un video donde trabajes con cuDNNLSTM según es para multiplicar por 10 la velocidad de entrenamiento en la pc intente pero me da muchos errores en la instalación de cudnn de nvidia y para pruebas sería muy util para probar GPU
Sí, las librerías cuDNN y la puesta en funcionamiento de tensorflow con GPU es un poco enredada. Más adelante espero hacer un tutorial paso a paso, pero el problema es que en últimas la instalación de estas librerías depende de la tarjeta GPU que se tenga en particular, así como de las versiones de Python y de tensorflow que se estén usando.
Un saludo!
@@codificandobits Exactamente es un enorme proceso mediante el cual... dos dias al final como que no me funciono, hay que tomar en cuenta la version del CuDNN, ejemplo 7.05 + de la 8,9 o 10 de otra cosa y se escoge segun el sistema operativo la version mas que todo el linux, no uso windows... pero seria genial poder trabajar con GPU segun la teoria dice que el entrenamiento corre ejemplo algo de 10 min baja a 2 min. Una barbaridad de ahorro de tiempo...
@@elingenierodelaweb Exactamente. El problema es que las versiones de la diferentes coincidan. La otra alternativa es tomar el código fuente y compilarlo, pero esto tampoco es tan fácil.
Pero en últimas el ahorro de tiempo es significativo.
Excelente tutorial ,muy didáctico y de mucha ayuda. Me parece que hay un pequeño error en el codigo, en la funcion de plotter se grafica los datos de 0 a 191(len(predicciones)), sin embargo se precide el dato 61 usando los primeros 60 datos, por lo cual se deberia graficar desde 61 hasta 251(len(real)). Al hacer ese cambio la predicciones son casi identicas a los datos reales
Hola mucho gusto, lamento comentar tan tarde. Es posible agregar mas capas LSTM una tras otras para conseguir mejores resultados ?
Mi pregunta va por el motivo de que al final dijiste algo de ese estilo. Muy buenos videos por cierto!
Hola César. Claro que sí es posible. Si miras el código fuente, en la línea 71 usas la directiva "modelo.add(LSTM ...)". Puedes añadir una línea similar a esta para agregar las capas que consideres necesarias. Un saludo!
@@codificandobits hola, si lo descubri hace tiempo gracias de todas formas, una pregunta... cual es la diferencia entre rnn y lstm, en cuanto a u problema de time prediction
@@kascesar La RNN convencional tiene, por decirlo así, una "memoria limitada". Es decir, para este caso de la predicción de acciones no se podrían usar ventanas históricas de 60 días, tal vez la RNN soportaría 10 días o menos y por tanto la predicción no sería adecuada. En cambio las LSTM logran analizar secuencias más extensas, como se muestra en este ejemplo. Un saludo!
@@codificandobits Mi pregunta va por el motivo de que a las redes LSTM las entrenas con batches de set de datos, me refieroa que en el entrenamiento a la red le pasas tensores tipo MxNxL, en el ejemplo en el que trabajo son batches de 10x10x3 ... mi pregunta viene a que cuando hago inferencia con el set de prueba, la red me devuelve 10 resultados, siendo que la ultima capa es una capa densa con una unica neurona. tiene algun sentido hacer inferencia con tensores de 1x10x3 a pesar de que en el entrenamiento lo hice con size de 10x10x3 ?
Te comparto link colab.research.google.com/drive/1n-atAomMhGgnk88JZnaBt7Wl0CHNWWSP
Buenos días, me surge una duda... Si los datos de entrada son normalizados (de 0 a 1), las salidas siempre estarán también entre 0 y 1, ¿no? En ese caso, no podremos predecir si las acciones van a subir por encima del máximo con el que se entrenó la red. A no ser que la red pueda recibir datos entre 0 y 1 y dar valores como 1'5.
En principio tanto la entrada como la salida están normalizadas al rango 0 a 1. Sin embargo, una vez hecha la predicción se debe re-escalar la salida al rango en el que se encuentran los datos originales. Esto se realiza en el código fuente en la línea 90 (prediccion = sc.inverse_transform(prediccion)).
Un saludo!
@@codificandobits pero si la predicción no puede ser mayor que 1, no es cuestión de re-escalar, simplemente tiene un techo que no puede superar.
Hola, te has olvidado del problema de la no estacionariedad de la serie. Si la serie es no estacionaria (los datos de entrada tienen tendencia, la varianza no es constante y hay autocorrelación) la predicción en base a un LSTM no es válida, dado que toma como hipótesis la estacionariedad de la serie.
Hola Sergio, tienes razón, la no estacionariedad es un aspecto que se debe tener en cuenta. Partamos del hecho de que el modelo LSTM aprende una representación simplificada de los datos, simplificada en el sentido de que nunca será posible contar con un set de entrenamiento que capture todas las posibles variaciones de la acción en la bolsa. En este sentido la red LSTM siempre tendrá una limitación.
Sin embargo es importante tener en cuenta que una red recurrente (como las redes LSTM) está en capacidad de aprender no linealidades en los datos, o tendencias en su comportamiento. En particular las redes LSTM son muy buenas en esto, así que el problema de la no estacionariedad no resulta tan crítico en estos casos. Claro siempre hay un pero, nada es totalmente gratis: para poder tener una predicción robusta se requiere una red LSTM lo suficientemente compleja, capaz de aprender dependencias amplias en el tiempo, y para ello desafortunadamente se requieren muchos, pero muchos datos.
Un saludo y gracias por tu comentario!
Hola.
De donde has sacado estos datos?
Solo llegan hasta el 2018.
Seria bueno poder tenerlos a ultima fecha para así, poder manejar algo mas real.
Y no solamente APPL si no otros valores donde practicar.
Gracias!
Hola Antonio. Los obtuve de Kaggle Datasets (www.kaggle.com/datasets). Un saludo!
Muy buen vídeo, como todos los de la serie. No obstante, ¿por qué no has intentado predecir la serie de diferencias de cotizaciones en lugar de la serie de nivel? El pronóstico de la serie de nivel siempre es engañoso. Parece mejor de lo que es, porque la predicción suele estar siempre cerca del valor real (porque son niveles, no diferencias).
Hola Antonio. Tienes razón, aunque no soy especialista en el tema de las acciones, creo que sería una buena alternativa. En este caso bastaría con tomar el set de datos y calcular las diferencias, y luego usar esa información como entrada para el entrenamiento del modelo. Un saludo!
Pero no predice el futuro ya que tú le das unas valores de validación, no? Si yo quiero predecir los proximos 5 dias, no metiendo los valores, si no diciéndole los 5 siguientes días, cómo se haría? Creo que tu video es bueno pero es necesario lo que yo digo pues así es un caso real. Gracias, espero respuesta.
¡Hola y gracias por tu comentario!
En el video se muestra efectivamente una predicción, pues el modelo sólo conoce los datos de 2006 a 2016, y con esta información predice lo que ocurrirá en 2017. Lo que ocurre es que en el mismo video (cerca del minuto 4:00) muestro dos gráficas: el resultado de la predicción (en azul) y el valor real de la acción (2017) que no lo conoce la red pero que lo dibujo simplemente para poder hacer una comparación de qué también lo está haciendo el modelo.
¡Un saludo!
@@codificandobits Creo que no me has entendido o yo no me he explicado. Lo que me refiero, es que si realmente fuera una predicción futura, no tendrías por qué meterle los datos en x_test. Tú a x_test le metes los datos que LA RED VA A PREDECIR. Por tanto, ya le estás pasando unos valores, tú mismo puedes comprobarlo si le metes otros valores, te da unos resultados muy muy distintos.
Yo lo que quiero saber, es cómo me puede predecir la curva que te predice pero SIN METERLE DATOS EN EL x_test, es decir, quiero saber cómo decirle que me prediga unas fechas, meterle en el x_test unas fechas, no unos valores, yo a la red no le quiero decir absolutamente nada de valores, no quiero que sepa nada de nada porque quiero que me los prediga. Yo quiero entrenarla con valores en unas fechas y después, para PREDECIR, quiero decirle a la red: "Quiero que me predigas desde el 7 de Abril hasta el 20 de Octubre" por ejemplo.
He visto más de 10 veces el vídeo y el minuto 4:00 y lo que te digo es que no le quiero meter valores, no quiero meterle los valores que va a predecir, solo quiero meterle fechas, porque si le meto valores, no sé por qué le influye y cambia mucho mucho. Un ejemplo es, por si no me he explicado:
TRAIN: Del 1/1/2020 al 5/2/2020 me he comido X manzanas cada dia.
Test: ¿Cuántas manzanas me comeré del 6/2/2020 al 9/2/2020?
Muchas gracias por tu atención, espero tu respuesta ya que quiero entenderlo, y , si puedes poner un ejemplo aqui adjunto de lo que yo digo, seria perfecto. Un saludo muy grande.
@@MavsFit Hola de nuevo. Ya te entiendo la pregunta...
Aunque me dejas pensando, pues no creo que lo que buscas hacer sea posible pues el mismo principio de funcionamiento de la red LSTM es precisamente tomar una secuencia de entrada, analizar su patrón de comportamiento, y generar así una secuencia de salida. Si eliminamos la secuencia de entrada no sería posible hacer una predicción.
Pero tu pregunta es muy buena y me deja con curiosidad. Con una red LSTM/recurrente no sería posible, pero déjame investigo si se lograría hacer con otra arquitectura y te cuento.
¡Un saludo!
@@codificandobits Perfecto, espero respuesta o vídeo, gracias!
@@MavsFit Yo no sé si te he entendido. Lo que quieres es predecir 5 días futuros (o los días que sean), pero obviamente no dispones de los datos aún. No puedes entonces ir montando esa ventana móvil de 60 días para predecir hasta el quinto día futuro, porque no tienes el de mañana, ni del de pasado mañana, etc. Si es esto lo que planteas, la solución es conocida y ya la ha planteado codificandobits en otra respuesta a otro suscriptor. Has de adaptar el código para ir tomando como valores reales los que te vaya prediciendo la red. Para la predicción de mañana dispones ya de los 60 datos reales anteriores. Para la predicción de pasado mañana (predicción que también haces hoy) tomas como dato real de mañana la predicción que obtuviste para mañana. Y así sucesivamente para todos los días futuros hasta llegar a la última fecha que quieres predecir.
EXCELENTE VÍDEO, MUY CLARO pero tengo una duda, por que 50 neuronas y no 30 o 60 o 16 u otro valor??
Tienes bibliografia o algún paper donde profundizar en modelos lstm??
Hola Andrés Felipe. Esta es "la pregunta del millón", y en Deep Learning realmente no existe, hasta el momento, un desarrollo teórico que nos permita determinar cuál es el tamaño más adecuado (en términos del número de neuronas y el número de capas). Esto depende mucho de los datos que se estén procesando y del desempeño que vayamos observando en el modelo entrenado.
Un saludo!
@@andresfelipeestradarodrigu301 te sugiero este artículo arxiv.org/pdf/1506.00019.pdf, que aunque es un poco denso y extenso explica en detalle todo lo relacionado con las RNN y las LSTM. Un saludo!
Por que utilizas transform() para la validación y fit_transform() para el entrenamiento? He mostrando los valores puedo ver que al usar fit_transform() sí el rango es de 0-1, pero empleando transform() no es de 0 a 1. Tambien preguntarte por que no hacer en el conjunto de validacion esto:
x_test = sc.transform(set_validacion)
En vez de como está:
x_test = set_validacion.values
x_test = sc.transform(x_test)
Hay alguna diferencia que se me escapa?
Mil gracias por este tutorial Miguel, me ha ayudado mucho, de verdad te lo agradezco.
Respondiendo a mi yo del pasado:
datascience.stackexchange.com/questions/12321/difference-between-fit-and-fit-transform-in-scikit-learn-models
Espero ayudar a alguien más...
Exactamente, gracias por tu contribución. Un saludo!
alguien sabe si funcionaria con PyCharm?
Claro que sí. PyCharm es un entorno para programar en Python y por tanto no debería haber problema. Lo que sí debes tener en cuenta es que en tu instalación de python se encuentren las librerías requeridas para este tutorial
@@codificandobits ese problema hipotético de podría solucionar actualizando a la última versión de Python verdad ?
@@EduardoCollazos15 No. Debes instalar las librerías requeridas (tensorflow, keras y scikit learn). La actualización de Python instalaría la versión más reciente del lenguaje de programación, pero no las librerías.
Yo quería hacer algo asi.. Pero con los juegos de lotería xD
Creo que está comparando los valores reales 60 días desfasados con respecto a las predicciones.
Dentro de la función graficar_predicciones, ¿no tendría más sentido que compare con los valores predichos los elementos del vector real[60:len(prediccion)+60]?
def graficar_predicciones(real, prediccion):
plt.plot(real[60:len(prediccion)+60],color='red', label='Valor real de la acción')
en lugar de:
def graficar_predicciones(real, prediccion):
plt.plot(real[0:len(prediccion)],color='red', label='Valor real de la acción')
Si lo hace verá que al graficar los datos de la predicción son mucho más parejos, el resultado es mucho mejor.
Muy bueno el video y muy sencillo el código
También eh notado ese detalle...
No pude agregar esto al código, muestra error, como puedo escribirlo bien?
pareciera que la prediccion sigue una logica de raiz unitaria, la prediccion es casi igual a un periodo rezagado
No veo como puede servir para predecir más de 1 día adelante
😂😂😂😂😂😂😂. La bolsa no se puede predecir. Tienes que leerte la teoría del caos, la teoría de eficiencia en los mercados, tienes que leer a Jim Rickards, Michael Hudson, Nate Haggens. Por favor no te tires tus análisis. Si eso fuera así, todo el mundo lo haría.