Вероятность и Мат. Статистика часть 1.

Шестаков А.В. Майнор по анализу данных - 09/02/2016

In [ ]:
import numpy as np
import scipy.stats as stat
import matplotlib.pyplot as plt 

plt.style.use('ggplot')

%matplotlib inline

Birthday Paradox

Для начала, скажите у кого когда день рождения?)

А теперь вопрос какова вероятность, что в классе из $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)!} $$

Попробуйте посчитать это число в лоб.

In [ ]:
## Your code here

Мы же воспользуемся другим подходом!
Мы будем генерировать случайные группы людей, в каждой будем проверять, есть ли среди них хотя бы она пара с одинаковым днем рождения, а затем усредним наши результаты за все эксперименты. Такой метод оценки с помощью многокраного повторения какого-либо эксперимента называется Методом Монте-Карло.

In [ ]:
n = 20 # количество человек в классе
exper_num  = 100000 # количество экспериментов

# Your code here
def birthday_montecarlo(n, exper_num):
    

Используйте разработанную функцию, чтобы построить график $P(n)$

In [ ]:
# Your code here

Центральная предельная теорема

Центральная предельная теорема гласит (неформально):
Закон распределения среднего значение выборки размера $N$ из генеральной совокупности приближается к нормальному распределению с увеличением $N$.
Например, хотим мы расчитать средний рост человека, но ведь для этого нужны наблюдения по всем людям. Чего у нас нет, но можно попробовать оценить.

  • Создайте случайную выборку из $100$ наблюдений
  • Нарисуйте её гистограмму, оцените среднее и дисперсию
  • Задайте параметр N<100, и num_exper раз случайно отсемплируйте выборку.
  • Для каждого сэмпла расчитайте среднее, затем постройте распределение средних значений
  • Попробуйте наложить на полученную гистограмму нормальное распределение
In [ ]:
np.random.seed(100) # Для репродукции

# Your code here

Формула Байеса

$$P(A_i|B) = \frac{P(B|A_i)\cdot P(A_i)}{\sum_{i=1}^n P(B|A_i) \cdot P(A_i)} $$

Рассмотрите следующую таблицу:

In [ ]:
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

Найдите вероятность игры в солнечную погоду