{
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "aiFoINOVTq5m"
},
"source": [
"# Введение в анализ данных\n",
"## Домашнее задание 8. Вероятность.\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "AmfXdrLokdOg"
},
"source": [
"**Правила, прочитайте внимательно:**\n",
"\n",
"* Выполненную работу нужно отправить телеграм-боту `@thetahat_ds25_bot`. Для начала работы с ботом каждый раз отправляйте `/start`. Дождитесь подтверждения от бота, что он принял файл. Если подтверждения нет, то что-то не так. **Работы, присланные иным способом, не принимаются.**\n",
"* Дедлайн см. в боте. После дедлайна работы не принимаются кроме случаев наличия уважительной причины.\n",
"* Прислать нужно **ноутбук в формате `ipynb`**. Если вы строите интерактивные графики, их стоит прислать в формате html.\n",
"* Следите за размером файлов. **Бот не может принимать файлы весом более 20 Мб.** Если файл получается больше, заранее разделите его на несколько.\n",
"* Выполнять задание необходимо полностью самостоятельно. **При обнаружении списывания всем участникам списывания дается штраф -2 балла к итоговой оценке за семестр.**\n",
"* Решения, размещенные на каких-либо интернет-ресурсах, не принимаются. Кроме того, публикация решения в открытом доступе может быть приравнена к предоставлении возможности списать.\n",
"* Обратите внимание на правила использования ИИ-инструментов при решении домашнего задания.\n",
"* **Код из рассказанных на занятиях ноутбуков** можно использовать без ограничений.\n",
"* Для выполнения задания используйте этот ноутбук в качестве основы, ничего не удаляя из него. Можно добавлять необходимое количество ячеек.\n",
"* Комментарии к решению пишите в markdown-ячейках.\n",
"* Выполнение задания (ход решения, выводы и пр.) должно быть осуществлено на русском языке.\n",
"* Решение проверяется системой ИИ-проверки
**ThetaGrader**. Результат проверки валидируется и исправляется человеком, после чего комментарии отправляются студентам.\n",
"* Если код будет не понятен проверяющему, оценка может быть снижена.\n",
"* Никакой код из данного задания при проверке запускаться не будет. *Если код студента не выполнен, недописан и т.д., то он не оценивается.*\n",
"* **Код из рассказанных на занятиях ноутбуков** можно использовать без ограничений.\n",
"\n",
"**Правила оформления теоретических задач:**\n",
"\n",
"* Решения необходимо оформить в виде $\\LaTeX$ в markdown-ячейках. Иные способы (в т.ч. фотографии) не принимаются.\n",
"* Если вы не знаете $\\LaTeX$, используйте ИИ-инструменты для оформления черновика решения. Примеры были показаны на лекции 2 по ИИ-инструментам.\n",
"* **В решениях поясняйте, чем вы пользуетесь**, хотя бы кратко.\n",
"* Решение, в котором есть только ответ, и отсутствуют вычисления, оценивается в 0 баллов.\n",
"\n",
"\n",
"Важно!!! Правила заполнения ноутбука:\n",
"* Запрещается удалять имеющиеся в ноутбуке ячейки, менять местами положения задач.\n",
"* Сохраняйте естественный линейный порядок повествования в ноутбуке сверху-вниз.\n",
"* Отвечайте на вопросы, а также добавляйте новые ячейки в предложенных местах, которые обозначены `...`.\n",
"* В markdown-ячейка, содержащих описание задачи, находятся специальные отметки, которые запрещается модифицировать.\n",
"* При нарушении данных правил работа может получить 0 баллов.\n",
"\n",
"**Баллы за задание:**\n",
"\n",
"Легкая часть (достаточно на \"хор\"):\n",
"* Задача 1 — 40 баллов за контест и 20 баллов за ноутбук\n",
"* Задача 2 — 40 баллов\n",
"\n",
"Сложная часть (необходимо на \"отл\"):\n",
"* Задача 3 — 80 баллов\n",
"* Задача 4 — 20 баллов"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "R4ED62s8Tq5o"
},
"outputs": [],
"source": [
"# Bot check\n",
"\n",
"# HW_ID: fpmi_ad8\n",
"# Бот проверит этот ID и предупредит, если случайно сдать что-то не то.\n",
"\n",
"# Status: not final\n",
"# Перед отправкой в финальном решении удали \"not\" в строчке выше.\n",
"# Так бот проверит, что ты отправляешь финальную версию, а не промежуточную.\n",
"# Никакие значения в этой ячейке не влияют на факт сдачи работы."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "8F29PUfCTq5p"
},
"outputs": [],
"source": [
"import numpy as np\n",
"import pandas as pd\n",
"import matplotlib.pyplot as plt\n",
"import seaborn as sns\n",
"\n",
"sns.set(style='whitegrid', font_scale=1.3, palette='Set2')"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "xJAyQY3ATq5p"
},
"source": [
"---\n",
"### Легкая часть\n",
"---"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "qcz3psobTq5p"
},
"source": [
"\n",
"### Задача 1.\n",
"\n",
"**При решении данной задачи можно использовать ИИ-инструменты только для построения графиков и оформления документации к коду. Использование ИИ-инструментов для решения контеста запрещено.**\n",
"\n",
"\n",
"**Части 1-3**\n",
"\n",
"Условие задачи в контесте, ссылка на который отправлена через бот.\n",
"Далее можно использовать как свою реализацию функций, так и библиотечную."
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "1R6wzJlMTq5p"
},
"source": [
"**Часть 4**\n",
"\n",
"\n",
"Для $U[0, 1]$ сгенерируйте $200$ независимых случайных величин, постройте график плотности на отрезке $[-0.25, 1.25]$, а также гистограмму по сгенерированным случайным величинам. Для построения графика необходимо брать достаточно большое количество точек сетки."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "uXVsnolnTq5q"
},
"outputs": [],
"source": [
"..."
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "4tIOchWZTq5q"
},
"source": [
"Исследуйте, как меняются значения случайных величин в зависимости от `precision` в написанной ранее вами функции."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "N-wNF6CRTq5q"
},
"outputs": [],
"source": [
"..."
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "dhuHtvYfTq5q"
},
"source": [
"Для $\\mathcal{N}(0, 1)$ сгенерируйте $200$ независимых случайных величин, постройте график плотности на отрезке $[-3, 3]$, а также гистограмму по сгенерированным случайным величинам."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "v_IhIurbTq5q"
},
"outputs": [],
"source": [
"..."
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "BPr1203cTq5q"
},
"source": [
"Для $Exp(1)$ сгенерируйте выборку размера 100 и постройте график плотности этого распределения на отрезке $[-0.5, 5]$."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true,
"id": "UJDJLFdiTq5q"
},
"outputs": [],
"source": [
"..."
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "AE4jC8vjTq5q"
},
"source": [
"**Выводы:**"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "LrcaQQR0Tq5q"
},
"source": [
"..."
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "J9SjaXmSTq5q"
},
"source": [
"---\n",
"\n",
"### Задача 2.\n",
"\n",
"Рассмотрим распределение Коши с плотностью\n",
"$$p(x) = \\frac{1}{\\pi(1+x^2)}$$\n",
"для $x\\in\\mathbb{R}$, которое известно своими тяжелыми хвостами. Иначе говоря, плотность убывает медленно при $x \\to \\infty$ (точное определение может различаться для разных источников). Сравните, например, с нормальным или экспоненциальным распределениями. В частности, из-за этого у распределения Коши даже не существует математического ожидания.\n",
"\n",
"За распределение Коши отвечает класс `scipy.stats.cauchy`.\n",
"\n",
"**1.** Визуализируйте на одном графики плотности нормального распределения и распределения Коши. Что можно сказать?"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "oHqeGmb8Tq5q"
},
"outputs": [],
"source": [
"..."
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "gn6H7XQxTq5q"
},
"source": [
"**2.** Повторите эксперимент с занятия про закон больших чисел для распределения Коши. Выполняется ли закон?"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "WcoYpW21Tq5q"
},
"outputs": [],
"source": [
"..."
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "86G9FyA5Tq5r"
},
"source": [
"**3.** Аналогичным образом проведите эксперимент по изучению зависимости *выборочной* медианы от размера выборки. Медиану по выборке можно посчитать с помощью `np.median`."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "Velx3va-Tq5r"
},
"outputs": [],
"source": [
"..."
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "aURaYcxfTq5r"
},
"source": [
"**Вывод:**"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "tGmiqdAHTq5r"
},
"source": [
"..."
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "a_XbholOTq5r"
},
"source": [
"---\n",
"### Сложная часть\n",
"---"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "ggDHNma7Tq5r"
},
"source": [
"### Задача 3.\n",
"\n",
"Перед выполнением этой задачи настоятельно рекомендуется посмотреть ноутбук с лекции про закон больших чисел.\n",
"\n",
"На практике не редко возникает вопрос — **сколько времени потребуется на сбор данных, чтобы оценить среднее с достаточной точностью**. Для ответа на этот вопрос можно использовать различные теоретические оценки, в частности, неравенство Чебышева.\n",
"\n",
"Другой способ — смоделировать большое количество выборок.\n",
"Возьмем в качестве меры отклонения от среднего *среднее значение модуля отклонения от среднего*, то есть\n",
"$$F(n) = \\frac{1}{K}\\sum\\limits_{j=1}^{K} \\left| S_{nj} - a \\right|,$$\n",
"где $a$ — математическое ожидание элемента выборки, $S_{nj}$ — *выборочное* среднее $n$ элементов в $j$-й выборке, а $K$ — общее количество выборок.\n",
"\n",
"**1.** Рассмотрим распределения $Bern(a)$ для $a=0.5$. Пусть для нас допустимо отклонение на 0.02, иначе говоря при *истинном* среднем 0.5 мы считаем достаточно точными значения *выборочного* среднего от 0.48 до 0.52. Тогда в качестве *приближения* необходимого размера выборок можно взять наименьшее значение $n$, при котором $F(n) \\leqslant 0.02$.\n",
"\n",
"Реализуйте данный эксперимен для $K=500$ и найдите значение $n$. Визуализируйте зависимость $F(n)$ от $n$ в обычном и логарифмическом масштабах (по тем осям, по которым это имеет смысл).\n",
"\n",
"Для реализации без циклов стоит генерировать достаточно большие выборки и использовать функцию `np.where`."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "bAZI4IDPTq5r"
},
"outputs": [],
"source": [
"..."
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "Na3Nnml0Tq5r"
},
"source": [
"**2.** Повторите данный эксперимент для значений $a$ от 0.05 до 0.95 с шагом 0.05. Визуализируйте зависимость необходимого размера выборки $n$ от значения $a$.\n",
"\n",
"При реализации можно сделать цикл по значениям $a$."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "5ymS7Tw7Tq5r"
},
"outputs": [],
"source": [
"..."
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "FyqXii71Tq5r"
},
"source": [
"**Выводы:**"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "zRomTciYTq5r"
},
"source": [
"..."
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "YVcXXRUIT4D-"
},
"source": [
"---\n",
"### Задача 4."
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "O6XoPK6ei8cb"
},
"source": [
"Перед выполнением этой задачи настоятельно рекомендуется посмотреть ноутбук с лекции про условное математическое ожидание и условное распределение.\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "zIW7_lGyTwTI"
},
"source": [
"Рассмотрим следующее вероятностное пространство:\n",
"* $\\Omega = \\{1, 2, 3, 4, 5, 6, 7, 8\\}$ – номера точек на единичной окружности.\n",
"\n",
"\n",
"* $\\sigma$-алгебра $\\mathscr{F}$, которая включает все подмножества множества $\\Omega$, $\\mathscr{F} = 2^{\\{1, 2, 3, 4, 5, 6, 7, 8\\}}$\n",
"* $\\mathsf{P}$ - равномерное распределение:\n",
"$$\n",
"\\mathsf{P}(\\omega = \\{k\\}) = \\frac{1}{8}, \\quad k = 1, 2, \\ldots, 8.\n",
"$$\n",
"\n",
"Определим случайную величину следующим образом:\n",
"$$\n",
"X(\\omega) = \\sin\\left(\\frac{2\\pi (\\omega - 1)}{8}\\right) = \\sin\\left(\\frac{\\pi (\\omega - 1)}{4}\\right)$$\n",
"Интерпретация: значение координаты $y$ для точки с номером $w$ на единичной окружности.\n",
"\n",
"\n",
"Пусть случайная величина $Y$ определяется следующим образом:\n",
"$$ Y(\\omega) = \\begin{cases}\n",
"1, & \\text{если } \\sin\\left(\\frac{\\pi (\\omega - 1)}{4}\\right) \\geq 0, \\\\\n",
"0, & \\text{иначе.}\n",
"\\end{cases} $$\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "OfJCMMsoVD0y"
},
"source": [
"Какому наблюдению соответствует случайная величина $Y$?"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "M6SJi5zjVEnW"
},
"source": [
"..."
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "nuFJQ_kWU-mG"
},
"source": [
"\n",
"\n",
"Найдите:\n",
"* Условное распределение $X|Y$;\n",
"* Условное математическое ожидание $\\mathsf{E}(X|Y=1)$;\n",
"* Условное математическое ожидание $\\mathsf{E}(X|Y=0)$.\n",
"\n",
"Визуализируйте условное распределение $X|Y$."
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "3VSlWOgkVPYQ"
},
"source": [
"..."
]
}
],
"metadata": {
"colab": {
"provenance": []
},
"hide_input": false,
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.11.6"
}
},
"nbformat": 4,
"nbformat_minor": 0
}