Simulación de datos para generar un conjunto de datos más grande para construir modelosQuerida comunidad JMP,
Estoy intentando encontrar una manera de generar datos simulados para entrenar mejor el modelo que estoy construyendo.
Tengo un conjunto de datos de tamaño decente (unos pocos miles de puntos de datos), pero me gustaría generar datos simulados que mantengan una estructura similar a los datos originales para mejorar el modelo. Me gustaría tener entre 20.000 y 50.000 puntos de datos con una estructura similar para tener un conjunto más grande para entrenar, validar y probar el modelo de predicción.
Solo con fines visuales, los datos se ven así:

Intenté trabajar con la función "Simulador" de la plataforma Profiler, pero los datos que se generan allí no mantienen una estructura (variación) similar a la de los datos originales; se "desvanecen" demasiado con el estándar. desviaciones de las entradas y la respuesta. Cuando intento construir un modelo a partir de este conjunto y compararlo con el modelo original a partir de los datos de origen, el modelo original lo supera porque ese modelo mantiene la estructura de los datos en su predicción. El modelo generado a partir del conjunto de datos simulados no lo hace, ya que esencialmente se pierde toda la estructura.
Además, la función "Simular" (hacer clic derecho en una columna en una ventana de informe) tampoco me lleva a donde quiero.
Investigué un poco lo que la gente ha hecho con JMP y encontré algunas pistas potenciales, sin embargo, hasta ahora ninguna de ellas realmente busca lo que estoy buscando.Si alguien tiene una solución para esto o puede indicarme la dirección correcta sobre cómo codificarlo, se lo agradecería.
Gracias
Re: Simular datos para generar un conjunto de datos más grande para construir modelosHola @Mark_Bailey y @Peter_Bartell ,
Solo para brindar algunos comentarios y continuar la discusión sobre este tema, pude obtener algunos datos de modelo razonables utilizando la plataforma ARIMA. Hace un buen trabajo al recrear un conjunto de datos similar, aunque no es bueno para pronosticar, pero está bien. La aplicación de la fórmula de predicción de este modelo funciona bastante bien con mi conjunto de datos real, por lo que proporciona un camino a seguir potencialmente útil.
No estoy convencido de que, en última instancia, así sea como deseo proceder, por lo que quiero compararlo con las otras opciones de simulación dentro de JMP. Sé que la simulación estocástica del generador de perfiles no ayuda por razones que hemos comentado antes. Además, no es el mejor enfoque para ajustar el modelo para mejorar su ajuste, lo cual me gustaría hacer.
Para mi modelado específico, estoy usando un modelo de bosque de arranque y me gustaría mejorarlo ajustando el modelo. Lo he hecho en parte con una mesa de afinación. Sin embargo, existen algunas limitaciones a este respecto, particularmente con la cantidad de ejecuciones que puedo permitirme (en cuanto a memoria) en la tabla de ajuste. Normalmente ejecuto mi modelado con tantas ejecuciones en mi tabla de sintonización como puedo permitirme. Esto reduce la cantidad de árboles en el bosque, la cantidad de términos muestreados por división, muestras de arranque, divisiones mínimas por árbol y división de tamaño mínimo. Esto podría ayudar a optimizar los parámetros de la plataforma del modelo para encontrar una solución, pero no significa necesariamente un modelo optimizado según los datos que tengo.
Cuando construyo el modelo, creo una columna de validación que divido en un conjunto de entrenamiento y prueba, estratificado por mi columna de respuesta. Luego construyo el modelo solo con los datos de entrenamiento y retengo un cierto porcentaje para la validación del modelo. El resultado del modelo depende de la columna de validación que elija (he creado varias). A continuación se ve un resultado típico (lo siento, no puedo compartir cuál es la información para las columnas de respuesta o factor). Los detalles de las especificaciones del bosque boostrap cambian dependiendo de cómo se estratificaron los datos originales de capacitación y validación.

