• Quick note - the problem with Youtube videos not embedding on the forum appears to have been fixed, thanks to ZiprHead. If you do still see problems let me know.

NHL Draft Lottery (Probabality problem)

lomiller

Penultimate Amazing
Joined
Jul 31, 2007
Messages
13,208
So, lots of math debate in some hockey circles arising from how the NHL's draft lottery was conducted.

(feel free to skim this part the real question is later)
The lottery works like this:

there are 14 balls, 4 of which are drawn to give a 4 number combination.

There are 1001 possible combinations. 1 combinations is "re-draw" so there are 1000 combinations in play. Each team in the lottery is assigned a number of combinations based on % chance. eg 185 combinations for 18.5%

Full odds for each place are listed here
https://www.nhl.com/news/2018-nhl-draft-lottery-odds-announced/c-297409174


There are 3 separate draws, 1 each of the first 3 picks. Odds are rescaled proportionately each time based on who wins. (I think they may just re-draw if the same team wins again) Final chances of winning looked like this this year.
https://twitter.com/IneffectiveMath/status/983327608715792384



What triggered the discussion was that this year there was that spots 4-15 were announced 2 hours before the top 3. IOW we knew who had won the 3 lotteries but not the order. People natural wanted to know what the probabilities were for each team to have the top overall pick. (IOW won the first lottery as opposed to the second or third)

The top 3 teams were
Buffalo 185 of 1000 combinations (18.5%)
Montreal 95 of 1000 combinations (9.5%)
Carolina 30 of 1000 combinations (3%)

My first inclination was that the three teams had a combined 310 combinations, Buffalo had 185 of those so they must have had a 59.7% chance of having the top pick, but it all seemed a little like the Monty Hall Problem in that knowing what teams didn't win shouldn't change the odds for the ones that were left.

A stats guy I follow tweeted out this, which seems to make more sense. But I can't see exactly how he gets the numbers.
https://twitter.com/IneffectiveMath/status/990407765754597376



My question is what the right way to figure out the chances that each of these 3 teams got the first overall pick.
 
I think your first inclination is correct.

If the entire process were done 1000 times, the expectation would be Buffalo getting the #1 185 times, Montreal 95 times, Carolina 30 times, and one of the remaining teams 690 times. It has to be one of the first three possibilities, so disregard all the others. Montreal wins 180 of those 310 outcomes, and so forth.
 
The lottery works like this:

there are 14 balls, 4 of which are drawn to give a 4 number combination.



Forgive me for not just looking up NHL draft rules, but what are on the 14 balls?


For instance, normally in something like that there would be 10 balls. One each for zero through nine. Drawing 4 balls in that case would give, I believe, 5040 possible 4 digit number combinations. (10 times 9 times 8 times 7. Which also happens to be every number from 0123 to 9876 that does not have 2 of the same number.)

I might be just having a brain fart, but I'm having a hard time thinking of what would be on 14 balls to give a possible 1001 combinations when drawing 4 of them.
 
Forgive me for not just looking up NHL draft rules, but what are on the 14 balls?


For instance, normally in something like that there would be 10 balls. One each for zero through nine. Drawing 4 balls in that case would give, I believe, 5040 possible 4 digit number combinations. (10 times 9 times 8 times 7. Which also happens to be every number from 0123 to 9876 that does not have 2 of the same number.)

I might be just having a brain fart, but I'm having a hard time thinking of what would be on 14 balls to give a possible 1001 combinations when drawing 4 of them.

Don't forget there is more than 1 way to draw the exact same numbers and in this case order doesn't matter.
https://en.wikipedia.org/wiki/Combination

The formula in this case is 14!/(4!*10!)

or you can just use an online tool like this
https://www.calculatorsoup.com/calculators/discretemathematics/combinations.php

it turns out there are 1001 distinct combinations.
 
I think your first inclination is correct.

If the entire process were done 1000 times, the expectation would be Buffalo getting the #1 185 times, Montreal 95 times, Carolina 30 times, and one of the remaining teams 690 times. It has to be one of the first three possibilities, so disregard all the others. Montreal wins 180 of those 310 outcomes, and so forth.

But like the Monty Hall Problem having the non-winning teams uncovered should not change the odds Buffalo won.

If there were only a single lottery for 1OA it would be essentially an expanded version of the Monty Hall problem, in which case you'd have to say Buffalo only had an 18.5% chance to have the winning combination. That doesn't apply either, because there are 3 lotteries and we already know Buffalo won 1 of them.

