Учебный курс

Сбор и анализ данных в Python

Вводный курс по вероятности, случайным величинам, распределениям, их числовым характеристикам, моделированию в Python и описательной статистике. Материалы подготовлены по локальным конспектам курса «Машинное обучение от статистики до нейросетей».

#python#анализ данных#статистика#машинное обучение
Лайков: 0

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

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

Неделя 1. Основы вероятности и анализа данных

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

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

Коротко. Коротко

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

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

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

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

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


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

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

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


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. Две теоремы, на которых держится статистика

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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


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

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


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

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


Источник: локальный конспект «1.1 Дорожная карта курса.md».

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

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

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

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

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

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

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

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

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

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

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

Коротко. Коротко

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

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

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

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

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


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

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

ОбозначениеЧто значитПример
X, Y, Z — заглавные с конца алфавитаслучайные величиныXX — рост случайного человека
x, y, z — строчные с конца алфавитаконкретные значения, которые они принялиx = 178 см
X_1,\ldots,X_nслучайная выборка объёма nnнаблюдения до сбора данных
x_1,\ldots,x_nнаблюдённые значения выборкиконкретные числа в таблице
\bar{x}выборочное среднее\bar{x}=n^{-1}\sum_i x_i
\hat{\sigma}^2, s^2выборочная дисперсия с делением на nn и n-1—
Q_1,Q_2,Q_3, \mathrm{IQR}квартили и интерквантильный размах\mathrm{IQR}=Q_3-Q_1
A, B, C, D — заглавные с начала алфавитасобытияAA = «выпал орёл»
P\mathbb{P}вероятность\mathbb{P}(A) = 0{,}5
\mathbb{E}(X)математическое ожидание\mathbb{E}(X) = 175
\mathrm{Var}(X)дисперсия\mathrm{Var}(X) = 49
\mathrm{Cov}(X, Y)ковариация—
\rho(X, Y)корреляция—

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


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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

\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, убеждение обновилось. Именно возможность иметь априорное убеждение \mathbb{P}(H) и делает вероятность субъективной — двое с разным опытом стартуют с разных априорных и получат разные ответы на одних данных.

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

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


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

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

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

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

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

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

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

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

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

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

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


5. Итог

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


Источник: локальный конспект «1.2 Что такое случайность и как устроен мир.md».

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

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

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

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

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

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

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

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

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

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

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

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

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

Коротко. Коротко

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

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

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

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

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


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

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

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

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

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


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

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

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

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


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

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

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

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

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

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

0 \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 = 1. ✓

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


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

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

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

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

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

F(x) = \sum_{i} \mathbb{P}(X = x_i) \cdot [\,x_i \le x\,]

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

F(x) = \mathbb{P}(X \le x) = \int_{-\infty}^{x} f(t)\,dt

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


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

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

F(x) = \int_{-\infty}^{x} f(t)\,dt \qquad \Longleftrightarrow \qquad f(x) = \frac{dF(x)}{dx} = F'(x)

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


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

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

\mathbb{P}(X = a) = \int_a^a f(t)\,dt = 0

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

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

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

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

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


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

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

Совет. Главный мостик Везде, где в дискретном случае стоит сумма \sum, в непрерывном стоит интеграл \int. Везде, где стоит вероятность p_i, стоит плотность f(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) = \mathbb{P}(X \le x)
.ppf(q)обратная к cdf — квантиль уровня qq
.rvs(size=n)сгенерировать выборку
.mean(), .var(), .std()характеристики → урок 1.4


Источник: локальный конспект «1.3 Случайная величина и её распределение.md».

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Коротко. Коротко

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

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

  • Измерять отклонение как \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 ₽
\mathbb{P}(X = x)0,50,250,25

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

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

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

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

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

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

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

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

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

\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)}

\boxed{\ \mathbb{E}(X) = \frac{a + b}{2}\ }

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


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

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

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

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

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

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

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

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

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

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

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

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

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


3. Дисперсия

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

\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$$

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

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

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

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

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

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

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

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

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

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

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

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

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

xx−12010
x^21440100
P\mathbb{P}0,50,250,25

\mathbb{E}(X^2) = 144 \cdot 0{,}5 + 0 \cdot 0{,}25 + 100 \cdot 0{,}25 = 72 + 25 = 97

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

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

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

Дисперсия равномерного распределения

\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}

\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}

\boxed{\ \mathrm{Var}(X) = \frac{(b - a)^2}{12}\ }

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

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

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

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

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

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


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

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

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

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

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

\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)

= \mathrm{Var}(X) + \mathrm{Var}(Y)

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

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

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

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

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

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


5. Мода

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

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

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

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

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

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


6. Медиана

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

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

Слева от медианы — половина всей площади, справа — вторая половина.

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

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

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

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

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


7. Квантили

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

\mathbb{P}(X \le q_\gamma) = \gamma \qquad \Longleftrightarrow \qquad F(q_\gamma) = \gamma

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

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

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

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

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

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


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

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

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


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

ХарактеристикаОбозначениеОтвечает на вопросЕдиницыУстойчива к выбросам
Матожидание\mathbb{E}(X)Какое значение в среднем?как у XX❌ нет
Дисперсия\mathrm{Var}(X)Насколько разбросано?квадрат❌ нет
СКОσ\sigmaТо же, в исходных единицахкак у XX❌ нет
Мода—Что встречается чаще всего?как у XX✅ да
Медиана\mathrm{med}Что посередине?как у XX✅ да
Квантиль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. Считать, что \mathrm{Var}(X - Y) = \mathrm{Var}(X) - \mathrm{Var}(Y). Нет: дисперсии складываются. Дисперсия вообще не может быть отрицательной.

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

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

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

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

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



Источник: локальный конспект «1.4 Характеристики случайных величин.md».

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Коротко. Коротко

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

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

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

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

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

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


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

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


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

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

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

X \sim \mathrm{Bern}(p)

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

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

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

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

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

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


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

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

X \sim \mathrm{Bin}(n, p)

\mathbb{P}(X = k) = C_n^k \, p^k (1-p)^{n-k}, \qquad k = 0, 1, \dots, 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)=0 при x<0 и F(x)=1 при x\ge n.

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

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

Чем больше pp, тем правее смещается масса распределения.

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

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

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

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

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

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

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

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

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

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

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


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

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

X \sim \mathrm{Geom}(p)

\mathbb{P}(X = k) = (1-p)^{k-1} \cdot p

F(x)=1-(1-p)^{\lfloor x\rfloor}, \qquad x\ge 1,

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

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

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

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

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

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

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

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

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


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

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

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

p_i=\mathbb{P}(X=x_i), \qquad p_i\ge 0, \qquad \sum_i p_i=1,

F(x)=\mathbb{P}(X\le x)=\sum_{x_i\le x}p_i,

\mathbb{E}(X)=\sum_i x_i p_i,

\mathrm{Var}(X)=\sum_i(x_i-\mathbb{E}X)^2p_i =\sum_i x_i^2p_i-\bigl(\mathbb{E}X\bigr)^2.

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

xx123456
\mathbb{P}(X=x)1/61/61/61/61/61/61/61/61/61/61/61/6

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


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

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

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

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

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

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

X \sim \mathrm{Pois}(\lambda)

\mathbb{P}(X = k) = \frac{\lambda^k e^{-\lambda}}{k!}, \qquad k = 0, 1, 2, \dots

F(x)=e^{-\lambda}\sum_{k=0}^{\lfloor x\rfloor}\frac{\lambda^k}{k!}, \qquad x\ge 0,

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

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

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

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

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


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

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

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

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

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

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

X \sim \mathrm{Exp}(\lambda)

f(x) = \lambda e^{-\lambda x}, \quad x \ge 0 \qquad\qquad F(x) = 1 - e^{-\lambda x}

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

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 — функция выживания:

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

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

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

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

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

\mathbb{P}(X > s + t \mid X > s) = \mathbb{P}(X > t)

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

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

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

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

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

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


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

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

X \sim U(a, b), \qquad f(x) = \frac{1}{b-a} \ \text{ при } x \in [a, 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}

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

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


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

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

X \sim N(\mu, \sigma^2)

f(x) = \frac{1}{\sigma\sqrt{2\pi}} \, e^{-\frac{(x-\mu)^2}{2\sigma^2}}

F(x)=\Phi\!\left(\frac{x-\mu}{\sigma}\right),

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

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

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

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

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

Правило трёх сигм
ИнтервалВероятность попасть
\mu \pm 1\sigma≈ 68,3 %
\mu \pm 2\sigma≈ 95,4 %
\mu \pm 3\sigma≈ 99,7 %

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

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


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

4.1. Формулы распределений
РаспределениеНосительPMF или PDFCDF на носителе
Бернуллиk\in\{0,1\}\mathbb{P}(X=k)=p^k(1-p)^{1-k}1-p при 0\le x<1; 11 при x\ge1
Биномиальноеk=0,\dots,n\mathbb{P}(X=k)=C_n^kp^k(1-p)^{n-k}\displaystyle\sum_{k=0}^{\lfloor x\rfloor}C_n^kp^k(1-p)^{n-k}
Геометрическоеk=1,2,\dots\mathbb{P}(X=k)=p(1-p)^{k-1}1-(1-p)^{\lfloor x\rfloor}
Пуассонk=0,1,2,\dots\mathbb{P}(X=k)=\dfrac{\lambda^ke^{-\lambda}}{k!}\displaystyle e^{-\lambda}\sum_{k=0}^{\lfloor x\rfloor}\dfrac{\lambda^k}{k!}
Экспоненциальноеx\ge0f(x)=\lambda e^{-\lambda x}F(x)=1-e^{-\lambda x}
Равномерноеx\in[a,b]f(x)=\dfrac1{b-a}F(x)=\dfrac{x-a}{b-a}
Нормальноеx\in\mathbb{R}f(x)=\dfrac1{\sigma\sqrt{2\pi}}e^{-\frac{(x-\mu)^2}{2\sigma^2}}F(x)=\Phi\!\left(\dfrac{x-\mu}{\sigma}\right)

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

4.2. Смысл и характеристики
РаспределениеЧто моделируетПараметры\mathbb{E}(X)\mathrm{Var}(X)scipy
Бернуллиодин опыт, два исходаppppp(1-p)bernoulli
Биномиальноечисло успехов из nnn, pnpnp(1-p)binom
Геометрическоеномер первого успехаpp1/p(1-p)/p^2geom
Пуассончисло событий за интервалλ\lambdaλ\lambdaλ\lambdapoisson
Экспоненциальноевремя до событияλ\lambda1/\lambda1/\lambda^2expon
Равномерноевсе значения равновероятныa, b(a+b)/2(b-a)^2/12uniform
Нормальноесимметричный разброс, ошибки, суммы\mu, \sigma^2μ\mu\sigma^2norm

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


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

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

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

1. Пуассон как предел биномиального. Возьмите очень много испытаний с очень маленькой вероятностью успеха так, чтобы произведение 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/\lambda, а не λ\lambda. Забыть про это — классическая ошибка, которая тихо даёт неверные числа. Проверяйте себя вызовом .mean(): он должен совпасть с тем, что вы ожидаете.


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

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

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

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

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

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

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

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


Источник: локальный конспект «1.5 Какими бывают случайные величины.md».

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  8. Какой главный принцип важно помнить при выборе вероятностного распределения?

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

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

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

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

Коротко. Коротко

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

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

  • У нормального распределения loc задаёт математическое ожидание μ\mu, а scale — среднее квадратическое отклонение σ\sigma, не дисперсию \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 \sim N(\mu, \sigma^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).

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

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

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

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

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

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

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

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

norm_rv.pdf(1)
# 0.24197072451914337

Дополнение. Пояснение Это высота кривой плотности, а не вероятность события X=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)=\mathbb{P}(X\le x)=\int_{-\infty}^{x}f(t)\,dt.

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

norm_rv.cdf(1)
# 0.8413447460685429

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

Слева одна и та же вероятность показана площадью под плотностью, справа — высотой функции распределения в точке x=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) начинается в -\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) приближается к нулю при движении влево и к единице при движении вправо, но при конечных xx не достигает этих границ.


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

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

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

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

\mathbb{P}(1<X\le3)=F(3)-F(1).

norm_rv.cdf(3) - norm_rv.cdf(1)
# 0.15730535589982697

Вероятность попасть между 11 и 33 равна примерно 0{,}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_\gamma, левее которого находится доля вероятности γ\gamma:

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 находится примерно 5 % вероятностной массы стандартного нормального распределения. Квантиль уровня 0{,}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()


Источник: локальный конспект «1.6 Генерация случайных величин в Python.md».

  1. Чем отличаются pdf(1) и cdf(1)?

    `pdf(1)` возвращает высоту плотности в точке $1$. `cdf(1)` возвращает вероятность $\mathbb{P}(X\le1)$, то есть всю площадь под плотностью левее единицы.

  2. Как задать нормальное распределение с математическим ожиданием 3 и дисперсией 4?

    Дисперсия равна $\sigma^2=4$, значит, $\sigma=2$. Код: `stats.norm(loc=3, scale=2)`.

  3. Как в SciPy через объект norm_rv найти вероятность $\mathbb{P}(1<X\le3)$?

    Вычесть значения функции распределения: `norm_rv.cdf(3) - norm_rv.cdf(1)`.

  4. Что вернёт norm_rv.ppf(0.5) для стандартного нормального распределения?

    Медиану стандартного нормального распределения — число $0$. Слева от него находится половина вероятностной массы.

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

1.7 Описательные статистики

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

Коротко. Коротко

  • Генеральная совокупность включает все интересующие нас объекты, а выборка — только исследованную часть этой совокупности.

  • Чтобы переносить выводы с выборки на генеральную совокупность, выборка должна отражать её свойства. Один из способов уменьшить систематическое искажение — случайный отбор наблюдений.

  • В дальнейшем наблюдения считаются независимыми и одинаково распределёнными: i.i.d.

  • Любая функция от наблюдений называется статистикой. Статистика сама остаётся случайной величиной, потому что зависит от случайной выборки.

  • Среднее, медиана и мода описывают типичное значение. Дисперсия, стандартное отклонение и интерквантильный размах описывают разброс.

  • Среднее и дисперсия чувствительны к выбросам. Медиана и интерквантильный размах устойчивее к отдельным экстремальным значениям.


1. Генеральная совокупность и выборка

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

Например, в городе живёт миллион человек. Чтобы оценить среднюю зарплату, можно опросить 2 500 жителей, а не всё население. Тогда:

  • миллион жителей — генеральная совокупность;

  • 2 500 опрошенных — выборка;

  • средняя зарплата опрошенных — статистика, по которой пытаются судить о средней зарплате в городе.

Работа с выборкой экономит время и деньги. Однако сам факт наличия выборки ещё не гарантирует правильного вывода о всей совокупности.

Репрезентативность

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

В примере из лекции рост людей измеряют тремя способами:

Способ отбораПроблема
Опросить баскетбольную командуВысокие люди попадут в выборку чаще, чем среди всех жителей
Опросить только подругВыборка не отражает всё население
Опросить случайных людей на остановкеОтбор ближе к случайному и меньше связан с ростом

Случайный отбор помогает избежать заранее заданного предпочтения одним наблюдениям перед другими.

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


2. Статистическая модель выборки

Обозначим выборку объёма nn через

X_1, X_2, \ldots, X_n,

где X_i — результат одного случайного наблюдения, а nn — размер выборки. До сбора данных каждое X_i рассматривается как случайная величина. После наблюдения получаются конкретные числа x_1, x_2, \ldots, x_n.

