Учебный курс

Сбор и анализ данных в Python — неделя 1: основы теории вероятностей

Конспект первой недели курса «Сбор и анализ данных в Python» из специализации «Машинное обучение: от статистики до нейросетей». Пятнадцать статей охватывают основы вероятности, случайные величины и распределения, описательные статистики, эмпирическое распределение, работу с pandas, группировку и визуальный анализ данных. К каждой статье приложен набор карточек для самопроверки. Материал составлен по субтитрам видеоуроков и учебным ноутбукам, дополнен пояснениями и примерами. Дополнительная справочная статья объединяет команды NumPy, SciPy, pandas, Matplotlib, seaborn и statsmodels, использованные в курсе.

#математика#теория вероятностей#статистика#python#машинное обучение#конспект
Лайков: 3

Сохранений: 4

Автор: yuriy konkovСкопировать курс и учиться

Введение и картина мира

1.1. Дорожная карта курса

Автор: yuriy konkov · Карточек: 6

1.1 Дорожная карта курса

Коротко

  • Курс состоит из двух пластов: теоретического (теория вероятностей) и практического (сбор данных, описательные статистики, визуализация). Они идут вперемешку, а не друг за другом.

  • Теория нужна не сама по себе: каждое понятие отсюда всплывёт в следующих курсах специализации — в статистике, в A/B-тестах, в машинном обучении.

  • Две главные теоремы курса — центральная предельная теорема (ЦПТ) и закон больших чисел (ЗБЧ). Они объясняют, почему статистические методы вообще работают.

  • Практика: свой парсер на Python, сбор данных о мемах, разведочный анализ (EDA) и визуализация.

  • Главная цель недели — собрать «клубок» определений, в котором всё связано друг с другом, и увидеть, что теория напрямую сцеплена с реальными данными.


1. Зачем вообще нужен этот курс

Курс — вводный кирпич специализации. Его задача не «рассказать теорвер ещё раз», а собрать тот минимальный набор понятий, на который потом будет опираться всё остальное: проверка гипотез, доверительные интервалы, регрессия, метрики качества моделей.

Логика простая: эти определения будут всплывать постоянно, значит разобраться в них надо досконально и один раз, а не догадываться каждый раз заново.

graph TD
    A["Курс: Сбор и анализ данных в Python"] --> B["Пласт 1: теория"]
    A --> C["Пласт 2: практика"]
    B --> B1["Основные понятия теорвера<br/>СВ, распределение, плотность"]
    B --> B2["Характеристики<br/>матожидание, дисперсия"]
    B --> B3["Зоопарк распределений<br/>и связь с реальностью"]
    B --> B4["Две теоремы:<br/>ЦПТ и ЗБЧ"]
    C --> C1["Симуляции на Python"]
    C --> C2["Описательные статистики"]
    C --> C3["Парсер: сбор данных о мемах"]
    C --> C4["EDA и визуализация"]
    B4 --> D["Следующие курсы:<br/>статистика, A/B-тесты, ML"]
    C4 --> D

2. Теоретический пласт

2.1. Базовые определения

Первое, что разбирается, — словарь, без которого дальше не поговорить:

Понятие Что отвечает на вопрос Разбирается в уроке
Случайная величина Что мы вообще измеряем? 1.3
Закон распределения С какими вероятностями она принимает значения? 1.3
Плотность распределения То же, но для непрерывного случая 1.3
Функция распределения Какова вероятность оказаться левее точки? 1.3
Математическое ожидание Какое значение типично? 1.4
Дисперсия Насколько сильно значения разбросаны? 1.4

Причём считать эти характеристики предстоит для самых разных распределений, а не только для одного учебного примера.

2.2. Зоопарк распределений и связь с реальностью

Отдельная большая тема — какие случайные величины бывают «в природе»: когда уместно одно распределение, когда другое. Цель — не выучить список формул, а провязать распределения с реальностью и научиться отвечать на вопрос: «какую модель тут разумно выбрать?»

Это разбирается в уроке 1.5.

2.3. Симуляции на Python

Все эти случайные величины предстоит научиться симулировать в Python. Это не декоративный навык: симуляция — рабочий инструмент. Когда аналитическая формула не выводится или выводится тяжело, ставится численный эксперимент.

Зачем это на практике Симуляция отвечает на вопросы вида «а что будет, если…», когда честная математика слишком трудна:

  • Сколько в среднем придётся ждать, если очередь устроена вот так?

  • Какова вероятность, что при таком трафике сервис упрётся в лимит?

  • Насколько «случайной» могла быть разница между вариантами A и B в эксперименте?

Метод в общем виде называется методом Монте-Карло: прогнать процесс много тысяч раз и посмотреть на распределение исходов.

2.4. Две теоремы, на которых держится статистика

Центральная предельная теорема (ЦПТ). Неформально: сумма (или среднее) большого числа независимых слагаемых ведёт себя примерно как нормальное распределение — почти независимо от того, как распределены сами слагаемые.

Xˉn−μσ/n→n→∞N(0,1)\frac{\bar{X}_n - \mu}{\sigma / \sqrt{n}} \xrightarrow[n \to \infty]{} N(0, 1)

Иллюстрация к конспекту: l1_clt Исходные слагаемые — равномерные, то есть на колокол совсем не похожи. Но уже при n=12n = 12 распределение их среднего практически сливается с N(0,1)N(0, 1).

Именно поэтому нормальное распределение «лезет из всех щелей». Важная часть разговора — когда ЦПТ применять нельзя (например, при тяжёлых хвостах или зависимых наблюдениях). Дальше по курсу это будет проговариваться каждый раз, когда очередной статистический метод на неё опирается.

Закон больших чисел (ЗБЧ). Неформально: выборочное среднее с ростом объёма выборки сходится к истинному матожиданию.

Xˉn=1n∑i=1nXi→n→∞E(X)\bar{X}_n = \frac{1}{n}\sum_{i=1}^{n} X_i \xrightarrow[n \to \infty]{} \mathbb{E}(X)

Иллюстрация к конспекту: l1_lln Четыре независимые серии бросков кости. На первых десятках бросков среднее скачет как угодно, дальше все траектории прижимаются к E(X)=3,5\mathbb{E}(X) = 3{,}5.

Расширение: при чём здесь страховки В лекции упоминается, что ЗБЧ «разрешил людям зарабатывать на страховках». Механика такая:

Отдельный страховой случай непредсказуем — конкретный дом либо сгорит, либо нет. Но если застраховать много независимых домов, доля сгоревших будет близка к настоящей вероятности пожара. Значит, суммарные выплаты предсказуемы, и страховщик может назначить премию чуть выше ожидаемых выплат и стабильно зарабатывать.

Ключевое условие — независимость. Когда риски скоррелированы (наводнение топит сразу весь район, а ипотечные дефолты случаются одновременно), ЗБЧ не спасает. На этом, в частности, сыпались страховщики в кризис 2008 года.


3. Практический пласт

3.1. Описательные статистики сквозь призму случайности

Считать среднее, медиану и дисперсию по выборке — механическая часть. Куда важнее мысль, ради которой это всё:

Главная идея блока Описательная статистика, посчитанная по выборке, — сама случайная величина. Опросили двух дополнительных респондентов — все числа поехали.

Насколько сильно они поедут, зависит от свойств исходной величины: где-то изменения будут незначительными, а где-то — драматическими. Отсюда и вывод: чтобы делать корректные выводы, недостаточно посчитать среднее. Нужны статистические алгоритмы, которые учитывают эту случайность. Их построением займутся следующие курсы специализации.

3.2. Сбор данных: свой парсер

Данные надо откуда-то брать. В рамках курса пишется собственный парсер на Python, который собирает информацию о мемах из интернета.

3.3. EDA и визуализация

Собранные данные анализируются: разведочный анализ данных (EDA) и визуализация. Задача этого этапа — увидеть закономерности и сформулировать гипотезы о реальности. Проверять их статистическими методами будут уже дальше.

graph LR
    A["Парсер<br/>собираем данные"] --> B["EDA + визуализация<br/>видим закономерности"]
    B --> C["Формулируем гипотезы"]
    C --> D["Проверяем статистикой<br/>следующие курсы"]

4. Как устроена подача

Теория и практика перемешаны — блоки не идут строго друг за другом. Это осознанный выбор: определение, которое сразу применили к данным, запоминается лучше изолированного.


5. Итог: что должно остаться в голове

# Цель недели
1 Знать основные определения теории вероятностей — не «слышал», а уметь применить
2 Видеть, что все они переплетены в один клубок, а не существуют по отдельности
3 Понимать, что теория не абстрактна — она напрямую сопряжена с данными
4 Понимать, зачем это дальше: следующие курсы будут постоянно возвращаться к этому клубку

Проверь себя

Какие два «пласта» есть в курсе и почему они идут вперемешку?

Теоретический (теория вероятностей: случайные величины, распределения, характеристики, ЦПТ и ЗБЧ) и практический (симуляции, описательные статистики, парсинг, EDA). Вперемешку — чтобы теория сразу подкреплялась данными и не воспринималась как абстракция.

О чём говорит центральная предельная теорема и зачем она нужна?

О том, что среднее большого числа независимых наблюдений распределено примерно нормально, почти независимо от распределения самих наблюдений. Нужна потому, что на ней держится большая часть статистических методов: доверительные интервалы, t-тесты и прочее. Отдельно важно знать границы её применимости.

Почему на описательные статистики нужно смотреть «сквозь призму случайности»?

Потому что они посчитаны по конкретной выборке. Другая выборка — другие числа. Статистика по выборке сама является случайной величиной, и без учёта этого выводы будут некорректными.

Как закон больших чисел связан со страховым бизнесом?

Отдельный страховой случай непредсказуем, но на большом числе независимых договоров доля страховых случаев стабилизируется около истинной вероятности. Это делает суммарные выплаты предсказуемыми и позволяет назначить премию с запасом. Ломается, когда риски скоррелированы.


Навигация

  • Следующий урок: 1.2 Что такое случайность и как устроен мир

  • Оглавление курса: 00 Курс — оглавление и шпаргалка

  1. Центральная предельная теорема (ЦПТ)

    Среднее большого числа независимых слагаемых распределено приблизительно нормально, почти независимо от распределения самих слагаемых

  2. Закон больших чисел (ЗБЧ)

    Выборочное среднее сходится к истинному математическому ожиданию с ростом объёма выборки

  3. При каком условии закон больших чисел позволяет страховой компании работать прибыльно?

    Страховые случаи должны быть независимыми: при скоррелированных рисках суммарные выплаты перестают быть предсказуемыми

    Подсказка: Что происходит, когда наводнение топит сразу весь район?

  4. Почему описательную статистику, посчитанную по выборке, рассматривают как случайную величину?

    Её значение зависит от того, какие наблюдения попали в выборку: при другой выборке оно изменится

  5. Метод Монте-Карло

    Численный метод, в котором процесс многократно симулируют и делают выводы по распределению полученных исходов

  6. Разведочный анализ данных (EDA)

    Этап работы, на котором в данных ищут закономерности и формулируют гипотезы, ещё не проверяя их статистическими методами

Показано 6 из 6 карточек

1.2. Случайность и устройство мира

Автор: yuriy konkov · Карточек: 12

1.2 Что такое случайность и как устроен мир

Коротко

  • Случайности в мире может не быть вовсе. Кубик и автобус детерминированы физикой — мы просто не можем измерить все влияющие факторы.

  • Вероятность — это способ измерить собственное незнание, а не свойство самого объекта. Разрыв между устройством мира и нашей способностью его познать и называется случайностью.

  • Эту мысль впервые оформили Байес и Лаплас (демон Лапласа, концепция детерминизма).

  • Отсюда два лагеря: байесовцы (вероятность может быть субъективной — степень уверенности) и частотники (вероятность объективна — это предельная частота повторяющихся событий).

  • Главная рабочая метафора всего курса — сундук: невидимый процесс порождения данных. Мы видим только выборки, которые он выплёвывает, и по ним пытаемся угадать, как он устроен внутри.


0. Соглашение об обозначениях

Эта табличка действует весь курс. Её стоит запомнить сразу — дальше все формулы будут читаться в ней.

Обозначение Что значит Пример
X,Y,ZX, Y, Z — заглавные с конца алфавита случайные величины XX — рост случайного человека
x,y,zx, y, z — строчные с конца алфавита конкретные значения, которые они приняли x=178x = 178 см
A,B,C,DA, B, C, D — заглавные с начала алфавита события AA = «выпал орёл»
P\mathbb{P} вероятность P(A)=0,5\mathbb{P}(A) = 0{,}5
E(X)\mathbb{E}(X) математическое ожидание E(X)=175\mathbb{E}(X) = 175
Var(X)\mathrm{Var}(X) дисперсия Var(X)=49\mathrm{Var}(X) = 49
Cov(X,Y)\mathrm{Cov}(X, Y) ковариация —
ρ(X,Y)\rho(X, Y) корреляция —

Почему это важнее, чем кажется Разница между XX и xx — не педантизм. XX — это вся случайность целиком, весь механизм с его вероятностями. xx — один уже выпавший результат, обычное число. Путаница между ними — источник половины ошибок в статистике: например, «доверительный интервал накрывает параметр с вероятностью 95 %» верно только пока интервал ещё случаен, то есть пока он XX, а не xx.


1. Есть ли в мире случайность?

Два привычных примера «случайного»:

  • Игральная кость. Говорим: каждая грань выпадает с вероятностью 1/61/6.

  • Автобус. Говорим: время до его прихода — случайная величина.

Но присмотримся.

Если бы мы точно знали момент вращения при броске, скорость и направление потоков воздуха в комнате, упругость стола, положение центра масс кубика — мы бы однозначно предсказали выпавшую грань. Никакой случайности.

С автобусом то же самое: зная трафик по всему городу, светофорные циклы и траекторию машины, мы точно посчитаем время прибытия.

Вывод Мы называем эти явления случайными не потому, что они случайны, а потому что не в состоянии измерить все факторы, влияющие на результат. На такое измерение нужно немыслимое количество ресурсов, а их у нас нет.


2. Демон Лапласа и детерминизм

Первым это отчётливо сформулировал Пьер-Симон Лаплас в XVIII веке. Он вообразил существо, способное провести все измерения и точно предсказать будущее, — сегодня его называют демоном Лапласа.

Концепция детерминизма звучит так: все явления вокруг нас не случайны. Если бы мы знали положение и скорость каждого атома, будущее предсказывалось бы точно.

Но между совершенством детерминированной природы и несовершенством человеческого познания лежит пропасть. Преодолеть её мы не можем, поэтому вынуждены упрощать происходящее — и называть результат этого упрощения случайностью.

graph LR
    A["Мир<br/>детерминирован"] -->|"мы не можем<br/>измерить всё"| B["Разрыв<br/>наше невежество"]
    B -->|"описываем разрыв<br/>количественно"| C["Вероятность<br/>мера неопределённости"]
    C --> D["Случайная величина<br/>как рабочая модель"]

Формулировка, которую стоит запомнить Вероятность — это язык для описания собственного незнания. Не свойство кубика, а свойство наших отношений с кубиком.

Ту же мысль, только более размыто, чуть раньше высказал Томас Байес — его имя закрепилось за целым направлением статистики.

Расширение: два вида неопределённости В лекции явно не названы термины, но речь идёт ровно об этом различении, и оно постоянно всплывает в ML:

Вид Что это Уходит ли с ростом данных
Эпистемическая (от незнания) Мы просто не знаем всех факторов: потоков воздуха, трафика Да. Больше знаний и измерений — меньше неопределённости
Алеаторная (внутренняя) Неустранимый шум самого процесса — как в квантовой механике Нет. Сколько данных ни собирай, останется

Детерминизм Лапласа утверждает, что вся неопределённость эпистемическая. Квантовая механика XX века с этим не согласилась. Для практики анализа данных различие полезно так: если ошибка модели эпистемическая — помогут новые признаки и данные; если алеаторная — не помогут, и надо принять предел точности.


3. Байесовцы против частотников

Из вопроса «что такое вероятность» выросли два подхода к статистике.

Байесовский подход Частотный подход
Что такое вероятность Степень уверенности. Может быть субъективной Предельная частота события. Должна быть объективной
Нужна ли повторяемость Нет Да, событие должно происходить больше одного раза
«Вероятность, что кандидат N станет президентом» Осмысленный вопрос: это моя степень уверенности Бессмысленный вопрос. Выборы происходят один раз
Что делают с данными Обновляют априорное убеждение до апостериорного Считают частоты и проверяют гипотезы

Иллюстрация к конспекту: l2_frequency Так частотник понимает слова «вероятность орла равна 0,5»: это не свойство отдельного броска, а то число, к которому прижимается доля орлов при бесконечном повторении опыта. Отсюда и требование воспроизводимости.

Позиция частотника на примере с выборами: чтобы посчитать вероятность, понадобилась бы куча параллельных вселенных, в которых выборы проходят в тех же условиях. Без воспроизводимости вероятность не определена в принципе.

Ключевая фигура частотного лагеря — Рональд Фишер. Он вместе с современниками ответственен практически за весь статистический аппарат, которым мы пользуемся сегодня: процедура проверки гипотез, метод максимального правдоподобия для оценки параметров. Обо всём этом речь пойдёт дальше по курсу.

Расширение: формула Байеса — ядро второго подхода

P(H∣D)⏟апостериорное=P(D∣H)⏞правдоподобие⋅P(H)⏞априорноеP(D)\underbrace{\mathbb{P}(H \mid D)}_{\text{апостериорное}} = \frac{\overbrace{\mathbb{P}(D \mid H)}^{\text{правдоподобие}} \cdot \overbrace{\mathbb{P}(H)}^{\text{априорное}}}{\mathbb{P}(D)}

Читается так: было убеждение о гипотезе HH, пришли данные DD, убеждение обновилось. Именно возможность иметь априорное убеждение P(H)\mathbb{P}(H) и делает вероятность субъективной — двое с разным опытом стартуют с разных априорных и получат разные ответы на одних данных.

Частотник такого себе не позволяет: у него нет P(H)\mathbb{P}(H), гипотеза либо верна, либо нет, а случайны только данные.

Позже в курсе разбирается, как эти два подхода дополняют друг друга, а не воюют.


4. Главная метафора курса: сундук

Вот центральная модель, к которой всё сводится.

Где-то существует процесс порождения данных — та самая механика реальности, которая производит наблюдения. Назовём его сундуком. Внутреннего устройства сундука мы не знаем и не увидим никогда. Мы видим только то, что он выплёвывает наружу: выборки.

graph TD
    S["🧰 СУНДУК<br/>процесс порождения данных<br/>устройство неизвестно"]
    S -->|"порождает"| V["Выборка<br/>x₁, x₂, …, xₙ<br/>это мы видим"]
    V -->|"смотрим на данные"| M["Модель<br/>предположение о том,<br/>как сундук устроен внутри"]
    M -->|"проверяем на тех же данных"| C{"Модель<br/>релевантна?"}
    C -->|"да"| OK["Пользуемся,<br/>делаем выводы"]
    C -->|"нет"| M2["Меняем модель"]
    M2 --> M

Рабочий цикл получается такой:

  1. Сундук выдал нам выборку.

  2. Мы предполагаем модель — как он устроен изнутри.

  3. Мы проверяем предположение по тем самым реальным данным.

  4. Если не сходится — модель меняем.

Что здесь принципиально Модель — это описание нашего невежества, а не описание истины. Мы не вскрываем сундук. Мы строим гипотезу о нём и смотрим, насколько она совместима с тем, что он нам выдал.

Уровни сложности моделей
Уровень Модель Что предполагаем
Простейший Одна случайная величина с некоторым распределением Данные — независимые реализации одной величины
Средний Регрессия Одни величины влияют на другие
Сложный Матричные разложения, нейронные сети Сложные взаимосвязи между множеством величин

В этом курсе работаем с простейшим уровнем — одна случайная величина. Даже на нём уже можно делать содержательные выводы. Более сложные уровни — дальше по специализации.


5. Итог

Вопрос Ответ урока
Есть ли случайность в мире? Возможно, нет. Кубик и автобус детерминированы физикой
Почему тогда говорим «случайно»? Не можем измерить все влияющие факторы — не хватает ресурсов
Что такое вероятность? Способ измерить неопределённость, порождённую нашим незнанием
Кто это сформулировал? Байес, затем Лаплас (демон Лапласа, детерминизм)
Чем отличаются два лагеря? Байесовцы: вероятность субъективна. Частотники: только объективная частота повторяемых событий
Что мы делаем в анализе данных? Видим выборку из сундука → предполагаем модель → проверяем её на данных

Проверь себя

Почему бросок кубика на самом деле не случаен?

Потому что он полностью определяется физикой: моментом вращения, потоками воздуха, свойствами поверхности. Зная все эти параметры, результат можно предсказать однозначно. Случайным он выглядит из-за того, что измерить их все мы не в состоянии.

Что такое демон Лапласа?

Воображаемое существо, способное измерить положение и скорость каждого атома и потому точно предсказать будущее. Иллюстрация концепции детерминизма: мир не случаен, случайность — следствие ограниченности наблюдателя.

Почему частотник откажется отвечать на вопрос «какова вероятность, что кандидат N победит»?

Потому что для частотника вероятность — это предельная частота при многократном повторении. Конкретные выборы происходят один раз, воспроизвести их в тех же условиях нельзя, поэтому частота не определена. Байесовец ответит: это степень моей уверенности.

Что такое «сундук» и почему его нельзя открыть?

Сундук — процесс порождения данных, реальный механизм, производящий наблюдения. Открыть нельзя в принципе: доступны только выборки на выходе. Работа аналитика — выдвигать предположения о его устройстве и проверять их по данным.

Модель описывает реальность или что-то другое?

Она описывает наше незнание реальности — разрыв между идеальностью мира и ограниченностью наблюдателя. Поэтому вопрос «истинна ли модель» некорректен; корректный вопрос — «релевантна ли она имеющимся данным».


Навигация

  • Предыдущий урок: 1.1 Дорожная карта курса

  • Следующий урок: 1.3 Случайная величина и её распределение

  • Оглавление курса: 00 Курс — оглавление и шпаргалка

  1. Чем в обозначениях курса различаются заглавная X и строчная x?

    Заглавная X — сама случайная величина, то есть механизм со всеми её вероятностями; строчная x — конкретное значение, которое она уже приняла

  2. Демон Лапласа

    Воображаемое существо, способное измерить состояние каждого атома и потому точно предсказать будущее

  3. Детерминизм в концепции Лапласа

    Представление о том, что явления не случайны и при полном знании начальных условий предсказуемы точно

  4. Что в этом курсе понимается под вероятностью?

    Способ измерить неопределённость, порождённую неполнотой нашего знания, а не свойство самого объекта

  5. Как частотный подход определяет вероятность?

    Как предельную частоту события при многократном повторении опыта в одинаковых условиях

  6. Почему частотный подход отказывается приписывать вероятность победе конкретного кандидата на выборах?

    Событие происходит один раз и не воспроизводится в тех же условиях, поэтому частота для него не определена

    Подсказка: Чего не хватает, кроме данных опросов?

  7. Как байесовский подход трактует вероятность?

    Как степень уверенности, которая может быть субъективной и обновляется при поступлении данных

  8. Рональд Фишер

    Ключевая фигура частотной статистики, автор процедуры проверки гипотез и метода максимального правдоподобия

  9. «Сундук» как метафора курса

    Недоступный наблюдению процесс порождения данных: видны только выборки на его выходе, а устройство приходится предполагать

  10. Что описывает статистическая модель в концепции «сундука»?

    Наше незнание реальности: это предположение об устройстве процесса, а не сама истина

    Подсказка: Корректен ли вопрос «истинна ли модель»?

  11. Эпистемическая неопределённость

    Неопределённость от нехватки знаний и измерений; уменьшается при получении новых данных и признаков

  12. Алеаторная неопределённость

    Неустранимый внутренний шум самого процесса; не уменьшается, сколько данных ни собирай

Показано 12 из 12 карточек

Случайные величины и их характеристики

1.3. Случайная величина и её распределение

Автор: yuriy konkov · Карточек: 16

1.3 Случайная величина и её распределение

Коротко

  • Простейшая модель «сундука» — одна случайная величина. Она бывает дискретной (конечное или счётное число значений) и непрерывной (континуум значений).

  • Дискретную задают таблицей: значение → вероятность. Все вероятности в [0,1][0,1], сумма равна 1.

  • Непрерывную таблицей задать нельзя — значений бесконечно много. Её задают плотностью f(x)f(x). Вероятность = площадь под плотностью.

  • Функция распределения F(x)=P(X≤x)F(x) = \mathbb{P}(X \le x) работает одинаково в обоих случаях — это универсальный способ описания.

  • Для непрерывной величины P(X=a)=0\mathbb{P}(X = a) = 0 для любой точки aa. Это не значит «невозможно».


1. Что такое случайная величина

Продолжаем метафору из прошлого урока: сундук выплёвывает на нас данные, а мы пытаемся понять его устройство. В простейшем случае мы предполагаем, что внутри сундука — одна случайная величина.

Расширение: строгое определение В лекции определение даётся на пальцах, но полезно знать формальное. Случайная величина — это функция X:Ω→RX: \Omega \to \mathbb{R}, которая каждому элементарному исходу ω\omega из пространства исходов Ω\Omega сопоставляет число.

Пример: бросаем две монеты. Ω={ОО,ОР,РО,РР}\Omega = \{\text{ОО}, \text{ОР}, \text{РО}, \text{РР}\}. Величина XX = «число орлов» — это функция: X(ОО)=2X(\text{ОО}) = 2, X(ОР)=X(РО)=1X(\text{ОР}) = X(\text{РО}) = 1, X(РР)=0X(\text{РР}) = 0.

Отсюда понятно, почему XX — не число, а механизм. Число получается, когда механизм сработал, и это уже xx.


2. Два типа случайных величин

Дискретная Непрерывная
Множество значений Конечное или счётное Континуальное — размазано по отрезку
Примеры из лекции Число звонков; очки в баскетболе; очки на игральной кости; число орфографических ошибок в тексте Рост человека; время ожидания автобуса; вес человека
Чем задаётся Таблицей (закон распределения) Плотностью f(x)f(x)
Есть ли плотность Нет Да
P(X=a)\mathbb{P}(X = a) Может быть >0> 0 Всегда =0= 0

Почему рост непрерывен. Его можно измерять со сколь угодно высокой точностью: 178 см, 178,3 см, 178,34 см… Значения оказываются размазаны по непрерывному отрезку. То же и с временем ожидания.

Практическая оговорка В реальных данных рост записан как «178» — формально это дискретная величина. Непрерывность здесь удобная идеализация: считать интеграл проще, чем сумму по всем возможным миллиметрам. Это ровно та «модель как описание невежества», о которой шла речь в уроке 1.2.


3. Дискретная величина: закон распределения

Чтобы полностью описать дискретную величину, надо выписать табличку: каждому значению сопоставлена вероятность, с которой она это значение принимает.

Сквозной пример: лотерея

Этот пример будет использоваться и в следующем уроке, так что его стоит запомнить.

Значение xx −12 ₽ (проигрыш) 0 ₽ (ничья) +10 ₽ (выигрыш)
P(X=x)\mathbb{P}(X = x) 1/2=0,51/2 = 0{,}5 1/4=0,251/4 = 0{,}25 1/4=0,251/4 = 0{,}25

Два обязательных условия:

0≤P(X=xi)≤1и∑iP(X=xi)=10 \le \mathbb{P}(X = x_i) \le 1 \qquad \text{и} \qquad \sum_i \mathbb{P}(X = x_i) = 1

