11
$\begingroup$

I need an algorithm to do a binary search when the test at each step may give the wrong result.

Background: I need to place students on the most appropriate of 12 difficulty levels. The current approach is brute force and asks 60 4-answer multiple choice questions of increasing difficulty, stopping after three wrong, and places the student at level: floor((score - 1) / 5) + 1 with a minimum of 1.

We're concerned that customers are turned off when they face a test with up to 60 questions before they can actually use the program, so we would like to minimize the number of questions asked in the test. We're also concerned that customers are skipping the placement test (because it seems long) and then abandoning the program because it seems too easy.

The median placement is actually on level 2, so 50+% of students score <11 (i.e. answer < 14 questions). Anecdotally, this may be because they get bored and stop taking the questions seriously (they're young children).

Proposed Solution: Implement the test as a binary search over twelve items starting with a question at difficulty level 6/7 and proceeding based on whether they get the question right or wrong. In theory, this could find the appropriate difficulty level for them in 3-4 questions.

The Problem: As you might guess from the existing test only ending after three wrong answers and using 60 questions to choose between 12 levels, we want to make allowance for students fluking correct answers (which they should do 25% of the time) or accidentally giving incorrect answers (fat fingers, misreading question etc). This is even more important with a binary search because fluking a right answer on the first question could place you in the top half of difficulty levels even if you get every other question wrong.

So is there a recognized algorithm for a binary search where you can't guarantee that an individual test is accurate?

Naively I might try best of 3 or 5 questions at each step, and, since the early questions have a bigger effect on the final result than the later questions, maybe add these additional questions only to the early steps and not the later ones. Is there more to it than that?

$\endgroup$
4
  • $\begingroup$ Why pretest at all ? Just self adjust the questions on the actual test $\endgroup$ Commented Dec 29, 2015 at 22:09
  • $\begingroup$ @ScottStensland, interesting thought. However the actual program is 12 'maps' of 10 'lessons' each with each lesson consisting of 8-15 HTML5 canvas 'activities' or games each of highly variable design. Students progress through the maps and receive rewards and awards/certificates after each lesson and map. If we were constantly adjusting their level after every game it would be pretty disorienting, and we'd need to build feedback into all our existing games and figure out the rules for feedback for each game too. $\endgroup$ Commented Dec 29, 2015 at 23:39
  • $\begingroup$ @Kirill, is there an easy way to move/crosspost a question to another section? $\endgroup$ Commented Dec 29, 2015 at 23:40
  • $\begingroup$ @jim You can flag it for moderator attention to ask that they move the question, or you can also delete this question here and create a new identical question over there. Crossposting (having identical questions on different sites at the same time) is usually discouraged. I made that suggestion because it seems to me like a relatively straightforward statistics/machine learning question that would get a clear answer much quicker over there. $\endgroup$ Commented Dec 30, 2015 at 0:34

2 Answers 2

2
$\begingroup$

Treat the problem as an array of bayesian probabilities; initially, assume there's a 1/13 chance that the child is just below each level and, for completeness, a 1/13 chance they're off the top. Then: 1) Find the median level of your array i.e. the the level where the probability of being above it is closest to 50% 2) Ask the child a question from that level. 3) Use Bayes' Rule to update each cell's probability, assuming a 25% error rate. Terminate and return the most likely level when one cell hits a sufficiently high probability, or I guess when you run out of questions on a level.

A more rigorous treatment of this algorithm is here; I recommend reading it before implementing.

$\endgroup$
1
$\begingroup$

Here's an implementation of a binary search algorithm that uses some probability techniques (possibly the same as Thimothy mentioned in his answer) to deal with a noisy binary search: https://github.com/adamcrume/robust-binary-search

$\endgroup$

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.