Friday, May 30, 2014

Stupid code fragments, part two

Probabilities are hard. As an example, there's a known puzzle: a family has two children; if one of them is a girl, what is the probability that the other one is also a girl?

The answer, un-intuitively, is not 1/2 but 1/3. There are various explanations but – as with the Monty Python puzzle years ago – I wanted to write code to check it out, so I wrote the following using LinqPad:

  
  void Main()  
  {  
    var rnd = new Random();  
      
    // Generate a random set of families with two children; true means girl, false means boy  
    var all = Enumerable.Range(1, 10000).Select(_ => new Pair(rnd.Next(2) == 0, rnd.Next(2) == 0)).ToList();  
      
    // Extract only the families with at least one girl  
    var oneGirl = all.Where(it => it.First || it.Second).ToList();  
      
    // Out of those families, how many have two girls? The result should be 1/3rd  
    var otherGirl = oneGirl.Where(it => it.First && it.Second).ToList();  
    Console.WriteLine((decimal) otherGirl.Count / oneGirl.Count);  
  }  
  
  // Define other methods and classes here  
  public class Pair  
  {  
    public bool First { get; private set; }  
    public bool Second { get; private set; }  
      
    public Pair(bool first, bool second)  
    {  
    First = first;  
    Second = second;  
    }  
  }  

Conditional probabilities (that is, probabilities where we have additional information – in this case, knowing that one child is a girl) are surprisingly tricky. A way to express the condition more clearly is: what is the probability that a family with two kids has two girls, given that they have at least one girl? Probabilities are, at base, expressions of uncertainty. If we ask "what is the probability that a family with two children has two girls?" we're in a situation of maximum uncertainty: all outcomes (BB, BG, GB and GG) are equally probable so the best we can do is 1/4 – that is the mathematical equivalent of "no clue". However, if we add some information – namely that one of the children is definitely a girl – then we removed some uncertainty from the problem: the BB case is no longer possible. This lowers the uncertainty of the GG case to 1/3.

No comments: