{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Вероятность и Мат. Статистика часть 1.\n",
"Шестаков А.В. Майнор по анализу данных - 09/02/2016"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"import numpy as np\n",
"import scipy.stats as stat\n",
"import matplotlib.pyplot as plt \n",
"\n",
"plt.style.use('ggplot')\n",
"\n",
"%matplotlib inline"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Birthday Paradox"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Для начала, скажите у кого когда день рождения?)\n",
"\n",
"А теперь вопрос какова вероятность, что в классе из $n$ человек **хотя бы у двух** человек день рождения приходится на один и тот же день. Расчитаем вероятность:\n",
"\n",
"Пусть $P(n)$ - искомая вероятность. Найдем дополнение к ней $\\bar{P}(n) = 1-P(n)$, что означает, что в нашем классе у всех человек дни рождения различны. Возьмём любого человека и запомним его день рождения. У вероятность, что у следующего человека день рождения в тот же день равна $(1 - \\frac{1}{365})$. У третьего - $(1 - \\frac{2}{365})$, и так далее. Теперь нам нужно совместить все эти события.\n",
"\n",
"Так как они независимы, то мы можем просто перемножить найденные вероятности:\n",
"\n",
"$$ \\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)!} $$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Попробуйте посчитать это число в лоб."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"## Your code here\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Мы же воспользуемся другим подходом!
Мы будем генерировать случайные группы людей, в каждой будем проверять, есть ли среди них хотя бы она пара с одинаковым днем рождения, а затем усредним наши результаты за все эксперименты. Такой метод оценки с помощью многокраного повторения какого-либо эксперимента называется **Методом Монте-Карло**."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"n = 20 # количество человек в классе\n",
"exper_num = 100000 # количество экспериментов\n",
"\n",
"# Your code here\n",
"def birthday_montecarlo(n, exper_num):\n",
" "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Используйте разработанную функцию, чтобы построить график $P(n)$"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"# Your code here\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Центральная предельная теорема"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Центральная предельная теорема гласит (неформально):
\n",
"Закон распределения среднего значение выборки размера $N$ из генеральной совокупности приближается к нормальному распределению с увеличением $N$.
\n",
"Например, хотим мы расчитать средний рост человека, но ведь для этого нужны наблюдения по всем людям. Чего у нас нет, но можно попробовать оценить.
\n",
"\n",
"* Создайте случайную выборку из $100$ наблюдений\n",
"* Нарисуйте её гистограмму, оцените среднее и дисперсию\n",
"* Задайте параметр `N<100`, и `num_exper` раз случайно отсемплируйте выборку.\n",
"* Для каждого сэмпла расчитайте среднее, затем постройте распределение средних значений\n",
"* Попробуйте наложить на полученную гистограмму нормальное распределение"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"np.random.seed(100) # Для репродукции\n",
"\n",
"# Your code here\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Формула Байеса"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$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)} $$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Рассмотрите следующую таблицу:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"import pandas as pd\n",
"\n",
"df = pd.DataFrame({'Weather': ['Sunny', 'Overcast', 'Rainy', 'Sunny', 'Sunny', 'Overcast', 'Rainy', 'Rainy', 'Sunny', 'Rainy', 'Sunny', 'Overcast', 'Overcast', 'Rainy'], \n",
" 'Play': [0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0]})\n",
"\n",
"df"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Найдите вероятность игры в солнечную погоду"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.11"
}
},
"nbformat": 4,
"nbformat_minor": 0
}