Also, look at the ultimate consequences of taking that approach:
http://hfboards.mandatory.com/threa...d-intermission.2483645/page-30#post-145296957

The numbers don't make sense. We know Buffalo and Carolina each won 1 of the 3 lotteries, but is it really 8 times as likely that Buffalo won the first than it is they won the third? Their odds of getting each pick didn't change nearly that much. Same situation in reverse for Carolina. We know they won 1 lottery does it make sense that 7.4X as likely for that to have been the first one?


Buffalo:
1st: 59.6%
2nd: 32.7%
3rd: 7.5%

Carolina:
1st: 9.7%
2nd: 18.6%
3rd: 71.7%

Montreal:
1st: 30.6%
2nd: 48.7%
3rd: 20.7%
 
It took me a few rereads before I got what actually went on.

Also, the aim of this lottery seems outright weird. The winner gets first pick of new recruits from college leagues? What is this, a 21st century slave trade?

OK, that aside, now on to the maths. I'm too lazy to do the actual calculations, but here's how I think the probabilities should be calculated.

After the announcement of the losers, teams 15-4, you know the top-3 is Buffalo, Montreal and Carolina, in any of the 6 possible permutations.

The a priori probability that Buffalo is 1st, Montreal 2nd, and Carolina 3rd is:
0.185 * (0.095 / (1-0.185)) * (0.03 / (1-0.185-0.095))
Explanation:
- the first factor is obvious
- the second factor is the probability that Montreal is drawn in a lottery where Buffalo is excluded: Montreal still has weight 0.095, but the total weight of all the teams is 1 minus the weight of Buffalo.
- likewise, the third factor is the probability that Carolina is drawn in a lottery where Buffalo and Montreal are excluded.
Call this number: p1

Likewise, calculate the a priori probability of the outcome Buffalo 1st, Carolina 2nd and Montreal 3rd, and call this number p2

Likewise, calculate the a priori probabilities of the other four permutations and call these numbers p3, p4, p5 and p6.

So, the a priori probability that these three teams form the top-3 is p1+p2+p3+p4+p5+p6.
The a priori probability that Buffalo wins with Montreal and Carolina as the two runners up is p1+p2.

Therefore, the conditional probability that Buffalo has won the lottery when you know that these three teams are the top-3 is: (p1+p2) / (p1+...+p6)
 
Last edited:
Don't forget there is more than 1 way to draw the exact same numbers and in this case order doesn't matter.


Yep, that is where I went wrong. Thank you.

In other words, since order does not matter 1234 is the "same" as (23?) other 4 digit combinations. Like 2341, 3412, 4123, etc.
 
A stats guy I follow tweeted out this, which seems to make more sense. But I can't see exactly how he gets the numbers.
https://twitter.com/IneffectiveMath/status/990407765754597376

My question is what the right way to figure out the chances that each of these 3 teams got the first overall pick.

In that thread, there's another tweet with scans of a paper calculation which seems to be the same calculation I did. I don't know why Micah Black McCurdy thinks it's the wrong calculation. I can see nothing wrong with it.

ETA: if you follow Micah's twitter thread here, you see he's using exactly the same calculation as I am and gets the same results.

Here's the results I get:

case|ranking 1-2-3|a priori|a posteriori
p 1 |Buffalo Montreal Carolina|0.000899|0.199
p 2 |Buffalo Carolina Montreal|0.000824|0.183
p 3 |Montreal Buffalo Carolina|0.000809|0.179
p 4 |Montreal Carolina Buffalo|0.000666|0.148
p 5 |Carolina Buffalo Montreal|0.000692|0.153
p 6 |Carolina Montreal Buffalo|0.000621|0.138
|total|0.004511|1

Buffalo ranking probabilities:
rank 1: 0.382
rank 2: 0.333
rank 3: 0.285

Montreal ranking probabilities:
rank 1: 0.327
rank 2: 0.337
rank 3: 0.336

Carolina ranking probabilities:
rank 1: 0.291
rank 2: 0.330
rank 3: 0.379

I wrote a little Perl script to calculate them:

#!/usr/bin/perl
use strict;
use warnings;

my @weight = ( 0.185, 0.095, 0.03 );
my @name = ( "Buffalo", "Montreal", "Carolina" );
my @perms = ( [0,1,2], [0,2,1], [1,0,2], [1,2,0], [2,0,1], [2,1,0] );
my @prioprob = ();
my @postprob = ();
my $probsum = 0;
my @rankprob;

