Skip to main content

Binomial Probability Using Python

I enjoy programming. I really like the applications of programming in areas of finance and Operations.

Questions Answered

We discuss in brief what is a binomial event, how binomial probability works and then go on to program binomial probability in Python. We will also solve the following interesting binomial problem.

Problem: The ratio of boys to girls for babies born in a country is 1.09:1. What proportion of its families with exactly 6 children will have at least 3 boys?

Assumption: There are only 2 possible genders.

binomial-probability-using-python

Binomial Event (Bernoulli Trial)

A binomial event is a statistical experiment that has the following properties:

  • The experiment consists of n repeated trials. e.g. 10 throws of a coin.
  • The trials are independent of each other. e.g. Current outcome doesn't affect the next
  • The outcome of each trial is either success () or failure (). o.r. Head or Tail.
  • Probability of success of 1 trial is p and that of failure is 1-p. i.e. total probability is 1.

Ingredients for Coding in Python

We need:

Scroll to Continue
  1. from statistics Import math to call builtin factorial function.
  2. Write a function for calculating the binomial distribution
  3. That's it.

Python Code

# Import stat module for factorial from statistics import math # Define function to get binomial distribution. # Here x in the number of successful outcomes # n is number of trials # p is probability of success. # example:binom_dist(2, 5, 1.09) gives probability of 2 boys # in a family of 5 in a country where # male to female ratio at birth is 1.09:1 def binom_dist(x, n, p): success_prob = 0 success_prob =(math.factorial(n)/(math.factorial(x)*math.factorial(n-x)))*(p**x)*((1-p)**(n-x)) return boys

Using this code to solve problems

Building on the child birth example. Let's assume that male:female ratio is 1.1.

Problem1: What is the probability that a family of 2 has exactly 1 boy and 1 girl.

print(binom_dist(1,2,1.1)) output: 0.773

Problem2: What is the probability that a family of 6 has at least 3 girls.

This is a little tricky one. At least 3 girls means cases where girls' number is 3,4,5 &6. Now, we need to calculate cumulative probability.

# Since we need prob at multiple points we have to loop it in # We declare a cum_prob variable # We use 1/1.1 as prob of success as we are using it for girls # n=6 p=1/1.1 cum_prob=0 for i in range(3,n+1,1): cum_prob+=run_binom(i, n, p) print(cum_prob) #output: 0.611

Bare code

from statistics import math

def binom_dist(x, n, p):
    boys = 0
    boys =(math.factorial(n)/(math.factorial(x)*math.factorial(n-x)))*(p**x)*((1-p)**(n-x))
    return boys

#Problem1: What is the probability that a family of 2 has exactly 1 boy and 1 girl.

print(binom_dist(1,2,1.1))

#output: 0.773

#Problem2: What is the probability that a family of 6 has at least 3 girls.

# Since we need prob at multiple points we have to loop it in
# We declare a cum_prob variable
# We use 1/1.1 as prob of success as we are using it for girls
# 
n=6
p=1/1.1
cum_prob=0
for i in range(3,n+1,1):    
    cum_prob+=run_binom(i, n, p)

print(cum_prob)
#output: 0.611

Related Articles