Algorithmus: Binäre Suche bei unsicheren Werten

11

Ich benötige einen Algorithmus, um eine binäre Suche durchzuführen, wenn der Test bei jedem Schritt das falsche Ergebnis liefern kann.

Hintergrund: Ich muss die Schüler auf den am besten geeigneten von 12 Schwierigkeitsstufen bringen. Der derzeitige Ansatz ist Brute Force und stellt 60 Multiple-Choice-Fragen mit 4 Antworten mit zunehmendem Schwierigkeitsgrad, stoppt nach drei falschen und stellt den Schüler auf ein Niveau: floor((score - 1) / 5) + 1mit einem Minimum von 1.

Wir sind besorgt, dass Kunden ausgeschaltet werden, wenn sie einem Test mit bis zu 60 Fragen gegenüberstehen, bevor sie das Programm tatsächlich verwenden können. Daher möchten wir die Anzahl der im Test gestellten Fragen minimieren. Wir sind auch besorgt, dass Kunden den Einstufungstest überspringen (weil er lang erscheint) und das Programm dann abbrechen, weil es zu einfach erscheint.

Die mittlere Platzierung befindet sich tatsächlich auf Stufe 2, sodass 50 +% der Schüler <11 Punkte erzielen (dh <14 Fragen beantworten). Anekdotisch kann dies daran liegen, dass sie sich langweilen und die Fragen nicht mehr ernst nehmen (sie sind kleine Kinder).

Vorgeschlagene Lösung: Implementieren Sie den Test als binäre Suche über zwölf Elemente, beginnend mit einer Frage im Schwierigkeitsgrad 6/7 und je nachdem, ob die Frage richtig oder falsch ist. Theoretisch könnte dies in 3-4 Fragen den entsprechenden Schwierigkeitsgrad für sie finden.

Das Problem: Wie Sie vielleicht aus dem vorhandenen Test erraten können, der erst nach drei falschen Antworten endet und 60 Fragen verwendet, um zwischen 12 Stufen zu wählen, möchten wir berücksichtigen, dass Schüler korrekte Antworten (die sie in 25% der Fälle tun sollten) oder versehentlich falsch machen falsche Antworten geben (dicke Finger, falsch interpretierte Frage usw.). Dies ist bei einer binären Suche noch wichtiger, da Sie durch die richtige Antwort auf die erste Frage in die obere Hälfte des Schwierigkeitsgrades gelangen können, selbst wenn Sie jede andere Frage falsch stellen.

Gibt es also einen anerkannten Algorithmus für eine binäre Suche, bei dem Sie nicht garantieren können, dass ein einzelner Test korrekt ist?

Naiv könnte ich bei jedem Schritt das Beste aus 3 oder 5 Fragen versuchen, und da die frühen Fragen einen größeren Einfluss auf das Endergebnis haben als die späteren Fragen, sollten Sie diese zusätzlichen Fragen möglicherweise nur zu den frühen Schritten und nicht zu den späteren hinzufügen. Gibt es mehr als das?


quelle
Warum überhaupt einen Vortest? Passen Sie einfach die Fragen zum eigentlichen Test an
Scott Stensland
@ ScottStensland, interessanter Gedanke. Das eigentliche Programm besteht jedoch aus 12 "Karten" mit jeweils 10 "Lektionen", wobei jede Lektion aus 8-15 HTML5-Canvas-Aktivitäten oder Spielen mit jeweils sehr variablem Design besteht. Die Schüler durchlaufen die Karten und erhalten nach jeder Lektion und Karte Belohnungen und Auszeichnungen / Zertifikate. Wenn wir ihr Level nach jedem Spiel ständig anpassen würden, wäre das ziemlich verwirrend, und wir müssten Feedback in alle unsere vorhandenen Spiele einbauen und die Regeln für Feedback auch für jedes Spiel herausfinden.
@Kirill, gibt es eine einfache Möglichkeit, eine Frage in einen anderen Abschnitt zu verschieben / zu posten?
@jim Sie können es markieren, damit der Moderator darauf aufmerksam wird, dass er die Frage verschiebt, oder Sie können diese Frage auch hier löschen und dort eine neue identische Frage erstellen. Von Crossposting (mit identischen Fragen an verschiedenen Standorten gleichzeitig) wird normalerweise abgeraten. Ich habe diesen Vorschlag gemacht, weil es mir wie eine relativ einfache Frage zu Statistik / maschinellem Lernen erscheint, die dort viel schneller eine klare Antwort erhalten würde.
Kirill

Antworten:

1

Behandeln Sie das Problem als eine Reihe von Bayes'schen Wahrscheinlichkeiten. Angenommen, es besteht eine Wahrscheinlichkeit von 1/13, dass sich das Kind knapp unter jedem Level befindet, und der Vollständigkeit halber eine Chance von 1/13, dass es von der Spitze abweicht. Dann: 1) Finden Sie den Medianwert Ihres Arrays, dh den Wert, bei dem die Wahrscheinlichkeit, darüber zu liegen, 50% am nächsten kommt. 2) Stellen Sie dem Kind eine Frage von diesem Wert. 3) Verwenden Sie die Bayes-Regel, um die Wahrscheinlichkeit jeder Zelle unter der Annahme einer Fehlerrate von 25% zu aktualisieren. Beende und gib das wahrscheinlichste Level zurück, wenn eine Zelle eine ausreichend hohe Wahrscheinlichkeit erreicht, oder wenn dir auf einem Level die Fragen ausgehen.

Eine strengere Behandlung dieses Algorithmus ist hier ; Ich empfehle es vor der Implementierung zu lesen.

Timothy Nodine
quelle