# calculate the probabilities for each ranking order
foreach my $permref ( @perms ) {
my @perm = @$permref;
my ($w1, $w2, $w3) = @weight[@perm];
my $prob = $w1 * ($w2 / (1-$w1)) * ($w3 / (1-$w1-$w2));
push @prioprob, $prob;
$probsum += $prob;
# now print the table row
}
@postprob = map { $_ / $probsum } @prioprob;

# print the table
print "
\n";
my $i = 0;
foreach my $permref ( @perms ) {
my @perm = @$permref;
my $namelist = "@name[@perm]";
# print '|p '. $i+1 . " |@name[@perm]|";
printf "|p %d |%s|%.6f|%.3f|\n",
$i+1, $namelist, $prioprob[$i], $postprob[$i];
$i++;
}
print '| |total|', $probsum, "|1|\n
\n";

# calculate the probabilities per team for each rank
# @rankprob is list of lists, first index team, second index rank
foreach my $i ( 0 .. $#perms ) {
my @perm = @{$perms[$i]};
foreach my $rank ( 0 .. $#perm ) {
my $team = $perm[$rank];
$rankprob[$team][$rank] += $postprob[$i];
}
}

# print the results
foreach my $team ( 0 .. $#name ) {
print "\n$name[$team] ranking probabilities:\n";
my @probs = @{$rankprob[$team]};
foreach my $rank ( 0 .. $#probs ) {
printf "rank %d: %.3f\n", $rank+1, $probs[$rank];
}
}
 
Last edited:
In that thread, there's another tweet with scans of a paper calculation which seems to be the same calculation I did. I don't know why Micah Black McCurdy thinks it's the wrong calculation. I can see nothing wrong with it.

ETA: if you follow Micah's twitter thread here, you see he's using exactly the same calculation as I am and gets the same results.

Here's the results I get:

case|ranking 1-2-3|a priori|a posteriori
p 1 |Buffalo Montreal Carolina|0.000899|0.199
p 2 |Buffalo Carolina Montreal|0.000824|0.183
p 3 |Montreal Buffalo Carolina|0.000809|0.179
p 4 |Montreal Carolina Buffalo|0.000666|0.148
p 5 |Carolina Buffalo Montreal|0.000692|0.153
p 6 |Carolina Montreal Buffalo|0.000621|0.138
|total|0.004511|1

Buffalo ranking probabilities:
rank 1: 0.382
rank 2: 0.333
rank 3: 0.285

Montreal ranking probabilities:
rank 1: 0.327
rank 2: 0.337
rank 3: 0.336

Carolina ranking probabilities:
rank 1: 0.291
rank 2: 0.330
rank 3: 0.379

I wrote a little Perl script to calculate them:

#!/usr/bin/perl
use strict;
use warnings;

my @weight = ( 0.185, 0.095, 0.03 );
my @name = ( "Buffalo", "Montreal", "Carolina" );
my @perms = ( [0,1,2], [0,2,1], [1,0,2], [1,2,0], [2,0,1], [2,1,0] );
my @prioprob = ();
my @postprob = ();
my $probsum = 0;
my @rankprob;

# calculate the probabilities for each ranking order
foreach my $permref ( @perms ) {
my @perm = @$permref;
my ($w1, $w2, $w3) = @weight[@perm];
my $prob = $w1 * ($w2 / (1-$w1)) * ($w3 / (1-$w1-$w2));
push @prioprob, $prob;
$probsum += $prob;
# now print the table row
}
@postprob = map { $_ / $probsum } @prioprob;

# print the table
print "
\n";
my $i = 0;
foreach my $permref ( @perms ) {
my @perm = @$permref;
my $namelist = "@name[@perm]";
# print '|p '. $i+1 . " |@name[@perm]|";
printf "|p %d |%s|%.6f|%.3f|\n",
$i+1, $namelist, $prioprob[$i], $postprob[$i];
$i++;
}
print '| |total|', $probsum, "|1|\n
\n";

# calculate the probabilities per team for each rank
# @rankprob is list of lists, first index team, second index rank
foreach my $i ( 0 .. $#perms ) {
my @perm = @{$perms[$i]};
foreach my $rank ( 0 .. $#perm ) {
my $team = $perm[$rank];
$rankprob[$team][$rank] += $postprob[$i];
}
}

# print the results
foreach my $team ( 0 .. $#name ) {
print "\n$name[$team] ranking probabilities:\n";
my @probs = @{$rankprob[$team]};
foreach my $rank ( 0 .. $#probs ) {
printf "rank %d: %.3f\n", $rank+1, $probs[$rank];
}
}

Thanks!
 

Back
Top Bottom