J'ai besoin d'un algorithme pour faire une recherche binaire lorsque le test à chaque étape peut donner le mauvais résultat.
Contexte:
Je dois placer les élèves sur le niveau de difficulté le plus approprié parmi 12. L'approche actuelle est la force brute et pose 60 questions à choix multiples à 4 réponses de difficulté croissante, s'arrêtant après trois mauvaises, et place l'élève au niveau: floor((score - 1) / 5) + 1
avec un minimum de 1.
Nous souhaitons que les clients soient désactivés lorsqu'ils font face à un test contenant jusqu'à 60 questions avant de pouvoir réellement utiliser le programme.Nous souhaitons donc minimiser le nombre de questions posées dans le test. Nous craignons également que les clients sautent le test de classement (car il semble long), puis abandonnent le programme car il semble trop facile.
Le placement médian est en fait au niveau 2, donc 50 +% des élèves obtiennent un score <11 (c'est-à-dire une réponse <14 questions). Pour l'anecdote, cela peut être parce qu'ils s'ennuient et cessent de prendre les questions au sérieux (ce sont de jeunes enfants).
Solution proposée: implémentez le test sous la forme d'une recherche binaire sur douze éléments, en commençant par une question au niveau de difficulté 6/7 et en poursuivant selon que la question est correcte ou non. En théorie, cela pourrait trouver le niveau de difficulté approprié pour eux dans 3-4 questions.
Le problème: Comme vous pouvez le deviner à partir du test existant se terminant uniquement après trois mauvaises réponses et en utilisant 60 questions pour choisir entre 12 niveaux, nous voulons faire en sorte que les élèves fassent des réponses correctes (ce qu'ils devraient faire 25% du temps) ou accidentellement donner des réponses incorrectes (gros doigts, question mal lue, etc.). Cela est encore plus important avec une recherche binaire car donner une bonne réponse à la première question pourrait vous placer dans la moitié supérieure des niveaux de difficulté même si vous vous trompez sur toutes les autres questions.
Existe-t-il donc un algorithme reconnu pour une recherche binaire où vous ne pouvez pas garantir l'exactitude d'un test individuel?
Naïvement, je pourrais essayer au mieux 3 ou 5 questions à chaque étape, et, comme les premières questions ont un effet plus important sur le résultat final que les questions ultérieures, peut-être n'ajouter ces questions supplémentaires qu'aux premières étapes et non aux dernières. Y at-il plus que cela?
Réponses:
Traitez le problème comme un tableau de probabilités bayésiennes; dans un premier temps, supposons qu'il y a 1/13 de chance que l'enfant soit juste en dessous de chaque niveau et, pour être complet, 1/13 de chance qu'ils soient hors du haut. Ensuite: 1) Trouvez le niveau médian de votre tableau, c'est-à-dire le niveau où la probabilité d'être au-dessus est la plus proche de 50% 2) Posez une question à l'enfant à partir de ce niveau. 3) Utilisez la règle de Bayes pour mettre à jour la probabilité de chaque cellule, en supposant un taux d'erreur de 25%. Terminez et renvoyez le niveau le plus probable lorsqu'une cellule atteint une probabilité suffisamment élevée, ou je suppose lorsque vous manquez de questions à un niveau.
Un traitement plus rigoureux de cet algorithme est ici ; Je recommande de le lire avant de l'implémenter.
la source