В курсе используются две предпосылки:

  1. Наблюдения независимы: результат одного наблюдения не меняет распределение остальных.

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

Кратко это записывают так:

X_1, X_2, \ldots, X_n \quad \mathrm{i.i.d.}

Сокращение i.i.d. происходит от independent and identically distributed — «независимые и одинаково распределённые».

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


3. Что такое статистика

Статистика — любая функция от наблюдений:

T = T(X_1, X_2, \ldots, X_n).

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

Например, по одной случайной группе жителей средняя зарплата может оказаться равной 72 000 рублей, а по другой — 76 000 рублей. Формула среднего не изменилась, но на вход ей попались другие наблюдения.

Важно. Главная идея Статистика — не неизменное свойство одной таблицы. До сбора данных это случайная величина, поведение которой зависит от способа получения выборки.


4. Наблюдения и переменные в таблице

Обычно выборка представлена таблицей:

  • строка — отдельное наблюдение, например один фильм;

  • столбец — переменная, например название фильма, кассовые сборы или год выпуска.

В лекции переменные разделяются на два вида:

ВидЧто принимает переменнаяПримеры
КатегориальнаяЗначение из ограниченного набора категорийцвет машины, страна производства
НепрерывнаяЧисловые значения из некоторого диапазонарост, вес, цена, кассовые сборы

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


5. Меры центральной тенденции

Меры центральной тенденции отвечают на вопрос: «На что похоже типичное наблюдение?» В уроке рассматриваются среднее, медиана и мода.

Выборочное среднее

Выборочное среднее — аналог математического ожидания для наблюдаемой выборки:

\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, 0:

\bar{x}=\frac{1+5-4+3+0}{5}=1.

В вычислении участвует каждое значение. Поэтому одно очень большое или очень маленькое наблюдение может заметно сдвинуть среднее.

Выборочная медиана

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

  • При нечётном nn берут значение в середине.

  • При чётном nn берут среднее двух центральных значений.

Для нечётного числа наблюдений:

1, 5, -4, 3, 0 \quad\longrightarrow\quad -4, 0, 1, 3, 5,

поэтому mathrm{med}=1.

Для чётного числа наблюдений:

1, 5, -4, 3 \quad\longrightarrow\quad -4, 1, 3, 5,

\mathrm{med}=\frac{1+3}{2}=2.

Почему среднее чувствительно к выбросам

Предположим, семь человек получают по 30 000 рублей, а восьмой — 430 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. Обычное среднее отклонение равно нулю:

\frac{-2+2}{2}=0.

Нулевой результат не означает, что разброса нет. Положительное и отрицательное отклонения просто уничтожили друг друга.

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

\boxed{\ \hat{\sigma}^{2} = \frac{1}{n}\sum_{i=1}^{n}(x_i-\bar{x})^2\ }.

Для выборки 1, 5, -4, 6 среднее равно 22:

\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.

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

Удобная формула

После раскрытия квадратов получается аналог формулы для теоретической дисперсии:

\boxed{\ \hat{\sigma}^{2}=\overline{x^2}-\bar{x}^{,2}\ },

где

\overline{x^2}=\frac{1}{n}\sum_{i=1}^{n}x_i^2.

Для той же выборки:

\overline{x^2}=\frac{1^2+5^2+(-4)^2+6^2}{4}=19{,}5,

\hat{\sigma}^{2}=19{,}5-2^2=15{,}5.


7. Стандартное отклонение и деление на n-1

Дисперсия измеряется в квадрате исходных единиц. Если возраст указан в годах, дисперсия выражается в годах в квадрате. Чтобы вернуться к исходным единицам, из дисперсии извлекают корень:

\boxed{\ \hat{\sigma}=\sqrt{\hat{\sigma}^{2}}\ }.

Для выборки 1, 5, -4, 6:

\hat{\sigma}=\sqrt{15{,}5}\approx3{,}94.

На практике часто используют дисперсию со знаменателем n-1:

\boxed{\ s^2=\frac{1}{n-1}\sum_{i=1}^{n}(x_i-\bar{x})^2\ }.

Её называют несмещённой выборочной дисперсией. Для того же примера:

s^2=\frac{62}{3}\approx20{,}67.

Причина замены nn на n-1 связана со свойствами статистики как случайной величины. В лекции этот вопрос только обозначен: понятие несмещённости разбирается на следующих неделях курса.

Частая ошибка. Две формулы отвечают разным соглашениям При чтении результата всегда проверяйте знаменатель. Формулы с nn и n-1 дают разные числа, особенно на маленьких выборках.


8. Перцентили, квартили и интерквантильный размах

Перцентиль порядка kk — значение, ниже которого находится примерно kk % наблюдений. Это выборочный аналог квантиля.

Сначала выборку упорядочивают:

x_{(1)}\le x_{(2)}\le\ldots\le x_{(n)},

где x_{(1)} — минимальное наблюдение, а x_{(n)} — максимальное.

Частные случаи:

ПерцентильНазвание
25-йнижний, или первый, квартиль Q_1
50-ймедиана Q_2
75-йверхний, или третий, квартиль Q_3

Интерквартильный размах показывает ширину центральной половины выборки:

\boxed{\ \mathrm{IQR}=Q_3-Q_1\ }.

В примере из лекции дана выборка

