{ "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 }