Шестаков А.В. Майнор по анализу данных - 09/02/2016
import numpy as np
import scipy.stats as stat
import matplotlib.pyplot as plt
plt.style.use('ggplot')
%matplotlib inline
Для начала, скажите у кого когда день рождения?)
А теперь вопрос какова вероятность, что в классе из $n$ человек хотя бы у двух человек день рождения приходится на один и тот же день. Расчитаем вероятность:
Пусть $P(n)$ - искомая вероятность. Найдем дополнение к ней $\bar{P}(n) = 1-P(n)$, что означает, что в нашем классе у всех человек дни рождения различны. Возьмём любого человека и запомним его день рождения. У вероятность, что у следующего человека день рождения в тот же день равна $(1 - \frac{1}{365})$. У третьего - $(1 - \frac{2}{365})$, и так далее. Теперь нам нужно совместить все эти события.
Так как они независимы, то мы можем просто перемножить найденные вероятности:
$$ \bar{P}(n) = \prod_{i=1}^{n-1}(1 - \frac{i}{365}) = \frac{365 \cdot 364 \cdot (365 - n + 1)} {365^n} = \frac{365!}{365^n(365 -n)!} $$Попробуйте посчитать это число в лоб.
## Your code here
Мы же воспользуемся другим подходом!
Мы будем генерировать случайные группы людей, в каждой будем проверять, есть ли среди них хотя бы она пара с одинаковым днем рождения, а затем усредним наши результаты за все эксперименты. Такой метод оценки с помощью многокраного повторения какого-либо эксперимента называется Методом Монте-Карло.
n = 20 # количество человек в классе
exper_num = 100000 # количество экспериментов
# Your code here
def birthday_montecarlo(n, exper_num):
Используйте разработанную функцию, чтобы построить график $P(n)$
# Your code here
Центральная предельная теорема гласит (неформально):
Закон распределения среднего значение выборки размера $N$ из генеральной совокупности приближается к нормальному распределению с увеличением $N$.
Например, хотим мы расчитать средний рост человека, но ведь для этого нужны наблюдения по всем людям. Чего у нас нет, но можно попробовать оценить.
N<100
, и num_exper
раз случайно отсемплируйте выборку.np.random.seed(100) # Для репродукции
# Your code here
Рассмотрите следующую таблицу:
import pandas as pd
df = pd.DataFrame({'Weather': ['Sunny', 'Overcast', 'Rainy', 'Sunny', 'Sunny', 'Overcast', 'Rainy', 'Rainy', 'Sunny', 'Rainy', 'Sunny', 'Overcast', 'Overcast', 'Rainy'],
'Play': [0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0]})
df
Найдите вероятность игры в солнечную погоду