1, 5, 3, -1, -4, 3, 3, -10, 2, -1.

После сортировки:

-10, -4, -1, -1, 1, 2, 3, 3, 3, 5.

Позиция медианы по правилу со слайдов равна 0{,}5(n+1)=5{,}5, поэтому берётся среднее пятого и шестого элементов:

Q_2=\frac{1+2}{2}=1{,}5.

На слайдах для позиции между двумя элементами используется простой вариант: берётся среднее соседних наблюдений. Тогда Q_1=-2{,}5, Q_3=3, а

\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-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.  ]

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



Источник: локальный конспект «1.7 Описательные статистики.md».

  1. Чем генеральная совокупность отличается от выборки?

    Генеральная совокупность включает все интересующие исследователя объекты. Выборка — только та часть совокупности, по которой собраны данные.

  2. Что означает предпосылка i.i.d.?

    Наблюдения независимы друг от друга и имеют одинаковое распределение.

  3. Почему выборочное среднее является случайной величиной?

    Оно вычисляется по случайной выборке. Другая выборка обычно даст другое значение среднего.

  4. Когда медиана полезнее среднего?

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

  5. Почему среднее отклонение от среднего не измеряет разброс?

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

  6. Чем отличаются формулы выборочной дисперсии со знаменателями n и n − 1?

    Первая усредняет квадраты отклонений с делением на $n$. Вторая делит на $n-1$ и называется несмещённой выборочной дисперсией. Причина этой поправки рассматривается дальше по курсу.

  7. Что показывает интерквантильный размах?

    Ширину центральной половины выборки: $\mathrm{IQR}=Q_3-Q_1$.

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

1.8 Описательные статистики на примере данных

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

Коротко. Коротко

  • Тип переменной определяет, какие статистики для неё имеют смысл.

  • Для десяти наблюдений возраста среднее равно 2020 годам, а медиана — 20{,}5 года.

  • Сумма квадратов отклонений от среднего равна 252252, поэтому дисперсия с делением на nn равна 25{,}2 года².

  • Стандартное отклонение возвращает разброс в исходные единицы: здесь это примерно 55 лет.

  • Дисперсию можно считать напрямую по отклонениям или через разность среднего квадратов и квадрата среднего.

В прошлом уроке описательные статистики были введены как общие правила. Теперь разберём весь расчёт на одной небольшой таблице: от выбора подходящей переменной до проверки дисперсии вторым способом.

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


1. Сначала определяем тип переменной

В таблице есть имя, пол, возраст и вес. Эти столбцы устроены по-разному, поэтому к ним нельзя бездумно применять один и тот же набор статистик.

ПеременнаяТипЧто с ней делают в уроке
ИмяТекстоваяИспользуют как идентификатор, но не вычисляют среднее или разброс
ПолКатегориальнаяМожно закодировать двумя значениями, например 00 и 11
ВозрастЧисловаяСчитают среднее, медиану, дисперсию и стандартное отклонение
ВесЧисловаяУпоминают как ещё один столбец, к которому применимы те же идеи

Категориальную переменную с двумя возможными значениями часто кодируют как дамми-переменную: одной категории ставят в соответствие 00, другой — 11. Такое кодирование удобно для вычислений, но не превращает категорию в обычную количественную величину.

Важно. Код — ещё не смысл Числа 00 и 11 в дамми-переменной служат метками категорий. Разность между ними нельзя интерпретировать так же, как разность в возрасте или весе.

Дальше урок сосредоточен на возрасте. Наблюдаемые значения:

14,\ 15,\ 21,\ 20,\ 14,\ 25,\ 30,\ 23,\ 22,\ 16.


2. Среднее: складываем все значения

Выборочное среднее учитывает каждое наблюдение:

\bar{x}=\frac{1}{n}\sum_{i=1}^{n}x_i.

В выборке n=10, а сумма возрастов равна 200200:

\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.

Элементы такого ряда обозначают x_{(1)},x_{(2)},\ldots,x_{(n)}. Скобки в индексе показывают место после сортировки:

  • x_{(1)} — минимальное значение;

  • x_{(n)} — максимальное значение;

  • номер исходной строки при сортировке может измениться.

В ряду десять элементов, поэтому одного центрального наблюдения нет. Берём среднее пятого и шестого:

\mathrm{med}=\frac{x_{(5)}+x_{(6)}}{2} =\frac{20+21}{2}=20{,}5.

Медианный возраст равен 20{,}5 года. Среднее и медиана здесь близки, но отвечают на вопрос о «типичном» наблюдении разными способами: среднее использует величину всех значений, медиана — центральное положение в отсортированном ряду.


4. Дисперсия: превращаем отклонения в меру разброса

В этом уроке выборочная дисперсия считается с делением на nn:

\widehat{\sigma}^{2} =\frac{1}{n}\sum_{i=1}^{n}(x_i-\bar{x})^2.

Среднее уже найдено: \bar{x}=20. Для каждого возраста выполняем одну и ту же последовательность:

  1. Вычитаем среднее.

  2. Возводим отклонение в квадрат.

  3. Складываем квадраты отклонений.

  4. Делим сумму на число наблюдений.

x_i1414141415151616202021212222232325253030
x_i-\bar{x}−6-6−6-6−5-5−4-400112233551010
(x_i-\bar{x})^23636363625251616001144992525100100

