@Enrique Muchísimas gracias. Creo que el término que estaba buscando es "media ponderada", o "weighted average" en inglés. Parece ser que Google Sheets tiene una fórmula al respecto: "AVERAGE.WEIGHTED"(
https://support.google.com/docs/answer/9084098?hl=en)
No sé si es así como proyectan algunos programas de televisión los posibles resultados finales de una elección en función del 10% del voto escrutado. En cualquier caso, como dice Enrique, voy a reflexionar en público por si os gustan los retos.
En función de las respuestas recibidas, he encontrado el siguiente sistema. Quizás no sea el más adecuado, pero creo que funciona bien. En mi aplicación tengo 4 tipos de ejercicios: Click (en el que el usuario/a tiene que pinchar las palabras para reconstruir una frase), Listen (en el que el usuario escucha una frase y tiene que pinchar en las palabras para reconstruirla), Type (en el que el usuario tiene que pinchar en los caracteres correspondientes para reconstruir la frase) y Speak (en el que el usuario tiene que pronunciar la frase en voz alta y después utilizar los botones para autoevaluarse). En los ejercicios de Type y Speak también hay "Pistas", por si el usuario necesita ayuda.
Podéis ver la Google Sheet que he creado aquí:
https://docs.google.com/spreadsheets/d/1Lm-3ekOgufouZy1XfpOZ86BsYH3ddlpnGaZhdtIxpNU/edit?usp=sharingOs he dado permiso de edición por si alguien quiere colaborar. Podéis modificar lo que queráis ahí, no me importa. También podéis haceros copia haciendo File > Make a copy y experimentar por vuestra cuenta.
He preparado un screencast para que se entienda mejor. Lo podéis encontrar aquí:
https://drive.google.com/file/d/1kwyYYYeFzLdlb5es8Qt2jOhkirazosuF/view?usp=sharingCLICK
Para calcular el nivel de acierto, calculo el porcentaje en función del número de palabras. Es decir, si un ejercicio tiene 5 palabras, cada palabra cuenta o descuenta 20%, ya que 100/5=20. Para que me cuadre tengo que tener en cuenta los resultados negativos. Es decir, si el usuario empieza con una equivocación, el resultado es -20.
LISTEN
Aquí se me planteaba el reto. Como el usuario acaba el ejercicio anterior con un nivel de precisión de 80%, hago lo siguiente:
80% (precisión anterior) + 100% (nuevo máximo) / 2 = 90% (el máximo al que el usuario puede aspirar)
Después calculo: 90% (nuevo máximo) - 80% (precisión anterior) = 10% / 4 palabras = 2.5
Es decir, cada acierto o fallo sumará o descontará 2,5 en este ejercicio.
TYPE
El usuario acabó el ejercicio anterior con una precisión del 88%, así que realizo lo siguiente:
88% (precisión anterior) + 100% (nuevo máximo) / 2 = 94%
94% (nuevo máximo) - 88 (precisión anterior) = 6% / 16 caracteres = 0,39
Es decir, cada acierto o fallo sumará o descontará 0,39 y cada pista la mitad.
En este ejercicio (así como en el ejercicio siguiente de SPEAK) también doy la opción de que el usuario use pistas, a las que doy un valor negativo de la mitad de un fallo. Esta penalización es arbitraria, ya que considero que el usuario no es tan preciso en su respuesta si la realiza con ayuda.
SPEAK
El usuario acabó el ejercicio anterior con una precisión del 93%, así que realizo lo siguiente:
93,16% (precisión anterior) + 100% (nuevo máximo) / 2 = 96,58%
96,58% (nuevo máximo) - 93% (precisión anterior) = 3,58% / 4 palabras = 0,89
Aquí tengo un nuevo reto. De momento aún no he incorporado Google Speech to Text, que podría calcular cuántas palabras dice el usuario/a correctamente. Así que lo que hago es que el usuario pronuncia la frase en voz alta, después escucha la frase correcta y él mismo decide si la frase que ha pronunciado se corresponde con la grabación.
El sistema calcula cuánto tiempo invierte el usuario en pronunciar la frase y cuánto tiempo dura la grabación original. Por ejemplo, si la grabación original dura 1,2 segundos y el usuario la pronuncia en 1,5 segundos, entonces el nivel de fluidez es de (1,2 / 1,5) * 100 = 80%
Es decir, en este tipo de ejercicio calculo la fluidez en lugar de la precisión de la siguiente manera: 93% (precisión anterior) + 80% (fluidez) / 2 = 86%
Si el usuario/a considera que ha acertado, entonces pincha en el icono verde y sigue con el siguiente ejercicio. Si el usuario/a considera que se ha equivocado, entonces pincha en el icono rojo y repite el ejercicio. En este último caso lo considero un fallo y le doy un valor arbitrario de 1 error, en este caso -1,70
Un saludo