Hola a todos. Gracias por acompañarme hoy. Hoy daré una charla sobre este proyecto en el que trabajé. El título de la charla es "Del desarrollo a las pruebas: Un recorrido de creación y validación de un complemento JMP".
Un poco sobre mí. Primero, me presentaré. Soy estudiante de posgrado y actualmente curso un doctorado en Ciencias Matemáticas en la Universidad de Clemson, EE. UU. Mis intereses de investigación se centran principalmente en el Diseño Experimental y el Aprendizaje Preferencial. He estado realizando prácticas en el equipo de DOE y Fiabilidad de JMP desde el verano de 2024. Durante mi estancia allí, he trabajado en proyectos relacionados con la experimentación de elección discreta y las pruebas de software. Dos campos muy diferentes. Ya basta de hablar de mí.
Les daré un resumen de la charla de hoy. Primero, en la primera sección, hablaré sobre la motivación para crear este complemento que desarrollamos durante el verano. Esto se debe a que estábamos realizando estudios de usabilidad para el programa Easy DOE de JMP, y buscamos conocer las preferencias de interfaz de usuario de diferentes grupos demográficos. Después de explicar la motivación para crear este complemento, hablaré sobre él y haré una demostración. Finalmente, hablaré brevemente sobre las pruebas del complemento mediante el marco de pruebas unitarias JSL para validar la aplicación o el complemento que creamos.
Aquí está la primera sección. La motivación para crear nuestro complemento. Como algunos ya saben, existe un programa dentro de JMP llamado Easy DOE. Este programa se utiliza para ayudar a las personas a través de todo el proceso de diseño y análisis de un experimento. Este flujo de trabajo de Easy DOE tiene un par de componentes diferentes. El experimentador comienza definiendo los factores y las respuestas que le interesan. Después, selecciona el modelo que desea usar para analizar los datos que recopilará. Tras seleccionar un modelo, diseña un experimento para él.
Una vez diseñado el experimento, pueden ejecutarlo e ingresar los datos recopilados en la pestaña Entrada de Datos. Una vez recopilados, pueden analizar el modelo y ajustarlo. Finalmente, pueden usar ese modelo para realizar predicciones y seleccionar la configuración óptima de factores, si así lo desean. Finalmente, pueden ver un informe resumido del modelo.
Un aspecto en particular que nos interesará hoy es la pestaña "Analizar". Como ya saben algunos de ustedes que han usado Easy DOE, la pestaña "Analizar" se ve así, como se muestra en la Figura 2. Durante el verano, nos interesó ver qué cambios se podían realizar en ciertas partes de la pestaña "Analizar" para que fuera más fácil de usar para los experimentadores y usuarios que usaban Easy DOE. Finalmente, propusimos un par de versiones diferentes de la interfaz de usuario que los usuarios podrían ver, y queríamos saber cuál de estas versiones era la preferida.
Este diseño de interfaz de usuario, tal como lo diseñamos, tenía una estructura factorial. La parte que nos interesaba era la ayuda al pasar el cursor. Esta ayuda al pasar el cursor presenta un par de mensajes que informan al usuario sobre algunas propiedades estadísticas de su modelo. Algunos de estos mensajes en la configuración de la ayuda al pasar el cursor incluyen el Mensaje Introducido, que indica si se introdujo un término en el modelo. Teníamos dos versiones para esto: el Mensaje de Significancia, que indicaba si el término era significativo o no, y el Mensaje de Herencia, que indicaba por qué se incluyó un término en el modelo, aunque fuera insignificante.
A menudo, existe una propiedad llamada herencia, según la cual, si un término de interacción es significativo, pero el efecto principal no lo es, lo incluiremos de todos modos. Finalmente, un último factor de esta configuración de ayuda al pasar el cursor fue la ubicación de esta. ¿Está contenida en un intervalo de confianza o en la columna de vista previa?
Queríamos saber cuál de estas configuraciones prefería más a los usuarios. Como decía, vieron que teníamos cuatro factores. Dos o tres de ellos tenían dos niveles, y uno de ellos tenía tres. Por lo tanto, existía la posibilidad de que existieran 24 versiones diferentes de la interfaz de usuario para la configuración de ayuda al pasar el mouse.
Además, en Easy DOE, los usuarios suelen ser nuevos o tener poca experiencia en diseño de experimentos. Sin embargo, a veces también contamos con personas con experiencia en diseño de experimentos que utilizan Easy Doe, ya sea para uso personal o para enseñar a otros. Existen diferentes grupos demográficos que utilizan Easy Doe. Queríamos saber qué configuración de ayuda al pasar el cursor prefiere cada grupo demográfico para poder adaptar el diseño de la ayuda al pasar el cursor a cada uno.
Queríamos abordar este problema mediante el marco de la experimentación contextual de elección discreta. Explicaré brevemente en qué consiste este marco. Primero, hablaré del proceso de recopilación de datos. En la experimentación contextual de elección discreta, se cuenta con un grupo de participantes y se cuenta con información de covarianza de estos participantes. Por ejemplo, la llamamos información de covarianza o información contextual. A menudo, podría ser información demográfica de los usuarios.
En este marco, sometemos a los participantes a un cuestionario. En cada pregunta, se les pide que comparen dos o más diseños alternativos y elijan el que prefieran. El proceso de recopilación de datos es bastante intuitivo y refleja cómo las personas eligen opciones en la vida real.
Ahora hablaré brevemente sobre el modelado y el análisis para la experimentación contextual de elección discreta. Una vez recopilados los datos, se puede ajustar un modelo de utilidad que incluya no solo los factores del objeto de estudio (en nuestro caso, la configuración de la ayuda al pasar el cursor), sino también información contextual de los participantes. Al combinar estos dos factores, se puede obtener una idea de las preferencias de las diferentes configuraciones de la ayuda al pasar el cursor para distintos usuarios de distintos grupos demográficos. Finalmente, una vez ajustado este modelo de utilidad, se puede utilizar para determinar cuáles de los diseños de la ayuda al pasar el cursor son los más preferidos para cada grupo demográfico.
Un componente importante de la experimentación contextual de elección discreta es el diseño de estos experimentos. ¿Cómo seleccionamos las preguntas que se presentarán a los participantes? Si está familiarizado con la experimentación convencional de elección discreta, para lograr un buen diseño, a menudo necesita información previa sobre las preferencias del usuario.
Para lograrlo en la experimentación contextual de elección discreta, primero realizamos un estudio de selección. En este estudio, se parte de un número determinado de participantes, se obtiene su información contextual o demográfica y se les somete a un cuestionario para recopilar sus preferencias. A partir de este estudio, se ajusta un modelo que caracteriza las preferencias del usuario. Este modelo permite comprender las preferencias de diferentes grupos demográficos.
Por lo tanto, podemos usar este modelo para crear priores bayesianos que permitan crear diseños bayesianos D-Óptimos para el cuestionario. Esto nos permite crear cuestionarios dirigidos a cada grupo demográfico, de modo que podamos obtener más información estadística de forma más eficiente. Esta es la metodología que buscamos… cómo abordamos este problema. Queríamos crear cuestionarios estadísticamente muy eficientes para nuestros participantes, de modo que pudiéramos recopilar información de forma más eficiente y conocer las preferencias de los diferentes grupos demográficos.
Hablaré brevemente sobre la creación de este complemento. Para quienes no lo sepan, JSL es el lenguaje de scripting de JMP. Permite a los usuarios ampliar la funcionalidad de JMP, permitiéndoles realizar numerosas tareas, como ejecutar análisis rutinarios multipaso o ajustar un modelo específico a los datos generados a diario. JSL realmente permite a los usuarios ampliar la funcionalidad de JMP. Un complemento de JMP es un script JSL que amplía la funcionalidad de JMP y que otros usuarios pueden descargar y usar.
¿Por qué creamos un complemento JMP para nuestro problema específico? En primer lugar, realizábamos varios estudios de usabilidad. El mismo estudio, el de la ayuda al pasar el cursor, lo realizábamos en diferentes momentos. Recopilábamos cada vez más datos con el tiempo y los utilizábamos para perfeccionar los diseños experimentales o los cuestionarios que enviábamos. También realizábamos diferentes estudios de usabilidad, por ejemplo, sobre la posibilidad de cambiar diferentes factores de la interfaz de usuario. Por ejemplo, uno de los estudios de usabilidad se centró en la paleta de colores y la ubicación de los mensajes de notificación en la pestaña Analizar.
Otra razón para crear este complemento fue que la creación de estos experimentos contextuales de elección discreta podía ser tediosa, ya que a menudo requería calcular las medias previas y las matrices de covarianza para crear los diseños bayesianos D-Óptimos para cada grupo. Descubrimos que esto podía automatizarse mediante scripts JSL.
Finalmente, este marco de experimentación de elección discreta contextual se puede utilizar para una amplia gama de tareas de elección. No se limita a estudios de usabilidad, sino a cualquier tipo de estudio donde se requiera que los usuarios expresen sus preferencias entre múltiples opciones. Queríamos crear este complemento no solo para ayudarnos a nosotros mismos, sino también para que otras personas pudieran usarlo para resolver sus problemas.
Hablaré brevemente sobre el flujo de trabajo de nuestro complemento contextual de elección discreta. En primer lugar, el usuario o experimentador debe recopilar datos de un estudio de cribado. Este estudio debe incluir información como: ¿qué preguntas se les hicieron a los participantes? ¿Cuáles fueron los atributos? Los atributos del perfil. Los factores del objeto de estudio, así como las covariables del sujeto.
Una vez que se tienen estos datos, se ajusta un modelo de cribado a ellos. En este modelo, el experimentador debe especificar tanto los efectos del perfil (en nuestro caso, se trataba de la configuración de ayuda al pasar el mouse sobre el objeto) como los efectos del sujeto. Esto permite al experimentador crear un modelo de utilidad. Este modelo de utilidad se estima posteriormente utilizando la Plataforma de Análisis de Elecciones de JMP.
Una vez hecho esto, el usuario selecciona un grupo demográfico para un estudio más profundo. Para ello, selecciona los niveles de los efectos o factores contextuales de cada sujeto. La combinación de estos niveles define un grupo para el estudio posterior. Una vez seleccionado, se construye un diseño o cuestionario D-Óptimo Bayesiano para dicho grupo, de modo que el experimentador pueda estudiarlo con mayor profundidad de forma estadísticamente eficiente.
Ahora, haré una demostración del complemento contextual de experimentos de elección discreta. Abriré JMP y accederé a "Complementos". Seleccionaré la tabla de datos. Esta tabla contiene información... Les mostraré brevemente cómo se ve. Contiene información sobre estudios de usabilidad previos realizados para la ayuda al pasar el cursor. Pueden ver información como: ¿qué opción eligió el usuario? ¿Qué opciones se presentaron? También tenemos información contextual sobre el usuario, como su nivel de experiencia en el diseño de experimentos y el motivo por el que usa Easy DOE. ¿Es para uso personal o para enseñar a otros?
Dentro de esto... Voy a abrirlo aquí. Primero, introduciremos el indicador de respuesta, que es la elección del usuario, y también configuraremos el ID del conjunto de elecciones y los ID del sujeto. Luego, podemos introducir los efectos del perfil, que en nuestra configuración eran esos tres mensajes en la ubicación de la ayuda al pasar el mouse. Si quisiéramos, podríamos añadir efectos de interacción. Pero por ahora, lo mantendré como modelo de efectos principal. También podemos añadir efectos del sujeto, como el nivel de experiencia y si los usuarios enseñan a otros o usan Easy DOE para uso personal.
Como pueden ver, gran parte de la información aquí se asemeja a la configuración de la Plataforma de Análisis de Elecciones. Al pulsar "Ejecutar", se inicia la Plataforma de Análisis de Elecciones y analiza el modelo de cribado para el estudio. Podemos interactuar con ella igual que con la Plataforma de Análisis de Elecciones. Por ejemplo, podemos abrir un perfilador de utilidades y, por ejemplo, ver que los usuarios experimentados que enseñan a otros prefieren una opción específica para el mensaje de herencia, que es esta segunda alternativa.
Una vez que veamos eso, podemos abrir este componente que nos pide seleccionar un grupo demográfico para un estudio más profundo. Supongamos que estoy realizando estos estudios y quiero estudiar a los usuarios expertos de Easy DOE, es decir, aquellos con experiencia en diseño de experimentos, y me interesa saber cuándo enseñan a otros. Quiero crear un cuestionario para conocer las preferencias de los usuarios expertos que enseñan a otros. Hago clic en "Crear Diseño" y se abre la plataforma "Diseño de Elección", de modo que la información que ya ingresamos en la etapa de Análisis de Elección o en la etapa de Estudio de Cribado se incorpora automáticamente a la plataforma.
Contamos con nuestros atributos, nuestro modelo para este grupo en particular, que fue un modelo de efectos principales que especificamos. Lo más importante es que, al usar el modelo del estudio de cribado, pudimos calcular valores a priori bayesianos para la media y la varianza a priori del grupo que nos interesaba estudiar.
Una vez creado este previo, podemos crear un Diseño Bayesiano D-Óptimo haciendo clic en "Crear Diseño". De esta manera, obtenemos un diseño adaptado al grupo específico que estamos estudiando. La construcción de este diseño se basó en la información previa que teníamos sobre las preferencias de este grupo. Ahora, este diseño está adaptado al grupo que queremos estudiar más a fondo. Esta es mi demostración del complemento de experimentación de elección discreta contextual. Finalizaré algunos de estos ejemplos y volveré a nuestras diapositivas.
Continuando, lo último que abordaré es probar el complemento mediante el marco de pruebas unitarias JSL. Para quienes no lo sepan, ¿qué son las pruebas unitarias? Las pruebas unitarias consisten en probar componentes individuales de una aplicación de software para identificar errores. En particular, las pruebas unitarias automatizadas permiten ejecutarlas con frecuencia en una aplicación de software para identificar y corregir errores nuevos durante el proceso de desarrollo.
En particular, JMP cuenta con un marco de pruebas unitarias llamado marco de pruebas unitarias JSL, diseñado específicamente para aplicaciones JSL. Su función más importante es la función ut assert, que permite a los usuarios probar ciertos componentes de la aplicación JSL. El usuario obtiene el resultado que considera correcto, que debería ser el correcto, y se denomina valor esperado. Lo compara con el resultado real de su aplicación. Si coincide, significa que el caso de prueba se ha superado; si no, significa que ha fallado. Al escribir un script con estas funciones ut assert y ejecutarlo, se genera un informe que informa al usuario si todos los casos de prueba se han superado o cuáles han fallado, para que se puedan investigar más a fondo.
Probamos varias cosas dentro del complemento de experimentación de elección discreta contextual. Por ejemplo, una de ellas fue nuestro botón de cruz para añadir efectos de interacción. ¿Funcionaba correctamente? Teníamos la idea de que si elegimos dos opciones y pulsamos el botón de cruz, sabemos cómo debería verse y, por lo tanto, podemos compararlo con el resultado real para asegurarnos de que el sistema funciona correctamente.
Otro aspecto importante que probamos fue que, al seleccionar un grupo demográfico para un estudio posterior, queríamos asegurarnos de que apareciera un mensaje si el experimentador dejaba una opción en blanco. Hicimos pruebas y nos aseguramos de que este mensaje de error apareciera correctamente.
Por último, esto es importante. Queríamos asegurarnos de que la información previa que cargábamos en el diseñador de opciones fuera correcta. La probamos. La comparamos con los resultados de la plataforma de Análisis de Opciones. Si coincidían, sabíamos que estábamos introduciendo correctamente esta información previa en el Diseñador de Opciones; si había alguna discrepancia, sabíamos que algo iba mal. Afortunadamente, descubrimos que estábamos cargando correctamente la información previa.
Ahora bien, uno de los aspectos más importantes de estas pruebas unitarias automatizadas es la refactorización del código. Las pruebas unitarias automatizadas permiten refactorizar el código y comprobar si se han introducido errores. Con refactorizar código, me refiero a realizar cambios en el código durante el proceso de desarrollo. Si se realiza un cambio en el código, ¿cómo se sabe si se ha producido algún error no relacionado con el cambio?
Un ejemplo que encontramos fue que uno de los usuarios de prueba de este complemento descubrió que, cuando uno de los factores contextuales tenía una etiqueta de valor, la lista de ese factor contextual no se mostraba correctamente. De hecho, no se mostraba en absoluto.
Regresamos y corregimos ese error. Pero queríamos asegurarnos de que, al corregirlo de la forma en que lo hicimos, no se produjeran otros problemas. Podíamos hacerlo. Lo comprobamos volviendo a ejecutar nuestro script de pruebas unitarias. Afortunadamente, después de ejecutarlo, vimos que no se introdujeron nuevos errores, lo que nos ayudó a asegurarnos de no causar problemas adicionales. Nuestra solución propuesta para el problema de la etiqueta de valor lo solucionó correctamente, como se puede ver en la parte derecha de esta imagen.
Estas pruebas unitarias son importantes porque, en primer lugar, permiten saber si hay errores en el código. En segundo lugar, permiten refactorizar el código y asegurarse de no haber introducido otros errores. En tercer lugar, a medida que JMP se actualiza, ciertos aspectos internos de JMP cambiarán, al igual que ciertas plataformas. Si se utiliza este script de pruebas unitarias, siempre se puede probar el complemento cuando se actualiza JMP para asegurarse de que algún cambio en JMP no lo haya afectado o lo haya afectado.
Como conclusión de la charla de hoy, presenté el problema del diseño de experimentos contextuales de elección discreta para comprender las preferencias de la interfaz de usuario para Easy DOE en diferentes grupos demográficos de nuestra base de usuarios. Luego, demostré cómo la programación en JSL nos permite crear un complemento JMP muy práctico para construir estos experimentos de elección discreta. Por último, mencioné la importancia de realizar pruebas unitarias, ya sea durante o después del proceso de desarrollo, para detectar errores.
Con esto concluyo mi charla de hoy. ¿Alguna pregunta?