Сумма последней строки равна:

\sum_{i=1}^{10}(x_i-\bar{x})^2=252.

Следовательно,

\widehat{\sigma}^{2}=\frac{252}{10}=25{,}2\ \text{года}^2.

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

Частая ошибка. Следите за знаменателем Здесь используется формула с nn. Формула с n-1 даст другое число и относится к другому соглашению, разобранному в уроке 1.7.


5. Почему большие отклонения влияют сильнее

Дисперсия назначает отклонению величины dd штраф d^2. Зависимость квадратичная:

| Отклонение |d| | Штраф d^2 | |---:|---:| | 11 | 11 | | 22 | 44 | | 33 | 99 | | 55 | 2525 | | 1010 | 100100 |

При увеличении отклонения на одну единицу штраф растёт всё быстрее. Поэтому возраст 3030 лет, расположенный на 1010 лет выше среднего, добавляет к сумме квадратов 100100 — намного больше, чем несколько наблюдений рядом со средним.

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


6. Стандартное отклонение возвращает исходные единицы

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

\widehat{\sigma}=\sqrt{\widehat{\sigma}^{2}} =\sqrt{25{,}2}\approx5{,}02\ \text{года}.

Стандартное отклонение составляет примерно 5 лет. Это не означает, что каждое наблюдение отстоит от среднего ровно на 5 лет. Число суммирует общий масштаб разброса в тех же единицах, что и возраст.


7. Второй способ вычислить дисперсию

Дисперсию можно найти без отдельной таблицы отклонений:

\boxed{\ \widehat{\sigma}^{2}=\overline{x^2}-\bar{x}^{,2}\ },

где \overline{x^2} — среднее квадратов наблюдений, а \bar{x}^{,2} — квадрат уже найденного среднего. Это разные операции, и их важно не перепутать.

Сумма квадратов возрастов равна 42524252:

\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.

Тогда

\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?

    Сумма возрастов равна $200$, поэтому $\bar{x}=200/10=20$ лет.

  3. Почему медиана возраста равна 20,5 года?

    После сортировки в середине ряда находятся пятый и шестой элементы: $20$ и $21$. Для чётного числа наблюдений их усредняют: $(20+21)/2=20{,}5$.

  4. Что означает обозначение $x_{(i)}$?

    Это наблюдение, занимающее $i$-е место в ряду после сортировки по возрастанию.

  5. Чему равна сумма квадратов отклонений возрастов от среднего?

    $252$ года².

  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 · Карточек: 9

Коротко. Коротко

  • Эмпирическая функция распределения показывает долю наблюдений, не превышающих заданное значение xx.

  • Она имеет вид ступенек: скачок в точке равен доле наблюдений с таким значением.

  • Гистограмма делит числовую ось на интервалы, или бины, и показывает, сколько наблюдений попало в каждый из них.

  • Слишком узкие бины подчёркивают шум, а широкие скрывают детали распределения.

  • Ящик с усами сжимает распределение до медианы, квартилей, интерквартильного размаха и возможных выбросов.

Среднее, медиана и дисперсия описывают отдельные свойства выборки. Чтобы увидеть форму распределения целиком, нужны графики. В уроке последовательно строятся три таких представления: эмпирическая функция распределения, гистограмма и ящик с усами.


1. От теоретической функции к эмпирической

Теоретическая функция распределения случайной величины XX задаёт вероятность события X\le x:

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

На практике закон распределения обычно неизвестен, зато есть выборка X_1,\ldots,X_n. Вероятность заменяют наблюдаемой частотой события:

\boxed{\ \widehat{F}_n(x) =\frac{1}{n}\sum_{i=1}^{n}[\,X_i\le x\,]\ }.

Здесь [\,X_i\le x\,] — индикаторная функция:

[\,X_i\le x\,]= \begin{cases} 1, & X_i\le x,\\ 0, & X_i>x. \end{cases}

Формула задаёт простой алгоритм: для выбранного xx нужно посчитать наблюдения слева от него, включая совпадающие с xx, и разделить результат на объём выборки.

Важно. Смысл ЭФР Значение \widehat{F}_n(x) — доля выборки, которая не превышает xx.


2. Как строится ступенчатый график

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

x_1=2,\quad x_2=5,\quad x_3=2,\quad x_4=3,\quad x_5=1.

После сортировки получаем 1,2,2,3,5. Теперь двигаемся слева направо и накапливаем долю уже пройденных наблюдений.

Интервал для xxСколько наблюдений \le x\widehat{F}_n(x)
x<10000
1\le x<2111/51/5
2\le x<3333/53/5
3\le x<5444/54/5
x\ge55511

В точке 11 происходит скачок на 1/51/5. Значение 22 встречается дважды, поэтому следующий скачок сразу равен 2/52/5. После максимального наблюдения 55 вся выборка оказывается левее текущего xx, и функция остаётся равной единице.

Эмпирическая функция распределения для выборки 2, 5, 2, 3, 1 Эмпирическая функция распределения для выборки 2,5,2,3,1.

ЭФР всегда не убывает и принимает значения от 00 до 11. При увеличении объёма выборки ступеньки обычно становятся мельче и чаще. Для выборки из непрерывного распределения график начинает точнее повторять его теоретическую функцию распределения.


