Let’s ip a coin in
Python
F O U N D AT I O N S O F P R O B A B I L I T Y I N P Y T H O N
Alexander A. Ramírez M.
CEO @ Synergy Vision
Probability
Foundation of Data Science
Allows to produce data from models
Study regularities in random phenomena
FOUNDATIONS OF PROBABILITY IN PYTHON
Gain intuition
...with coin ips
FOUNDATIONS OF PROBABILITY IN PYTHON
Only two outcomes
Heads or Tails
FOUNDATIONS OF PROBABILITY IN PYTHON
Flipping a coin in Python
Bernoulli random experiment
from scipy.stats import bernoulli
bernoulli.rvs(p=0.5, size=1)
array([0])
Another draw
bernoulli.rvs(p=0.5, size=1)
array([1])
FOUNDATIONS OF PROBABILITY IN PYTHON
Flipping multiple coins
Change size parameter to ip more...
bernoulli.rvs(p=0.5, size=10)
array([0, 0, 0, 0, 0, 0, 1, 1, 0, 0])
How many heads?
sum(bernoulli.rvs(p=0.5, size=10))
FOUNDATIONS OF PROBABILITY IN PYTHON
Flipping multiple coins (Cont.)
Another draw...
sum(bernoulli.rvs(p=0.5, size=10))
FOUNDATIONS OF PROBABILITY IN PYTHON
Flipping multiple coins (Cont.)
Binomial random variable
from scipy.stats import binom
binom.rvs(n=10, p=0.5, size=1)
array([7])
Many draws
binom.rvs(n=10, p=0.5, size=10)
array([6, 2, 3, 5, 5, 5, 5, 4, 6, 6])
FOUNDATIONS OF PROBABILITY IN PYTHON
Flipping multiple coins (Cont.)
Biased coin draws
binom.rvs(n=10, p=0.3, size=10)
array([3, 4, 3, 3, 2, 2, 2, 2, 3, 6])
FOUNDATIONS OF PROBABILITY IN PYTHON
Random generator seed
Use the random_state parameter of the rvs() function
from scipy.stats import binom
binom.rvs(n=10, p=0.5, size=1, random_state=42)
Use numpy.random.seed()
import numpy as np
np.random.seed(42)
FOUNDATIONS OF PROBABILITY IN PYTHON
Random generator seed (Cont.)
Flipping 10 fair coins with a random seed
from scipy.stats import binom
import numpy as np
np.random.seed(42)
binom.rvs(n=10, p=0.5, size=1)
array([4])
FOUNDATIONS OF PROBABILITY IN PYTHON
Let's practice ipping
coins in Python
F O U N D AT I O N S O F P R O B A B I L I T Y I N P Y T H O N
Probability mass and
distribution
functions
F O U N D AT I O N S O F P R O B A B I L I T Y I N P Y T H O N
Alexander A. Ramírez M.
CEO @ Synergy Vision
Probability mass function (pmf)
binomial.pmf(k, n, p) = ( )p (1 − p)n−k
n k
k
FOUNDATIONS OF PROBABILITY IN PYTHON
Probability mass function (pmf)
binomial.pmf(k, n, p) = ( )p (1 − p)n−k
n k
k
FOUNDATIONS OF PROBABILITY IN PYTHON
Probability mass function (pmf) (Cont.)
binomial.pmf(k, n, p) = ( )p (1 − p)n−k
n k
k
FOUNDATIONS OF PROBABILITY IN PYTHON
Probability mass function (pmf) (Cont.)
binomial.pmf(k, n, p) = ( )p (1 − p)n−k
n k
k
FOUNDATIONS OF PROBABILITY IN PYTHON
FOUNDATIONS OF PROBABILITY IN PYTHON
Probability mass function (pmf) (Cont.)
binomial.pmf(k, n, p) = ( )p (1 − p)n−k
n k
k
In Python:
binom.pmf(k, n, p)
FOUNDATIONS OF PROBABILITY IN PYTHON
Calculating probabilities with `binom.pmf()`
# Probability of 2 heads after 10 throws with a fair coin
binom.pmf(k=2, n=10, p=0.5)
0.04394531249999999
# Probability of 5 heads after 10 throws with a fair coin
binom.pmf(k=5, n=10, p=0.5)
0.24609375000000025
FOUNDATIONS OF PROBABILITY IN PYTHON
Calculating probabilities with binom.pmf() (Cont.)
# Probability of 50 heads after 100 throws with p=0.3
binom.pmf(k=50, n=100, p=0.3)
1.3026227131445298e-05
# Probability of 65 heads after 100 throws with p=0.7
binom.pmf(k=65, n=100, p=0.7)
0.0467796823527298
FOUNDATIONS OF PROBABILITY IN PYTHON
Probability distribution function (cdf)
binomial.cdf(k, n, p) = ( )p (1 − p) + ( )p(1 − p) + ... + ( )p (1 − p)n−k
n 0 n n n−1 n k
0 1 k
FOUNDATIONS OF PROBABILITY IN PYTHON
Probability distribution function (cdf) (Cont.)
binomial.cdf(k, n, p) = ( )p (1 − p) + ( )p(1 − p) + ... + ( )p (1 − p)n−k
n 0 n n n−1 n k
0 1 k
FOUNDATIONS OF PROBABILITY IN PYTHON
Probability distribution function (cdf) (Cont.)
binomial.cdf(k, n, p) = ( )p (1 − p) + ( )p(1 − p) + ... + ( )p (1 − p)n−k
n 0 n n n−1 n k
0 1 k
FOUNDATIONS OF PROBABILITY IN PYTHON
Probability distribution function (cdf) (Cont.)
binomial.cdf(k, n, p) = ( )p (1 − p) + ( )p(1 − p) + ... + ( )p (1 − p)n−k
n 0 n n n−1 n k
0 1 k
FOUNDATIONS OF PROBABILITY IN PYTHON
Cumulative distribution function (cdf)
FOUNDATIONS OF PROBABILITY IN PYTHON
Cumulative distribution function (cdf) (Cont.)
binomial.cdf(k, n, p) = ( )p (1 − p) + ( )p(1 − p) + ... + ( )p (1 − p)n−k
n 0 n n n−1 n k
0 1 k
In Python:
binom.cdf(k=1, n=3, p=0.5)
FOUNDATIONS OF PROBABILITY IN PYTHON
Calculating cumulative probabilities
# Probability of 5 heads or less after 10 throws with a fair coin
binom.cdf(k=5, n=10, p=0.5)
0.6230468749999999
# Probability of 50 heads or less after 100 throws with p=0.3
binom.cdf(k=50, n=100, p=0.3)
0.9999909653138043
FOUNDATIONS OF PROBABILITY IN PYTHON
Calculating cumulative probabilities (Cont.)
# Probability of more than 59 heads after 100 throws with p=0.7
1-binom.cdf(k=59, n=100, p=0.7)
0.9875015928335618
# Probability of more than 59 heads after 100 throws with p=0.7
binom.sf(k=59, n=100, p=0.7)
0.9875015928335618
FOUNDATIONS OF PROBABILITY IN PYTHON
Let's calculate some
probabilities
F O U N D AT I O N S O F P R O B A B I L I T Y I N P Y T H O N
Expected value,
mean, and variance
F O U N D AT I O N S O F P R O B A B I L I T Y I N P Y T H O N
Alexander A. Ramírez M.
CEO @ Synergy Vision
Expected value
Expected value: sum of possible outcomes weighted by it's probability.
k
E(X) = ∑ xi pi = x1 p1 + x2 p2 + ⋯ + xk pk
i=1
FOUNDATIONS OF PROBABILITY IN PYTHON
Expected value
The expected value of a discrete random variable is the sum of the possible outcomes weighted by their
probability.
k
E(X) = ∑ xi pi = x1 p1 + x2 p2 + ⋯ + xk pk
i=1
In our case, for the coin ip we get:
2
E(X) = ∑ xi pi = x1 p1 + x2 p2 = 0 × (1 − p) + 1 × p = p
i=1
FOUNDATIONS OF PROBABILITY IN PYTHON
Expected value (Cont.)
The expected value of a discrete random variable is the sum of the possible outcomes weighted by their
probability.
k
E(X) = ∑ xi pi = x1 p1 + x2 p2 + ⋯ + xk pk
i=1
In our case, for the coin ip we get:
2
E(X) = ∑ xi pi = x1 p1 + x2 p2 = 0 × (1 − p) + 1 × p = p
i=1
FOUNDATIONS OF PROBABILITY IN PYTHON
Arithmetic mean
Each xi is the outcome from one experiment (i.e., a coin ip, either 0 or 1).
n
1 1
X̄ = ∑ xi = (x1 + x2 + ⋯ + xn )
n n
i=1
In Python we will use the scipy.stats.describe() function to get the arithmetic mean.
from scipy.stats import describe
describe([0,1]).mean
0.5
FOUNDATIONS OF PROBABILITY IN PYTHON
FOUNDATIONS OF PROBABILITY IN PYTHON
FOUNDATIONS OF PROBABILITY IN PYTHON
FOUNDATIONS OF PROBABILITY IN PYTHON
Variance
Variance is a measure of dispersion.
It's the expected value of the squared deviation from its expected value.
n
V ar(X) = E[(X − E(X))2 ] = ∑ pi × (xi − E(X))2
i=1
In Python, we will use the scipy.stats.describe() function to get the sample variance.
describe([0,1]).variance
0.5
FOUNDATIONS OF PROBABILITY IN PYTHON
Binomial distribution expected value and variance
For X ∼ Binomial(n, p)
E(X) = n × p
V ar(X) = n × p × (1 − p)
Example: n = 10 and p = 0.5
E(X) = 10 × 0.5 = 5
V ar(X) = 10 × 0.5 × 0.5 = 2.5
FOUNDATIONS OF PROBABILITY IN PYTHON
Binomial distribution expected value and variance
(Cont.)
In Python we will use the binom.stats() method to get the expected value and variance.
binom.stats(n=10, p=0.5)
(array(5.), array(2.5))
FOUNDATIONS OF PROBABILITY IN PYTHON
Binomial distribution expected value and variance
(Cont.)
What are the expected value and variance for one fair coin ip?
binom.stats(n=1, p=0.5)
(array(0.5), array(0.25))
What are the expected value and variance for one biased coin ip, with 30% probability of success?
binom.stats(n=1, p=0.3)
(array(0.3), array(0.21))
FOUNDATIONS OF PROBABILITY IN PYTHON
Binomial distribution expected value and variance
(Cont.)
What are the expected value and variance for 10 fair coin ips?
binom.stats(n=10, p=0.5)
(array(5.), array(2.5))
FOUNDATIONS OF PROBABILITY IN PYTHON
Let's calculate
expected values and
variance from data
F O U N D AT I O N S O F P R O B A B I L I T Y I N P Y T H O N