Students preparing for the Bocconi admission test ask me the same question every year: if I don't know the answer, should I leave it blank?
The scoring rule makes guessing look risky. A correct answer is +1, a blank is 0 and a wrong answer is −0.2. The test has 50 questions in 75 minutes, and if your total after penalties is below 17, your application is not considered at all.
You can settle the question with a few lines of maths, then check it with a simulation.
One guess
A blind guess on a question with n options is right with probability 1/n and wrong otherwise, so its expected value is
E = 1/n − 0.2 × (n − 1)/n
| Options left | Expected points per guess |
|---|---|
| 5 | +0.04 |
| 4 | +0.10 |
| 3 | +0.20 |
| 2 | +0.40 |
Even a blind guess is worth a little, and every option you rule out makes it worth more. The penalty is smaller than it looks: with five options, the penalty that would make a blind guess worth exactly zero is 0.25, not 0.2. (The few critical thinking questions with three options use −0.33, and a blind guess there is still worth about +0.11.)
The cutoff changes the question
+0.04 per question is not much. But the cutoff turns this into a threshold problem, not an averages problem. Below 17 you are out, however close you got.
Take a student who is sure of 16 answers and has no idea on the other 34. If they leave those 34 blank, they score 16 and are not considered. What happens if they guess every one?
import random
def guess_points(n_guesses, options, penalty=0.2):
"""Points from n blind guesses on questions with `options` choices each."""
points = 0.0
for _ in range(n_guesses):
if random.randrange(options) == 0: # exactly one option is right
points += 1
else:
points -= penalty
return points
def chance_to_clear(sure, guesses, options, cutoff=17, trials=100_000):
"""Share of simulated tests where the total reaches the cutoff."""
cleared = 0
for _ in range(trials):
total = sure + guess_points(guesses, options)
if round(total, 2) >= cutoff: # round away float noise like 16.999999
cleared += 1
return cleared / trials
random.seed(2027)
for sure in (16, 15, 14):
blind = chance_to_clear(sure, 50 - sure, options=5)
ruled_out_one = chance_to_clear(sure, 50 - sure, options=4)
print(f"sure of {sure}: blind {blind:.0%}, one option ruled out {ruled_out_one:.0%}")
The code prints these numbers, and an exact binomial calculation agrees to within a percentage point:
| Sure of | Leave the rest blank | Guess blind (5 options) | Rule out one option first (4 options) |
|---|---|---|---|
| 16 | 0% | 53% | 78% |
| 15 | 0% | 40% | 67% |
| 14 | 0% | 28% | 56% |
Why it works
Guessing raises the average a little, but mostly it adds spread. When your safe score is below the bar, spread is the only way over it. Blanks lock in the result you already know is a fail.
The model is pessimistic in one way: it assumes the guesses are pure chance. A student who has read the question and half-understood it usually does better than one in five.
And 17 is only the minimum to be considered. It is not the score that wins a place. For anyone well above the floor, what matters is the total, and every guess has a positive expected value.
The rule I give students
Answer every question. Spend your thinking time ruling options out, because each one you remove makes the guess worth more.
I wrote up the full test format, the 2027 session dates and a 12-week study plan on the Intellix Tutoring blog. Dates can change, so check Bocconi's official admissions page before you book.
Top comments (0)