Lo que me interesa hacer ahora es ajustar el modelo para lograr un mejor ajuste, posiblemente utilizando la opción de simulación para una estadística del modelo. Podría hacer esto cambiando la N para los conjuntos de entrenamiento y validación, o por RMSE de los árboles individuales, etc. Sé que no podré usar este enfoque para cambiar las especificaciones del bosque de arranque (la tabla de ajuste hace eso), pero me gustaría usarlo de tal manera que pueda ajustar el modelo, por ejemplo, el número de muestras utilizadas para el entrenamiento y la validación, o el número de divisiones, para maximizar r^2.
Para resumir: me gustaría utilizar un método de simulación para ayudar a entrenar los datos. Sé que la plataforma de simulación del generador de perfiles no funciona, lo que me deja con ARIMA (posible) o la opción de simulación de arranque para una estadística de modelo. No estoy seguro de cuál es la mejor manera de utilizar este último método de simulación para ajustar el modelo.
Se agradecería cualquier idea o comentario que pueda tener sobre el ajuste de modelos mediante simulaciones.
¡Gracias de antemano por tu tiempo!
Re: Simular datos para generar un conjunto de datos más grande para construir modelosHola @GM ,
Gracias por el aporte y sugerencia. Tiene razón sobre el objetivo previsto y la descripción de los datos multivariados. El orden en que se generan los datos no parece ser un buen predictor. Hay otras propiedades que se miden y que, cuando se usan en conjunto, proporcionan una predicción razonable de la "y" que quiero modelar/predecir. La dificultad surge cuando se intenta entrenar el modelo para que se ajuste mejor. Me gustaría hacer esto simulando datos, pero esto está resultando más desafiante de lo que anticipé.
El enfoque MVN ciertamente hace un mejor trabajo al preservar algunas de las correlaciones multivariadas de los datos que la opción de simulación en el generador de perfiles. Esa opción simplemente hace un promedio con una desviación estándar determinada.
Desafortunadamente, cuando intento construir un modelo usando el script MVN y los datos generados, funciona mucho peor que un modelo similar creado solo a partir de los datos originales.
Hasta ahora, encuentro que el modelo ARIMA hace un mejor trabajo al capturar las oscilaciones a corto plazo en los datos, así como parte de la estructura de largo plazo. También hace un mal trabajo al predecir el pronóstico de los datos, pero lo que estoy pensando es usarlo para generar nuevos datos que se agregan a los datos originales para construir un conjunto de datos más grande y luego entrenar un modelo con ese conjunto de datos más grande.
Lo que creo que intentaré ahora es "Guardar columnas" del informe ARIMA, extraer los valores previstos y luego concatenarlos con la tabla de datos original. Luego, me gustaría aleatorizar las filas en la nueva tabla de datos y crear un modelo con ese conjunto de datos más grande. Supongo que otra opción podría ser generar múltiples columnas de validación, ejecutar el mismo modelo con diferentes filas de validación cruzada y promediar los modelos resultantes.
Agradezco todas las contribuciones a esta discusión. Aunque todavía no he encontrado una solución adecuada, estoy aprendiendo mucho y se me ocurren algunas ideas nuevas para probar.
¡Gracias!
Re: Simular datos para generar un conjunto de datos más grande para construir modelosSegún la discusión, parece que tiene una variable de resultado que desea modelar con otras variables predictoras, donde el tiempo o el orden en el que se generan los datos no es una variable predictiva.Es posible que desee simular su matriz NxP (N = filas, P = variables (y y x)) utilizando una distribución normal multivariada.Este enlace proporciona JSL para simular distribuciones normales multivariadas. http://www.jmp.com/support/notes/36/140.html Debe modificarlo en función de su matriz de covarianza estimada, pero debería funcionar si sus datos siguen una distribución normal multivariada.
Re: Simular datos para generar un conjunto de datos más grande para construir modelosHola @Mark_Bailey ,
Definitivamente puede haber algunas deficiencias en los predictores adecuados. Sin embargo, según los otros análisis que hemos realizado, el conjunto que tenemos definitivamente parece ser más adecuado que muchos de los otros que hemos analizado.
En cuanto a la complejidad y la validación cruzada, definitivamente lo tengo en cuenta. Genero una columna de entrenamiento/validación/prueba para ayudar con el riesgo de sobreajuste. El modelado de bosque bootstrap genera una fórmula de predicción de árbol de decisión bastante compleja que es mucho más extensa que, por ejemplo, los modelos de regresión generalizada o el modelado de redes neuronales. También funciona mejor al comparar los modelos entre sí. Por lo general, encuentro que después de ejecutar la plataforma forestal de arranque con una matriz de ajuste, hay del orden de más de 60 árboles, con ~4 términos muestreados por división. El número de divisiones por término puede variar, pero suele oscilar entre 1.000 y 3.000.
Re: Simular datos para generar un conjunto de datos más grande para construir modelosEn primer lugar, ARIMA y otros modelos de series temporales suponen perturbaciones a corto plazo y algunas tendencias periódicas, por lo que no son buenos para predicciones a largo plazo.
El problema de la "falta de ajuste" de sus modelos actuales (la predicción carece de las desviaciones extremas de la respuesta observada) podría no verse ayudado por más datos. Es posible que le falten suficientes predictores. Una dirección para reducir el sesgo es incluir más términos en la expansión básica utilizando el conjunto de características actual. Mencionas varias técnicas de modelado pero no dices nada sobre la complejidad de estos modelos que exploraste. Una mayor complejidad, abordando el riesgo de sobreajuste mediante validación cruzada, podría resolver el problema del sesgo. La otra dirección para reducir el sesgo es buscar características faltantes que finalmente expliquen las desviaciones de la respuesta observada.
Re: Simular datos para generar un conjunto de datos más grande para construir modelosHola @Mark_Bailey ,
En última instancia, me gustaría construir un modelo sólido que prediga valores futuros dados los factores entrantes. He investigado ARIMA y FDE. Estoy de acuerdo en que el FDE probablemente no sea un enfoque adecuado. Sin embargo, creo que el modelado ARIMA podría proporcionar una vía para generar nuevos datos para entrenar el modelo.
Varios factores se miden más o menos en paralelo con la respuesta. Todas las mediciones consumen material de origen, pero hay una gran cantidad que se muestrea para poder realizar las otras mediciones.Hemos identificado un conjunto de factores que tienen la mayor capacidad predictiva. He utilizado esos factores y la respuesta para verificar varios modelos diferentes utilizando métodos de regresión generalizada, árbol potenciado, bosque boostrap, redes neuronales y otros métodos de partición. Al comparar los modelos, encuentro que el bosque de arranque constantemente da mejores resultados de modelado que los demás. Puedo mejorar este modelo un poco más si me detengo a realizar pruebas y también ejecuto el modelo con una tabla de ajuste para optimizar los parámetros de ajuste.
Sin embargo, lo que todavía encuentro es que el modelo realmente no captura los altibajos de los datos tanto como creemos que debería (o podría). Capta algo de la estructura, pero no es tan bueno para captar esos altibajos. Por lo tanto, me gustaría simular un conjunto de datos más grande que incluya más de esos eventos para construir un mejor modelo. Y dado que se necesita mucho tiempo para construir un conjunto de datos de valores reales, sería útil la simulación de datos para entrenar un modelo.
Creo que la plataforma ARIMA puede ser de ayuda en este sentido. Lo probé para generar valores previstos de los factores y la respuesta. Esto genera un nuevo conjunto de valores para los factores y respuestas que imitan los datos reales. Luego puedo concatenar los datos reales y simulados en una nueva tabla de datos para generar un nuevo conjunto de datos que sea el doble de grande.
Desafortunadamente, el modelado ARIMA no hace un buen trabajo al predecir muchos valores nuevos para los factores o la respuesta, por lo que realmente no puedo usarlo para generar períodos de pronóstico. Aún así, creo que este enfoque alternativo para construir un conjunto de datos simulados podría resultar útil.
Re: Simular datos para generar un conjunto de datos más grande para construir modelosNo está claro que la simulación de más datos ayude. Si puedes simular los datos, entonces tienes el modelo de los datos. La "estructura" es un cambio en la población (no reproducido por la simulación de Monte Carlo con una media constante).
¿Está midiendo simultáneamente los candidatos a variables predictivas (factores) con esta respuesta? ¿Ha explorado correlaciones, asociaciones y posibles modelos?
Re: Simular datos para generar un conjunto de datos más grande para construir modelosHola @Peter_Bartell y @Mark_Bailey ,
Realmente aprecio la discusión sobre este asunto, ya que me está dando algunas ideas sobre cómo mejorar mi análisis.
Los datos provienen de un proceso, pero no están en tiempo real. Se recopilan en una base de datos a la que luego se accede. No puedo garantizar que cada punto sea verdaderamente secuencial después del anterior. Hay un intervalo de tiempo típico entre puntos, pero si hay una pausa en el proceso, que puede ser de horas o días, la base de datos simplemente continúa donde lo dejó. Por lo tanto, no se trata estrictamente de una serie temporal. Sin embargo, en la práctica, si el modelo ARIMA puede duplicar una respuesta similar a la de los datos reales, esto debería ser suficiente (creo).
Los datos provienen de la misma fuente. Se extraen muestras del proceso y se les realiza una medición.
Todavía no he intentado estimar la autocorrelación. La simulación de Monte Carlo podría ser un camino a seguir para generar datos de entrada/salida que imiten los datos reales. No sabía que JMP podía hacer simulaciones de MC. Lo he hecho antes con otros problemas, pero sin usar JMP. Estas son cosas que tendré que investigar.
El objetivo es desarrollar un modelo que pueda predecir bien la respuesta. Con eso, podríamos monitorear solo los factores (más fácil). Si el modelo predice una advertencia, entonces se pueden realizar esfuerzos más desafiantes.
Sigo pensando que valdría la pena leer sobre FDE y ARIMA, podría generar algunas ideas. Espero que mis explicaciones un tanto vagas tengan sentido. Gracias por comprender las inquietudes sobre la divulgación.
Gracias
Re: Simular datos para generar un conjunto de datos más grande para construir modelosestoy de acuerdo con @Mark_Bailey último párrafo anterior... y como dije en una publicación anterior... por lo que ha compartido hasta ahora... dudo que FDE o el análisis de series de tiempo sea el enfoque más apropiado para sus objetivos.
Re: Simular datos para generar un conjunto de datos más grande para construir modelos¿Entonces los datos no se trazan en orden temporal? ¿No son de la misma fuente (fuente única)?
Cuando dice que cada medición es independiente, ¿ha estimado la autocorrelación, aunque sea solo para un retraso de 1? Si bien "independiente" podría significar que los datos se recopilaron por separado, me refiero a independencia estadística o falta de correlación.
Los datos simulados son los que esperaría. Hay una única población con media y varianza estables. La simulación de Monte Carlo incluye perturbaciones aleatorias tanto de los factores como de la respuesta.
La "estructura" que ve en sus datos pero no en la simulación es el resultado de otras "causas asignables". Las causas pueden ocurrir aleatoriamente en el tiempo y en la magnitud. La simulación debe incluir su contribución. ¿Sabes lo que son? ¿Cómo ocurren? ¿Cómo modelarlos?
Entiendo que no puede revelar la verdadera naturaleza y el detalle de las mediciones, pero tal vez podría utilizar una analogía para darnos una idea de los datos y de lo que está haciendo. Por ejemplo, tal vez estés midiendo la presión en tres tubos de torpedos dentro de un submarino nuclear de vez en cuando...
Suponiendo que podamos ayudarle a simular los datos reales, ¿qué tipo de análisis o modelado planea utilizar con ellos?
Peter es muy útil, pero a medida que aprendemos más sobre su problema, dudo que esas sugerencias ayuden. El análisis de datos funcionales es para funciones, perfiles o curvas. Imagine una muestra de cientos de series de datos y desea modelar la forma y cómo la forma se ve influenciada por factores o cómo la forma predice los resultados. Aparentemente tiene una única serie de datos que desea ampliar. La FDA no hace predicciones más allá del dominio original. El modelo ARIMA supone puntos igualmente espaciados. Puede modelar la autocorrelación, las perturbaciones y la estacionalidad para predecir con antelación pero no muy lejos. Por otro lado, es posible una simulación Monte Carlo basada en el modelo ARIMA.
Re: Simular datos para generar un conjunto de datos más grande para construir modelos@SDF1 : Su frase 'estructura de largo alcance' puede tener muchos sabores, matices y cuestiones adjuntas. Por ejemplo, la estacionalidad puede ser una forma de estructura. Los métodos de series de tiempo ARIMA son MUY adecuados para modelar efectos de estacionalidad y tendencias a largo plazo o movimientos cíclicos en un proceso. Consulte la tabla de datos clásica seriesg.jmp en el Directorio de datos de muestra de JMP.
Mi sugerencia para empezar es leer sobre las capacidades de JMP/JMP Pro en la documentación de JMP. Aquí hay un enlace para FDE:
https://www.jmp.com/support/help/14/functional-data-explorer.shtml
Y aquí hay un enlace para el análisis de series de tiempo:
https://www.jmp.com/support/help/14/time-series-analysis.shtml
Re: Simular datos para generar un conjunto de datos más grande para construir modelosHola Pedro,
¿Alguna de esas plataformas permite mantener la estructura de largo alcance? Seguiré leyendo sobre ellos, podría darme algunas ideas sobre cómo codificar para mi propia solución.
¡Gracias!
Re: Simular datos para generar un conjunto de datos más grande para construir modelosDado que las observaciones no son una serie de tiempo, retiro mis recomendaciones anteriores sobre Functional Data Explorer o el análisis de series de tiempo. Ambas técnicas suponen cierta estructura A TRAVÉS del tiempo entre las observaciones... y dado que estas observaciones son independientes entre sí... no se recomienda utilizar FDE o series de tiempo.
Re: Simular datos para generar un conjunto de datos más grande para construir modelosHola, Mark,
Los datos no dependen del tiempo. Cada medición es independiente de la anterior, pero por lo general los datos se recogen uno tras otro. Podrían considerarse una serie temporal, pero no estrictamente hablando, ya que técnicamente podrían no ser secuenciales. Sin embargo, lo más importante es que cada medición es una medición independiente de una respuesta.
Con suerte, la siguiente imagen explicará lo que quiero decir con que los datos simulados pierdan cualquier estructura:

Lo generé abriendo el simulador en Profiler, dándole a cada predictor (tengo varios) una distribución normal con una SD realista (derivada de los datos reales) y generando una tabla con 50.000 respuestas. Aunque el promedio, los máximos y los mínimos pueden aproximarse a lo que parecen los datos originales, la otra estructura se pierde. Este nuevo conjunto de datos no contiene el mismo tipo de estructura de "largo alcance" que el original, y es esta estructura la que es igualmente importante capturar en un conjunto de datos simulados como lo son los valores reales de los datos. No es necesario que coincida exactamente, pero al menos tenga una estructura similar (consulte la publicación original para comparar).
Estoy de acuerdo en que las dos opciones del simulador integradas en JMP no son apropiadas. ¿Alguna sugerencia sobre un tema específico para leer sobre la fórmula de la columna o escribir un guión? No estoy familiarizado con ninguna de las fórmulas integradas que podrían solucionar esto por mí. Estoy de acuerdo con la creación de secuencias de comandos de este tipo, pero necesitaría saber por dónde empezar. Todavía necesito analizar la otra sugerencia de Peter Bartell sobre el explorador de datos funcionales y el modelado ARIMA para ver si podrían manejarlo.
¡Gracias!
Re: Simular datos para generar un conjunto de datos más grande para construir modelos¿Entonces la respuesta es una señal dependiente del tiempo? ¿Existen predictores o lo importante es la autocorrelación?
Que quieres decir con " Desafortunadamente, cuando intento utilizar la función de simulación del Profiler y generar conjuntos de datos más grandes, los nuevos datos de salida no muestran ninguna estructura relacionada con los datos originales. " ¿Cuál es la naturaleza de la estructura deseada?
¿En qué se diferencian los datos de una serie de tiempo?
No creo que el simulador de Prolfier o la función de plataforma JMP Pro Simulate satisfagan sus necesidades. Una fórmula de columna o un guión probablemente será el enfoque más satisfactorio.
No puedes revelar algunos detalles (entendido), así que tenemos que jugar a "¡veinte preguntas!"
Re: Simular datos para generar un conjunto de datos más grande para construir modelosHola, Mark,
Gracias por tus comentarios.
Los datos generados son muy lentos, lo que significa que lleva mucho tiempo obtener los datos originales, días y semanas. Por lo tanto, no es factible construir un conjunto de datos de 50K de tamaño. Estoy usando algunas de las funciones de modelado Pro (ejecutando Pro 14.1.0) para intentar generar un modelo que no solo prediga bien los datos, sino que también capture la estructura dentro de los datos. Tener un conjunto de datos más grande que imite la estructura original sería muy útil para mejorar el modelo. Aumentar el tamaño de la muestra (incluido más entrenamiento, validación y tamaño de prueba) y capturar la estructura de los datos ayudaría a entrenar un mejor modelo, al menos eso creo.
No es estrictamente una serie temporal, aunque se podría ver así. Los eventos de datos no están necesariamente vinculados entre sí en el tiempo. Otro cartel sugirió un análisis de series temporales, que analizaré.
Desafortunadamente, cuando intento utilizar la función de simulación del Profiler y generar conjuntos de datos más grandes, los nuevos datos de salida no muestran ninguna estructura relacionada con los datos originales. Puedo construir un nuevo modelo que se ajuste muy bien, pero cuando comparo el nuevo modelo con el modelo original (construido sobre los datos originales), usando los datos originales, el nuevo modelo no se ajusta tan bien.
Lo siento, no puedo ser más específico, pero no puedo discutir los detalles de los datos. Espero que mis comentarios tengan sentido con los puntos que mencionaste.
¡Gracias!
Por lo que quiero hacer, la función de simulación en Profiler parece el camino correcto a seguir, pero no me brinda lo que estoy tratando de obtener. La simulación Platorm definitivamente no es el camino correcto a seguir, o al menos puedo ver cómo ajustarla para darme lo que busco.
Re: Simular datos para generar un conjunto de datos más grande para construir modelosHola Pedro,
Gracias por los comentarios. Olvidé agregar en la publicación original que estoy ejecutando JMP Pro 14.1.0.
Puede que tenga que esperar hasta el lanzamiento de la próxima actualización, pero al menos puedo leer un poco y hacer un seguimiento.
¡Gracias!
Re: Simular datos para generar un conjunto de datos más grande para construir modelosEn primer lugar, ¿cómo utilizarías los datos simulados para mejorar el modelo? ¿Se trata de tener datos suficientes para demostrar la viabilidad de un enfoque de modelado particular? ¿Evaluar el tamaño de la muestra podría ser suficiente para un modelo en particular? ¿Es sólo cuestión de aumentar el tamaño de la muestra?
En segundo lugar, parece que tienes una única serie temporal. ¿Es correcta esa interpretación?
En tercer lugar, la función de simulación del Profiler está destinada a funcionar con un modelo ajustado o guardado. Puede describir la variación en los predictores y en las respuestas en términos de modelos de distribución paramétricos. No sé si ese mecanismo funciona con modelos de series temporales. (Otros expertos pueden intervenir aquí).
La simulación de la plataforma tiene como objetivo volver a muestrear datos basándose en un modelo guardado con un componente estocástico para generar la distribución de muestreo empírica de la estadística elegida en una plataforma.
Creo que puedo conseguir un programa SAS para simular datos de series temporales que podrían adaptarse a una fórmula o script de columna JMP. (Sin promesas.)
¿Estoy en el camino correcto?
Re: Simular datos para generar un conjunto de datos más grande para construir modelosSi tiene JMP Pro versión 14.2, su problema parece una aplicación perfecta para Functional Data Explorer. ¿Otra opción podría ser el enfoque de modelado de series de tiempo utilizando algún tipo de construcción ARIMA, tal vez? No es necesario JMP Pro para el enfoque de series temporales.