3. Гистограмма как оценка формы распределения

Эмпирическая функция распределения накапливает доли наблюдений. Гистограмма отвечает на другой вопрос: где на числовой оси наблюдения встречаются чаще.

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

  • По оси xx отложены значения признака.

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

  • Высота каждого прямоугольника определяется наблюдениями внутри соответствующего бина.

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


4. Ширина бинов меняет картину

Число бинов нельзя выбирать механически. Оно управляет балансом между общей формой и деталями.

Сравнение гистограмм с 20 и 100 бинами Одна выборка объёма 100 при разбиении на 20 и 100 бинов.

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

Частая ошибка. Подробность не равна точности Гистограмма со множеством узких столбцов может выглядеть информативнее, хотя часть её неровностей вызвана случайностью конкретной выборки.

По гистограмме можно приблизительно судить о плотности распределения. В слайдах также упоминается ядерное сглаживание (kernel density estimation, KDE): оно заменяет резкие прямоугольники плавной кривой. Подробное изучение метода вынесено в следующие уроки.


5. Ящик с усами

Гистограмма показывает форму подробно. Ящик с усами, или boxplot, даёт компактное описание распределения через несколько опорных точек.

Основные элементы:

  • левая и правая границы ящика соответствуют Q_1 и Q_3;

  • линия внутри ящика показывает медиану Q_2;

  • длина ящика равна интерквартильному размаху \mathrm{IQR}=Q_3-Q_1;

  • внутри ящика находится центральная половина наблюдений.

В схеме из презентации потенциальные выбросы ищут за границами

Q_1-1{,}5\cdot\mathrm{IQR} \quad\text{и}\quad Q_3+1{,}5\cdot\mathrm{IQR}.

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

Гистограмма и ящик с усами с возможным выбросом Гистограмма и соответствующий boxplot: отдельная точка слева отмечена как возможный выброс.

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


6. Как связаны три графика

Теоретическая величинаВыборочный аналогЧто показывает
Функция распределения F(x)Эмпирическая функция \widehat{F}_n(x)Накопленную долю наблюдений левее xx
Плотность распределения 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)$?

    Долю наблюдений выборки, значения которых не превышают $x$.

  2. Зачем в формуле ЭФР нужна индикаторная функция?

    Она превращает условие $X_i\le x$ в число: $1$, если условие выполнено, и $0$ в противном случае. Сумма индикаторов даёт количество подходящих наблюдений.

  3. Чему равна $\widehat{F}_n(2{,}5)$ для выборки $2,5,2,3,1$?

    $3/5$, потому что значения $1,2,2$ не превышают $2{,}5$.

  4. Почему в точке $2$ ЭФР выборки $2,5,2,3,1$ делает скачок на $2/5$?

    Значение $2$ встречается дважды, поэтому при переходе через эту точку сразу добавляются два наблюдения из пяти.

  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 · Карточек: 10

Коротко

  • Для бинарного признака столбцы показывают частоты двух возможных значений.

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

  • Стандартное отклонение задаёт типичный масштаб разброса вокруг среднего.

  • Выброс сильно сдвигает среднее, но может почти не изменить медиану.

  • Эмпирическая функция распределения для каждого xx показывает долю наблюдений, не превосходящих xx.

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


1. Два значения: распределение бинарного признака

Признак «пол» кодируется двумя числами: 00 для женщины и 11 для мужчины. В таблице четыре женщины и шесть мужчин, поэтому относительные частоты равны

\widehat{p}(X=0)=\frac{4}{10}=0{,}4, \qquad \widehat{p}(X=1)=\frac{6}{10}=0{,}6.

Столбцы высотой 0{,}4 и 0{,}6 показывают не самих людей, а доли двух значений признака.

Важна согласованность Сами числа 00 и 11 не задают смысл категорий. Можно выбрать и обратное кодирование, но нельзя менять его по ходу расчёта. В транскрипции в одной фразе кодирование оговорено наоборот; здесь используется вариант, согласованный с доской и частотами.


2. Гистограмма возраста вручную

Возрасты сортируются по возрастанию:

14,\ 14,\ 15,\ 16,\ 20,\ 21,\ 22,\ 23,\ 25,\ 30.

Длина бина равна 55. В уроке принята договорённость: значение на границе относится к левому бину. Значит, интервалы удобно записать как (10,15], (15,20], (20,25] и (25,30].

БинЗначенияЧастота
(10,15]14,14,1533
(15,20]16,2022
(20,25]21,22,23,2544
(25,30]303011

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

Гистограмма возраста и правило стандартных отклонений на доске Гистограмма возраста: высоты столбцов равны 3,2,4,1.


3. Что показывает стандартное отклонение

Для возрастов из примера выборочное среднее равно \bar{x}=20, а стандартное отклонение с делением на nn приблизительно равно \hat{\sigma}\approx5. Интервал

\bar{x}-\hat{\sigma}\le x\le \bar{x}+\hat{\sigma}

показывает диапазон в одно стандартное отклонение от среднего. Чем больше \hat{\sigma}, тем шире типичный разброс данных.

Для нормального распределения действует правило одной, двух и трёх сигм:

ИнтервалПримерная доля
\mu\pm\sigma68%68\%
\mu\pm2\sigma95%95\%
\mu\pm3\sigma99{,}7\%