Проверка: 0,5+0,25+0,25=10{,}5 + 0{,}25 + 0{,}25 = 1. ✓

Иллюстрация к конспекту: l3_pmf_lottery По оси X — значения величины, по оси Y — их вероятности. Сумма высот всех палочек равна единице. Такой график называют полигоном распределения.


4. Функция распределения F(x)F(x)

Второй способ описать ту же величину — через функцию распределения (её ещё называют кумулятивной, CDF — cumulative distribution function).

F(x)=P(X≤x)F(x) = \mathbb{P}(X \le x)

Словами: какова вероятность, что величина примет значение меньше либо равное заданному xx.

Для дискретного случая это сумма всех вероятностей левее точки:

F(x)=∑iP(X=xi)⋅[ xi≤x ]F(x) = \sum_{i} \mathbb{P}(X = x_i) \cdot [\,x_i \le x\,]

Что за квадратные скобки Это индикаторная функция. Она равна 1, когда условие внутри выполняется, и 0, когда нет:

[ условие ]={1,условие верно0,условие ложно[\,\text{условие}\,] = \begin{cases} 1, & \text{условие верно} \\ 0, & \text{условие ложно} \end{cases}

Технический приём: вместо «просуммируй только подходящие слагаемые» пишем сумму по всем, а неподходящие сами обнуляются. Удобно, потому что такую сумму можно алгебраически преобразовывать.

Как это выглядит для лотереи

Иллюстрация к конспекту: l3_cdf_lottery Функция накапливает вероятность слева направо.

Разберём по шагам:

Где находимся Значение F(x)F(x) Почему
x<−12x < -12 00 Левее ничего нет
−12≤x<0-12 \le x < 0 0,50{,}5 Накопили вероятность точки −12
0≤x<100 \le x < 10 0,750{,}75 Добавили вероятность точки 0: 0,5+0,250{,}5 + 0{,}25
x≥10x \ge 10 11 Добавили последнюю: 0,75+0,250{,}75 + 0{,}25

Как читать ступеньки Высота каждого скачка = вероятность этой точки. Это работает в обе стороны: по картинке со ступеньками всегда можно восстановить исходную таблицу.

Обратите внимание на точки на графике: закрашенный кружок — значение включено (из-за знака ≤\le в определении), пустой — не включено. Функция «непрерывна справа».


5. Непрерывная величина: плотность

Для непрерывной величины таблицу составить невозможно: значений бесконечно много, и между любыми двумя лежит ещё бесконечно много. Поэтому её описывают плотностью распределения вероятности f(x)f(x).

Вероятность — это площадь

Иллюстрация к конспекту: l3_pdf_area Вероятность попасть на отрезок [a,b][a, b] равна площади под кривой над этим отрезком.

P(a≤X≤b)=∫abf(t) dt\mathbb{P}(a \le X \le b) = \int_a^b f(t)\,dt

А вся площадь под плотностью равна единице — потому что в какое-то значение величина попадёт обязательно:

∫−∞+∞f(t) dt=1\int_{-\infty}^{+\infty} f(t)\,dt = 1

Частая ошибка: плотность ≠ вероятность Значение f(x)f(x) само по себе вероятностью не является. Вероятность — это только площадь.

Отсюда следствие, которое многих сбивает: плотность может быть больше единицы. Например, равномерное распределение на отрезке [0; 0,1][0;\ 0{,}1] имеет плотность f(x)=10f(x) = 10. Противоречия нет: площадь всё равно 0,1×10=10{,}1 \times 10 = 1.

Проверяйте себя вопросом: «я смотрю на высоту или на площадь?» Вероятность — всегда площадь.

Функция распределения непрерывной величины

Определение то же самое, но сумма заменяется интегралом (интеграл — это и есть аналог суммы для непрерывного случая):

F(x)=P(X≤x)=∫−∞xf(t) dtF(x) = \mathbb{P}(X \le x) = \int_{-\infty}^{x} f(t)\,dt

Иллюстрация к конспекту: l3_cdf_continuous Ведём засечку слева направо и копим площадь. Получается S-образная кривая, плавно растущая от 0 до 1.


6. Связь f(x)f(x) и F(x)F(x)

Это две формы записи одной и той же информации.

Иллюстрация к конспекту: l3_pdf_cdf_link

F(x)=∫−∞xf(t) dt⟺f(x)=dF(x)dx=F′(x)F(x) = \int_{-\infty}^{x} f(t)\,dt \qquad \Longleftrightarrow \qquad f(x) = \frac{dF(x)}{dx} = F'(x)
graph LR
    F["f(x)<br/>плотность"] -->|"интегрируем"| C["F(x)<br/>функция распределения"]
    C -->|"дифференцируем"| F

Проще всего запомнить так: плотность — это скорость накопления вероятности. Там, где FF растёт круто, ff большая. Там, где FF почти горизонтальна, ff близка к нулю.


7. Сводка свойств

Свойство Формула Смысл
Плотность только у непрерывных — У дискретных вместо неё таблица
Плотность неотрицательна f(x)≥0f(x) \ge 0 для всех xx Кривая не опускается ниже оси
Нормировка ∫−∞+∞f(t) dt=1\int_{-\infty}^{+\infty} f(t)\,dt = 1 Полная площадь = 1
Связь с FF f(x)=F′(x)f(x) = F'(x) Плотность — производная от CDF
Диапазон FF 0≤F(x)≤10 \le F(x) \le 1 Это вероятность
FF не убывает x1<x2⇒F(x1)≤F(x2)x_1 < x_2 \Rightarrow F(x_1) \le F(x_2) Вероятность только копится
Пределы F(−∞)=0F(-\infty) = 0, F(+∞)=1F(+\infty) = 1 —
Вероятность интервала P(a≤X≤b)=∫abf(t) dt=F(b)−F(a)\mathbb{P}(a \le X \le b) = \int_a^b f(t)\,dt = F(b) - F(a) Два способа, один ответ
Точка у непрерывной P(X=a)=0\mathbb{P}(X = a) = 0 См. ниже
Почему P(X=a)=0\mathbb{P}(X = a) = 0
P(X=a)=∫aaf(t) dt=0\mathbb{P}(X = a) = \int_a^a f(t)\,dt = 0

Интеграл от точки до той же точки равен нулю: у точки нет площади, фигура вырождается в отрезок нулевой ширины.

Ноль вероятности ≠ невозможно Это одна из самых контринтуитивных вещей в теорвере. Рост случайного человека окажется каким-то конкретным числом — скажем, ровно 178,4213… см. Вероятность этого конкретного значения была нулевой, но событие всё равно произошло.

Практический вывод: для непрерывных величин осмысленно спрашивать только про интервалы. Не «какова вероятность роста ровно 180», а «какова вероятность роста от 179,5 до 180,5».

Полезное следствие: строгие и нестрогие неравенства для непрерывных величин равносильны, потому что границы вносят нулевой вклад:

P(a≤X≤b)=P(a<X<b)\mathbb{P}(a \le X \le b) = \mathbb{P}(a < X < b)

8. Дискретное против непрерывного: всё соответствие

Дискретная Непрерывная
Описание Таблица P(X=xi)\mathbb{P}(X = x_i) Плотность f(x)f(x)
Нормировка ∑ipi=1\sum_i p_i = 1 ∫f(t) dt=1\int f(t)\,dt = 1
Вероятность интервала ∑a≤xi≤bpi\sum_{a \le x_i \le b} p_i ∫abf(t) dt\int_a^b f(t)\,dt
Функция распределения Ступеньки Гладкая S-кривая
P(X=a)\mathbb{P}(X = a) Высота скачка FF Всегда 0
График Полигон (палочки) Непрерывная кривая

Главный мостик Везде, где в дискретном случае стоит сумма ∑\sum, в непрерывном стоит интеграл ∫\int. Везде, где стоит вероятность pip_i, стоит плотность f(t) dtf(t)\,dt. Это правило работает почти для всех формул курса — включая матожидание и дисперсию из следующего урока.


9. Это же на Python

Пригодится дальше, когда пойдут симуляции.

import numpy as np
from scipy import stats

# --- Дискретная: наша лотерея ---
values = np.array([-12, 0, 10])
probs  = np.array([0.5, 0.25, 0.25])

lottery = stats.rv_discrete(name="lottery", values=(values, probs))

lottery.pmf(-12)   # 0.5   — вероятность конкретного значения
lottery.cdf(0)     # 0.75  — P(X <= 0)
lottery.rvs(size=5)  # случайная выборка из 5 розыгрышей

# --- Непрерывная: стандартное нормальное ---
X = stats.norm(loc=0, scale=1)   # loc = мат. ожидание, scale = СКО

X.pdf(0)           # 0.3989 — ПЛОТНОСТЬ в точке, не вероятность!
X.cdf(1.96)        # 0.975  — P(X <= 1.96)
X.ppf(0.975)       # 1.96   — обратная функция: квантиль
X.rvs(size=1000)   # выборка

# Вероятность попасть на отрезок — двумя способами
a, b = -1, 1
print(X.cdf(b) - X.cdf(a))                        # 0.6827 — через F(b) - F(a)

from scipy.integrate import quad
print(quad(X.pdf, a, b)[0])                       # 0.6827 — через интеграл

# P(X = a) для непрерывной величины
print(X.cdf(0) - X.cdf(0))                        # 0.0

Единый интерфейс scipy.stats Он одинаков для всех распределений — это экономит кучу времени:

Метод Что делает
.pmf(k) вероятность значения (только дискретные)
.pdf(x) плотность (только непрерывные)
.cdf(x) F(x)=P(X≤x)F(x) = \mathbb{P}(X \le x)
.ppf(q) обратная к cdf — квантиль уровня qq
.rvs(size=n) сгенерировать выборку
.mean(), .var(), .std() характеристики → урок 1.4

Проверь себя

Чем дискретная величина отличается от непрерывной?

Дискретная принимает конечное или счётное число значений (число звонков, очки на кости) и задаётся таблицей. Непрерывная принимает континуум значений на отрезке (рост, время) и задаётся плотностью, потому что таблицу для неё составить невозможно.

Два условия, которым обязана удовлетворять таблица распределения?

Каждая вероятность лежит в отрезке [0,1][0, 1], и сумма всех вероятностей равна 1.

Может ли плотность быть больше 1?

Да. Плотность — не вероятность, вероятность равна площади. Например, равномерное распределение на [0; 0,1][0;\ 0{,}1] имеет плотность 10, а площадь всё равно единица.

Как по графику ступенчатой функции распределения восстановить таблицу?

Высота каждого скачка равна вероятности соответствующего значения. Позиции скачков дают сами значения.

Почему вероятность попасть непрерывной величиной в конкретную точку равна нулю?

Потому что это интеграл от aa до aa, а у точки нет площади. При этом событие всё равно происходит: значение обязательно окажется каким-то конкретным числом.

Два способа посчитать P(a≤X≤b)\mathbb{P}(a \le X \le b) для непрерывной величины?

Через интеграл плотности ∫abf(t) dt\int_a^b f(t)\,dt или через функцию распределения F(b)−F(a)F(b) - F(a). Результат одинаковый.

Как связаны f(x)f(x) и F(x)F(x)?

FF — интеграл от ff, а ff — производная от FF. Плотность показывает скорость накопления вероятности.


Навигация

  • Предыдущий урок: 1.2 Что такое случайность и как устроен мир

  • Следующий урок: 1.4 Характеристики случайных величин

  • Оглавление курса: 00 Курс — оглавление и шпаргалка

  1. Дискретная случайная величина

    Случайная величина, принимающая конечное или счётное множество значений

  2. Непрерывная случайная величина

    Случайная величина, значения которой непрерывно размазаны по промежутку, то есть образуют континуум

  3. Закон распределения дискретной случайной величины

    Таблица, в которой каждому значению величины сопоставлена вероятность, с которой она это значение принимает

  4. Каким двум условиям обязан удовлетворять закон распределения дискретной величины?

    Каждая вероятность лежит в отрезке от 0 до 1, и сумма всех вероятностей равна 1

  5. Функция распределения F(x)

    Вероятность того, что случайная величина примет значение меньше либо равное x: F(x) = P(X ≤ x)

  6. Плотность распределения f(x)

    Функция, площадь под которой на промежутке равна вероятности попадания величины в этот промежуток

  7. Может ли плотность распределения принимать значения больше единицы?

    Да: плотность не является вероятностью, вероятность равна площади под ней

    Подсказка: Какая плотность у равномерного распределения на отрезке от 0 до 0,1?

  8. Чему равна полная площадь под плотностью распределения?

    Единице: интеграл плотности по всей области значений величины равен 1

  9. Чему равна вероятность того, что непрерывная величина примет конкретное значение a?

    Нулю: интеграл от a до a равен нулю, поскольку у точки нет площади

  10. Значит ли нулевая вероятность значения, что оно невозможно?

    Нет: у непрерывной величины вероятность каждого конкретного значения равна нулю, но какое-то значение всё равно реализуется

  11. Как связаны плотность f(x) и функция распределения F(x)?

    F — интеграл от f, а f — производная от F

  12. Какими двумя свойствами обладает любая функция распределения F(x)?

    Она не убывает и принимает значения от 0 до 1

  13. Двумя способами: чему равна вероятность попадания непрерывной величины на отрезок от a до b?

    Интегралу плотности от a до b, он же разность F(b) − F(a)

  14. Что означает высота скачка ступенчатой функции распределения?

    Вероятность того значения, в котором происходит скачок

    Подсказка: Что можно восстановить по графику ступенек?

  15. Индикаторная функция

    Функция, равная 1, когда записанное в ней условие выполняется, и 0, когда не выполняется

  16. Почему непрерывную величину нельзя задать таблицей значений и вероятностей?

    Значений бесконечно много, и между любыми двумя лежит ещё бесконечно много, поэтому таблицу составить невозможно

Показано 16 из 16 карточек

1.4. Характеристики случайных величин

Автор: yuriy konkov · Карточек: 22

1.4 Характеристики случайных величин

Коротко

  • Матожидание E(X)\mathbb{E}(X) — среднее значение величины. Считается как «значение × его вероятность, всё сложить».

  • Дисперсия Var(X)\mathrm{Var}(X) — мера разброса вокруг среднего. Рабочая формула: E(X2)−(E(X))2\mathbb{E}(X^2) - \big(\mathbb{E}(X)\big)^2.

  • Измерять отклонение как E(X−EX)\mathbb{E}(X - \mathbb{E}X) бессмысленно — это всегда ноль. Поэтому и возводят в квадрат.

  • Дисперсия измеряется в квадратах исходных единиц. Чтобы вернуться к исходным — берут корень, получается СКО σ\sigma.

  • Матожидание и дисперсия — не случайные величины, а конкретные числа.

  • Кроме них есть мода (самое частое значение), медиана (делит вероятность пополам) и квантили.

  • Правило свойств: у матожидания сумма раскладывается всегда, у дисперсии — только для независимых величин.


1. Математическое ожидание

Матожидание — это просто среднее значение, которое принимает случайная величина. Не «одно из значений», а центр тяжести всего распределения.

Дискретная Непрерывная
$$\mathbb{E}(X) = \sum_i x_i \cdot \mathbb{P}(X = x_i)$$ $$\mathbb{E}(X) = \int_{-\infty}^{+\infty} t \cdot f(t),dt$$

Логика одна и та же: каждое значение умножаем на его вероятность и складываем. В непрерывном случае вместо суммы интеграл, вместо вероятности — плотность. Тот самый мостик из урока 1.3.

Пример 1: лотерея (дискретный случай)

Берём ту же лотерею:

Значение xx −12 ₽ 0 ₽ +10 ₽
P(X=x)\mathbb{P}(X = x) 0,5 0,25 0,25

Вопрос, который нас интересует: что будет с кошельком, если играть в неё много-много раз подряд?

E(X)=(−12)⋅0,5+0⋅0,25+10⋅0,25=−6+0+2,5=−3,5 ₽\mathbb{E}(X) = (-12) \cdot 0{,}5 + 0 \cdot 0{,}25 + 10 \cdot 0{,}25 = -6 + 0 + 2{,}5 = \mathbf{-3{,}5\ ₽}

Иллюстрация к конспекту: l4_expectation_lottery

Интерпретация. В отдельном розыгрыше можно и выиграть, и проиграть. Но в среднем каждая игра забирает 3,5 ₽. Участвовать в такой лотерее невыгодно.

Как читать матожидание E(X)=−3,5\mathbb{E}(X) = -3{,}5 ₽ — значение, которого в таблице вообще нет: выпадает либо −12, либо 0, либо +10. Матожидание описывает не «типичный исход», а долгосрочный итог. Это центр тяжести распределения: если поставить палочки с картинки на невесомую рейку, она уравновесится в точке −3,5.

Пример 2: равномерное распределение (непрерывный случай)

Равномерное распределение выдаёт любое значение с отрезка [a,b][a, b] равновероятно. Его плотность — «плашка», повисшая над отрезком:

f(t)=1b−a,t∈[a,b]f(t) = \frac{1}{b - a}, \quad t \in [a, b]

Высота выбрана так, чтобы площадь прямоугольника равнялась единице: (b−a)⋅1b−a=1(b-a) \cdot \frac{1}{b-a} = 1. ✓

Считаем матожидание:

E(X)=∫abt⋅1b−a dt=1b−a⋅t22∣ab=b2−a22(b−a)=(b−a)(b+a)2(b−a)\mathbb{E}(X) = \int_a^b t \cdot \frac{1}{b-a}\,dt = \frac{1}{b-a} \cdot \left.\frac{t^2}{2}\right|_a^b = \frac{b^2 - a^2}{2(b-a)} = \frac{(b-a)(b+a)}{2(b-a)}
 E(X)=a+b2 \boxed{\ \mathbb{E}(X) = \frac{a + b}{2}\ }

Иллюстрация к конспекту: l4_expectation_uniform

Середина отрезка — и это логично: раз вероятностная масса не перетягивает ни в одну сторону, в среднем попадаем в центр.


2. Свойства матожидания

Пусть X,YX, Y — случайные величины, aa — константа.

Свойство Формула Условие Почему
От константы E(a)=a\mathbb{E}(a) = a всегда 42 — это всегда 42, тут нечему быть случайным
Сумма E(X+Y)=E(X)+E(Y)\mathbb{E}(X + Y) = \mathbb{E}(X) + \mathbb{E}(Y) всегда не требует независимости
Константа наружу E(aX)=a E(X)\mathbb{E}(aX) = a\,\mathbb{E}(X) всегда —
Произведение E(XY)=E(X) E(Y)\mathbb{E}(XY) = \mathbb{E}(X)\,\mathbb{E}(Y) только если X⊥YX \perp Y иначе вылезает ковариация
Отклонение E(X−EX)=0\mathbb{E}(X - \mathbb{E}X) = 0 всегда см. вывод ниже

Главная ловушка урока E(X+Y)=E(X)+E(Y)\mathbb{E}(X + Y) = \mathbb{E}(X) + \mathbb{E}(Y) — всегда, независимость не нужна. E(XY)=E(X)E(Y)\mathbb{E}(XY) = \mathbb{E}(X)\mathbb{E}(Y) — только для независимых.

Если XX и YY зависимы, в формуле для произведения появляется ковариация — величина, описывающая, как именно они связаны. Её разбирают на следующей неделе.

Матожидание — не случайная величина

Это важно. E(X)\mathbb{E}(X) — конкретное число, детерминированная характеристика распределения. Не «ещё одна случайная величина, которую мы вытянули».

Почему нельзя измерять разброс через E(X−EX)\mathbb{E}(X - \mathbb{E}X)

Естественная первая идея: «посчитаем, насколько в среднем величина отклоняется от своего среднего». Раскроем:

E(X−E(X))=E(X)−E(E(X))\mathbb{E}\big(X - \mathbb{E}(X)\big) = \mathbb{E}(X) - \mathbb{E}\big(\mathbb{E}(X)\big)

Но E(X)\mathbb{E}(X) — константа, а матожидание константы равно ей самой. Значит второе слагаемое «сгорает» в E(X)\mathbb{E}(X):

=E(X)−E(X)=0= \mathbb{E}(X) - \mathbb{E}(X) = \mathbf{0}

Вывод E(X−EX)\mathbb{E}(X - \mathbb{E}X) всегда ноль, для любой величины. Плюсовые и минусовые отклонения взаимно сокращаются. Как мера разброса это бесполезно — и именно поэтому вводят дисперсию с квадратом.


3. Дисперсия

Дисперсия — мера разброса: насколько сильно величина отклоняется от своего типичного значения. Чтобы отклонения не сокращались, их возводят в квадрат:

Var(X)=E[(X−E(X))2]\mathrm{Var}(X) = \mathbb{E}\Big[\big(X - \mathbb{E}(X)\big)^2\Big]
Дискретная Непрерывная
$$\sum_i \big(x_i - \mathbb{E}X\big)^2 \cdot \mathbb{P}(X = x_i)$$ $$\int_{-\infty}^{+\infty} \big(t - \mathbb{E}X\big)^2 f(t),dt$$

Иллюстрация к конспекту: l4_variance У всех трёх распределений одинаковое матожидание, но разная дисперсия. Чем она больше, тем непредсказуемее величина.

Удобная формула и её вывод

Считать по определению неудобно. Выведем рабочую версию — вывод стоит уметь воспроизвести, его часто спрашивают.

Шаг 1. Раскрываем квадрат (формула сокращённого умножения):

Var(X)=E[X2−2X E(X)+(E(X))2]\mathrm{Var}(X) = \mathbb{E}\Big[X^2 - 2X\,\mathbb{E}(X) + \big(\mathbb{E}(X)\big)^2\Big]

Шаг 2. Матожидание суммы = сумма матожиданий, константы выносим:

=E(X2)−2 E(X)⋅E(X)+(E(X))2= \mathbb{E}(X^2) - 2\,\mathbb{E}(X) \cdot \mathbb{E}(X) + \big(\mathbb{E}(X)\big)^2

Здесь во втором слагаемом E(X)\mathbb{E}(X) — константа, поэтому она вышла за знак, а E[E(X)]=E(X)\mathbb{E}\big[\mathbb{E}(X)\big] = \mathbb{E}(X) — второе матожидание «сгорело».

Шаг 3. Приводим подобные: −2(EX)2+(EX)2=−(EX)2-2(\mathbb{E}X)^2 + (\mathbb{E}X)^2 = -(\mathbb{E}X)^2.

 Var(X)=E(X2)−(E(X))2 \boxed{\ \mathrm{Var}(X) = \mathbb{E}(X^2) - \big(\mathbb{E}(X)\big)^2\ }

Словами: матожидание квадрата минус квадрат матожидания.

Пример: дисперсия лотереи

Шаг 1. Считаем E(X2)\mathbb{E}(X^2) — те же вероятности, но значения в квадрате:

xx −12 0 10
x2x^2 144 0 100
P\mathbb{P} 0,5 0,25 0,25
E(X2)=144⋅0,5+0⋅0,25+100⋅0,25=72+25=97\mathbb{E}(X^2) = 144 \cdot 0{,}5 + 0 \cdot 0{,}25 + 100 \cdot 0{,}25 = 72 + 25 = 97

Шаг 2. Подставляем в формулу:

Var(X)=97−(−3,5)2=97−12,25=84,75 ₽2\mathrm{Var}(X) = 97 - (-3{,}5)^2 = 97 - 12{,}25 = \mathbf{84{,}75\ ₽^2}

Обратите внимание на единицы Матожидание получилось в рублях (−3,5 ₽). Дисперсия — в рублях в квадрате (84,75 ₽²), потому что мы возводили в квадрат. «Рубль в квадрате» интерпретировать невозможно — и это главная неудобность дисперсии.

Дисперсия равномерного распределения
E(X2)=∫abt2⋅1b−a dt=1b−a⋅t33∣ab=b3−a33(b−a)=a2+ab+b23\mathbb{E}(X^2) = \int_a^b t^2 \cdot \frac{1}{b-a}\,dt = \frac{1}{b-a} \cdot \left.\frac{t^3}{3}\right|_a^b = \frac{b^3 - a^3}{3(b-a)} = \frac{a^2 + ab + b^2}{3}
Var(X)=a2+ab+b23−(a+b2)2=4(a2+ab+b2)−3(a+b)212=a2−2ab+b212\mathrm{Var}(X) = \frac{a^2 + ab + b^2}{3} - \left(\frac{a+b}{2}\right)^2 = \frac{4(a^2+ab+b^2) - 3(a+b)^2}{12} = \frac{a^2 - 2ab + b^2}{12}
 Var(X)=(b−a)212 \boxed{\ \mathrm{Var}(X) = \frac{(b - a)^2}{12}\ }

Логично: чем шире отрезок, тем непредсказуемее величина — и зависимость квадратичная.

Среднее квадратическое отклонение

Чтобы избавиться от «рублей в квадрате», из дисперсии берут корень:

σ=std(X)=Var(X)\sigma = \mathrm{std}(X) = \sqrt{\mathrm{Var}(X)}

Для лотереи: σ=84,75≈9,21\sigma = \sqrt{84{,}75} \approx 9{,}21 ₽ — уже нормальные рубли, которые можно сравнить с матожиданием.

Читаемая интерпретация Средний результат лотереи −3,5 ₽ при разбросе ±9,21 ₽. Разброс почти втрое больше среднего — то есть отдельная игра совершенно непредсказуема, и «в среднем теряю 3,5 ₽» проявится только на длинной дистанции. Это, кстати, и есть предвестник закона больших чисел.


4. Свойства дисперсии

Свойство Формула Условие
От константы Var(a)=0\mathrm{Var}(a) = 0 всегда
Сумма Var(X+Y)=Var(X)+Var(Y)\mathrm{Var}(X + Y) = \mathrm{Var}(X) + \mathrm{Var}(Y) только если X⊥YX \perp Y
Константа наружу Var(aX)=a2 Var(X)\mathrm{Var}(aX) = a^2\,\mathrm{Var}(X) всегда — с квадратом!
Разность Var(X−Y)=Var(X)+Var(Y)\mathrm{Var}(X - Y) = \mathrm{Var}(X) + \mathrm{Var}(Y) только если X⊥YX \perp Y
Сдвиг Var(X+a)=Var(X)\mathrm{Var}(X + a) = \mathrm{Var}(X) всегда

Почему Var(a)=0\mathrm{Var}(a) = 0. Константа абсолютно предсказуема: 42 — это всегда 42, отклоняться не от чего.

Почему a2a^2. Константу выносим из-под матожидания в определении дисперсии, а там она стоит внутри квадрата — поэтому наружу выходит уже возведённой.

Дисперсия разности — это сумма Самое контринтуитивное свойство. Вывод в две строки:

Var(X−Y)=Var(X+(−1)Y)=Var(X)+Var((−1)Y)=Var(X)+(−1)2Var(Y)\mathrm{Var}(X - Y) = \mathrm{Var}\big(X + (-1)Y\big) = \mathrm{Var}(X) + \mathrm{Var}\big((-1)Y\big) = \mathrm{Var}(X) + (-1)^2\mathrm{Var}(Y)
=Var(X)+Var(Y)= \mathrm{Var}(X) + \mathrm{Var}(Y)

Смысл: вычитая одну случайную величину из другой, мы не гасим неопределённость, а складываем её. Два источника шума — шума стало больше, а не меньше.

Это прямо работает в A/B-тестах: дисперсия разницы между группами A и B равна сумме их дисперсий (если группы независимы). Именно поэтому на разницу нужно больше данных, чем на одну группу.

Дисперсия — тоже не случайная величина, а конкретное число, характеризующее непредсказуемость.

Расширение: коэффициент вариации Чтобы сравнивать разброс у величин в разных единицах, дисперсии не годятся. Используют безразмерный коэффициент:

CV=σ∣E(X)∣CV = \frac{\sigma}{|\mathbb{E}(X)|}

Разброс зарплат в рублях и разброс времени ответа сервиса в миллисекундах напрямую несравнимы, а их CVCV — вполне.


5. Мода

Мода — самое «популярное» значение.

Дискретная величина Непрерывная величина
Значение с наибольшей вероятностью (самая высокая палочка) Точка локального максимума плотности (пик на кривой)

Если пиков несколько — распределение называют мультимодальным.

Иллюстрация к конспекту: l4_multimodal Два пика — две моды. Здесь среднее попадает в провал между ними, то есть показывает значение, которое почти не встречается.

Когда среднее врёт Мультимодальность — классический случай, когда матожидание бесполезно и даже вредно. Пример: время отклика сервиса, где часть запросов идёт из кэша (~5 мс), а часть в базу (~300 мс). Среднее «110 мс» не описывает ни один реальный запрос. Лечится не другой статистикой, а разделением на подгруппы.

Именно поэтому в разведочном анализе данных (EDA) сначала строят гистограмму, а уже потом считают среднее.


6. Медиана

Медиана — значение, которое делит вероятностную массу ровно пополам:

P(X<med)=P(X>med)=12\mathbb{P}(X < \mathrm{med}) = \mathbb{P}(X > \mathrm{med}) = \frac{1}{2}

Иллюстрация к конспекту: l4_median Слева от медианы — половина всей площади, справа — вторая половина.

Расширение: медиана против среднего на практике Медиана устойчива к выбросам, среднее — нет. Классическая иллюстрация:

Зарплаты в компании из 10 человек: девять получают по 60 тыс., директор — 1 млн.

  • Среднее: (9⋅60+1000)/10=154(9 \cdot 60 + 1000)/10 = 154 тыс. — не описывает никого

  • Медиана: 60 тыс. — описывает реальное положение дел

Правило: скошенные данные (зарплаты, выручка, время отклика, длительность сессий) — смотрите медиану. Симметричные — можно среднее.


7. Квантили

Квантиль уровня γ\gamma — такое значение qq, что вероятность попасть левее него равна γ\gamma:

P(X≤qγ)=γ⟺F(qγ)=γ\mathbb{P}(X \le q_\gamma) = \gamma \qquad \Longleftrightarrow \qquad F(q_\gamma) = \gamma

Иллюстрация к конспекту: l4_quantile Заштрихованная площадь равна γ\gamma; отсечённое значение по оси X и есть квантиль.

Квантиль — это обратная функция распределения

qγ=F−1(γ)q_\gamma = F^{-1}(\gamma)

В scipy она называется .ppf() — percent point function. FF переводит значение в вероятность, F−1F^{-1} — вероятность обратно в значение.

Название Уровень γ\gamma Смысл
Медиана 0,5 делит пополам
Нижний квартиль Q1Q_1 0,25 четверть данных левее
Верхний квартиль Q3Q_3 0,75 три четверти левее
Перцентиль pp p/100p/100 pp % данных левее
p95 / p99 0,95 / 0,99 стандарт мониторинга: «95 % запросов быстрее, чем…»

Медиана — частный случай квантиля уровня 0,5.


8. Мода, медиана, среднее — где они относительно друг друга

Иллюстрация к конспекту: l4_mode_median_mean

Форма распределения Соотношение
Симметричное (например, нормальное) мода = медиана = среднее
Скошено вправо (длинный правый хвост) мода < медиана < среднее
Скошено влево среднее < медиана < мода

Правило запоминания: среднее всегда тянется в сторону длинного хвоста, потому что в него входят все экстремальные значения со своим весом. Медиана двигается слабо, мода не двигается вовсе.


9. Итоговая шпаргалка

Характеристика Обозначение Отвечает на вопрос Единицы Устойчива к выбросам
Матожидание E(X)\mathbb{E}(X) Какое значение в среднем? как у XX ❌ нет
Дисперсия Var(X)\mathrm{Var}(X) Насколько разбросано? квадрат ❌ нет
СКО σ\sigma То же, в исходных единицах как у XX ❌ нет
Мода — Что встречается чаще всего? как у XX ✅ да
Медиана med\mathrm{med} Что посередине? как у XX ✅ да
Квантиль qγq_\gamma Ниже какого значения лежит γ\gamma данных? как у XX ✅ да

10. Это же на Python

import numpy as np
from scipy import stats

values = np.array([-12, 0, 10])
probs  = np.array([0.5, 0.25, 0.25])

# --- Считаем руками, по определению ---
E_X   = (values * probs).sum()                 # -3.5
E_X2  = (values**2 * probs).sum()              # 97.0
var_X = E_X2 - E_X**2                          # 84.75
std_X = np.sqrt(var_X)                         # 9.206...

# --- То же через scipy ---
lottery = stats.rv_discrete(values=(values, probs))
lottery.mean(), lottery.var(), lottery.std()   # (-3.5, 84.75, 9.206...)

# --- По выборке (описательные статистики) ---
sample = lottery.rvs(size=100_000, random_state=42)

sample.mean()                 # ≈ -3.5   закон больших чисел в действии
sample.var()                  # ≈ 84.75
np.median(sample)             # 0.0
np.quantile(sample, [0.25, 0.5, 0.75, 0.95])   # квартили и p95
stats.mode(sample).mode       # -12  — самое частое значение

# --- Проверяем свойства дисперсии на симуляции ---
rng = np.random.default_rng(0)
X = rng.normal(0, 3, 200_000)     # Var = 9
Y = rng.normal(0, 4, 200_000)     # Var = 16

(X + Y).var()   # ≈ 25 = 9 + 16   сумма
(X - Y).var()   # ≈ 25 = 9 + 16   разность — ТОЖЕ сумма!
(2 * X).var()   # ≈ 36 = 2² · 9   константа выходит с квадратом
(X + 100).var() # ≈ 9             сдвиг не меняет разброс

Частые ошибки

На чём спотыкаются

  1. Считать, что Var(X−Y)=Var(X)−Var(Y)\mathrm{Var}(X - Y) = \mathrm{Var}(X) - \mathrm{Var}(Y). Нет: дисперсии складываются. Дисперсия вообще не может быть отрицательной.

  2. Забывать квадрат в Var(aX)=a2Var(X)\mathrm{Var}(aX) = a^2\mathrm{Var}(X).

  3. Применять E(XY)=E(X)E(Y)\mathbb{E}(XY) = \mathbb{E}(X)\mathbb{E}(Y) к зависимым величинам. Работает только при независимости.

  4. Сравнивать дисперсию с матожиданием напрямую. Они в разных единицах — сравнивайте с σ\sigma.

  5. Считать среднее у мультимодальных или сильно скошенных данных. Сначала гистограмма, потом решение, какую статистику брать.

  6. Путать E(X2)\mathbb{E}(X^2) и (EX)2(\mathbb{E}X)^2. Это разные числа, их разность и есть дисперсия. Для лотереи: 97 против 12,25.


Проверь себя

Почему E(X−EX)\mathbb{E}(X - \mathbb{E}X) не годится как мера разброса?

Потому что это тождественно ноль для любой величины: E(X)−E(X)=0\mathbb{E}(X) - \mathbb{E}(X) = 0. Положительные и отрицательные отклонения сокращаются. Поэтому отклонение возводят в квадрат — так получается дисперсия.

Выведите удобную формулу дисперсии.

Var(X)=E[(X−EX)2]\mathrm{Var}(X) = \mathbb{E}[(X - \mathbb{E}X)^2]. Раскрываем квадрат: E[X2−2XEX+(EX)2]\mathbb{E}[X^2 - 2X\mathbb{E}X + (\mathbb{E}X)^2]. По линейности и вынесению константы: E(X2)−2(EX)2+(EX)2=E(X2)−(EX)2\mathbb{E}(X^2) - 2(\mathbb{E}X)^2 + (\mathbb{E}X)^2 = \mathbb{E}(X^2) - (\mathbb{E}X)^2.

Для лотереи (−12 с p=0,5; 0 с p=0,25; +10 с p=0,25) посчитайте всё.

E(X)=−6+0+2,5=−3,5\mathbb{E}(X) = -6 + 0 + 2{,}5 = -3{,}5 ₽ E(X2)=72+0+25=97\mathbb{E}(X^2) = 72 + 0 + 25 = 97 ₽² Var(X)=97−12,25=84,75\mathrm{Var}(X) = 97 - 12{,}25 = 84{,}75 ₽² σ=84,75≈9,21\sigma = \sqrt{84{,}75} \approx 9{,}21 ₽

Чему равна Var(X−Y)\mathrm{Var}(X - Y) для независимых величин и почему?

Var(X)+Var(Y)\mathrm{Var}(X) + \mathrm{Var}(Y). Константу −1-1 выносим с квадратом, она превращается в +1+1. Смысл: два источника случайности складывают неопределённость, а не гасят её.

В каких единицах измеряется дисперсия и что с этим делают?

В квадратах исходных единиц (рубли в квадрате), интерпретировать невозможно. Берут корень — получается СКО в исходных единицах.

Когда медиана информативнее среднего?

Когда распределение скошено или есть выбросы: зарплаты, выручка, время отклика. Медиана устойчива, среднее уезжает в сторону хвоста.

Что такое квантиль уровня 0,95 и где это применяют?

Значение, левее которого лежит 95 % вероятностной массы, то есть F(q)=0,95F(q) = 0{,}95. В мониторинге — p95 времени отклика: «95 % запросов обрабатываются быстрее, чем q».


Навигация

  • Предыдущий урок: 1.3 Случайная величина и её распределение

  • Следующий урок: 1.5 Какими бывают случайные величины

  • Оглавление курса: 00 Курс — оглавление и шпаргалка

  1. Математическое ожидание E(X)

    Среднее значение случайной величины: её значения, взвешенные по вероятностям и просуммированные

  2. Как вычисляется матожидание дискретной величины?

    Каждое значение умножается на его вероятность, и все произведения складываются

  3. Дисперсия Var(X)

    Мера разброса: математическое ожидание квадрата отклонения величины от её матожидания

  4. Вычислительная формула дисперсии

    Var(X) = E(X²) − (E(X))², то есть матожидание квадрата минус квадрат матожидания

  5. Почему величина E(X − E(X)) не годится как мера разброса?

    Она тождественно равна нулю для любой величины: положительные и отрицательные отклонения взаимно сокращаются

    Подсказка: Что получится, если раскрыть это выражение по свойству линейности?

  6. Среднее квадратическое отклонение (СКО)

    Корень из дисперсии; возвращает меру разброса в исходные единицы измерения величины

  7. В каких единицах измеряется дисперсия?

    В квадратах единиц исходной величины: если величина в рублях, дисперсия в рублях в квадрате

  8. Чему равна Var(X + Y) для независимых величин?

    Var(X) + Var(Y): дисперсии складываются

  9. Чему равна Var(X − Y) для независимых величин?

    Var(X) + Var(Y): при вычитании дисперсии тоже складываются, а не вычитаются

    Подсказка: Что происходит с константой −1 при выносе из-под знака дисперсии?

  10. Чему равна Var(aX), где a — константа?

    a²·Var(X): константа выносится из-под знака дисперсии в квадрате

  11. Как сдвиг на константу влияет на дисперсию, то есть чему равна Var(X + a)?

    Var(X): сдвиг перемещает распределение, но не меняет его разброс

  12. При каком условии верно равенство E(XY) = E(X)·E(Y)?

    Только если величины X и Y независимы; иначе появляется ковариация

  13. Требуется ли независимость для равенства E(X + Y) = E(X) + E(Y)?

    Нет: матожидание суммы равно сумме матожиданий всегда

  14. Является ли математическое ожидание случайной величиной?

    Нет: это конкретное число, детерминированная характеристика распределения

  15. Мода случайной величины

    Значение с наибольшей вероятностью; у непрерывной величины — точка локального максимума плотности

  16. Медиана случайной величины

    Значение, делящее вероятностную массу пополам: вероятности оказаться левее и правее него равны 0,5

  17. Квантиль уровня гамма

    Значение q, левее которого лежит доля гамма всей вероятности, то есть F(q) = гамма

  18. Квантилем какого уровня является медиана?

    Уровня 0,5

  19. Мультимодальное распределение

    Распределение, плотность которого имеет несколько локальных максимумов

  20. Почему на мультимодальных данных среднее может вводить в заблуждение?

    Оно попадает в провал между пиками и указывает на значение, которое почти не встречается

  21. Почему на скошенных данных медиана информативнее среднего?

    Медиана устойчива к выбросам, а среднее смещается в сторону длинного хвоста

    Подсказка: Что произойдёт со средней зарплатой, если в отдел придёт директор с окладом в миллион?

  22. Как соотносятся мода, медиана и среднее у распределения с длинным правым хвостом?

    Мода меньше медианы, а медиана меньше среднего: хвост тянет среднее вправо

Показано 22 из 22 карточек

Зоопарк распределений

1.5. Какими бывают случайные величины

Автор: yuriy konkov · Карточек: 38

1.5 Какими бывают случайные величины

Коротко

  • Распределение — это модель явления, а не его истинное устройство. Выбирают её из данных и здравого смысла.

  • Дискретные: Бернулли (один опыт), биномиальное (сколько успехов из nn), геометрическое (когда первый успех), Пуассон (сколько событий за интервал).

  • Непрерывные: экспоненциальное (сколько ждать), равномерное (все значения равновероятны), нормальное (колокол, «всё остальное»).

  • Распределения связаны между собой: биномиальное — это сумма бернуллиевских, Пуассон — предел биномиального, и так далее.

  • Экспоненциальное обладает отсутствием памяти: сколько уже прождали — неважно.

  • Финальное предупреждение урока: любая из этих моделей — не истина в последней инстанции.


1. Логика урока

В уроке 1.2 появился «сундук» — неизвестный процесс порождения данных. В уроке 1.3 мы научились описывать содержимое сундука одной случайной величиной. Здесь — каталог готовых моделей: какое явление каким распределением разумно описывать.


2. Дискретные распределения

2.1. Бернулли — один опыт с двумя исходами

Явление: пол новорождённого. Подбрасывание монеты. Кликнул пользователь или нет.

X∼Bern(p)X \sim \mathrm{Bern}(p)
P(X=1)=p(успех),P(X=0)=1−p(неудача)\mathbb{P}(X = 1) = p \quad (\text{успех}), \qquad \mathbb{P}(X = 0) = 1 - p \quad (\text{неудача})

Функция распределения:

F(x)=P(X≤x)={0,x<0,1−p,0≤x<1,1,x≥1.F(x)=\mathbb{P}(X\le x)= \begin{cases} 0, & x<0,\\ 1-p, & 0\le x<1,\\ 1, & x\ge 1. \end{cases}

Иллюстрация к конспекту: l5_bernoulli

Единицу и ноль можно приписать любым интересующим нас событиям — «успех» и «неудача» здесь чисто технические ярлыки, без оценочного смысла. В примере с ребёнком: девочка — 1, мальчик — 0.

Параметр Матожидание Дисперсия
pp — вероятность успеха E(X)=p\mathbb{E}(X) = p Var(X)=p(1−p)\mathrm{Var}(X) = p(1-p)

Когда Бернулли непредсказуемее всего Var=p(1−p)\mathrm{Var} = p(1-p) максимальна при p=0,5p = 0{,}5 (равна 0,25) и стремится к нулю на краях. Честная монета — самый непредсказуемый исход. Монета, выпадающая орлом в 99 % случаев, почти детерминирована.


2.2. Биномиальное — сколько успехов из nn попыток

Явление: число попаданий в баскетбольную корзину из nn бросков. Сколько из 1000 посетителей сайта оформили заказ.

X∼Bin(n,p)X \sim \mathrm{Bin}(n, p)
P(X=k)=Cnk pk(1−p)n−k,k=0,1,…,n\mathbb{P}(X = k) = C_n^k \, p^k (1-p)^{n-k}, \qquad k = 0, 1, \dots, n
F(x)=∑k=0⌊x⌋Cnkpk(1−p)n−k,0≤x<n,F(x)=\sum_{k=0}^{\lfloor x\rfloor} C_n^k p^k(1-p)^{n-k}, \qquad 0\le x<n,

причём F(x)=0F(x)=0 при x<0x<0 и F(x)=1F(x)=1 при x≥nx\ge n.

где CnkC_n^k — биномиальный коэффициент:

Cnk=n!k! (n−k)!C_n^k = \frac{n!}{k!\,(n-k)!}

Иллюстрация к конспекту: l5_binomial Чем больше pp, тем правее смещается масса распределения.

Откуда берётся формула Разберём по кусочкам — так она перестаёт быть заклинанием:

  • pkp^k — вероятность kk попаданий подряд;

  • (1−p)n−k(1-p)^{n-k} — вероятность остальных n−kn-k промахов;

  • CnkC_n^k — сколькими способами эти kk попаданий могут распределиться среди nn бросков.

Последний множитель нужен потому, что нам неважен порядок: «попал-промазал-попал» и «попал-попал-промазал» — оба дают 2 попадания из 3.

Связь с Бернулли

Один бросок — это испытание Бернулли. Общее число попаданий — сумма таких испытаний:

XBin=X1+X2+⋯+Xn⏟каждое Xi∼Bern(p), независимыX_{\mathrm{Bin}} = \underbrace{X_1 + X_2 + \dots + X_n}_{\text{каждое } X_i \sim \mathrm{Bern}(p),\ \text{независимы}}

Отсюда характеристики выводятся мгновенно через свойства из урока 1.4 — матожидания складываются всегда, дисперсии складываются, потому что броски независимы:

Матожидание Дисперсия
E(X)=np\mathbb{E}(X) = np Var(X)=np(1−p)\mathrm{Var}(X) = np(1-p)

То есть просто характеристики Бернулли, умноженные на nn.


2.3. Геометрическое — номер первого успеха

Явление: на каком по счёту броске впервые попали в корзину. Сколько писем отправили до первого ответа.

X∼Geom(p)X \sim \mathrm{Geom}(p)
P(X=k)=(1−p)k−1⋅p\mathbb{P}(X = k) = (1-p)^{k-1} \cdot p
F(x)=1−(1−p)⌊x⌋,x≥1,F(x)=1-(1-p)^{\lfloor x\rfloor}, \qquad x\ge 1,

а при x<1x<1 имеем F(x)=0F(x)=0.

Формула читается буквально: k−1k-1 раз промахнулись (отсюда (1−p)k−1(1-p)^{k-1}), затем один раз попали (отсюда pp).

Иллюстрация к конспекту: l5_geometric

Величина принимает счётное бесконечное множество значений: промахиваться можно сколь угодно долго.

Матожидание Дисперсия
E(X)=1p\mathbb{E}(X) = \dfrac{1}{p} Var(X)=1−pp2\mathrm{Var}(X) = \dfrac{1-p}{p^2}

E(X)=1/p\mathbb{E}(X) = 1/p интуитивно понятно: при вероятности попадания 0,2 в среднем нужно 5 бросков.

Две параметризации — источник путаницы Геометрическое распределение задают двумя способами, и они дают разные ответы:

Что считаем Носитель E(X)\mathbb{E}(X) В Python
Номер первого успеха k=1,2,3,…k = 1, 2, 3, \dots 1/p1/p stats.geom
Число неудач до успеха k=0,1,2,…k = 0, 1, 2, \dots (1−p)/p(1-p)/p np.random.geometric минус 1

В лекции используется формула (1−p)k−1p(1-p)^{k-1}p и E=1/p\mathbb{E} = 1/p — это первый вариант, значения с единицы. Прежде чем брать формулу из справочника, всегда проверяйте, с чего начинается носитель.

На слайде рядом с этой формулой указано k=0,1,2,…k=0,1,2,\dots — это опечатка: выражение (1−p)k−1p(1-p)^{k-1}p соответствует k=1,2,3,…k=1,2,3,\dots.


2.4. Произвольное дискретное — просто таблица

Не всё описывается именованным распределением. Игральная кость — это просто таблица из шести строк по 1/61/6. Функция распределения — ступеньки, каждый раз прыгающие на 1/61/6, как в уроке 1.3.

Если XX принимает значения x1,x2,…x_1,x_2,\dots с вероятностями p1,p2,…p_1,p_2,\dots, то:

pi=P(X=xi),pi≥0,∑ipi=1,p_i=\mathbb{P}(X=x_i), \qquad p_i\ge 0, \qquad \sum_i p_i=1,
F(x)=P(X≤x)=∑xi≤xpi,F(x)=\mathbb{P}(X\le x)=\sum_{x_i\le x}p_i,
E(X)=∑ixipi,\mathbb{E}(X)=\sum_i x_i p_i,
Var(X)=∑i(xi−EX)2pi=∑ixi2pi−(EX)2.\mathrm{Var}(X)=\sum_i(x_i-\mathbb{E}X)^2p_i =\sum_i x_i^2p_i-\bigl(\mathbb{E}X\bigr)^2.

Для честной игральной кости:

xx 1 2 3 4 5 6
P(X=x)\mathbb{P}(X=x) 1/61/6 1/61/6 1/61/6 1/61/6 1/61/6 1/61/6

Отсюда E(X)=3,5\mathbb{E}(X)=3{,}5, а Var(X)=35/12\mathrm{Var}(X)=35/12.


2.5. Пуассон — счётчики событий

Явление: всё, что имеет вид «сколько событий произошло за интервал»:

  • число людей в очереди;

  • число лайков под фотографией;

  • число автобусов, проехавших мимо остановки за час;

  • число персонажей, погибших за главу книги.

X∼Pois(λ)X \sim \mathrm{Pois}(\lambda)
P(X=k)=λke−λk!,k=0,1,2,…\mathbb{P}(X = k) = \frac{\lambda^k e^{-\lambda}}{k!}, \qquad k = 0, 1, 2, \dots
F(x)=e−λ∑k=0⌊x⌋λkk!,x≥0,F(x)=e^{-\lambda}\sum_{k=0}^{\lfloor x\rfloor}\frac{\lambda^k}{k!}, \qquad x\ge 0,

а при x<0x<0 имеем F(x)=0F(x)=0.

Иллюстрация к конспекту: l5_poisson

λ\lambda — интенсивность потока событий: среднее число событий за выбранный интервал. Сколько автобусов в среднем за час, сколько смертей в среднем за главу.

Матожидание Дисперсия
E(X)=λ\mathbb{E}(X) = \lambda Var(X)=λ\mathrm{Var}(X) = \lambda

Уникальное свойство Пуассона Матожидание и дисперсия совпадают. Это даёт быструю диагностику: посчитайте по своим данным среднее и дисперсию. Если они сильно разошлись — пуассоновская модель не подходит.

Чаще всего дисперсия оказывается больше среднего — это называется сверхдисперсией (overdispersion) и означает, что интенсивность λ\lambda сама не постоянна: лайки идут всплесками, очередь в обед не такая, как в 11 утра.


3. Непрерывные распределения

3.1. Экспоненциальное — сколько ждать до события

Явление: «время до чего-то»:

  • время до прихода трамвая;

  • время до появления следующего человека в очереди;

  • время до поломки механизма.

X∼Exp(λ)X \sim \mathrm{Exp}(\lambda)
f(x)=λe−λx,x≥0F(x)=1−e−λxf(x) = \lambda e^{-\lambda x}, \quad x \ge 0 \qquad\qquad F(x) = 1 - e^{-\lambda x}

Полностью, с учётом области значений:

f(x)={λe−λx,x≥0,0,x<0,F(x)={1−e−λx,x≥0,0,x<0.f(x)= \begin{cases} \lambda e^{-\lambda x}, & x\ge 0,\\ 0, & x<0, \end{cases} \qquad F(x)= \begin{cases} 1-e^{-\lambda x}, & x\ge 0,\\ 0, & x<0. \end{cases}

Вероятность ждать дольше xx — функция выживания:

P(X>x)=1−F(x)=e−λx.\mathbb{P}(X>x)=1-F(x)=e^{-\lambda x}.

Иллюстрация к конспекту: l5_exponential

Проверка связи из урока 1.3: производная от F(x)=1−e−λxF(x) = 1 - e^{-\lambda x} равна λe−λx\lambda e^{-\lambda x} — это ровно плотность. ✓

Матожидание Дисперсия
E(X)=1λ\mathbb{E}(X) = \dfrac{1}{\lambda} Var(X)=1λ2\mathrm{Var}(X) = \dfrac{1}{\lambda^2}

Чем меньше λ\lambda, тем дольше в среднем ждём. Время непрерывно — в отличие от числа событий, поэтому здесь плотность, а не таблица.

Свойство отсутствия памяти
P(X>s+t∣X>s)=P(X>t)\mathbb{P}(X > s + t \mid X > s) = \mathbb{P}(X > t)

Словами: если автобусы приходят по экспоненциальному закону и вы уже прождали 20 минут, это ничего не говорит о том, сколько ждать дальше. Распределение оставшегося времени такое же, как в момент прихода на остановку.

Расширение: где это свойство ломается Отсутствие памяти — сильное допущение, и на практике оно часто неверно:

  • Автобусы по расписанию. Прождали 20 минут при интервале 15 — автобус вот-вот придёт. Память есть.

  • Износ оборудования. Деталь, отработавшая 10 лет, сломается скорее новой. Память есть. Для таких случаев берут распределение Вейбулла.

  • Радиоактивный распад, звонки в колл-центр, отказы электроники. Здесь памяти действительно нет — экспоненциальное подходит.

Экспоненциальное — базовый кирпич: на нём строятся более сложные модели времени жизни (survival analysis).


3.2. Равномерное — все значения одинаково вероятны

Явление: время рождения ребёнка в течение суток.

X∼U(a,b),f(x)=1b−a  при x∈[a,b]X \sim U(a, b), \qquad f(x) = \frac{1}{b-a} \ \text{ при } x \in [a, b]
f(x)={1b−a,a≤x≤b,0,иначе,F(x)={0,x<a,x−ab−a,a≤x<b,1,x≥b.f(x)= \begin{cases} \dfrac{1}{b-a}, & a\le x\le b,\\ 0, & \text{иначе}, \end{cases} \qquad F(x)= \begin{cases} 0, & x<a,\\ \dfrac{x-a}{b-a}, & a\le x<b,\\ 1, & x\ge b. \end{cases}

Иллюстрация к конспекту: l5_uniform

Матожидание Дисперсия
E(X)=a+b2\mathbb{E}(X) = \dfrac{a+b}{2} Var(X)=(b−a)212\mathrm{Var}(X) = \dfrac{(b-a)^2}{12}

Обе формулы выведены в уроке 1.4.


3.3. Нормальное — колокол

Явление: погрешность весов. Рост людей. Ошибки измерений. И огромное количество всего остального.

X∼N(μ,σ2)X \sim N(\mu, \sigma^2)
f(x)=1σ2π e−(x−μ)22σ2f(x) = \frac{1}{\sigma\sqrt{2\pi}} \, e^{-\frac{(x-\mu)^2}{2\sigma^2}}
F(x)=Φ ⁣(x−μσ),F(x)=\Phi\!\left(\frac{x-\mu}{\sigma}\right),

где Φ(z)\Phi(z) — функция распределения стандартной нормальной величины Z∼N(0,1)Z\sim N(0,1). Стандартизация переводит любую нормальную величину к стандартной:

Z=X−μσ∼N(0,1).Z=\frac{X-\mu}{\sigma}\sim N(0,1).

Иллюстрация к конспекту: l5_normal

Параметры прямо равны характеристикам — редкое удобство:

Параметр Что это Что делает с графиком
μ\mu матожидание E(X)\mathbb{E}(X) двигает колокол влево-вправо
σ2\sigma^2 дисперсия Var(X)\mathrm{Var}(X) расплющивает: больше дисперсия — площе колокол и непредсказуемее величина

У нормального распределения нет аналитической функции распределения Интеграл ∫−∞xe−t2/2 dt\int_{-\infty}^{x} e^{-t^2/2}\,dt не берётся в элементарных функциях. Поэтому F(x)F(x) для нормального распределения всегда считают численно, по приближениям. Исторически для этого печатали таблицы, сегодня это scipy.stats.norm.cdf().

Правило трёх сигм

Иллюстрация к конспекту: l5_three_sigma

Интервал Вероятность попасть
μ±1σ\mu \pm 1\sigma ≈ 68,3 %
μ±2σ\mu \pm 2\sigma ≈ 95,4 %
μ±3σ\mu \pm 3\sigma ≈ 99,7 %

Полезно как быстрая прикидка: значение, отстоящее от среднего больше чем на 3σ3\sigma, для нормальной величины — событие примерно раз на 370 наблюдений.

Свойства нормального распределения подробно разбираются на следующей неделе.


4. Сводные таблицы

4.1. Формулы распределений
Распределение Носитель PMF или PDF CDF на носителе
Бернулли k∈{0,1}k\in\{0,1\} P(X=k)=pk(1−p)1−k\mathbb{P}(X=k)=p^k(1-p)^{1-k} 1−p1-p при 0≤x<10\le x<1; 11 при x≥1x\ge1
Биномиальное k=0,…,nk=0,\dots,n P(X=k)=Cnkpk(1−p)n−k\mathbb{P}(X=k)=C_n^kp^k(1-p)^{n-k} ∑k=0⌊x⌋Cnkpk(1−p)n−k\displaystyle\sum_{k=0}^{\lfloor x\rfloor}C_n^kp^k(1-p)^{n-k}
Геометрическое k=1,2,…k=1,2,\dots P(X=k)=p(1−p)k−1\mathbb{P}(X=k)=p(1-p)^{k-1} 1−(1−p)⌊x⌋1-(1-p)^{\lfloor x\rfloor}
Пуассон k=0,1,2,…k=0,1,2,\dots P(X=k)=λke−λk!\mathbb{P}(X=k)=\dfrac{\lambda^ke^{-\lambda}}{k!} e−λ∑k=0⌊x⌋λkk!\displaystyle e^{-\lambda}\sum_{k=0}^{\lfloor x\rfloor}\dfrac{\lambda^k}{k!}
Экспоненциальное x≥0x\ge0 f(x)=λe−λxf(x)=\lambda e^{-\lambda x} F(x)=1−e−λxF(x)=1-e^{-\lambda x}
Равномерное x∈[a,b]x\in[a,b] f(x)=1b−af(x)=\dfrac1{b-a} F(x)=x−ab−aF(x)=\dfrac{x-a}{b-a}
Нормальное x∈Rx\in\mathbb{R} f(x)=1σ2πe−(x−μ)22σ2f(x)=\dfrac1{\sigma\sqrt{2\pi}}e^{-\frac{(x-\mu)^2}{2\sigma^2}} F(x)=Φ ⁣(x−μσ)F(x)=\Phi\!\left(\dfrac{x-\mu}{\sigma}\right)

Вне носителя плотность или вероятность равна нулю; функция распределения равна нулю левее носителя и единице правее него.

4.2. Смысл и характеристики
Распределение Что моделирует Параметры E(X)\mathbb{E}(X) Var(X)\mathrm{Var}(X) scipy
Бернулли один опыт, два исхода pp pp p(1−p)p(1-p) bernoulli
Биномиальное число успехов из nn n,pn, p npnp np(1−p)np(1-p) binom
Геометрическое номер первого успеха pp 1/p1/p (1−p)/p2(1-p)/p^2 geom
Пуассон число событий за интервал λ\lambda λ\lambda λ\lambda poisson
Экспоненциальное время до события λ\lambda 1/λ1/\lambda 1/λ21/\lambda^2 expon
Равномерное все значения равновероятны a,ba, b (a+b)/2(a+b)/2 (b−a)2/12(b-a)^2/12 uniform
Нормальное симметричный разброс, ошибки, суммы μ,σ2\mu, \sigma^2 μ\mu σ2\sigma^2 norm

5. Как выбрать распределение

graph TD
    A{"Что измеряем?"} --> B["Считаем ШТУКИ<br/>дискретная величина"]
    A --> C["Измеряем ВРЕМЯ<br/>или физическую величину<br/>непрерывная"]

    B --> B1{"Сколько опытов?"}
    B1 -->|"один"| D1["Бернулли<br/>Bern p"]
    B1 -->|"фиксированное n"| D2["Биномиальное<br/>Bin n, p"]
    B1 -->|"ждём первого успеха"| D3["Геометрическое<br/>Geom p"]
    B1 -->|"считаем события<br/>за интервал"| D4["Пуассон<br/>Pois λ"]

    C --> C1{"Что именно?"}
    C1 -->|"время до события"| E1["Экспоненциальное<br/>Exp λ"]
    C1 -->|"все значения<br/>равновероятны"| E2["Равномерное<br/>U a, b"]
    C1 -->|"симметричный разброс<br/>вокруг центра"| E3["Нормальное<br/>N μ, σ²"]

6. Как распределения связаны между собой

Это не отдельные формулы, а одно семейство.

graph LR
    B["Бернулли<br/>один опыт"] -->|"сумма n штук"| BIN["Биномиальное"]
    B -->|"ждём первого<br/>успеха"| G["Геометрическое"]
    BIN -->|"n → ∞, p → 0<br/>при np = λ"| P["Пуассон"]
    BIN -->|"n большое,<br/>p не крайнее (ЦПТ)"| N["Нормальное"]
    P -->|"интервалы между<br/>событиями"| E["Экспоненциальное"]
    G -.->|"непрерывный аналог"| E
    P -->|"λ большое"| N
    ANY["Любая величина<br/>с конечной дисперсией"] -->|"среднее большой выборки<br/>ЦПТ"| N

Расширение: три связи, которые стоит понимать

1. Пуассон как предел биномиального. Возьмите очень много испытаний с очень маленькой вероятностью успеха так, чтобы произведение np=λnp = \lambda оставалось постоянным. Получится Пуассон. Смысл: событий-возможностей бесконечно много, каждая почти невероятна, но в сумме что-то за час да произойдёт — это и есть «счётчик».

2. Пуассон и экспоненциальное — две стороны одного процесса. Если число событий за интервал распределено по Пуассону с интенсивностью λ\lambda, то время между соседними событиями распределено экспоненциально с той же λ\lambda. Одно явление, два вопроса: «сколько штук» и «сколько ждать».

3. Геометрическое — дискретный аналог экспоненциального. Оба отвечают «сколько ждать до первого успеха», оба обладают отсутствием памяти. Разница только в том, что время идёт шагами или непрерывно.

4. Нормальное как универсальный предел. По центральной предельной теореме среднее большой выборки из почти любого распределения ведёт себя как нормальное. Отсюда и фраза из урока 1.1 про «лезет из всех щелей».


7. Это же на Python

import numpy as np
from scipy import stats

rng = np.random.default_rng(42)

# ---------- Дискретные ----------
stats.bernoulli(p=0.6).rvs(10, random_state=rng)        # 0/1
stats.binom(n=10, p=0.3).pmf(3)                          # P(ровно 3 попадания из 10)
stats.binom(n=10, p=0.3).cdf(3)                          # P(не больше 3 попаданий)
stats.geom(p=0.2).mean()                                 # 5.0 — в среднем 5 бросков
stats.poisson(mu=4).pmf(2)                               # P(ровно 2 события), mu = λ

# ---------- Непрерывные ----------
# ВНИМАНИЕ: у scipy expon параметризуется через scale = 1/λ, а не через λ
lam = 2.0
X = stats.expon(scale=1 / lam)
X.mean()                                                 # 0.5 = 1/λ
X.cdf(1)                                                 # P(ждать не больше 1)

stats.uniform(loc=0, scale=24).mean()                    # 12.0 — loc=a, scale=b-a
stats.norm(loc=170, scale=10).cdf(180)                   # ≈ 0.841

# ---------- Проверяем связь Бернулли → биномиальное ----------
n, p = 10, 0.3
bern_sum = rng.binomial(1, p, size=(100_000, n)).sum(axis=1)   # сумма n бернуллиевских
binom    = rng.binomial(n, p, size=100_000)                    # напрямую биномиальное
print(bern_sum.mean(), binom.mean())      # ≈ 3.0 и ≈ 3.0 — совпадает

# ---------- Проверяем правило трёх сигм ----------
z = rng.normal(0, 1, 1_000_000)
for k in (1, 2, 3):
    print(k, np.mean(np.abs(z) < k))      # ≈ 0.683, 0.954, 0.997

# ---------- Проверяем отсутствие памяти у экспоненциального ----------
t = rng.exponential(scale=1 / lam, size=1_000_000)
waited = t[t > 1.0] - 1.0                 # уже прождали 1, смотрим остаток
print(t.mean(), waited.mean())            # ≈ 0.5 и ≈ 0.5 — распределение то же

Ловушка параметризации в scipy scipy.stats.expon принимает scale =1/λ= 1/\lambda, а не λ\lambda. Забыть про это — классическая ошибка, которая тихо даёт неверные числа. Проверяйте себя вызовом .mean(): он должен совпасть с тем, что вы ожидаете.


8. Главное предупреждение урока

Модель — не истина Всё перечисленное — лишь способы описать явление, задуманное «сундуком». Конкретный закон выбирается из двух источников:

  1. того, что видно в данных;

  2. здравого смысла о том, как реальность устроена.

Ни одно из этих распределений не является истиной в последней инстанции. Реальные явления часто отклоняются от предложенных моделей, и тогда модель приходится подбирать другую.

Как проверять предпосылки о сундуке — предмет всего остального курса.

Примеры, где «очевидная» модель ломается:

Явление Наивная модель Что не так на практике
Время рождения ребёнка U(0,24)U(0, 24) Плановые кесаревы сечения сдвигают массу к рабочим часам
Время прихода автобуса Exp(λ)\mathrm{Exp}(\lambda) Расписание — память есть, экспоненциальное не подходит
Число лайков Pois(λ)\mathrm{Pois}(\lambda) Всплески и вирусность дают дисперсию много больше среднего
Рост людей N(μ,σ2)N(\mu, \sigma^2) В смешанной по полу выборке распределение бимодально

Проверь себя

Чем отличаются Бернулли, биномиальное и геометрическое?

Все три про серию одинаковых опытов с двумя исходами, но отвечают на разные вопросы. Бернулли — результат одного опыта. Биномиальное — сколько успехов в nn опытах. Геометрическое — на каком по счёту опыте случился первый успех.

Почему E\mathbb{E} и Var\mathrm{Var} биномиального — это просто nn раз Бернулли?

Потому что биномиальная величина есть сумма nn независимых бернуллиевских. Матожидание суммы всегда равно сумме матожиданий, а дисперсии складываются благодаря независимости. Отсюда npnp и np(1−p)np(1-p).

Что означает параметр λ у Пуассона?

Интенсивность потока: среднее число событий за выбранный интервал. Он же равен и матожиданию, и дисперсии.

Как быстро проверить, подходит ли Пуассон к вашим данным?

Сравнить выборочное среднее и выборочную дисперсию. У Пуассона они равны. Сильное расхождение (обычно дисперсия больше) означает, что интенсивность непостоянна и модель не годится.

Что такое отсутствие памяти и где оно не работает?

P(X>s+t∣X>s)=P(X>t)\mathbb{P}(X > s+t \mid X > s) = \mathbb{P}(X > t): уже прождавшее время не влияет на оставшееся. Не работает там, где есть расписание или износ — автобусы по графику, стареющее оборудование.

Почему для нормального распределения нет формулы функции распределения?

Интеграл от e−t2/2e^{-t^2/2} не выражается в элементарных функциях. F(x)F(x) считают численно — исторически по таблицам, сейчас через scipy.stats.norm.cdf.

Как связаны Пуассон и экспоненциальное?

Это один процесс с двух сторон. Число событий за интервал — Пуассон с интенсивностью λ\lambda; время между соседними событиями — экспоненциальное с той же λ\lambda.

Главный дисклеймер урока?

Распределение — модель, а не истина. Выбор делается по данным и здравому смыслу, и реальные явления регулярно от моделей отклоняются. Проверка предпосылок — содержание дальнейшего курса.


Навигация

  • Предыдущий урок: 1.4 Характеристики случайных величин

  • Оглавление курса: 00 Курс — оглавление и шпаргалка

  1. Распределение Бернулли

    Модель одного опыта с двумя исходами: величина принимает 1 с вероятностью p и 0 с вероятностью 1 − p

  2. Матожидание и дисперсия распределения Бернулли

    E(X) = p, Var(X) = p(1 − p)

  3. При каком p величина Бернулли наименее предсказуема?

    При p = 0,5: дисперсия p(1 − p) достигает максимума 0,25

    Подсказка: Честная монета или монета, выпадающая орлом в 99 процентах бросков?

  4. Биномиальное распределение

    Модель числа успехов в n независимых одинаковых испытаниях с вероятностью успеха p

  5. Матожидание и дисперсия биномиального распределения

    E(X) = np, Var(X) = np(1 − p)

  6. Как биномиальная величина связана с бернуллиевской?

    Она равна сумме n независимых бернуллиевских величин, поэтому её характеристики — характеристики Бернулли, умноженные на n

  7. Зачем в формуле биномиального распределения нужен биномиальный коэффициент?

    Он учитывает число способов расположить k успехов среди n испытаний, поскольку порядок успехов неважен

  8. Геометрическое распределение

    Модель номера испытания, на котором произошёл первый успех

  9. Матожидание и дисперсия геометрического распределения (номер первого успеха)

    E(X) = 1/p, Var(X) = (1 − p)/p²

  10. Распределение Пуассона

    Модель числа событий, произошедших за фиксированный интервал времени или пространства

  11. Что означает параметр лямбда в распределении Пуассона?

    Интенсивность потока событий: среднее число событий за рассматриваемый интервал

  12. Матожидание и дисперсия распределения Пуассона

    И матожидание, и дисперсия равны лямбда

  13. Как быстро проверить, подходит ли пуассоновская модель к данным?

    Сравнить выборочные среднее и дисперсию: у Пуассона они равны, сильное расхождение означает непригодность модели

  14. Сверхдисперсия

    Ситуация, когда дисперсия счётчика заметно превышает его среднее; признак того, что интенсивность событий непостоянна

  15. Экспоненциальное распределение

    Модель времени ожидания до наступления события

  16. Плотность и матожидание экспоненциального распределения

    f(x) = лямбда·e^(−лямбда·x) при x ≥ 0; E(X) = 1/лямбда

  17. Свойство отсутствия памяти

    Уже потраченное на ожидание время не влияет на распределение оставшегося: P(X > s + t при условии X > s) = P(X > t)

  18. Назовите случай, когда свойство отсутствия памяти не выполняется на практике

    Автобусы по расписанию или изнашивающееся оборудование: чем дольше ждём или чем старше деталь, тем ближе событие

  19. Равномерное распределение

    Модель, в которой все значения на отрезке от a до b равновероятны, а плотность постоянна

  20. Матожидание и дисперсия равномерного распределения на отрезке от a до b

    E(X) = (a + b)/2, Var(X) = (b − a)²/12

  21. Нормальное распределение

    Распределение с колоколообразной плотностью, параметры которого мю и сигма² равны его матожиданию и дисперсии

  22. Как параметры мю и сигма меняют график нормальной плотности?

    Мю двигает колокол вдоль оси, сигма его расплющивает: чем больше сигма, тем площе кривая и непредсказуемее величина

  23. Почему у нормального распределения нет аналитической функции распределения?

    Нужный интеграл не выражается в элементарных функциях, поэтому F(x) считают численно, по приближениям

  24. Правило трёх сигм

    В интервал мю ± сигма попадает около 68 % вероятности, в мю ± 2 сигма — около 95 %, в мю ± 3 сигма — около 99,7 %

  25. Как связаны распределение Пуассона и экспоненциальное распределение?

    Это один процесс с двух сторон: число событий за интервал распределено по Пуассону, а время между соседними событиями — экспоненциально с той же лямбда

  26. Главное предостережение урока о выборе распределения

    Распределение — это модель, а не истина: его выбирают по данным и здравому смыслу, и реальные явления регулярно от моделей отклоняются

  27. Функция вероятности распределения Бернулли

    P(X = k) = p^k(1 − p)^(1 − k), где k ∈ {0, 1}

  28. Функция вероятности биномиального распределения

    P(X = k) = C(n, k) p^k(1 − p)^(n − k), где k = 0, …, n

  29. Две параметризации геометрического распределения

    Можно считать номер первого успеха: k = 1, 2, … и E(X) = 1/p; либо число неудач до успеха: k = 0, 1, … и E(X) = (1 − p)/p

  30. Условия корректности произвольного дискретного распределения

    Для вероятностей pᵢ = P(X = xᵢ) должны выполняться pᵢ ≥ 0 и Σpᵢ = 1

  31. Матожидание и дисперсия произвольной дискретной величины

    E(X) = Σxᵢpᵢ; Var(X) = Σxᵢ²pᵢ − [E(X)]²

  32. Функция вероятности распределения Пуассона

    P(X = k) = λ^k e^(−λ) / k!, где k = 0, 1, 2, …

  33. Функция выживания экспоненциального распределения

    P(X > x) = 1 − F(x) = e^(−λx) при x ≥ 0

  34. Стандартизация нормальной случайной величины

    Если X ~ N(μ, σ²), то Z = (X − μ)/σ ~ N(0, 1)

  35. Параметризация scipy.stats.expon через интенсивность λ

    Нужно передать scale = 1/λ; проверка: среднее распределения должно равняться 1/λ

  36. Параметры scipy.stats.uniform для распределения U(a, b)

    loc = a, scale = b − a

  37. Когда биномиальное распределение приближается распределением Пуассона?

    При n → ∞ и p → 0, если произведение np = λ остаётся постоянным

  38. Связь геометрического и экспоненциального распределений

    Оба описывают ожидание до первого события и обладают отсутствием памяти; геометрическое считает дискретные шаги, экспоненциальное — непрерывное время

Показано 38 из 38 карточек

Симуляции в Python

1.6. Генерация случайных величин в Python

Автор: yuriy konkov · Карточек: 10

1.6 Генерация случайных величин в Python

Коротко

  • В scipy.stats каждому распределению соответствует объект-генератор с заданными параметрами.

  • Метод rvs создаёт случайную выборку, pdf вычисляет плотность, cdf — функцию распределения, ppf — квантиль.

  • У нормального распределения loc задаёт математическое ожидание μ\mu, а scale — среднее квадратическое отклонение σ\sigma, не дисперсию σ2\sigma^2.

  • Для непрерывной величины вероятность — это площадь под плотностью; вероятность отрезка считается как разность значений функции распределения.

  • NumPy помогает создать сетку значений, а Matplotlib — последовательно наложить на график кривую, точки, заливку и вспомогательные линии.


1. Библиотеки, которые используются в курсе

Библиотека Для чего нужна
NumPy Вычисления с векторами и матрицами, математические преобразования
pandas Работа с таблицами
SciPy Научные вычисления; модуль scipy.stats — распределения и статистические функции
Matplotlib Построение базовых графиков
seaborn Более сложные статистические визуализации

Минимальные импорты для примеров этого урока:

import numpy as np
from scipy import stats
import matplotlib.pyplot as plt

plt.style.use("ggplot")

В старых версиях Jupyter для показа рисунков внутри тетрадки использовали команду %matplotlib inline. В современных версиях Jupyter графики обычно выводятся внутри тетрадки автоматически.


2. Объект распределения

В качестве примера используется нормальная случайная величина:

X∼N(μ,σ2).X \sim N(\mu, \sigma^2).

Её плотность равна

f(x)=1σ2πexp⁡(−(x−μ)22σ2).f(x) = \frac{1}{\sigma\sqrt{2\pi}} \exp\left(-\frac{(x-\mu)^2}{2\sigma^2}\right).

Чтобы работать с распределением в Python, сначала создают его объект и задают параметры:

norm_rv = stats.norm(loc=0, scale=1)

Здесь получено стандартное нормальное распределение N(0,1)N(0,1).

scale — это σ\sigma, а не σ2\sigma^2 В математической записи второй параметр нормального распределения — дисперсия σ2\sigma^2, но stats.norm принимает среднее квадратическое отклонение σ\sigma.

Пример для пояснения. Для N(3,4)N(3,4) нужно написать stats.norm(loc=3, scale=2).

После создания объекта у него можно вызывать один и тот же набор методов:

Метод Результат
rvs(size=n) случайная выборка объёма nn
pdf(x) значение плотности f(x)f(x)
cdf(x) значение функции распределения F(x)=P(X≤x)F(x)=\mathbb{P}(X\le x)
ppf(gamma) квантиль уровня γ\gamma, то есть F−1(γ)F^{-1}(\gamma)

Например, выборка из 1000 значений создаётся так:

sample = norm_rv.rvs(size=1000)
sample[:10]

3. Плотность: метод pdf

Значение плотности стандартного нормального распределения в точке 11:

norm_rv.pdf(1)
# 0.24197072451914337

Пояснение Это высота кривой плотности, а не вероятность события X=1X=1. Для непрерывной случайной величины вероятность отдельной точки равна нулю; вероятность задаёт площадь под кривой на некотором промежутке.

Чтобы нарисовать плотность, сначала создают сетку из 100 точек от −3-3 до 33, а затем сразу вычисляют плотность во всех этих точках:

x = np.linspace(-3, 3, 100)
pdf = norm_rv.pdf(x)

plt.plot(x, pdf)
plt.scatter([1], [norm_rv.pdf(1)], color="blue")
plt.xlabel("x")
plt.ylabel("f(x)");

Методы scipy.stats умеют принимать не только одно число, но и целый массив. Поэтому не нужно вычислять pdf для каждой точки вручную.


4. Функция распределения: метод cdf

Функция распределения показывает накопленную слева вероятность:

F(x)=P(X≤x)=∫−∞xf(t) dt.F(x)=\mathbb{P}(X\le x)=\int_{-\infty}^{x}f(t)\,dt.

Для точки x=1x=1:

norm_rv.cdf(1)
# 0.8413447460685429

Значит, стандартная нормальная случайная величина окажется не больше единицы примерно с вероятностью 0,840{,}84.

Плотность и функция распределения стандартной нормальной случайной величины Слева одна и та же вероятность показана площадью под плотностью, справа — высотой функции распределения в точке x=1x=1.

На графике плотности эту вероятность можно показать заливкой:

x = np.linspace(-3, 3, 100)
plt.plot(x, norm_rv.pdf(x))

xq = np.linspace(-3, 1, 100)
plt.fill_between(xq, 0, norm_rv.pdf(xq), color="blue", alpha=0.2)
plt.axvline(1, color="blue", linestyle="--", linewidth=2)
plt.xlabel("x")
plt.ylabel("f(x)");

Здесь fill_between закрашивает пространство между нулём и плотностью, alpha управляет прозрачностью, а axvline проводит вертикальную линию.

Граница −3-3 нужна только для рисунка Пояснение. По определению площадь для F(1)F(1) начинается в −∞-\infty. На графике берут конечное окно от −3-3 до 11, потому что всю бесконечную ось показать невозможно. Для точного численного ответа используется norm_rv.cdf(1).

Саму функцию распределения строят по той же схеме, заменяя pdf на cdf:

x = np.linspace(-3, 3, 100)
cdf = norm_rv.cdf(x)

plt.plot(x, cdf)
plt.scatter([1], [norm_rv.cdf(1)], color="blue")
plt.xlabel("x")
plt.ylabel("F(x)");

Вероятность постепенно накапливается слева направо. Для нормального распределения F(x)F(x) приближается к нулю при движении влево и к единице при движении вправо, но при конечных xx не достигает этих границ.


5. Вероятность попасть в отрезок

Площадь между двумя точками находится как разность накопленных вероятностей:

 P(a<X≤b)=F(b)−F(a) .\boxed{\ \mathbb{P}(a<X\le b)=F(b)-F(a)\ }.

Для стандартного нормального распределения:

P(1<X≤3)=F(3)−F(1).\mathbb{P}(1<X\le3)=F(3)-F(1).
norm_rv.cdf(3) - norm_rv.cdf(1)
# 0.15730535589982697

Вероятность попасть между 11 и 33 равна примерно 0,160{,}16. На графике плотности это площадь под кривой между двумя вертикальными границами:

x = np.linspace(-5, 5, 100)
plt.plot(x, norm_rv.pdf(x))

xq = np.linspace(1, 3, 100)
plt.fill_between(xq, 0, norm_rv.pdf(xq), color="blue", alpha=0.2)
plt.axvline(1, color="blue", linestyle="--", linewidth=2)
plt.axvline(3, color="blue", linestyle="--", linewidth=2)
plt.xlabel("x")
plt.ylabel("f(x)");

6. Квантили: метод ppf

Квантиль уровня γ\gamma — такое число qγq_\gamma, левее которого находится доля вероятности γ\gamma:

F(qγ)=P(X≤qγ)=γ.F(q_\gamma)=\mathbb{P}(X\le q_\gamma)=\gamma.

Метод ppf выполняет действие, обратное cdf: получает вероятность и возвращает соответствующее значение случайной величины.

norm_rv.ppf(0.05)  # -1.6448536269514729
norm_rv.ppf(0.10)  # -1.2815515655446004
norm_rv.ppf(0.50)  #  0.0 — медиана

Например, левее числа −1,64-1{,}64 находится примерно 5 % вероятностной массы стандартного нормального распределения. Квантиль уровня 0,50{,}5 равен нулю — это медиана распределения.

cdf и ppf решают обратные задачи

  • cdf(x) отвечает: «Какая вероятность накопилась левее числа xx?»

  • ppf(γ) отвечает: «Какое число оставляет слева вероятность γ\gamma?»


7. Тот же интерфейс для другого распределения

Работа не ограничивается нормальным распределением. Например, можно создать объект экспоненциального распределения и получить из него пять значений:

exp_rv = stats.expon(scale=5)
exp_rv.rvs(size=5)

Для него доступны те же методы rvs, pdf, cdf и ppf. Меняются само распределение и смысл его параметров, а способ работы остаётся прежним.

Общая схема

  1. Выбрать распределение в scipy.stats.

  2. Создать объект и задать параметры.

  3. Вызвать нужный метод: сгенерировать выборку, вычислить плотность, вероятность или квантиль.


8. Это же на Python: цельный пример

import numpy as np
from scipy import stats
import matplotlib.pyplot as plt

# Стандартное нормальное распределение N(0, 1)
norm_rv = stats.norm(loc=0, scale=1)

# Случайная выборка
sample = norm_rv.rvs(size=1000)

# Плотность, функция распределения и квантиль
print(norm_rv.pdf(1))
print(norm_rv.cdf(1))
print(norm_rv.cdf(3) - norm_rv.cdf(1))
print(norm_rv.ppf(0.05))

# Плотность и вероятность P(X <= 1)
x = np.linspace(-3, 3, 200)
plt.plot(x, norm_rv.pdf(x))

xq = np.linspace(-3, 1, 200)
plt.fill_between(xq, 0, norm_rv.pdf(xq), color="blue", alpha=0.2)
plt.axvline(1, color="blue", linestyle="--", linewidth=2)
plt.xlabel("x")
plt.ylabel("f(x)")
plt.show()

Проверь себя

Чем отличаются pdf(1) и cdf(1)?

pdf(1) возвращает высоту плотности в точке 11. cdf(1) возвращает вероятность P(X≤1)\mathbb{P}(X\le1), то есть всю площадь под плотностью левее единицы.

Как задать нормальное распределение с математическим ожиданием 3 и дисперсией 4?

Дисперсия равна σ2=4\sigma^2=4, значит, σ=2\sigma=2. Код: stats.norm(loc=3, scale=2).

Как найти вероятность P(1<X≤3)\mathbb{P}(1<X\le3)?

Вычесть значения функции распределения: norm_rv.cdf(3) - norm_rv.cdf(1).

Что вернёт norm_rv.ppf(0.5)?

Медиану стандартного нормального распределения — число 00. Слева от него находится половина вероятностной массы.


Источники

  • Расшифровка видеоурока «1.6. Генерация случайных величин в Python».

  • Ноутбук 03_python_simulation.ipynb: «Симуляции случайных величин», разделы 1–2.

  1. Объект распределения в scipy.stats

    Объект с выбранным законом и параметрами, у которого вызывают методы rvs, pdf, cdf и ppf

  2. Метод rvs(size=n)

    Генерирует случайную выборку объёма n из заданного распределения

  3. Метод pdf(x)

    Вычисляет высоту плотности непрерывного распределения в точке x

  4. Метод cdf(x)

    Вычисляет функцию распределения F(x) = P(X ≤ x)

  5. Метод ppf(gamma)

    Возвращает квантиль q_gamma, для которого P(X ≤ q_gamma) = gamma

  6. Параметры stats.norm

    loc задаёт математическое ожидание μ, а scale — среднее квадратическое отклонение σ, не дисперсию σ²

  7. Вероятность P(a < X ≤ b) через функцию распределения

    F(b) − F(a), то есть cdf(b) − cdf(a)

  8. Значение pdf(x) для непрерывной случайной величины

    Высота кривой плотности в точке x; это не вероятность события X = x

  9. Функция np.linspace(a, b, n)

    Создаёт n равномерно расположенных точек от a до b для расчётов и построения графика

  10. Связь cdf и ppf

    ppf выполняет обратную задачу к cdf: по накопленной вероятности возвращает соответствующее значение случайной величины

Показано 10 из 10 карточек

Выборки и описательная статистика

1.7. Описательные статистики

Автор: yuriy konkov · Карточек: 20

1.7 Описательные статистики

Коротко

  • Генеральная совокупность включает все интересующие нас объекты, а выборка — только исследованную часть этой совокупности.

  • Чтобы переносить выводы с выборки на генеральную совокупность, выборка должна отражать её свойства. Один из способов уменьшить систематическое искажение — случайный отбор наблюдений.

  • В дальнейшем наблюдения считаются независимыми и одинаково распределёнными: i.i.d.

  • Любая функция от наблюдений называется статистикой. Статистика сама остаётся случайной величиной, потому что зависит от случайной выборки.

  • Среднее, медиана и мода описывают типичное значение. Дисперсия, стандартное отклонение и интерквантильный размах описывают разброс.

  • Среднее и дисперсия чувствительны к выбросам. Медиана и интерквантильный размах устойчивее к отдельным экстремальным значениям.


1. Генеральная совокупность и выборка

Генеральная совокупность — все объекты, о которых исследователь хочет получить знание. Выборка — часть генеральной совокупности, для которой удалось собрать данные.

Например, в городе живёт миллион человек. Чтобы оценить среднюю зарплату, можно опросить 2 500 жителей, а не всё население. Тогда:

  • миллион жителей — генеральная совокупность;

  • 2 500 опрошенных — выборка;

  • средняя зарплата опрошенных — статистика, по которой пытаются судить о средней зарплате в городе.

Работа с выборкой экономит время и деньги. Однако сам факт наличия выборки ещё не гарантирует правильного вывода о всей совокупности.

Репрезентативность

Репрезентативная выборка отражает существенные свойства генеральной совокупности. Если способ отбора систематически включает одни группы чаще других, выводы могут оказаться смещёнными.

В примере из лекции рост людей измеряют тремя способами:

Способ отбора Проблема
Опросить баскетбольную команду Высокие люди попадут в выборку чаще, чем среди всех жителей
Опросить только подруг Выборка не отражает всё население
Опросить случайных людей на остановке Отбор ближе к случайному и меньше связан с ростом

Случайный отбор помогает избежать заранее заданного предпочтения одним наблюдениям перед другими.

Расширение: случайный отбор и репрезентативность В лекции выборка людей на остановке считается репрезентативной по сравнению с двумя явно смещёнными вариантами. В реальном исследовании одной случайности внутри остановки недостаточно: люди, которые не пользуются этой остановкой, вообще не могут попасть в выборку. Поэтому важны и случайный отбор, и охват всех существенных групп генеральной совокупности.


2. Статистическая модель выборки

Обозначим выборку объёма nn через

X1,X2,…,Xn,X_1, X_2, \ldots, X_n,

где XiX_i — результат одного случайного наблюдения, а nn — размер выборки. До сбора данных каждое XiX_i рассматривается как случайная величина. После наблюдения получаются конкретные числа x1,x2,…,xnx_1, x_2, \ldots, x_n.

В курсе используются две предпосылки:

  1. Наблюдения независимы: результат одного наблюдения не меняет распределение остальных.

  2. Наблюдения одинаково распределены: каждое из них подчиняется тому же распределению, что и изучаемая генеральная совокупность.

Кратко это записывают так:

X1,X2,…,Xni.i.d.X_1, X_2, \ldots, X_n \quad \mathrm{i.i.d.}

Сокращение i.i.d. происходит от independent and identically distributed — «независимые и одинаково распределённые».

Одинаково распределены — не значит равны Значения X1X_1 и X2X_2 могут различаться. Одинаковым считается механизм, который их порождает: возможные значения и их вероятности.


3. Что такое статистика

Статистика — любая функция от наблюдений:

T=T(X1,X2,…,Xn).T = T(X_1, X_2, \ldots, X_n).

Примеры статистик: выборочное среднее, медиана, максимум, дисперсия. Если извлечь две разные выборки из одной генеральной совокупности, значения статистики обычно различаются. Поэтому статистика — тоже случайная величина.

Например, по одной случайной группе жителей средняя зарплата может оказаться равной 72 000 рублей, а по другой — 76 000 рублей. Формула среднего не изменилась, но на вход ей попались другие наблюдения.

Главная идея Статистика — не неизменное свойство одной таблицы. До сбора данных это случайная величина, поведение которой зависит от способа получения выборки.


4. Наблюдения и переменные в таблице

Обычно выборка представлена таблицей:

  • строка — отдельное наблюдение, например один фильм;

  • столбец — переменная, например название фильма, кассовые сборы или год выпуска.

В лекции переменные разделяются на два вида:

Вид Что принимает переменная Примеры
Категориальная Значение из ограниченного набора категорий цвет машины, страна производства
Непрерывная Числовые значения из некоторого диапазона рост, вес, цена, кассовые сборы

Тип переменной определяет, какие описательные статистики имеют смысл. Для числовой переменной можно считать среднее и разброс. Для категориальной переменной естественной мерой центральной тенденции служит мода — самая частая категория.


5. Меры центральной тенденции

Меры центральной тенденции отвечают на вопрос: «На что похоже типичное наблюдение?» В уроке рассматриваются среднее, медиана и мода.

Выборочное среднее

Выборочное среднее — аналог математического ожидания для наблюдаемой выборки:

 xˉ=x1+x2+…+xnn=1n∑i=1nxi .\boxed{\ \bar{x} = \frac{x_1+x_2+\ldots+x_n}{n} = \frac{1}{n}\sum_{i=1}^{n}x_i\ }.

Для выборки 1,5,−4,3,01, 5, -4, 3, 0:

xˉ=1+5−4+3+05=1.\bar{x}=\frac{1+5-4+3+0}{5}=1.

В вычислении участвует каждое значение. Поэтому одно очень большое или очень маленькое наблюдение может заметно сдвинуть среднее.

Выборочная медиана

Чтобы найти медиану, наблюдения упорядочивают по возрастанию.

  • При нечётном nn берут значение в середине.

  • При чётном nn берут среднее двух центральных значений.

Для нечётного числа наблюдений:

1,5,−4,3,0⟶−4,0,1,3,5,1, 5, -4, 3, 0 \quad\longrightarrow\quad -4, 0, 1, 3, 5,

поэтому mathrmmed=1mathrm{med}=1.

Для чётного числа наблюдений:

1,5,−4,3⟶−4,1,3,5,1, 5, -4, 3 \quad\longrightarrow\quad -4, 1, 3, 5,
med=1+32=2.\mathrm{med}=\frac{1+3}{2}=2.
Почему среднее чувствительно к выбросам

Предположим, семь человек получают по 30 000 рублей, а восьмой — 430 000 рублей. Тогда

xˉ=7⋅30 000+430 0008=80 000.\bar{x}=\frac{7\cdot 30\,000+430\,000}{8}=80\,000.

Среднее равно 80 000 рублей, хотя зарплата семи из восьми человек составляет 30 000 рублей. Медиана этой выборки равна 30 000 рублей, потому что экстремальное значение не меняет центральные позиции упорядоченного ряда.

Среднее и медиана отвечают на похожий вопрос по-разному Среднее использует величину каждого наблюдения и поэтому чувствительно к длинному хвосту распределения. Медиана зависит от порядка значений и устойчива к отдельным выбросам.


6. Выборочная дисперсия

Меры центральной тенденции не показывают, насколько наблюдения отличаются друг от друга. Для этого нужны меры разброса.

Пусть Алёне 18 лет, а Карине 22 года. Их средний возраст равен 20 годам, а отклонения от среднего составляют −2-2 и 22. Обычное среднее отклонение равно нулю:

−2+22=0.\frac{-2+2}{2}=0.

Нулевой результат не означает, что разброса нет. Положительное и отрицательное отклонения просто уничтожили друг друга.

Можно взять модули отклонений, но функция модуля недифференцируема в нуле, из-за чего неудобна для многих теоретических выкладок. В дисперсии отклонения возводят в квадрат:

 σ^2=1n∑i=1n(xi−xˉ)2 .\boxed{\ \hat{\sigma}^{2} = \frac{1}{n}\sum_{i=1}^{n}(x_i-\bar{x})^2\ }.

Для выборки 1,5,−4,61, 5, -4, 6 среднее равно 22:

σ^2=(1−2)2+(5−2)2+(−4−2)2+(6−2)24=1+9+36+164=15,5.\hat{\sigma}^{2} =\frac{(1-2)^2+(5-2)^2+(-4-2)^2+(6-2)^2}{4} =\frac{1+9+36+16}{4} =15{,}5.

Чем дальше наблюдения находятся от среднего, тем больше дисперсия. Квадрат особенно сильно увеличивает вклад больших отклонений, поэтому дисперсия чувствительна к выбросам.

Удобная формула

После раскрытия квадратов получается аналог формулы для теоретической дисперсии:

 σ^2=x2‾−xˉ,2 ,\boxed{\ \hat{\sigma}^{2}=\overline{x^2}-\bar{x}^{,2}\ },

где

x2‾=1n∑i=1nxi2.\overline{x^2}=\frac{1}{n}\sum_{i=1}^{n}x_i^2.

Для той же выборки:

x2‾=12+52+(−4)2+624=19,5,\overline{x^2}=\frac{1^2+5^2+(-4)^2+6^2}{4}=19{,}5,
σ^2=19,5−22=15,5.\hat{\sigma}^{2}=19{,}5-2^2=15{,}5.

7. Стандартное отклонение и деление на n−1n-1

Дисперсия измеряется в квадрате исходных единиц. Если возраст указан в годах, дисперсия выражается в годах в квадрате. Чтобы вернуться к исходным единицам, из дисперсии извлекают корень:

 σ^=σ^2 .\boxed{\ \hat{\sigma}=\sqrt{\hat{\sigma}^{2}}\ }.

Для выборки 1,5,−4,61, 5, -4, 6:

σ^=15,5≈3,94.\hat{\sigma}=\sqrt{15{,}5}\approx3{,}94.

На практике часто используют дисперсию со знаменателем n−1n-1:

 s2=1n−1∑i=1n(xi−xˉ)2 .\boxed{\ s^2=\frac{1}{n-1}\sum_{i=1}^{n}(x_i-\bar{x})^2\ }.

Её называют несмещённой выборочной дисперсией. Для того же примера:

s2=623≈20,67.s^2=\frac{62}{3}\approx20{,}67.

Причина замены nn на n−1n-1 связана со свойствами статистики как случайной величины. В лекции этот вопрос только обозначен: понятие несмещённости разбирается на следующих неделях курса.

Две формулы отвечают разным соглашениям При чтении результата всегда проверяйте знаменатель. Формулы с nn и n−1n-1 дают разные числа, особенно на маленьких выборках.


8. Перцентили, квартили и интерквантильный размах

Перцентиль порядка kk — значение, ниже которого находится примерно kk % наблюдений. Это выборочный аналог квантиля.

Сначала выборку упорядочивают:

x(1)≤x(2)≤…≤x(n),x_{(1)}\le x_{(2)}\le\ldots\le x_{(n)},

где x(1)x_{(1)} — минимальное наблюдение, а x(n)x_{(n)} — максимальное.

Частные случаи:

Перцентиль Название
25-й нижний, или первый, квартиль Q1Q_1
50-й медиана Q2Q_2
75-й верхний, или третий, квартиль Q3Q_3

Интерквартильный размах показывает ширину центральной половины выборки:

 IQR=Q3−Q1 .\boxed{\ \mathrm{IQR}=Q_3-Q_1\ }.

В примере из лекции дана выборка

1,5,3,−1,−4,3,3,−10,2,−1.1, 5, 3, -1, -4, 3, 3, -10, 2, -1.

После сортировки:

−10,−4,−1,−1,1,2,3,3,3,5.-10, -4, -1, -1, 1, 2, 3, 3, 3, 5.

Позиция медианы по правилу со слайдов равна 0,5(n+1)=5,50{,}5(n+1)=5{,}5, поэтому берётся среднее пятого и шестого элементов:

Q2=1+22=1,5.Q_2=\frac{1+2}{2}=1{,}5.

На слайдах для позиции между двумя элементами используется простой вариант: берётся среднее соседних наблюдений. Тогда Q1=−2,5Q_1=-2{,}5, Q3=3Q_3=3, а

IQR=3−(−2,5)=5,5.\mathrm{IQR}=3-(-2{,}5)=5{,}5.

Способ расчёта перцентилей нужно указывать Для позиций между наблюдениями существуют разные правила интерполяции. Поэтому NumPy, pandas, электронные таблицы и статистические пакеты могут вернуть разные значения квартилей для одной небольшой выборки. Это не обязательно ошибка: сначала сравните выбранные методы.


9. Теоретические величины и выборочные аналоги

Свойство распределения Статистика по выборке
Математическое ожидание Выборочное среднее
Дисперсия Выборочная дисперсия
Квантиль Перцентиль
Медиана Выборочная медиана
Мода Выборочная мода

По статистикам пытаются судить о неизвестных свойствах генеральной совокупности. При этом каждую статистику рассматривают как случайную величину и изучают, насколько хорошо она решает свою задачу.


10. Это же на Python

Основные описательные статистики можно вычислить средствами NumPy:

import numpy as np

sample = np.array([1, 5, -4, 6])

print(sample.mean())          # 2.0
print(np.median(sample))      # 3.0

# Деление на n
print(sample.var(ddof=0))     # 15.5
print(sample.std(ddof=0))     # 3.937...

# Деление на n - 1
print(sample.var(ddof=1))     # 20.666...
print(sample.std(ddof=1))     # 4.546...

Параметр ddof задаёт, сколько вычитается из nn в знаменателе. Поэтому ddof=0 соответствует делению на nn, а ddof=1 — делению на n−1n-1.

Для перцентилей можно явно указать метод:

sample = np.array([1, 5, 3, -1, -4, 3, 3, -10, 2, -1])

print(np.percentile(sample, [25, 50, 75], method="linear"))
# [-1.   1.5  3. ]

print(np.percentile(sample, [25, 50, 75], method="weibull"))
# [-1.75  1.5   3.  ]

Разница в первом квартиле показывает, почему название метода важно сохранять вместе с результатом.


Проверь себя

Чем генеральная совокупность отличается от выборки?

Генеральная совокупность включает все интересующие исследователя объекты. Выборка — только та часть совокупности, по которой собраны данные.

Что означает предпосылка i.i.d.?

Наблюдения независимы друг от друга и имеют одинаковое распределение.

Почему выборочное среднее является случайной величиной?

Оно вычисляется по случайной выборке. Другая выборка обычно даст другое значение среднего.

Когда медиана полезнее среднего?

Когда в данных есть выбросы или длинный хвост. Экстремальное значение заметно сдвигает среднее, но обычно не меняет центральную позицию и потому слабее влияет на медиану.

Почему среднее отклонение от среднего не измеряет разброс?

Отрицательные и положительные отклонения взаимно уничтожаются, поэтому их сумма и среднее всегда равны нулю.

Чем отличаются формулы выборочной дисперсии со знаменателями n и n − 1?

Первая усредняет квадраты отклонений с делением на nn. Вторая делит на n−1n-1 и называется несмещённой выборочной дисперсией. Причина этой поправки рассматривается дальше по курсу.

Что показывает интерквантильный размах?

Ширину центральной половины выборки: IQR=Q3−Q1\mathrm{IQR}=Q_3-Q_1.


Навигация

  • Предыдущий урок: 1.6 Генерация случайных величин в Python

  • Оглавление курса: 00 Курс — оглавление и шпаргалка


Источники

  • Расшифровка видеоурока «1.7. Описательные статистики».

  • Презентация week01_descreptive.pptx, слайды 160–253.

  1. Генеральная совокупность

    Все объекты, о которых исследователь хочет получить выводы

  2. Выборка

    Часть генеральной совокупности, по которой собраны данные для исследования

  3. Репрезентативная выборка

    Выборка, которая отражает существенные свойства генеральной совокупности

  4. Ограничение случайного отбора

    Случайный выбор среди доступных объектов не гарантирует охват всех групп генеральной совокупности

  5. Предпосылка i.i.d.

    Наблюдения независимы друг от друга и имеют одинаковое распределение

  6. Статистика

    Любая функция, вычисленная по наблюдениям выборки

  7. Источник случайности статистики

    Статистика вычисляется по случайной выборке, поэтому другая выборка обычно даёт другое значение

  8. Наблюдение в таблице

    Одна строка таблицы, описывающая отдельный объект выборки

  9. Переменная в таблице

    Один столбец таблицы, содержащий значения одного признака

  10. Выборочное среднее

    Сумма всех наблюдений, делённая на их количество

  11. Выборочная медиана

    Центральное значение упорядоченной выборки; при чётном числе наблюдений — среднее двух центральных

  12. Среднее при наличии выброса

    Может заметно сдвинуться, потому что в его расчёте участвует величина каждого наблюдения

  13. Выборочная дисперсия с делением на n

    Среднее квадратов отклонений наблюдений от выборочного среднего

  14. Удобная формула выборочной дисперсии

    Среднее квадратов наблюдений минус квадрат выборочного среднего

  15. Выборочное стандартное отклонение

    Квадратный корень из выборочной дисперсии; измеряется в тех же единицах, что и наблюдения

  16. Несмещённая выборочная дисперсия

    Сумма квадратов отклонений от среднего, делённая на n − 1

  17. Перцентиль порядка k

    Значение, ниже которого находится примерно k процентов наблюдений

  18. Квартили

    Перцентили 25, 50 и 75 процентов; второй квартиль совпадает с медианой

  19. Интерквантильный размах

    Разность третьего и первого квартилей, описывающая ширину центральной половины выборки

  20. Параметр ddof в NumPy

    Задаёт поправку в знаменателе: ddof=0 означает деление на n, ddof=1 — деление на n − 1

Показано 20 из 20 карточек

Практическая описательная статистика и визуализация

1.8 Описательные статистики на примере данных

Автор: yuriy konkov · Карточек: 8

Коротко. Коротко

  • Тип переменной определяет, какие статистики для неё имеют смысл.

  • Для десяти наблюдений возраста среднее равно 2020 годам, а медиана — 20,520{,}5 года.

  • Сумма квадратов отклонений от среднего равна 252252, поэтому дисперсия с делением на nn равна 25,225{,}2 года².

  • Стандартное отклонение возвращает разброс в исходные единицы: здесь это примерно 55 лет.

  • Дисперсию можно считать напрямую по отклонениям или через разность среднего квадратов и квадрата среднего.

В прошлом уроке описательные статистики были введены как общие правила. Теперь разберём весь расчёт на одной небольшой таблице: от выбора подходящей переменной до проверки дисперсии вторым способом.

Расчёт описательных статистик возраста на доске Основной пример урока: таблица наблюдений, расчёт дисперсии и график квадратичного штрафа.


1. Сначала определяем тип переменной

В таблице есть имя, пол, возраст и вес. Эти столбцы устроены по-разному, поэтому к ним нельзя бездумно применять один и тот же набор статистик.

Переменная Тип Что с ней делают в уроке
Имя Текстовая Используют как идентификатор, но не вычисляют среднее или разброс
Пол Категориальная Можно закодировать двумя значениями, например 00 и 11
Возраст Числовая Считают среднее, медиану, дисперсию и стандартное отклонение
Вес Числовая Упоминают как ещё один столбец, к которому применимы те же идеи

Категориальную переменную с двумя возможными значениями часто кодируют как дамми-переменную: одной категории ставят в соответствие 00, другой — 11. Такое кодирование удобно для вычислений, но не превращает категорию в обычную количественную величину.

Важно. Код — ещё не смысл Числа 00 и 11 в дамми-переменной служат метками категорий. Разность между ними нельзя интерпретировать так же, как разность в возрасте или весе.

Дальше урок сосредоточен на возрасте. Наблюдаемые значения:

14, 15, 21, 20, 14, 25, 30, 23, 22, 16.14,\ 15,\ 21,\ 20,\ 14,\ 25,\ 30,\ 23,\ 22,\ 16.

2. Среднее: складываем все значения

Выборочное среднее учитывает каждое наблюдение:

xˉ=1n∑i=1nxi.\bar{x}=\frac{1}{n}\sum_{i=1}^{n}x_i.

В выборке n=10n=10, а сумма возрастов равна 200200:

xˉ=14+15+21+20+14+25+30+23+22+1610=20010=20.\bar{x}=\frac{14+15+21+20+14+25+30+23+22+16}{10} =\frac{200}{10}=20.

Средний возраст равен 20 годам. Единицы сохраняются: если исходные значения измерены в годах, среднее тоже измеряется в годах.


3. Медиана: сначала наводим порядок

Для медианы важны не сумма значений, а их положение в упорядоченном ряду. Отсортируем возраста:

14, 14, 15, 16, 20, 21, 22, 23, 25, 30.14,\ 14,\ 15,\ 16,\ 20,\ 21,\ 22,\ 23,\ 25,\ 30.

Элементы такого ряда обозначают x(1),x(2),…,x(n)x_{(1)},x_{(2)},\ldots,x_{(n)}. Скобки в индексе показывают место после сортировки:

  • x(1)x_{(1)} — минимальное значение;

  • x(n)x_{(n)} — максимальное значение;

  • номер исходной строки при сортировке может измениться.

В ряду десять элементов, поэтому одного центрального наблюдения нет. Берём среднее пятого и шестого:

med=x(5)+x(6)2=20+212=20,5.\mathrm{med}=\frac{x_{(5)}+x_{(6)}}{2} =\frac{20+21}{2}=20{,}5.

Медианный возраст равен 20,520{,}5 года. Среднее и медиана здесь близки, но отвечают на вопрос о «типичном» наблюдении разными способами: среднее использует величину всех значений, медиана — центральное положение в отсортированном ряду.


4. Дисперсия: превращаем отклонения в меру разброса

В этом уроке выборочная дисперсия считается с делением на nn:

σ^2=1n∑i=1n(xi−xˉ)2.\widehat{\sigma}^{2} =\frac{1}{n}\sum_{i=1}^{n}(x_i-\bar{x})^2.

Среднее уже найдено: xˉ=20\bar{x}=20. Для каждого возраста выполняем одну и ту же последовательность:

  1. Вычитаем среднее.

  2. Возводим отклонение в квадрат.

  3. Складываем квадраты отклонений.

  4. Делим сумму на число наблюдений.

xix_i 1414 1414 1515 1616 2020 2121 2222 2323 2525 3030
xi−xˉx_i-\bar{x} −6-6 −6-6 −5-5 −4-4 00 11 22 33 55 1010
(xi−xˉ)2(x_i-\bar{x})^2 3636 3636 2525 1616 00 11 44 99 2525 100100

Сумма последней строки равна:

∑i=110(xi−xˉ)2=252.\sum_{i=1}^{10}(x_i-\bar{x})^2=252.

Следовательно,

σ^2=25210=25,2 года2.\widehat{\sigma}^{2}=\frac{252}{10}=25{,}2\ \text{года}^2.

Квадрат единицы измерения появляется из-за возведения отклонений в квадрат. Поэтому численное значение дисперсии полезно для вычислений, но его трудно интерпретировать непосредственно как обычный возрастной разброс.

Частая ошибка. Следите за знаменателем Здесь используется формула с nn. Формула с n−1n-1 даст другое число и относится к другому соглашению, разобранному в уроке 1.7.


5. Почему большие отклонения влияют сильнее

Дисперсия назначает отклонению величины dd штраф d2d^2. Зависимость квадратичная:

| Отклонение ∣d∣|d| | Штраф d2d^2 | |---:|---:| | 11 | 11 | | 22 | 44 | | 33 | 99 | | 55 | 2525 | | 1010 | 100100 |

При увеличении отклонения на одну единицу штраф растёт всё быстрее. Поэтому возраст 3030 лет, расположенный на 1010 лет выше среднего, добавляет к сумме квадратов 100100 — намного больше, чем несколько наблюдений рядом со средним.

Важно. Суть квадратичного накопления Далёкие от среднего значения не просто увеличивают дисперсию, а получают непропорционально большой вес.


6. Стандартное отклонение возвращает исходные единицы

Чтобы перейти от годов в квадрате обратно к годам, извлекают квадратный корень:

σ^=σ^2=25,2≈5,02 года.\widehat{\sigma}=\sqrt{\widehat{\sigma}^{2}} =\sqrt{25{,}2}\approx5{,}02\ \text{года}.

Стандартное отклонение составляет примерно 5 лет. Это не означает, что каждое наблюдение отстоит от среднего ровно на 5 лет. Число суммирует общий масштаб разброса в тех же единицах, что и возраст.


7. Второй способ вычислить дисперсию

Дисперсию можно найти без отдельной таблицы отклонений:

 σ^2=x2‾−xˉ,2 ,\boxed{\ \widehat{\sigma}^{2}=\overline{x^2}-\bar{x}^{,2}\ },

где x2‾\overline{x^2} — среднее квадратов наблюдений, а xˉ,2\bar{x}^{,2} — квадрат уже найденного среднего. Это разные операции, и их важно не перепутать.

Сумма квадратов возрастов равна 42524252:

x2‾=142+142+152+162+202+212+222+232+252+30210=425210=425,2.\overline{x^2} =\frac{14^2+14^2+15^2+16^2+20^2+21^2+22^2+23^2+25^2+30^2}{10} =\frac{4252}{10}=425{,}2.

Тогда

σ^2=425,2−202=425,2−400=25,2.\widehat{\sigma}^{2}=425{,}2-20^2 =425{,}2-400=25{,}2.

Оба способа дали один результат. Первый лучше показывает смысл дисперсии как среднего квадрата отклонений, второй часто сокращает вычисления.


8. Проверка вычислений в Python

Дополнение. Дополнение В лекции расчёт выполнен вручную на доске. Код ниже лишь повторяет те же шаги и помогает проверить арифметику.

import numpy as np

age = np.array([14, 15, 21, 20, 14, 25, 30, 23, 22, 16])

mean = age.mean()
median = np.median(age)
variance = age.var(ddof=0)  # деление на n
std = age.std(ddof=0)

print(mean)      # 20.0
print(median)    # 20.5
print(variance)  # 25.2
print(std)       # 5.019960...

Параметр ddof=0 фиксирует тот же знаменатель nn, который используется в ручном расчёте.



Источник: локальный конспект «1.8 Описательные статистики на примере данных.md» и скриншот лекции.

  1. Какие статистики можно осмысленно посчитать для возраста в таблице?

    Среднее, медиану, дисперсию и стандартное отклонение, потому что возраст — числовая переменная.

  2. Чему равно среднее для возрастов 14, 15, 21, 20, 14, 25, 30, 23, 22 и 16?

    Сумма возрастов равна 200200, поэтому \bar{x}=200/10=20 лет.

  3. Почему медиана возраста равна 20,5 года?

    После сортировки в середине ряда находятся пятый и шестой элементы: 2020 и 2121. Для чётного числа наблюдений их усредняют: (20+21)/2=20{,}5.

  4. Что означает обозначение x_{(i)}?

    Это наблюдение, занимающее ii-е место в ряду после сортировки по возрастанию.

  5. Чему равна сумма квадратов отклонений возрастов от среднего?

    252252 года².

  6. Чему равны дисперсия и стандартное отклонение возраста в примере?

    При делении на n=10 дисперсия равна 25{,}2 года², а стандартное отклонение — \sqrt{25{,}2}\approx5{,}02 года.

  7. Почему далёкие от среднего значения особенно сильно увеличивают дисперсию?

    Отклонения возводятся в квадрат: при росте модуля отклонения квадратичный штраф растёт всё быстрее.

  8. Как проверить дисперсию через среднее квадратов?

    Использовать формулу \widehat{\sigma}^{2}=\overline{x^2}-\bar{x}^{,2}. В примере это 425{,}2-20^2=25{,}2.

Показано 8 из 8 карточек

1.9 Гистограмма и эмпирическая функция распределения

Автор: yuriy konkov · Карточек: 9

Коротко. Коротко

  • Эмпирическая функция распределения показывает долю наблюдений, не превышающих заданное значение xx.

  • Она имеет вид ступенек: скачок в точке равен доле наблюдений с таким значением.

  • Гистограмма делит числовую ось на интервалы, или бины, и показывает, сколько наблюдений попало в каждый из них.

  • Слишком узкие бины подчёркивают шум, а широкие скрывают детали распределения.

  • Ящик с усами сжимает распределение до медианы, квартилей, интерквартильного размаха и возможных выбросов.

Среднее, медиана и дисперсия описывают отдельные свойства выборки. Чтобы увидеть форму распределения целиком, нужны графики. В уроке последовательно строятся три таких представления: эмпирическая функция распределения, гистограмма и ящик с усами.


1. От теоретической функции к эмпирической

Теоретическая функция распределения случайной величины XX задаёт вероятность события X≤xX\le x:

F(x)=P(X≤x).F(x)=\mathbb{P}(X\le x).

На практике закон распределения обычно неизвестен, зато есть выборка X1,…,XnX_1,\ldots,X_n. Вероятность заменяют наблюдаемой частотой события:

 F^n(x)=1n∑i=1n[ Xi≤x ] .\boxed{\ \widehat{F}_n(x) =\frac{1}{n}\sum_{i=1}^{n}[\,X_i\le x\,]\ }.

Здесь [ Xi≤x ][\,X_i\le x\,] — индикаторная функция:

[ Xi≤x ]={1,Xi≤x,0,Xi>x.[\,X_i\le x\,]= \begin{cases} 1, & X_i\le x,\\ 0, & X_i>x. \end{cases}

Формула задаёт простой алгоритм: для выбранного xx нужно посчитать наблюдения слева от него, включая совпадающие с xx, и разделить результат на объём выборки.

Важно. Смысл ЭФР Значение F^n(x)\widehat{F}_n(x) — доля выборки, которая не превышает xx.


2. Как строится ступенчатый график

Рассмотрим выборку из пяти наблюдений:

x1=2,x2=5,x3=2,x4=3,x5=1.x_1=2,\quad x_2=5,\quad x_3=2,\quad x_4=3,\quad x_5=1.

После сортировки получаем 1,2,2,3,51,2,2,3,5. Теперь двигаемся слева направо и накапливаем долю уже пройденных наблюдений.

Интервал для xx Сколько наблюдений ≤x\le x F^n(x)\widehat{F}_n(x)
x<1x<1 00 00
1≤x<21\le x<2 11 1/51/5
2≤x<32\le x<3 33 3/53/5
3≤x<53\le x<5 44 4/54/5
x≥5x\ge5 55 11

В точке 11 происходит скачок на 1/51/5. Значение 22 встречается дважды, поэтому следующий скачок сразу равен 2/52/5. После максимального наблюдения 55 вся выборка оказывается левее текущего xx, и функция остаётся равной единице.

Эмпирическая функция распределения для выборки 2, 5, 2, 3, 1 Эмпирическая функция распределения для выборки 2,5,2,3,12,5,2,3,1.

ЭФР всегда не убывает и принимает значения от 00 до 11. При увеличении объёма выборки ступеньки обычно становятся мельче и чаще. Для выборки из непрерывного распределения график начинает точнее повторять его теоретическую функцию распределения.


3. Гистограмма как оценка формы распределения

Эмпирическая функция распределения накапливает доли наблюдений. Гистограмма отвечает на другой вопрос: где на числовой оси наблюдения встречаются чаще.

Для построения область значений делят на интервалы — бины. Затем для каждого бина считают попавшие в него наблюдения и рисуют прямоугольник.

  • По оси xx отложены значения признака.

  • По оси yy могут находиться количества, относительные частоты или плотность — это зависит от выбранной нормировки.

  • Высота каждого прямоугольника определяется наблюдениями внутри соответствующего бина.

Если используют нормировку плотности, суммарная площадь прямоугольников равна единице. Тогда гистограмму можно сопоставлять с теоретической плотностью распределения.


4. Ширина бинов меняет картину

Число бинов нельзя выбирать механически. Оно управляет балансом между общей формой и деталями.

Сравнение гистограмм с 20 и 100 бинами Одна выборка объёма 100 при разбиении на 20 и 100 бинов.

При небольшом числе широких бинов видна общая структура распределения, но локальные особенности сглаживаются. Если сделать бины узкими, гистограмма реагирует на отдельные наблюдения и случайные промежутки между ними. Деталей становится больше, но вместе с ними усиливается шум.

Частая ошибка. Подробность не равна точности Гистограмма со множеством узких столбцов может выглядеть информативнее, хотя часть её неровностей вызвана случайностью конкретной выборки.

По гистограмме можно приблизительно судить о плотности распределения. В слайдах также упоминается ядерное сглаживание (kernel density estimation, KDE): оно заменяет резкие прямоугольники плавной кривой. Подробное изучение метода вынесено в следующие уроки.


5. Ящик с усами

Гистограмма показывает форму подробно. Ящик с усами, или boxplot, даёт компактное описание распределения через несколько опорных точек.

Основные элементы:

  • левая и правая границы ящика соответствуют Q1Q_1 и Q3Q_3;

  • линия внутри ящика показывает медиану Q2Q_2;

  • длина ящика равна интерквартильному размаху IQR=Q3−Q1\mathrm{IQR}=Q_3-Q_1;

  • внутри ящика находится центральная половина наблюдений.

В схеме из презентации потенциальные выбросы ищут за границами

Q1−1,5⋅IQRиQ3+1,5⋅IQR.Q_1-1{,}5\cdot\mathrm{IQR} \quad\text{и}\quad Q_3+1{,}5\cdot\mathrm{IQR}.

Точки за этими пределами изображают отдельно как возможные аномальные значения. Само попадание за границу ещё не объясняет причину: это может быть ошибка данных или редкое, но реальное наблюдение.

Гистограмма и ящик с усами с возможным выбросом Гистограмма и соответствующий boxplot: отдельная точка слева отмечена как возможный выброс.

Ящики с усами удобны для быстрого сравнения нескольких переменных или групп. По ним видно положение медианы, ширину центральной половины данных, асимметрию и отдельно стоящие значения.


6. Как связаны три графика

Теоретическая величина Выборочный аналог Что показывает
Функция распределения F(x)F(x) Эмпирическая функция F^n(x)\widehat{F}_n(x) Накопленную долю наблюдений левее xx
Плотность распределения f(x)f(x) Гистограмма Где наблюдения сосредоточены чаще
Квантили и характеристики положения Ящик с усами Медиану, квартильный диапазон и возможные выбросы

Эти представления не заменяют друг друга. ЭФР точно показывает накопленные доли, гистограмма лучше передаёт форму, а boxplot быстро сводит распределение к нескольким характеристикам.


7. Это же на Python

Дополнение. Дополнение В лекции графики разбираются концептуально. Код ниже воспроизводит те же действия и не вводит новых статистических методов.

import numpy as np
import matplotlib.pyplot as plt

sample = np.array([2, 5, 2, 3, 1])

# Эмпирическая функция распределения
x = np.sort(sample)
y = np.arange(1, len(sample) + 1) / len(sample)
plt.step(x, y, where="post")
plt.ylim(0, 1.05)

# Гистограмма с нормировкой площади к единице
plt.figure()
plt.hist(sample, bins=4, density=True)

# Горизонтальный ящик с усами
plt.figure()
plt.boxplot(sample, vert=False)
plt.show()

На маленькой выборке графики получаются грубыми. Это полезное напоминание: визуализация отражает не только распределение, но и ограниченность имеющихся данных.


Источники

  • Транскрипция видеоурока «1.9. Гистограмма и эмпирическая функция распределения».

  • Презентация week01_descreptive.pptx, слайды 254–279.


  1. Что показывает значение эмпирической функции распределения \widehat{F}_n(x)?

    Долю наблюдений выборки, значения которых не превышают xx.

  2. Зачем в формуле ЭФР нужна индикаторная функция?

    Она превращает условие X_i\le x в число: 11, если условие выполнено, и 00 в противном случае. Сумма индикаторов даёт количество подходящих наблюдений.

  3. Чему равна \widehat{F}_n(2{,}5) для выборки 2,5,2,3,1?

    3/53/5, потому что значения 1,2,2 не превышают 2{,}5.

  4. Почему в точке 22 ЭФР выборки 2,5,2,3,1 делает скачок на 2/52/5?

    Значение 22 встречается дважды, поэтому при переходе через эту точку сразу добавляются два наблюдения из пяти.

  5. Что такое бин гистограммы?

    Интервал числовой оси, для которого считают попавшие внутрь наблюдения и строят соответствующий прямоугольник.

  6. Как слишком узкие бины влияют на гистограмму?

    Они показывают больше деталей, но делают график чувствительным к шуму и случайным особенностям конкретной выборки.

  7. Что находится внутри ящика boxplot?

    Центральные 50 % наблюдений: диапазон от первого квартиля Q_1 до третьего квартиля Q_3. Линия внутри показывает медиану.

  8. Какие значения схема boxplot считает потенциальными выбросами?

    Значения ниже Q_1-1{,}5\cdot\mathrm{IQR} или выше Q_3+1{,}5\cdot\mathrm{IQR}.

  9. Как объём выборки влияет на вид эмпирической функции распределения?

    При росте выборки ступеньки обычно становятся мельче и чаще, а ЭФР точнее приближает теоретическую функцию распределения.

Показано 9 из 9 карточек

1.10 Гистограмма и эмпирическая функция на примере данных

Автор: yuriy konkov · Карточек: 10

Коротко

  • Для бинарного признака столбцы показывают частоты двух возможных значений.

  • Для числового признака гистограмма группирует наблюдения по интервалам, или бинам.

  • Стандартное отклонение задаёт типичный масштаб разброса вокруг среднего.

  • Выброс сильно сдвигает среднее, но может почти не изменить медиану.

  • Эмпирическая функция распределения для каждого xx показывает долю наблюдений, не превосходящих xx.

В этом уроке идеи гистограммы и эмпирической функции распределения разбираются вручную на одной таблице из десяти людей. Главная цель — увидеть, как из отдельных чисел получаются графики и какие выводы из них можно делать.


1. Два значения: распределение бинарного признака

Признак «пол» кодируется двумя числами: 00 для женщины и 11 для мужчины. В таблице четыре женщины и шесть мужчин, поэтому относительные частоты равны

p^(X=0)=410=0,4,p^(X=1)=610=0,6.\widehat{p}(X=0)=\frac{4}{10}=0{,}4, \qquad \widehat{p}(X=1)=\frac{6}{10}=0{,}6.

Столбцы высотой 0,40{,}4 и 0,60{,}6 показывают не самих людей, а доли двух значений признака.

Важна согласованность Сами числа 00 и 11 не задают смысл категорий. Можно выбрать и обратное кодирование, но нельзя менять его по ходу расчёта. В транскрипции в одной фразе кодирование оговорено наоборот; здесь используется вариант, согласованный с доской и частотами.


2. Гистограмма возраста вручную

Возрасты сортируются по возрастанию:

14, 14, 15, 16, 20, 21, 22, 23, 25, 30.14,\ 14,\ 15,\ 16,\ 20,\ 21,\ 22,\ 23,\ 25,\ 30.

Длина бина равна 55. В уроке принята договорённость: значение на границе относится к левому бину. Значит, интервалы удобно записать как (10,15](10,15], (15,20](15,20], (20,25](20,25] и (25,30](25,30].

Бин Значения Частота
(10,15](10,15] 14,14,1514,14,15 33
(15,20](15,20] 16,2016,20 22
(20,25](20,25] 21,22,23,2521,22,23,25 44
(25,30](25,30] 3030 11

Логика построения Сначала фиксируют границы и правило включения границ, затем считают наблюдения в каждом интервале. Иначе пограничное значение можно случайно посчитать дважды или не посчитать вовсе.

Гистограмма возраста и правило стандартных отклонений на доске Гистограмма возраста: высоты столбцов равны 3,2,4,13,2,4,1.


3. Что показывает стандартное отклонение

Для возрастов из примера выборочное среднее равно xˉ=20\bar{x}=20, а стандартное отклонение с делением на nn приблизительно равно σ^≈5\hat{\sigma}\approx5. Интервал

xˉ−σ^≤x≤xˉ+σ^\bar{x}-\hat{\sigma}\le x\le \bar{x}+\hat{\sigma}

показывает диапазон в одно стандартное отклонение от среднего. Чем больше σ^\hat{\sigma}, тем шире типичный разброс данных.

Для нормального распределения действует правило одной, двух и трёх сигм:

Интервал Примерная доля
μ±σ\mu\pm\sigma 68%68\%
μ±2σ\mu\pm2\sigma 95%95\%
μ±3σ\mu\pm3\sigma 99,7%99{,}7\%

Это не универсальное правило для любых данных Доли 68%68\%, 95%95\% и 99,7%99{,}7\% относятся к нормальной модели. В маленькой выборке фактическая доля внутри интервала может отличаться. По одной гистограмме из десяти наблюдений нельзя надёжно утверждать, что исходная величина нормально распределена.


4. Выброс растаскивает шкалу и сдвигает среднее

Веса в таблице равны

50, 50, 50, 50, 80, 80, 440, 80, 80, 80.50,\ 50,\ 50,\ 50,\ 80,\ 80,\ 440,\ 80,\ 80,\ 80.

Значение 440440 намного больше остальных. На гистограмме оно создаёт дальний столбец и растягивает ось xx. В расчёте среднего оно входит целиком:

xˉ=4⋅50+5⋅80+44010=104.\bar{x}=\frac{4\cdot50+5\cdot80+440}{10}=104.

После сортировки два центральных значения равны 8080, поэтому

med=80.\mathrm{med}=80.

Влияние выброса веса на среднее и медиану Выброс 440440 тянет среднее вправо до 104104, а медиана остаётся равной 8080.

Среднее чувствительно к выбросу, потому что зависит от величины каждого наблюдения. Медиана зависит прежде всего от порядка значений: одно крайнее наблюдение обычно не сдвигает центр упорядоченного ряда. Поэтому при наличии выбросов полезно сравнивать обе характеристики, а не полагаться только на среднее.


5. Эмпирическая функция распределения вручную

Теоретическая функция распределения задаётся как

F(x)=P(X≤x).F(x)=\mathbb{P}(X\le x).

Если закон распределения неизвестен, вероятность оценивают по наблюдаемой частоте:

 F^n(x)=1n∑i=1n[ xi≤x ] .\boxed{\ \widehat{F}_n(x)=\frac{1}{n}\sum_{i=1}^{n}[\,x_i\le x\,]\ }.

Индикатор [ xi≤x ][\,x_i\le x\,] равен 11, если условие выполнено, и 00 — если нет. Поэтому сумма считает наблюдения, не превосходящие xx, а деление на nn превращает количество в долю.

Для возрастов из примера эмпирическая функция равна

F^10(x)={0,x<14,0,2,14≤x<15,0,3,15≤x<16,0,4,16≤x<20,0,5,20≤x<21,0,6,21≤x<22,0,7,22≤x<23,0,8,23≤x<25,0,9,25≤x<30,1,x≥30.\widehat{F}_{10}(x)= \begin{cases} 0, & x<14,\\ 0{,}2, & 14\le x<15,\\ 0{,}3, & 15\le x<16,\\ 0{,}4, & 16\le x<20,\\ 0{,}5, & 20\le x<21,\\ 0{,}6, & 21\le x<22,\\ 0{,}7, & 22\le x<23,\\ 0{,}8, & 23\le x<25,\\ 0{,}9, & 25\le x<30,\\ 1, & x\ge30. \end{cases}

Построение эмпирической функции распределения возраста на доске В точке 1414 график сразу поднимается до 0,20{,}2, потому что значение 1414 встречается дважды.

Ступенька от каждого единичного наблюдения имеет высоту 1/101/10. Если значение повторяется, скачоки складываются: именно поэтому в 1414 происходит скачок на 2/102/10. Между наблюдаемыми значениями функция постоянна, не убывает, до минимума равна нулю, а после максимума — единице. Так ступенчатая оценка приближает неизвестную теоретическую F(x)F(x).


6. Это же на Python

Дополнение В лекции все расчёты выполняются вручную. Код ниже точно воспроизводит разбитые в уроке действия.

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

ages = np.array([14, 14, 15, 16, 20, 21, 22, 23, 25, 30])
weights = np.array([50, 50, 50, 50, 80, 80, 440, 80, 80, 80])

# Интервалы закрыты справа, как в уроке
age_bins = pd.cut(ages, bins=[10, 15, 20, 25, 30], right=True)
print(age_bins.value_counts(sort=False))

print(weights.mean())    # 104.0
print(np.median(weights))  # 80.0

# Эмпирическая функция распределения
x = np.sort(ages)
y = np.arange(1, len(x) + 1) / len(x)
plt.step(x, y, where="post")
plt.ylim(0, 1.05)
plt.xlabel("Возраст")
plt.ylabel(r"$\widehat{F}_n(x)$")
plt.show()

Источники

  • Транскрипция видеоурока «1.10. [доска] Эмпирическая функция распредения и гистограмма».

  • Три скриншота с доски, предоставленные пользователем.


  1. Что показывает высота столбца для бинарного признака в разборе урока?

    Относительную частоту, то есть долю наблюдений с этим значением.

  2. К какому бину в уроке относится возраст 2020?

    К бину (15,20], потому что правая граница включается в левый бин.

  3. Каковы частоты в четырёх бинах для возрастов из урока?

    3,2,4,1 для интервалов (10,15], (15,20], (20,25] и (25,30] соответственно.

  4. Когда можно применять правило 68%68\%–95%95\%–99{,}7\%?

    Когда случайная величина моделируется нормальным распределением; это не универсальное правило для любой выборки.

  5. Почему выброс 440440 сильно влияет на среднее?

    В среднее входит величина каждого наблюдения, поэтому одно очень большое значение тянет его в свою сторону.

  6. Чему равны среднее и медиана веса в примере?

    Среднее равно 104104, а медиана — 8080.

  7. Что показывает \widehat{F}_n(x)?

    Долю наблюдений выборки, значения которых не превосходят xx.

  8. Почему эмпирическая функция в точке 1414 скачком поднимается сразу до 0{,}2?

    В выборке два наблюдения из десяти равны 1414, поэтому высота скачка равна 2/10=0{,}2.

  9. Чему равна \widehat{F}_{10}(22) для возрастов из урока?

    0{,}7, потому что семь из десяти возрастов не превосходят 2222.

  10. Какие граничные значения имеет эмпирическая функция?

    Левее минимума выборки она равна 00, а начиная с максимума — 11.

Показано 10 из 10 карточек

1.11 Эмпирическое распределение в Python

Автор: yuriy konkov · Карточек: 12

1.11 Эмпирическое распределение в Python

Коротко
  • NumPy считает по выборке среднее, дисперсию, стандартное отклонение и медиану.

  • Гистограмма приближает плотность, а ECDF — функцию распредения.

  • bins управляет детализацией гистограммы, а density=True нормирует её по площади.

  • np.random.choice создаёт выборки с возвращением или без него и позволяет задать вероятности исходов.

  • Зерно генератора фиксирует конкретную псевдослучайную реализацию и делает расчёт воспроизводимым.

В предыдущих уроках гистограмма и эмпирическая функция распредения строились вручную. Теперь та же логика переносится в Python: от массива наблюдений — к числовым характеристикам и графикам, а затем — к симуляции случайных событий.


1. От выборки к описательным статистикам

В ноутбуке используется массив sample из 10001000 наблюдений, сгенерированных из стандартного нормального распределения. Первые значения и размер массива проверяются так:

sample[:10]
sample.shape  # (1000,)

Дальше к оду почти буквально переносятся знакомые определения:

Характеристика NumPy Что описывает
Выборочное среднее np.mean(sample) Центр наблюдений; эмпирический аналог $матожидания
Выборочная дисперсия np.var(sample) Средний квадрат отклонения от среднего
Стандартное отклонение np.std(sample) Типичный масштаб разброса
Выборочная медиана np.median(sample) Середина упорядоченного ряда

Эти числа не обязаны точно совпадать с параметрами теоретического распределения: они рассчитаны по одной случайной выборке. При увеличении её объёма среднее обычно оказывается ближе к матожиданию.

Делитель в np.var

Без дополнительных аргументов np.var(sample) и np.std(sample) делят на nn, как в формулах предыдущих уроков.


2. Гистограмма как оценка плотности

plt.hist(sample, bins=30, density=True)

Параметр bins задаёт число интервалов. Малое число бинов скрывает детали, а слишком большое делает график шумным: отдельные столбцы начинают отражать случайные колебания конкретной выборки.

По умолчанию высота столбца связана с числом попавших в бин наблюдений. При density=True масштаб меняется так, чтобы суммарная площадь столбцов была равна 11. После этого на одних осях можно сравнивать гистограмму с теоретической плотностью.

Гистограмма и эмпирическая функция распределения для выборки из нормального распределения Одна выборка даёт два эмпирических приближения: гистограмму для плотности и ECDF для функции распределения. Иллюстрация создана с фиксированным seed, поэтому числа могут отличаться от кадров лекции.

Нормировка идёт по площади

density=True не делает сумму высот столцов равной 11. Единице равна сумма их площадей: высота умножается на ширину бина.


3. ECDF как оценка функции распределения

Эмпирическая функция распределения строится по одному массиву:

from statsmodels.distributions.empirical_distribution import ECDF

ecdf = ECDF(sample)
plt.step(ecdf.x, ecdf.y)

Массив ecdf.x хранит границы ступеней, а ecdf.y — накопленные доли. При 10001000 наблюдениях каждый одиночный скачок имеет высоту 1/10001/1000, поэтому график визуально кажется почти гладким, хотя остаётся ступенчатым.

Для сравнения рядом можно нарисовать теоретическую функцию распредения:

x = np.linspace(-3, 3, 100)
plt.plot(x, norm_rv.cdf(x), label="theoretical CDF")
plt.step(ecdf.x, ecdf.y, label="empirical CDF")
plt.legend()

Совпадение линий не означает, что исходное распределение было «извлечено» из данных без ошибки. ECDF — оценка, поэтому её мелкие отклонения от теоретической F(x)F(x) естественны.


4. Случайный выбор с возвращением и без него

np.random.choice случайно выбирает элементы из заданного набора:

numbers = np.arange(1, 11)  # 1, 2, ..., 10

np.random.choice(numbers, size=5, replace=False)
np.random.choice(numbers, size=5, replace=True)
Параметр Смысл Следствие
replace=False Без возвращения Один и тот же элемент нельзя выбрать дважды
replace=True С возвращением Повторы возможны

Если replace не указан, np.random.choice использует True. Поэтому для выборки без повторений этот аргумент нужно задать явно.

Вероятности отдельных исходов передаются в p в том же порядке, что и сами исходы:

np.random.choice(
    ["карась", "плотва", "щука"],
    size=10,
    p=[0.5, 0.2, 0.3],
)

Здесь вероятности суммируются в единицу. Один запуск не обязан дать ровно 55 карасей, 22 плотвы и 33 щуки: числа в p задают вероятности каждого отдельного выбора, а не точные квоты.


5. Зерно генератора и воспроизводимость

Два обычных запуска генератора дают разные выборки. Чтобы получать один и тот же результат, фиксируют зерно:

stats.norm(loc=3, scale=2).rvs(5, random_state=111)

Значение 111 не «улучшает» случайность и не делает выборку более типичной. Оно только выбирает одну конкретную псевдослучайную последовательность. Так код, графики и метрики можно повторить на другом компьютере.

Seed фиксирует реализацию, а не закон

При одинаковом seed и одинаковом коде результат повторяется. Другое seed даст другую выборку из того же распределения.


6. Цельный пример

Код ниже собирает основной ход урока: создаёт воспроизводимую выборку, считает её характеристики и строит две эмпирические оценки.

import numpy as np
import matplotlib.pyplot as plt
from scipy import stats
from statsmodels.distributions.empirical_distribution import ECDF

norm_rv = stats.norm(loc=0, scale=1)
sample = norm_rv.rvs(1000, random_state=111)

print("shape:", sample.shape)
print("mean:", np.mean(sample))
print("variance:", np.var(sample))
print("std:", np.std(sample))
print("median:", np.median(sample))

x = np.linspace(-3, 3, 100)
ecdf = ECDF(sample)

fig, axes = plt.subplots(1, 2, figsize=(12, 4))
axes[0].hist(sample, bins=30, density=True)
axes[0].plot(x, norm_rv.pdf(x), linewidth=3)
axes[0].set(xlabel="x", ylabel="f(x)")

axes[1].step(ecdf.x, ecdf.y, label="empirical CDF")
axes[1].plot(x, norm_rv.cdf(x), label="theoretical CDF")
axes[1].set(xlabel="x", ylabel="F(x)")
axes[1].legend()
plt.show()

Итог

Выборка даёт не теоретические параметры сами по себе, а их эмпирические оценки. Числа получаются функциями NumPy, плотность приближается гистограммой, а функция распределения — ECDF. Отдельные случайные эксперименты можно повторить, если зафиксировать seed.


Источники

  • Транскрипция видеоурока «1.11. Эмпирическое распределение в Python».

  • Ноутбук src/week01_intro/03_python_simulation.ipynb, разделы 3–5.


  1. NumPy: как узнать размер одномерной выборки?

    Прочитать атрибут sample.shape; для 1000 наблюдений результат равен (1000,).

  2. NumPy: выборочное среднее

    np.mean(sample)

  3. NumPy: выборочная дисперсия с делением на n

    np.var(sample) без дополнительных аргументов

  4. Параметр bins в plt.hist

    Задаёт число интервалов и тем самым управляет детализацией гистограммы.

  5. Параметр density=True в plt.hist

    Нормирует гистограмму так, чтобы суммарная площадь столбцов была равна 1.

  6. Что приближают гистограмма и ECDF?

    Гистограмма приближает плотность, а ECDF — функцию распределения.

  7. Объект ECDF из statsmodels: ecdf.x и ecdf.y

    ecdf.x хранит границы ступеней, а ecdf.y — накопленные доли наблюдений.

  8. Почему ECDF для 1000 наблюдений выглядит почти гладкой?

    Каждая одиночная ступень имеет высоту всего 1/1000, хотя функция остаётся ступенчатой.

  9. replace=False в np.random.choice

    Выбор без возвращения: один элемент нельзя выбрать повторно.

  10. Значение replace по умолчанию в np.random.choice

    True: выбор идёт с возвращением, поэтому повторы возможны.

  11. Вектор p в np.random.choice

    Задаёт вероятности отдельных исходов в том же порядке; вероятности должны суммироваться в 1 и не являются точными квотами.

  12. Зачем фиксировать random_state или seed?

    Чтобы при одинаковом коде воспроизводить ту же псевдослучайную реализацию; закон распределения при этом не меняется.

Показано 12 из 12 карточек

1.12 Описательные статистики и pandas

Автор: yuriy konkov · Карточек: 12

1.12 Описательные статистики и pandas

Коротко
  • pd.read_csv загружает таблицу, а sep="\t" указывает на разделение столбцов табуляцией.

  • shape, срезы и dtypes помогают понять размер, содержимое и типы столбцов.

  • Методы pandas считают минимум, максимум, среднее, медиану, дисперсию, стандартное отклонение и квантили прямо по столбцу.

  • Логическое условие внутри df[...] отбирает строки, для которых условие истинно.

  • describe() собирает основные характеристики числовых или категориальных столбцов в одну таблицу.

Урок переходит от симуляций к реальным данным о 19 12419\,124 музыкальных видео YouTube. Задача — загрузить таблицу, проверить её структуру, посчитать знакомые статистики и научиться извлекать строки по условию.


1. Загрузка и первичный осмотр таблицы

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

df = pd.read_csv("data/youtube_data_short.csv", sep="\t")

Расширение файла — .csv, но столбцы внутри разделены табуляцией. Поэтому нужен sep="\t"; без него pandas может прочитать всю строку как один столбец.

Перед расчётами важно проверить три вещи:

df.shape       # (19124, 10): строки, затем столбцы
df[105:112]    # строки с позициями 105–111
df.dtypes      # тип каждого столбца

Срез 105:112 включает начальную позицию 105105, но не включает 112112, поэтому показывает семь строк. В этой таблице float64 и int64 обозначают числовые столбцы, а object — текстовые: название, жанр и исполнитель.

Какие данны хранятся в таблице

Столбцы описывают название видео, число комментариев, дизлайков, лайков и просмотров, жанр, исполнителя, число уникальных комментаторов и возраст видео в днях на 15 марта 2019 года.


2. Столбец pandas.Series и пропуски

Один столбец таблицы — объект pandas.Series. Он хранит значения и связанные с ними индексы. Через .values можно получить массив NumPy:

df.likeCount.values

В столбце likeCount есть пропуски. Поэтому обычная np.mean(df.likeCount.values) возвращает nan, то есть «не число». Метод pandas по умолчанию пропускает отсутствующие значения:

df.likeCount.mean()  # 5735.014...
nan — это не нуль

Пропуск не следует автоматически считать нулевым значением. Пропуск, удаление и замена нулём — три разных решения, которые могут дать разные результаты.


3. Выбор столбца и фильтрация строк

К столбцу без пробелов и знаков, недопустимых в имени Python, часто можно обратиться через точку:

df.likeCount

Универсальный вариант — квадратные скобки. Они работают и с пробелами в названии, и при совпадении имени столбца с методом DataFrame:

df["likeCount"]

Чтобы найти строку с максимальным числом лайков, сначала считают максимум, затем сравнивают с ним каждое значение:

mx = df.likeCount.max()
df[df.likeCount == mx]

Сравнение df.likeCount == mx возвращает для каждой строки True или False. Передача этой маски в df[...] оставляет только строки со значением True. В данных максимум равен 1 686 8101\,686\,810 лайкам.


4. Среднее, медиана и длинный хвост

Для likeCount разница между средним и медианой огромна:

df.likeCount.mean()    # 5735.014...
df.likeCount.median()  # 100.0

Большинство видео имеет сравнительно мало лайков, но немногие очень большие значения образуют длинный правый хвост и поднимают среднее. Медиана зависит от порядка значений и поэтому менее чувствительна к таким выбросам.

df.likeCount.hist(bins=50, density=True)
df.likeCount.hist(bins=50, log=True)

Распределение числа лайков на обычной и логарифмической шкале частот На обычной шкале основная масса данных сжата у нуля. Логарифмическая шкала по вертикали делает редкие столбцы заметными.

Что именно меняет log=True

В этом вызове log=True переводит в логарифмический масштаб ось частот, то есть вертикальную ось. Сами значения likeCount на горизонтальной оси не логарифмируются.


5. Дисперсия: деление на nn или n−1n-1

Аргумент ddof означает, на сколько уменьшается число наблюдений в делителе:

σ^2=1n∑i=1n(xi−xˉ)2,s2=1n−1∑i=1n(xi−xˉ)2.\widehat{\sigma}^2=\frac{1}{n}\sum_{i=1}^{n}(x_i-\bar{x})^2, \qquad s^2=\frac{1}{n-1}\sum_{i=1}^{n}(x_i-\bar{x})^2.
df.likeCount.var(ddof=0)  # деление на n
df.likeCount.var(ddof=1)  # деление на n - 1

df.likeCount.std(ddof=0)
df.likeCount.std(ddof=1)

В лекции s2s^2 называется несмещённой дисперсией. Смысл несмещённости будет разобран в следующей неделе; здесь важно не перепутать два значения ddof.


6. Квантиль и фильтрация верхнего 1%1\%

q = df.likeCount.quantile(0.99)  # 128146.65
popular_styles = df[df.likeCount > q].music_style
popular_styles.value_counts()

Квантиль уровня 0,990{,}99 делит наблюдаемые значения: примерно 99%99\% из них не превосходят qq, а верхний 1%1\% лежит выше. Логическая маска отбирает эти строки, после чего value_counts() считает число видео каждого жанра. В этой группе чаще всего встречается rap: 108108 видео.

Квантиль — порог, а не готовое решение

Срез выше q0,99q_{0{,}99} помогает изучить крайние наблюдения. Сам по себе он не доказывает, что эти значения ошибочны или их нужно удалить.


7. describe(): сводка по столбцам

Без аргументов df.describe() обрабатывает числовые столбцы и выводит:

Строка Смысл
count Число непустых значений
mean Среднее
std Стандартное отклонение
min, max Минимум и максимум
25%, 50%, 75% Квантили; 50% — медиана

Чтобы получить сводку по строковым столбцам, указывают object:

df.describe(include="object")
Строка Смысл
count Число непустых значений
unique Число уникальных категорий
top Самая частая категория, то есть мода
freq Частота моды

Разное число в count для разных столбцов сразу указывает на пропуски. Например, в likeCount есть 18 85018\,850 непустых значений из 19 12419\,124 строк.


Итог

Разведочный анализ начинается не со сложных моделей, а с проверки формы таблицы, типов столбцов и пропусков. Затем числовые столбцы описываются центром, разбросом и квантилями, а категориальные — числом категорий и модой. Гистограмма дополняет числа и показывает, почему среднее и медиана могут сильно различаться.


Источники

  • Транскрипция видеоурока «1.12. Описательные статистики и pandas».

  • Ноутбук src/week01_intro/09_python_simple_visual_and_statistics.ipynb, ячейки 0–44 до раздела «3. Группировка».

  • Набор данных src/week01_intro/data/youtube_data_short.csv.


  1. Зачем в pd.read_csv для youtube_data_short.csv указан sep="\t"?

    Столбцы в файле разделены символом табуляции.

  2. Как интерпретировать df.shape со значением (19124, 10)?

    В таблице 19 124 строки и 10 столбцов.

  3. Что показывает df.dtypes?

    Тип данных каждого столбца таблицы.

  4. Почему np.mean(df.likeCount.values) возвращает nan?

    В массиве есть пропуски, а обычная np.mean их не игнорирует.

  5. Два способа выбрать столбец likeCount в pandas

    df.likeCount и df["likeCount"]; вариант с квадратными скобками универсальнее.

  6. Фильтрация DataFrame логической маской

    df[условие] оставляет строки, для которых условие вернуло True.

  7. Почему среднее likeCount намного больше медианы?

    Редкие очень большие значения образуют длинный правый хвост и тянут среднее вверх.

  8. Что меняет log=True в df.likeCount.hist(...) в этом уроке?

    Переводит вертикальную ось частот в логарифмический масштаб, не логарифмируя likeCount.

  9. Как ddof меняет делитель дисперсии?

    При ddof=0 делитель равен n, при ddof=1 — n − 1.

  10. Интерпретация df.likeCount.quantile(0.99)

    Примерно 99% непустых значений likeCount не превосходят полученный порог.

  11. Что возвращает df.describe() без аргументов?

    Сводку по числовым столбцам: count, mean, std, min, квартили и max.

  12. Что возвращает df.describe(include="object")?

    Для текстовых столбцов — count, unique, top и freq.

Показано 12 из 12 карточек

1.13 Группировка и простые методы визуализации

Автор: yuriy konkov · Карточек: 14

1.13 Группировка и простые методы визуализации

Коротко
  • groupby делит таблицу на группы по уникальным значениям и позволяет рассчитать статистики для каждой группы.

  • agg применяет одну или несколько агрегирующих функций к одному или нескольким столбцам.

  • apply преобразует каждый элемент столбца заданной функцией.

  • Гистограмма показывает форму распределения, KDE даёт его сглаженную оценку, а ящик с усами помогает сравнивать группы.

  • log=True меняет шкалу оси частот, а np.log(x + 1) преобразует сами данные.

Урок продолжает работу с таблицей музыкальных видео. Теперь задача не только описать один столбец, но и сравнить жанры, преобразовать строковые данные и подобрать график под конкретный вопрос.


1. Зачем нужен groupby

Среднее число лайков для одного жанра можно получить через срез:

df[df.music_style == "rap"].likeCount.mean()

Если жанров много, копировать такой код неудобно. groupby автоматически повторяет три действия:

  1. Находит уникальные значения music_style.

  2. Собирает строки каждого жанра в отдельную группу.

  3. Вычисляет заданную характеристику внутри каждой группы.

df.groupby("music_style")["likeCount"].mean()

Среднее число лайков по музыкальным жанрам Группировка показывает среднее для каждого жанра. В этих данных самое большое среднее у классики, но на него могут сильно влиять редкие популярные видео.


2. Несколько ключей, столбцов и функций

groupby может группировать сразу по жанру и исполнителю, а agg — посчитать среднее и число непустых значений для лайков и дизлайков:

df.groupby(["music_style", "performer"])[
    ["likeCount", "dislikeCount"]
].agg(["mean", "count"])

Структуру кода удобно читать слева направо:

  • groupby([...]) — по каким признакам разбить строки;

  • [[...]] — какие числовые столбцы обработать;

  • agg([...]) — какие функции применить в каждой группе.


3. Булевы признаки и группировка

Условие df["commentators_uniq"] > 0 создаёт столбец из True и False. Умножение на 11 превращает их в 11 и 00:

df["is_comment"] = 1 * (df["commentators_uniq"] > 0)
df["is_comment"].value_counts()

Такой признак можно добавить в группировку вместе с жанром и сравнить count, min, max и mean.

Пропуск не равен нулю

В этих данных в commentators_uniq есть NaN. Сравнение NaN > 0 даёт False, а умножение превращает его в 00. Поэтому is_comment == 0 здесь означает «нет зафиксированного положительного числа», а не всегда «точно нет комментариев».


4. apply: одна функция для каждого элемента

Метод apply передаёт каждый элемент столбца в функцию. Например, длину каждого заголовка считают так:

df.title.apply(len)
df.title.apply(len).mean()  # 35.293...

Свою функцию можно объявить отдельно:

def first_symbol(name):
    return name[0]

df.title.apply(first_symbol)

Короткое одноразовое правило можно записать анонимной лямбда-функцией:

df.title.apply(lambda name: name[0])

Оба последних варианта вернут первый символ каждого заголовка.


5. Гистограмма и сглаженная оценка плотности

plt.figure(figsize=(14, 7))
df["video_age"].hist(bins=100, density=True)
df["video_age"].plot(kind="kde", linewidth=4)
plt.xlim(0, 4000)
plt.title("Распределение возраста видео")

figsize задаёт ширину и высоту фигуры. Гистограмма сохраняет разбиение на бины, а kind="kde" строит непрерывную сглаженную оценку плотности. xlim ограничивает видимую область по горизонтали, но не удаляет строки из таблицы.


6. Логарифмическая шкала и логарифмирование данных

Два похожих приёма решают разные задачи:

columns = ["viewCount", "likeCount", "dislikeCount"]

# Меняем только шкалу вертикальной оси
df[columns].hist(figsize=(20, 8), log=True)

# Преобразуем сами значения
df[columns].apply(lambda x: np.log(x + 1)).hist(
    figsize=(20, 6), bins=25
)

log=True в гистограмме переводит в логарифмический масштаб ось yy. Наблюдаемые значения на оси xx остаются исходными. np.log(x + 1) меняет сами значения, сжимая длинный правый хвост. Единица нужна, чтобы нулевые значения превращались в log⁡(1)=0\log(1)=0, а не в log⁡(0)\log(0), который не определён.

Гистограммы логарифмов показателей и ящики с усами по жанрам Слева показаны преобразованные значения, справа — их сравнение по жанрам. Логарифм сжимает крупные значения, но не удаляет их.

Преобразование не исправляет ошибки

Логарифмирование уменьшает влияние крупных значений на масштаб графика и расчёты. Но оно не доказывает, что выбросы ошибочны, и не заменяет проверку их природы.


7. Ящик с усами и скрипичная диаграмма

Чтобы сравнить лайки между жанрами, сначала создаётся таблица с логарифмами показателей и исходным жанром:

df_log = df[columns].apply(lambda x: np.log(x + 1))
df_log["music_style"] = df["music_style"]

sns.boxplot(x="music_style", y="likeCount", data=df_log)
sns.violinplot(
    x="music_style", y="likeCount", data=df_log, inner="quartile"
)

Ящик с усами явно показывает медиану, квартили, усы и отдельные точки за их пределами. Скрипичная диаграмма добавляет сглаженную форму распределения; inner="quartile" отмечает квартили внутри.

Ящик не показывает моду

В транскрипции мода упомянута среди элементов ящика с усами. Стандартный boxplot показывает медиану и квартили, но не моду.


Итог

groupby заменяет серию однотипных срезов, agg управляет набором рассчитываемых характеристик, а apply преобразует элементы столбца. Визуализации отвечают на разные вопросы: гистограмма и KDE описывают форму одного распределения, а boxplot и violinplot помогают сравнивать распределения между группами.


Источники

  • Транскрипция видеоурока «1.13. Группировка и простые методы визуализации».

  • Ноутбук src/week01_intro/09_python_simple_visual_and_statistics.ipynb, разделы 3–6, ячейки 45–77.

  • Набор данных src/week01_intro/data/youtube_data_short.csv.


  1. Какую рутину заменяет groupby?

    Повторную фильтрацию по каждой категории и одинаковый расчёт внутри каждого среза.

  2. Как читать цепочку groupby → выбор столбцов → agg?

    Сначала задаются ключи группировки, затем обрабатываемые столбцы, затем функции для каждой группы.

  3. Как превратить булев столбец в 1 и 0?

    Умножить значения True и False на 1.

  4. Почему is_comment == 0 не всегда доказывает отсутствие комментариев?

    NaN > 0 тоже даёт False, которое затем превращается в 0.

  5. Что делает Series.apply?

    Применяет заданную функцию к каждому элементу столбца и собирает результаты.

  6. Лямбда-функция в примере с title

    Безымянная функция lambda name: name[0], возвращающая первый символ заголовка.

  7. Что задаёт figsize=(14, 7)?

    Ширину и высоту фигуры в дюймах.

  8. Что даёт kind="kde" для числового столбца?

    Непрерывную сглаженную оценку плотности распределения.

  9. Что делает plt.xlim(0, 4000)?

    Ограничивает видимую область горизонтальной оси, не удаляя строки из данных.

  10. Разница между hist(log=True) и np.log(x + 1)

    Первое меняет масштаб оси частот, второе преобразует сами значения x.

  11. Зачем использовать log(x + 1) для неотрицательных данных?

    Чтобы ноль перешёл в log(1)=0 вместо неопределённого log(0).

  12. Удаляет ли логарифмирование выбросы?

    Нет; оно сжимает крупные значения, но не удаляет их и не определяет, являются ли они ошибками.

  13. Что явно показывает стандартный boxplot?

    Медиану, квартили, усы и отдельные точки за их пределами; моду он не показывает.

  14. Что добавляет violinplot по сравнению с boxplot?

    Сглаженную форму распределения; при inner="quartile" внутри отмечаются квартили.

Показано 14 из 14 карточек

1.14 Поиск ответов на вопросы в pandas

Автор: yuriy konkov · Карточек: 14

1.14 Поиск ответов на вопросы в pandas

Коротко
  • Анализ начинается с точной формулировки вопроса: какая строка или группа нас интересует и какую метрику нужно посчитать.

  • shape показывает число строк и столбцов, а size — общее число ячеек, включая пропуски.

  • unique, nunique и value_counts отвечают на разные вопросы о категориях: какие значения есть, сколько их и как часто они встречаются.

  • Булевы маски отбирают строки; в pandas условия объединяются операторами & и |, а каждое сравнение заключается в скобки.

  • Для вопроса о группах нужно явно отделить уровень строк от уровня исполнителей: именно здесь важен порядок фильтрации и groupby.

1. От вопроса к операциям

Каждую задачу из урока можно разложить на один и тот же конвейер:

  1. определить единицу анализа — видео, жанр или исполнитель;

  2. отобрать нужные строки;

  3. при необходимости сгруппировать их;

  4. рассчитать нужную статистику;

  5. отсортировать или визуализировать ответ.

Данные загружаются так же, как в предыдущих уроках:

import pandas as pd

df = pd.read_csv("data/youtube_data_short.csv", sep="\t")

2. Размер таблицы: shape и size

df.shape  # (19124, 10)
df.size   # 191240

shape возвращает пару (строки, столбцы). Поэтому число наблюдений — df.shape[0], то есть 19 124 строки. size равен произведению размеров: 19 124⋅10=191 24019\,124 \cdot 10 = 191\,240.

Важно: size не считает только заполненные ячейки

В транскрипции size описан как число заполненных ячеек. На самом деле он учитывает все ячейки, в том числе с NaN. Для подсчёта непустых значений нужен count().


3. Уникальные значения и лидеры по частоте

В данных 111 исполнителей. Все уникальные имена возвращает unique(), а только их число — nunique():

df["performer"].unique()
df["performer"].nunique()  # 111

Если нужно понять, сколько раз встречается каждое имя, применяется value_counts():

top3 = df["performer"].value_counts().head(3)
top3

Результат:

Исполнитель Число клипов
николаев 566
валерия 525
михайлов 516

У Series, которую вернул value_counts(), имена исполнителей находятся в .index, а число клипов — в .values.


4. Доли категорий

Сравнение столбца со строкой создаёт булеву маску. Среднее такой маски равно доле значений True, поскольку True превращается в 11, а False — в 00:

(df["music_style"] == "rap").mean()
# 0.106..., то есть около 10,6 %

Доли всех жанров можно получить сразу:

genre_share = df["music_style"].value_counts(normalize=True)
genre_share.mul(100).plot(kind="bar")

В ноутбуке частоты делятся на df.shape[0]. Параметр normalize=True выражает ту же мысль прямо: вернуть доли, а не частоты.

Доля клипов каждого музыкального жанра в наборе данных YouTube Столбиковая диаграмма показывает, какую долю таблицы занимает каждый жанр.


5. Сколько жанров у каждого исполнителя

Здесь единица анализа — не клип, а исполнитель. Сначала строки группируются по performer, затем внутри каждой группы считаются уникальные жанры:

genres_per_performer = (
    df.groupby("performer")["music_style"]
      .nunique()
)

(genres_per_performer > 1).sum()  # 0

Нулевой результат не доказывает, что музыканты в жизни выступают только в одном жанре. Он говорит лишь о способе разметки этого набора данных: в нём каждому исполнителю соответствует один жанр.


6. Фильтр по нескольким условиям

Нужно найти среднее число просмотров у видео, которые одновременно имеют больше 100 000 лайков и больше 50 уникальных комментаторов:

mask = (
    (df["likeCount"] > 100_000)
    & (df["commentators_uniq"] > 50)
)

restricted = df.loc[mask]
restricted.shape                 # (214, 10)
restricted["viewCount"].mean()  # 39326558.90...

В выборку попали 214 видео; среднее — около 39,3 млн просмотров.

Осторожно: Для Series нужны & и |

Операторы Python and и or не выполняют поэлементное сравнение двух Series. Каждое условие нужно заключать в скобки.


7. Многошаговая задача: 5 % самых популярных исполнителей

По условию мера популярности исполнителя — разность медианного числа лайков и дизлайков. Медиана выбрана потому, что она менее чувствительна к отдельным вирусным клипам.

Задача состоит из четырёх шагов:

  1. найти исполнителей, у которых сумма лайков больше 100 000;

  2. для этих исполнителей посчитать медианы likeCount и dislikeCount;

  3. вычислить popularity;

  4. отобрать значения не ниже 95-го перцентиля и отсортировать их.

# 1. Отбор по СУММЕ лайков исполнителя
total_likes = df.groupby("performer")["likeCount"].sum()
eligible = total_likes[total_likes > 100_000].index

# 2. Медианы по отобранным исполнителям
performers = (
    df[df["performer"].isin(eligible)]
      .groupby("performer")[["likeCount", "dislikeCount"]]
      .median()
)

# 3. Мера популярности
performers["popularity"] = (
    performers["likeCount"] - performers["dislikeCount"]
)

# 4. Верхние 5 %
q95 = performers["popularity"].quantile(0.95)
answer = (
    performers.loc[performers["popularity"] >= q95, "popularity"]
              .sort_values(ascending=False)
)

В этом наборе данных условие по сумме лайков выполняют 69 исполнителей. Порог 95-го перцентиля равен примерно 14 570, в итоговую группу попадают хаски, пошлая_молли, кока и oxxxymiron.

Важно: В ноутбуке решена другая задача

Код df[df.likeCount > 100000] отбирает отдельные клипы со ста тысячами лайков. Это не то же самое, что исполнители, набравшие больше 100 000 лайков в сумме. Порядок операций меняет смысл фильтра и итоговый список.

Практический совет: > или >=

Фраза «верхние 5 %» задаёт порог, но при совпадающих значениях точно пять процентов строк может не получиться. Включение границы через >= не теряет наблюдения, равные квантилю.


Итог

Одни и те же инструменты pandas складываются в разные цепочки: сравнение создаёт маску, маска отбирает строки, groupby переносит анализ на уровень групп, а агрегат, квантиль и сортировка превращают отобранные данные в ответ. Ключевая проверка — не потерялась ли формулировка задачи при переходе к коду.


Источники

  • Транскрипция видеоурока «1.14. Поиск ответов на вопросы в pandas».

  • Ноутбук src/week01_intro/10_python_tasks.ipynb, ячейки 0–34.

  • Набор данных src/week01_intro/data/youtube_data_short.csv.

  1. df.shape

    Кортеж из числа строк и числа столбцов DataFrame.

  2. df.size

    Общее число ячеек DataFrame, включая позиции с пропусками.

  3. Series.count()

    Число непустых значений в Series.

  4. Series.unique()

    Массив уникальных значений столбца.

  5. Series.nunique()

    Количество уникальных значений столбца.

  6. Series.value_counts()

    Series с частотами значений: категории находятся в индексе, частоты — в значениях.

  7. Среднее булевой маски

    Доля элементов True, потому что True считается единицей, а False — нулём.

  8. value_counts(normalize=True)

    Доли всех категорий вместо их абсолютных частот.

  9. groupby по исполнителю и nunique по жанру

    Количество уникальных жанров для каждого исполнителя.

  10. Оператор & между двумя масками pandas

    Поэлементное «и»: строка проходит, только если оба условия истинны.

  11. Оператор | между двумя масками pandas

    Поэлементное «или»: строка проходит, если истинно хотя бы одно условие.

  12. Медиана лайков и дизлайков исполнителя

    Устойчивая к отдельным очень большим значениям основа меры типичной популярности.

  13. Отбор исполнителей по суммарным лайкам

    Сначала суммировать likeCount по performer, отобрать группы выше порога, затем считать медианы по их клипам.

  14. quantile(0.95) для меры популярности

    Порог, отделяющий верхние 5 % значений меры популярности.

Показано 14 из 14 карточек

1.15 Почему важна визуализация

Автор: yuriy konkov · Карточек: 12

1.15 Почему важна визуализация

Коротко
  • Описательные статистики сжимают таблицу до нескольких чисел и неизбежно теряют часть информации о её форме.

  • Совершенно разные облака точек могут иметь почти одинаковые средние, стандартные отклонения и корреляцию.

  • Диаграмма рассеяния показывает то, чего не видно в сводной таблице: группы, линии, пустоты, выбросы и нелинейную структуру.

  • Ящик с усами тоже сжимает распределение: одинаковый boxplot не гарантирует одинаковую внутреннюю структуру.

  • Надёжный анализ сочетает числовые характеристики с несколькими графиками, каждый из которых отвечает на свой вопрос.

1. Что теряется при сжатии данных

Среднее, стандартное отклонение и корреляция полезны: они быстро описывают положение, разброс и линейную связь. Но это не копия исходной таблицы, а её краткое резюме.

Например, средние не показывают, собраны ли точки в одно облако или в несколько. Стандартное отклонение не описывает, где именно находятся пустоты. А коэффициент корреляции, близкий к нулю, не исключает сложную нелинейную форму.

Главное: Статистики не ошибаются

Одинаковые числа могут быть посчитаны верно. Проблема в том, что несколько характеристик не содержат всей информации о наборе точек.


2. Динозавр как набор координат

В файле Datasaurus_data.csv каждая строка содержит два числа: координаты xx и yy одной точки. Без графика это обычная таблица из 142 строк. На диаграмме рассеяния точки складываются в силуэт динозавра.

import pandas as pd
import seaborn as sns

df = pd.read_csv(
    "data/Datasaurus_data.csv",
    header=None,
    names=["x", "y"],
)

sns.scatterplot(data=df, x="x", y="y", color="black")

Основные характеристики этого набора:

Показатель Значение
Среднее xx 54,2654{,}26
Среднее yy 47,8347{,}83
Выборочное СКО xx 16,7716{,}77
Выборочное СКО yy 26,9426{,}94
Корреляция xx и yy −0,06-0{,}06

Близкая к нулю корреляция здесь означает, что у кординат нет выраженной линейной связи. Она не означает, что точки «никак не связаны».


3. Собираем расчёты в функцию

Чтобы сравнивать наборы одинаково, в ноутбуке расчёты собраны в get_values:

def get_values(df):
    x_mean = df["x"].mean()
    y_mean = df["y"].mean()
    x_std = df["x"].std()
    y_std = df["y"].std()
    correlation = df.corr().loc["x", "y"]
    return [x_mean, y_mean, x_std, y_std, correlation]

Вторая функция строит scatterplot, задаёт одинаковые границы осей и печатает рядом результаты. Одинаковый масштаб важен: если каждый график растягивать по-разному, визуальное сравнение станет ненадёжным.


4. Похожие числа, разная форма

Сравнение динозавра, случайного и вытянутого облаков точек с их описательными статистиками Динозавр, случайное облако и вытянутое облако имеют почти одинаковые средние и стандартные отклонения, но точки организованы по-разному.

У динозавра и случайного облака совпадают даже корреляции: около −0,06-0{,}06. Тем не менее один набор выглядит как рисунок, а другой — как случайное облако. У вытянутого облака средние и СКО тоже почти те же, но корреляция равна примерно 0,830{,}83 и отражает его линейную вытянутость.

Главное: Визуализация и статистика дополняют друг друга

График не отменяет расчёты, а числа не заменяют график. Статистики дают точное краткое описание, а график помогает увидеть форму и проверить, не скрывается ли за сводкой важная структура.


5. Почему одного графика недостаточно

В ноутбуке показана анимация: точки перетекают в новые группы, гистограмма меняет форму, а ящик с усами почти не меняется. Причина в том, что boxplot хранит лишь несколько границ распределения.

Разные графики отвечают на разные вопросы:

График Что показывает
Scatterplot Совместное расположение пар (x,y)(x,y)
Гистограмма Где сосредоточены значения одной переменной, сколько у неё мод
Boxplot Медиану, квартили, усы и точки за их пределами
Violinplot Сглаженную форму распределения и внутренние отметки, если они включены
Важно: Стандартный boxplot не показывает среднее

В транскрипции среднее упомянуто среди основных характеристик ящика с усами. Обычный boxplot показывает медиану и квартили; среднее нужно добавлять отдельно, например параметром showmeans=True.


6. Как сочетать расчёты и графики

Практический порядок работы может быть таким:

  1. проверить размер таблицы, типы и пропуски;

  2. посчитать подходящие описательные статистики;

  3. построить график самих наблюдений или их формы;

  4. сопоставить график с числами и объяснить расхождения;

  5. при необходимости добавить другой тип графика, который покажет скрытую особенность.

Практический совет: Сравнивайте в одинаковом масштабе

Разные границы осей, неравный масштаб и неявная фильтрация могут создать ложное впечатление о различиях или сходстве наборов.


Итог

Описательные статистики отвечают на важные, но узкие вопросы. Визуализация добавляет форму и контекст, но сама тоже требует осмотрительности. Поэтому набор данных нужно и считать, и рисовать — несколькими способами.


Источники

  • Транскрипция видеоурока «1.15. Почему важна визуализация».

  • Ноутбук src/week01_intro/11_python_dino.ipynb, ячейки 0–22.

  • Наборы точек Datasaurus_data.csv, random_cloud.csv и angled_blob.csv из src/week01_intro/data/.

  • Исходный пример Datasaurus: Autodesk Research — Same Stats, Different Graphs.

  1. Ограничение описательных статистик

    Они сжимают данные до нескольких чисел и не сохраняют всю информацию о форме, группах и пустотах.

  2. Диаграмма рассеяния

    График, который показывает расположение каждой пары координат x и y на плоскости.

  3. Корреляция, близкая к нулю

    Отсутствие выраженной линейной связи; нелинейная структура при этом возможна.

  4. Datasaurus

    Набор пар координат, которые на scatterplot образуют динозавра и демонстрируют недостаточность одних сводных чисел.

  5. Функция get_values в ноутбуке

    Возвращает средние x и y, их стандартные отклонения и корреляцию между x и y.

  6. Одинаковые границы осей при сравнении графиков

    Условие, которое не даёт разному растяжению масштаба исказить визуальное сравнение наборов.

  7. Динозавр и случайное облако

    Наборы с почти одинаковыми средними, стандартными отклонениями и корреляцией около −0,06, но разной формой.

  8. Вытянутое облако в примере

    Набор с почти теми же средними и стандартными отклонениями, но корреляцией около 0,83.

  9. Ограничение boxplot

    Он показывает несколько границ распределения, поэтому разные внутренние формы могут выглядеть одинаково.

  10. Среднее значение на стандартном boxplot

    По умолчанию не показывается; его нужно включить отдельно, например параметром showmeans=True.

  11. Гистограмма при поиске нескольких мод

    Показывает, где сосредоточены значения, и позволяет заметить несколько пиков распределения.

  12. Совместное использование статистик и графиков

    Числа дают точную краткую сводку, а графики раскрывают форму и помогают обнаружить скрытую структуру.

Показано 12 из 12 карточек

1.16 Python-справочник курса

Автор: yuriy konkov · Карточек: 173

1.16 Python-справочник курса

Коротко

  • NumPy хранит и обрабатывает числовые массивы, считает статистики и генерирует случайные выборки.

  • SciPy задаёт теоретические распределения и даёт единый интерфейс для вероятностей, квантилей и симуляций.

  • pandas загружает таблицы, выбирает строки и столбцы, считает сводки и выполняет группировку.

  • Matplotlib строит базовые графики; seaborn добавляет удобные статистические визуализации.

  • statsmodels в этом курсе используется для эмпирической функции распределения.

  • Главное — выбирать команду от вопроса к данным, а не запоминать функции отдельным списком.

Этот справочник собирает команды и библиотеки, которые встречались в уроках 1.3–1.15. Это не новый раздел Python и не перечень всех возможностей библиотек: здесь только инструменты, уже использованные в курсе, и логика их выбора.


1. Карта библиотек

Библиотека Принятый псевдоним Для чего использовалась в курсе
numpy np Массивы, числовые операции, описательные статистики, сетки значений и случайные выборки
scipy.stats stats Теоретические распределения, вероятности, квантили, характеристики и симуляции
scipy.integrate — Численное интегрирование плотности через quad
pandas pd Таблицы, CSV, фильтрация, группировка, агрегация и табличные статистики
matplotlib.pyplot plt Гистограммы, линии, точки, ECDF, boxplot и оформление графиков
seaborn sns Scatterplot, boxplot и violinplot с удобной привязкой к столбцам таблицы
statsmodels — Построение объекта ECDF по выборке

Обычный блок импортов выглядит так:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from scipy import stats
from scipy.integrate import quad
from statsmodels.distributions.empirical_distribution import ECDF

import ... as ... задаёт короткий псевдоним модуля. Запись from ... import ... импортирует конкретный объект, поэтому к нему можно обращаться напрямую: ECDF(sample), а не через полное имя модуля.


2. Базовые конструкции Python, которые встречаются в примерах

Конструкция Что делает
print(value) Выводит значение, чтобы его можно было проверить
len(values) Возвращает число элементов
values[:10] Берёт первые десять элементов; правая граница среза не включается
values[105:112] Берёт элементы с позициями 105–111
def name(...): Объявляет функцию
return value Возвращает результат из функции
lambda x: ... Создаёт короткую безымянную функцию
for k in (1, 2, 3): Повторяет блок для каждого значения
& и ` `
==, >, >= Строят логические условия

В pandas нельзя заменять & обычным and: and пытается определить истинность всей Series, а не сравнивает строки поэлементно. Каждое условие необходимо заключать в скобки:

mask = (
    (df["likeCount"] > 100_000)
    & (df["commentators_uniq"] > 50)
)

3. NumPy: массивы и вычисления

3.1. Создание и устройство массива
Команда Назначение
np.array(values) Создать массив из последовательности значений
np.arange(start, stop) Получить равномерную последовательность с заданным шагом; stop не включается
np.linspace(start, stop, num) Получить num равномерно расположенных точек, включая обе границы
sample.shape Узнать размерность и длины осей массива
np.sort(sample) Вернуть отсортированную копию массива
sample.sum() Просуммировать элементы
sample.sum(axis=1) Суммировать вдоль указанной оси

arange удобен для счётчиков и целых последовательностей, а linspace — для гладкой сетки, по которой вычисляется функция перед построением графика.

3.2. Описательные статистики
Команда Что считает
np.mean(sample) или sample.mean() Среднее
np.median(sample) Медиану
np.var(sample, ddof=0) Дисперсию с делением на nn
np.var(sample, ddof=1) Исправленную дисперсию с делением на n−1n-1
np.std(sample, ddof=...) Стандартное отклонение с тем же правилом делителя
np.quantile(sample, q) Квантиль, где уровень q задаётся от 0 до 1
np.percentile(sample, p) Перцентиль, где уровень p задаётся от 0 до 100
np.sqrt(value) Квадратный корень, например переход от дисперсии к СКО
np.abs(values) Модули значений

Параметр ddof показывает, сколько вычесть из nn в знаменателе. Поэтому результат нельзя записывать без указания соглашения о делителе.

Параметр method у np.percentile задаёт способ интерполяции между наблюдениями. На одной выборке разные методы могут дать разные квартили.

3.3. Случайные выборки
rng = np.random.default_rng(42)

normal_sample = rng.normal(0, 1, size=1000)
binomial_sample = rng.binomial(10, 0.3, size=1000)
exponential_sample = rng.exponential(scale=0.5, size=1000)
Команда или параметр Что означает
np.random.default_rng(seed) Создать генератор псевдослучайных чисел
rng.normal(mu, sigma, size) Сгенерировать нормальную выборку
rng.binomial(n, p, size) Сгенерировать число успехов в сериях испытаний
rng.exponential(scale, size) Сгенерировать экспоненциальные времена ожидания
np.random.choice(values, size=...) Случайно выбрать элементы из набора
replace=True Выбирать с возвращением: повторения разрешены
replace=False Выбирать без возвращения: один элемент нельзя взять повторно
p=[...] Задать вероятности исходов в том же порядке, что и values
seed или random_state Сделать конкретную псевдослучайную реализацию воспроизводимой

Вероятности в p — не квоты. Например, p=[0.5, 0.2, 0.3] не обещает ровно 5, 2 и 3 появления в выборке размера 10.


4. SciPy: распределения как объекты

4.1. Создание распределений
Команда Какую модель создаёт
stats.bernoulli(p) Один опыт Бернулли: 0 или 1
stats.binom(n, p) Число успехов в n независимых опытах
stats.geom(p) Номер испытания, на котором впервые произошёл успех
stats.poisson(mu) Число событий за интервал
stats.expon(scale=1 / lam) Непрерывное время ожидания
stats.uniform(loc=a, scale=b - a) Равномерное распределение на [a,b][a,b]
stats.norm(loc=mu, scale=sigma) Нормальное распределение
stats.rv_discrete(values=(values, probs)) Собственное дискретное распределение из значений и вероятностей

Три параметризации особенно важно не путать:

  • у stats.norm параметр scale — это sigmasigma, а не sigma2sigma^2;

  • у stats.expon параметр scale равен 1/lambda1/lambda;

  • у stats.uniform параметр scale равен b−ab-a, а не правой границе bb.

4.2. Единый интерфейс

После создания распределения к нему применяются одинаковые методы:

Метод Для чего нужен
.pmf(k) Вероятность конкретного значения у дискретного распределения
.pdf(x) Плотность в точке у непрерывного распределения
.cdf(x) Функция распределения F(x)=P(X≤x)F(x)=\mathbb{P}(X\le x)
.sf(x) Вероятность правее точки, 1−F(x)1-F(x)
.ppf(q) Квантиль уровня q, обратная операция к cdf
.rvs(size=n) Сгенерировать выборку объёма n
.mean() Теоретическое математическое ожидание
.var() Теоретическая дисперсия
.std() Теоретическое стандартное отклонение

Для интервала используется разность функций распределения:

probability = X.cdf(b) - X.cdf(a)

Тот же результат можно проверить численным интегрированием плотности:

probability = quad(X.pdf, a, b)[0]

stats.mode(sample).mode возвращает моду выборки. Здесь сначала создаётся объект результата, а затем из него берётся поле mode.


5. pandas: загрузка и первичный осмотр таблицы

5.1. Чтение данных
df = pd.read_csv("data/youtube_data_short.csv", sep="\t")
Аргумент Назначение
путь первым аргументом Указывает файл с данными
sep="\t" Сообщает, что столбцы разделены табуляцией
header=None Указывает, что в файле нет строки с названиями столбцов
names=[...] Назначает имена столбцов вручную
5.2. Размер и типы
Команда Что возвращает
df.shape Кортеж (число строк, число столбцов)
df.shape[0] Только число строк
df.size Общее число ячеек, включая позиции с NaN
df.dtypes Тип данных каждого столбца
series.values Значения Series в виде массива NumPy
df.describe() Сводку по числовым столбцам
df.describe(include="object") Сводку по текстовым столбцам

В числовой сводке describe() появляются count, mean, std, min, квартили и max. Для текстовых столбцов важны count, unique, top и freq.


6. pandas: выбор, фильтрация и пропуски

6.1. Выбор столбцов и строк
Выражение Результат
df.likeCount Столбец через точечную запись
df["likeCount"] Тот же столбец через универсальную запись
df[["likeCount", "dislikeCount"]] Таблица из нескольких столбцов
df[105:112] Срез строк по позициям
df.loc[mask] Строки, где маска равна True
df.loc[mask, "popularity"] Строки по маске и один выбранный столбец

Квадратные скобки универсальнее точечной записи: они работают с пробелами в имени столбца, переменной вместо имени и списком столбцов.

6.2. Логические маски
mask = df["likeCount"] > 100_000
popular = df.loc[mask]

Сравнение столбца с числом создаёт Series из True и False. Эта серия используется как фильтр. Метод isin(values) строит маску принадлежности набору значений.

У пропусков есть важная особенность: обычная np.mean(series.values) возвращает nan, если в массиве есть пропуск. Методы pandas обычно пропускают NaN при статистических расчётах.


7. pandas: статистики и частоты

Команда Назначение
series.mean() Среднее непустых значений
series.median() Медиана непустых значений
series.max() Максимум
series.var(ddof=...) Дисперсия с заданным делителем
series.std(ddof=...) Стандартное отклонение
series.quantile(q) Квантиль уровня q
series.count() Число непустых значений
series.unique() Массив уникальных значений
series.nunique() Число уникальных значений
series.value_counts() Частоты категорий
series.value_counts(normalize=True) Доли категорий
series.value_counts().head(3) Три самые частые категории
series.sort_values(ascending=False) Сортировка по убыванию
series.mul(100) Поэлементное умножение на 100

Среднее булевой маски равно доле True, потому что при числовом расчёте True становится единицей, а False — нулём.


8. pandas: группировка и преобразования

8.1. Логика groupby
df.groupby("music_style")["likeCount"].mean()

Эта цепочка читается слева направо:

  1. разделить строки по music_style;

  2. внутри каждой группы взять likeCount;

  3. вычислить среднее отдельно для каждой группы.

Команда Назначение
df.groupby("column") Группировка по одному ключу
df.groupby(["a", "b"]) Группировка по комбинации ключей
.agg(["mean", "count"]) Несколько агрегатов для каждой группы
.sum() Сумма внутри каждой группы
.median() Медиана внутри каждой группы
.nunique() Число уникальных значений внутри групп
8.2. apply и функции

Series.apply(function) применяет функцию к каждому элементу серии. Функцию можно объявить через def или записать на месте через lambda:

df.title.apply(lambda name: name[0])

Для поэлементного логарифмирования нескольких столбцов использовалась цепочка:

df[columns].apply(lambda x: np.log(x + 1))

Прибавление единицы сохраняет нули: log(0+1)=0log(0+1)=0. Логарифмирование сжимает крупные значения, но не удаляет выбросы.

8.3. Интервалы и категории

pd.cut(values, bins=..., right=True) разбивает числа на интервалы. При right=True правая граница входит в интервал. Частоты полученных интервалов можно посчитать через value_counts(sort=False), сохранив исходный порядок бинов.


9. Matplotlib: построение и оформление графиков

9.1. Основные графики
Команда Что строит
plt.plot(x, y) Линию
plt.scatter(x, y) Отдельные точки
plt.step(x, y, where="post") Ступенчатую линию, удобную для ECDF
plt.hist(values, bins=..., density=True) Гистограмму с площадью, равной единице
plt.boxplot(values, vert=False) Горизонтальный ящик с усами
plt.fill_between(x, low, high) Закрашенную область между границами
plt.axvline(x) Вертикальную опорную линию

density=True нормирует площадь гистограммы, а не сумму высот её столбцов. Параметр bins управляет детализацией: слишком мало интервалов скрывает форму, слишком много подчёркивает шум.

9.2. Холст и оси
Команда Назначение
plt.figure(figsize=(w, h)) Создать новую фигуру нужного размера в дюймах
plt.subplots(rows, cols, figsize=...) Создать фигуру и несколько осей
axes[0].plot(...) Нарисовать на конкретной оси
axes[0].set(xlabel=..., ylabel=...) Задать свойства конкретной оси
plt.xlabel(text) / plt.ylabel(text) Подписать оси
plt.title(text) Добавить заголовок
plt.xlim(a, b) / plt.ylim(a, b) Ограничить видимую область
plt.legend() Показать легенду для подписанных серий
plt.style.use("ggplot") Применить стиль оформления
plt.show() Вывести готовую фигуру

Ограничение осей не удаляет наблюдения. Оно меняет только видимую часть графика.

9.3. Часто встречавшиеся параметры
Параметр Значение
figsize=(w, h) Размер фигуры в дюймах
color="..." Цвет линии, точек или заливки
alpha=0.2 Прозрачность
linewidth=3 Толщина линии
linestyle="--" Пунктирная линия
label="..." Подпись серии для легенды
where="post" Ступень меняется после точки
vert=False Горизонтальный boxplot

10. Графики через pandas и seaborn

pandas предоставляет короткие обёртки над Matplotlib:

Команда Результат
series.hist(bins=..., density=True) Гистограмма серии
series.hist(log=True) Гистограмма с логарифмической осью частот
series.plot(kind="kde") Сглаженная оценка плотности
series.plot(kind="bar") Столбчатая диаграмма
df[columns].hist(figsize=...) Отдельная гистограмма для каждого столбца

hist(log=True) меняет шкалу оси частот, а np.log(x + 1) меняет сами значения. Это разные операции и они отвечают на разные вопросы.

В seaborn график связывается с таблицей и именами столбцов:

Команда Что показывает
sns.scatterplot(data=df, x="x", y="y") Облако пар значений
sns.boxplot(x="group", y="value", data=df) Boxplot по группам
sns.violinplot(..., inner="quartile") Сглаженную форму распределения и квартили

Violinplot показывает больше формы, чем boxplot, но сглаживание остаётся оценкой, а не исходными наблюдениями.


11. statsmodels: эмпирическая функция распределения

ecdf = ECDF(sample)
plt.step(ecdf.x, ecdf.y)

ECDF(sample) строит эмпирическую функцию распределения. Поле ecdf.x содержит границы ступеней, ecdf.y — накопленные доли наблюдений. График остаётся ступенчатым даже тогда, когда при большой выборке выглядит почти гладким.


12. Типовой порядок анализа

Ниже команды собраны не по библиотекам, а по ходу решения задачи:

# 1. Загрузка
df = pd.read_csv("data.csv", sep="\t")

# 2. Первичный осмотр
print(df.shape)
print(df.dtypes)
print(df.describe())

# 3. Проверка распределения одного признака
df["likeCount"].hist(bins=50, log=True)

# 4. Фильтрация
mask = (df["likeCount"] > 100_000) & (df["commentators_uniq"] > 50)
restricted = df.loc[mask]

# 5. Сводка по группам
summary = restricted.groupby("music_style")["likeCount"].median()

# 6. Сортировка результата
answer = summary.sort_values(ascending=False)

Главная логика курса: сначала понять форму и качество данных, затем выбрать статистику и только после этого строить итоговый расчёт.


13. Частые ошибки

  1. Считать pdf(x) вероятностью точки. Это плотность; вероятность даёт площадь или разность cdf.

  2. Передавать дисперсию в scale нормального распределения вместо стандартного отклонения.

  3. Передавать lambdalambda в stats.expon(scale=...) вместо 1/λ1/\lambda.

  4. Забывать соглашение ddof при сравнении дисперсий.

  5. Считать, что density=True делает сумму высот гистограммы равной единице.

  6. Использовать and и or для масок pandas вместо & и |.

  7. Читать df.size как число строк: это число всех ячеек.

  8. Путать unique() с nunique() и value_counts().

  9. Принимать xlim за фильтрацию данных.

  10. Считать hist(log=True) логарифмированием исходного столбца.

  11. Забывать о NaN, превращая столбец pandas в обычный массив NumPy.

  12. Делать вывод о распределении только по среднему и стандартному отклонению без графика.


Источники

  • Конспекты уроков 1.3–1.15 курса «Сбор и анализ данных в Python».

  • Учебные ноутбуки 03_python_simulation.ipynb, 09_python_simple_visual_and_statistics.ipynb, 10_python_tasks.ipynb и 11_python_dino.ipynb в исходниках курса.

  1. Библиотеки курса: numpy (псевдоним np)

    Назначение в курсе: массивы, числовые операции, описательные статистики, сетки значений и случайные выборки.

  2. Библиотеки курса: scipy.stats (псевдоним stats)

    Назначение в курсе: теоретические распределения, вероятности, квантили, характеристики и симуляции.

  3. Библиотеки курса: scipy.integrate

    Назначение в курсе: численное интегрирование плотности через quad.

  4. Библиотеки курса: pandas (псевдоним pd)

    Назначение в курсе: таблицы, CSV, фильтрация, группировка, агрегация и табличные статистики.

  5. Библиотеки курса: matplotlib.pyplot (псевдоним plt)

    Назначение в курсе: гистограммы, линии, точки, ECDF, boxplot и оформление графиков.

  6. Библиотеки курса: seaborn (псевдоним sns)

    Назначение в курсе: scatterplot, boxplot и violinplot с удобной привязкой к столбцам таблицы.

  7. Библиотеки курса: statsmodels

    Назначение в курсе: построение объекта ECDF по выборке.

  8. Базовый Python: print(value)

    Базовый Python. Выводит значение, чтобы его можно было проверить.

  9. Базовый Python: len(values)

    Базовый Python. Возвращает число элементов.

  10. Базовый Python: values[:10]

    Базовый Python. Берёт первые десять элементов; правая граница среза не включается.

  11. Базовый Python: values[105:112]

    Базовый Python. Берёт элементы с позициями 105–111.

  12. Базовый Python: def name(...):

    Базовый Python. Объявляет функцию.

  13. Базовый Python: return value

    Базовый Python. Возвращает результат из функции.

  14. Базовый Python: lambda x: ...

    Базовый Python. Создаёт короткую безымянную функцию.

  15. Базовый Python: for k in (1, 2, 3):

    Базовый Python. Повторяет блок для каждого значения.

  16. Базовый Python: & и |

    Базовый Python. Поэлементные «и» и «или» для масок pandas.

  17. Базовый Python: ==, >, >=

    Базовый Python. Строят логические условия.

  18. NumPy: массивы: np.array(values)

    NumPy: массивы. Создать массив из последовательности значений.

  19. NumPy: массивы: np.arange(start, stop)

    NumPy: массивы. Получить равномерную последовательность с заданным шагом; stop не включается.

  20. NumPy: массивы: np.linspace(start, stop, num)

    NumPy: массивы. Получить num равномерно расположенных точек, включая обе границы.

  21. NumPy: массивы: sample.shape

    NumPy: массивы. Узнать размерность и длины осей массива.

  22. NumPy: массивы: np.sort(sample)

    NumPy: массивы. Вернуть отсортированную копию массива.

  23. NumPy: массивы: sample.sum()

    NumPy: массивы. Просуммировать элементы.

  24. NumPy: массивы: sample.sum(axis=1)

    NumPy: массивы. Суммировать вдоль указанной оси.

  25. NumPy: статистики: np.mean(sample) или sample.mean()

    NumPy: статистики. Среднее.

  26. NumPy: статистики: np.median(sample)

    NumPy: статистики. Медиану.

  27. NumPy: статистики: np.var(sample, ddof=0)

    NumPy: статистики. Дисперсию с делением на n.

  28. NumPy: статистики: np.var(sample, ddof=1)

    NumPy: статистики. Исправленную дисперсию с делением на n-1.

  29. NumPy: статистики: np.std(sample, ddof=...)

    NumPy: статистики. Стандартное отклонение с тем же правилом делителя.

  30. NumPy: статистики: np.quantile(sample, q)

    NumPy: статистики. Квантиль, где уровень q задаётся от 0 до 1.

  31. NumPy: статистики: np.percentile(sample, p)

    NumPy: статистики. Перцентиль, где уровень p задаётся от 0 до 100.

  32. NumPy: статистики: np.sqrt(value)

    NumPy: статистики. Квадратный корень, например переход от дисперсии к СКО.

  33. NumPy: статистики: np.abs(values)

    NumPy: статистики. Модули значений.

  34. NumPy: случайные выборки: np.random.default_rng(seed)

    NumPy: случайные выборки. Создать генератор псевдослучайных чисел.

  35. NumPy: случайные выборки: rng.normal(mu, sigma, size)

    NumPy: случайные выборки. Сгенерировать нормальную выборку.

  36. NumPy: случайные выборки: rng.binomial(n, p, size)

    NumPy: случайные выборки. Сгенерировать число успехов в сериях испытаний.

  37. NumPy: случайные выборки: rng.exponential(scale, size)

    NumPy: случайные выборки. Сгенерировать экспоненциальные времена ожидания.

  38. NumPy: случайные выборки: np.random.choice(values, size=...)

    NumPy: случайные выборки. Случайно выбрать элементы из набора.

  39. NumPy: случайные выборки: replace=True

    NumPy: случайные выборки. Выбирать с возвращением: повторения разрешены.

  40. NumPy: случайные выборки: replace=False

    NumPy: случайные выборки. Выбирать без возвращения: один элемент нельзя взять повторно.

  41. NumPy: случайные выборки: p=[...]

    NumPy: случайные выборки. Задать вероятности исходов в том же порядке, что и values.

  42. NumPy: случайные выборки: seed или random_state

    NumPy: случайные выборки. Сделать конкретную псевдослучайную реализацию воспроизводимой.

  43. SciPy: распределения: stats.bernoulli(p)

    SciPy: распределения. Один опыт Бернулли: 0 или 1.

  44. SciPy: распределения: stats.binom(n, p)

    SciPy: распределения. Число успехов в n независимых опытах.

  45. SciPy: распределения: stats.geom(p)

    SciPy: распределения. Номер испытания, на котором впервые произошёл успех.

  46. SciPy: распределения: stats.poisson(mu)

    SciPy: распределения. Число событий за интервал.

  47. SciPy: распределения: stats.expon(scale=1 / lam)

    SciPy: распределения. Непрерывное время ожидания.

  48. SciPy: распределения: stats.uniform(loc=a, scale=b - a)

    SciPy: распределения. Равномерное распределение на [a,b].

  49. SciPy: распределения: stats.norm(loc=mu, scale=sigma)

    SciPy: распределения. Нормальное распределение.

  50. SciPy: распределения: stats.rv_discrete(values=(values, probs))

    SciPy: распределения. Собственное дискретное распределение из значений и вероятностей.

Показано 50 из 173 карточек

Сбор и анализ данных в Python — неделя 1: основы теории вероятностей — Запоминальня