Это не универсальное правило для любых данных Доли 68%68\%, 95%95\% и 99{,}7\% относятся к нормальной модели. В маленькой выборке фактическая доля внутри интервала может отличаться. По одной гистограмме из десяти наблюдений нельзя надёжно утверждать, что исходная величина нормально распределена.


4. Выброс растаскивает шкалу и сдвигает среднее

Веса в таблице равны

50,\ 50,\ 50,\ 50,\ 80,\ 80,\ 440,\ 80,\ 80,\ 80.

Значение 440440 намного больше остальных. На гистограмме оно создаёт дальний столбец и растягивает ось xx. В расчёте среднего оно входит целиком:

\bar{x}=\frac{4\cdot50+5\cdot80+440}{10}=104.

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

\mathrm{med}=80.

Влияние выброса веса на среднее и медиану Выброс 440440 тянет среднее вправо до 104104, а медиана остаётся равной 8080.

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


5. Эмпирическая функция распределения вручную

Теоретическая функция распределения задаётся как

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

Если закон распределения неизвестен, вероятность оценивают по наблюдаемой частоте:

\boxed{\ \widehat{F}_n(x)=\frac{1}{n}\sum_{i=1}^{n}[\,x_i\le x\,]\ }.

Индикатор [\,x_i\le x\,] равен 11, если условие выполнено, и 00 — если нет. Поэтому сумма считает наблюдения, не превосходящие xx, а деление на nn превращает количество в долю.

Для возрастов из примера эмпирическая функция равна

\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{,}2, потому что значение 1414 встречается дважды.

Ступенька от каждого единичного наблюдения имеет высоту 1/101/10. Если значение повторяется, скачоки складываются: именно поэтому в 1414 происходит скачок на 2/102/10. Между наблюдаемыми значениями функция постоянна, не убывает, до минимума равна нулю, а после максимума — единице. Так ступенчатая оценка приближает неизвестную теоретическую 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. К какому бину в уроке относится возраст $20$?

    К бину $(15,20]$, потому что правая граница включается в левый бин.

  3. Каковы частоты в четырёх бинах для возрастов из урока?

    $3,2,4,1$ для интервалов $(10,15]$, $(15,20]$, $(20,25]$ и $(25,30]$ соответственно.

  4. Когда можно применять правило $68\%$–$95\%$–$99{,}7\%$?

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

  5. Почему выброс $440$ сильно влияет на среднее?

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

  6. Чему равны среднее и медиана веса в примере?

    Среднее равно $104$, а медиана — $80$.

  7. Что показывает $\widehat{F}_n(x)$?

    Долю наблюдений выборки, значения которых не превосходят $x$.

  8. Почему эмпирическая функция в точке $14$ скачком поднимается сразу до $0{,}2$?

    В выборке два наблюдения из десяти равны $14$, поэтому высота скачка равна $2/10=0{,}2$.

  9. Чему равна $\widehat{F}_{10}(22)$ для возрастов из урока?

    $0{,}7$, потому что семь из десяти возрастов не превосходят $22$.

  10. Какие граничные значения имеет эмпирическая функция?

    Левее минимума выборки она равна $0$, а начиная с максимума — $1$.

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

1.11 Эмпирическое распределение в Python

Автор: yuriy · Карточек: 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) естественны.


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 · Карточек: 12

1.12 Описательные статистики и pandas

Коротко
  • pd.read_csv загружает таблицу, а sep="\t" указывает на разделение столбцов табуляцией.

  • shape, срезы и dtypes помогают понять размер, содержимое и типы столбцов.

  • Методы pandas считают минимум, максимум, среднее, медиану, дисперсию, стандартное отклонение и квантили прямо по столбцу.

  • Логическое условие внутри df[...] отбирает строки, для которых условие истинно.

  • describe() собирает основные характеристики числовых или категориальных столбцов в одну таблицу.

Урок переходит от симуляций к реальным данным о 19\,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\,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-1

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

\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)

В лекции s^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{,}99 делит наблюдаемые значения: примерно 99%99\% из них не превосходят qq, а верхний 1%1\% лежит выше. Логическая маска отбирает эти строки, после чего value_counts() считает число видео каждого жанра. В этой группе чаще всего встречается rap: 108108 видео.

Квантиль — порог, а не готовое решение

Срез выше q_{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\,850 непустых значений из 19\,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 · Карточек: 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(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 · Карточек: 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 \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 · Карточек: 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")

Основные характеристики этого набора:

ПоказательЗначение
Среднее xx54{,}26
Среднее yy47{,}83
Выборочное СКО xx16{,}77
Выборочное СКО yy26{,}94
Корреляция xx и yy-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{,}83 и отражает его линейную вытянутость.

Главное: Визуализация и статистика дополняют друг друга

График не отменяет расчёты, а числа не заменяют график. Статистики дают точное краткое описание, а график помогает увидеть форму и проверить, не скрывается ли за сводкой важная структура.


5. Почему одного графика недостаточно

В ноутбуке показана анимация: точки перетекают в новые группы, гистограмма меняет форму, а ящик с усами почти не меняется. Причина в том, что boxplot хранит лишь несколько границ распределения.

Разные графики отвечают на разные вопросы:

ГрафикЧто показывает
ScatterplotСовместное расположение пар (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 карточек