Монте-Карло: практика | Вероятность и статистика #4
Вставка
- Опубліковано 4 лип 2024
- Покупайте мой курс по А/Б-тестам stepik.org/a/194930 Скидка 20% по промо коду UA-cam
Подписывайся на Телеграм t.me/mikhaylovgleb
Ноутбук: colab.research.google.com/dri...
0:00 начало стрима, шутки, леопарды
3:32 Что такое вероятность
7:23 Вероятность что на кубике выпадет шестерка
14:03 Парадокс дней рождений (в конце натупил: если в комнате 367 человек, то вероятность совпадения 100%)
28:07 Задача про студента
37:07 Признаюсь, что натупил в рассуждениях про парадокс дней рождений
43:35 Задача про такси
57:13 Зада про русскую рулетку
1:31:20 Неудачное исполнение песни Зеленоглазое такси (не смог оправится после тупки парадоксе дней рождений)
Побольше бы таких видео с задачами! Очень здорово. Мозг как будто железо потягал, и начинает думать "а что, если в таксопарке другое распределение машин; а что, если зарядить барабан иначе". И когда решаешь эти расширения к задачам, чувство собственного достоинства не заставляет себя ждать.
Глеб, класс! Смотрю четвертое видео на одном дыхании. Спасибо за Зеленоглазое такси. Очень душевно)
Шикарнейшие занятия! Глеб, спасибо огромное! Удачи во всём и везде 😍
Спасибо за видео. Отличный способ узнать про Монте-Карло не залезая в википедию.
Задача про русскую рулетку - это парадокс Монти Холла с поменянными классами(там нужно "выиграть"(приз), а мы хотим "проиграть" (пулю)).
Лично для себя, после знакомства с этим парадоксом, вывела практическое жизненное правило : "Если цель "выиграть" - меняй ставку при смене диспозиции, если цель "проиграть" - оставайся где ты есть" Ж)
Вроде подходит)
def one_turn(chamber):
return chamber[-1:] + chamber[:-1]
К парадоксу дней рождений. У нас в отделе около 20 человек. У двух пар дни рождения в один день.
Задача про такси прекрасная иллюстрация теоремы Байеса. Спасибо за стрим. Хотя вы решили другим, не менее интересным путем.
Глеб, спасибо большое! Просто супер! И полезно и настроение создаешь отличное! =)
Таллебу есть кем гордиться
Про парадокс дней рождений - даже при условии, что в комнате находится тысяча человек, все равно есть вероятность, что все они родились, скажем 1 января.Маленькая, но есть.Питон просто не показывает слишком маленькие значения, это можно впринципе понять через этот цикл:
n = 0
x = 1
while n < 22:
x *= (364-n)/(365)
n +=1
print(1-x)
вывод: 0.507...
но если мы заменим 22 на 999 -вывод единица, даже если заменим на 155 будет вывод единица, т.к. колаб ограничивает запись числа после запятой до 16 знаков, если 17 знаков после запятой девятки - то выведет единицу.
0.99999999999999999 = 1
P.s. Спел збс, такому исполнителю полагается бесплатная цистерна виноградного дня каждый день =)
Однозначно лайк! Спасибо большое, Глеб!
лайк поставил. коммент для продвижения написал. Спасибо за бесплатный контент. Идем дальше
Глеб, это прекрасно!
В парадоксе о днях рождения намонтекарлил комбинаторный принцип Дирихле
Много интересных задачек по вероятности в книге Неслучайная случайность. Тоже проверял их через Монте-Карло но в Экселе))) Пайтон это делает намного элегантнее😎
Лучший!
Глеб, спасибо за материал, было очень познавательно и полезно!
Ох уж эти контринтуитивные задачи по вероятности 😅
def one_turn():
chamber.insert(0, chamber.pop())
return chamber
Во время вращения барабана в этой функции патрон может случайно выпасть)
Крутил chamber, проиграл, спасибо за трансляции)
Спасибо
ясно понятно даже ребенку, можно любую логику вращения захардкодить:
def one_turn(chamber):
[p1, p2, p3, p4, p5, p6] = chamber
return [p6, p1, p2, p3, p4, p5]
через функции списков, можно на любом языке (почти везде есть аналоги push/pop, shift/insert):
def one_turn(chamber: list):
res = chamber
res.insert(0, res.pop())
return res
через питоновские индексы (на других языках может не прокатить):
def one_turn(chamber):
return [chamber[-1]] + chamber[0: -1]
1:07:06
def one_turn(lst):
return [lst[(i - 1) % 6] for i in range(len(lst))]
Глеб, привет! Пересматриваю этот видос, монеткарлю чуть. Для задачки с барабаном предлагаю более краткое исполнение функции, которая рандомно барабан проворачивает:
def chamber_spin(chamber):
'''
Функция принимающая на вход начальное значение барабана (список)
Которая случайным образом вращает барабан (сдвигает элементы списка по порядку на случайное количество позиций)
'''
n = np.random.randint(1,7)
return np.roll(chamber, n)
Круто! Не знал про np.roll
@@GlebMikhaylov Та я тоже 10 минут назад не знал))) Всё как ты завещал: гугл переводчик + гугл поиск и немного смекалки 🤜🏼🤛🏼
@@vadimselin4386 Мне вот этот вариант понравился еще: x.append(x.pop(0)). Тоже интересный случай, но в данном случае барабан покрутится в обратном направлении))
Интересно если в группу набирать разное кол-во человек, что будет? Для ответа на вопрос провел ряд экспериментов.
Код:
import pandas as pd
import numpy as np
import seaborn as sns
bd = pd.Series(range(365))
n = 10000
n1 = 200
res = []
for i in range(n1):
a = np.mean([bd.sample(2,replace=True).duplicated().max() for _ in range(n)])
res.append(a)
sns.histplot(res)
t = pd.DataFrame(res)
t.head()
t['cum'] = t[0].cumsum()
t['smp_sz'] = range(1,n1+1)
t['mn'] = t['cum']/t['smp_sz']
t.set_index('smp_sz')['mn'].plot()
Результаты запуска одной попытки из нескольких:
для 2 человек: ~0.0029
для 23 человек: ~0.507
для 57 человек: ~0.99025
для 100 человек: =1.0 (если 100 и более человек, то =1)
для 99 человек: ->1.0 (стремится к 1 слева, иногда равно 1, как при 100, а иногда меньше 1 типа 0.99999999)
для 85 человек: ~0.9996 (часто меньше 1)
для 20 человек: ~0.4115
для 30 человек: ~0.707
ноутбук тут: colab.research.google.com/drive/14i8wVkWuehhw19UN9jcO120EB1TMHLKI?usp=sharing
я лично понял задачу про билеты так, что если студент идёт вторым, то билет первого студента убирается из доступных билетов для оставшихся студентов. но по решению Глеба получается, что билет первого студента возвращается обратно
я там в других коментах к этому видео это объяснял, посмотри плиз
По итогу wimp'а угостил виноградным днем?) 36:20
Мне кажется, что неверно, что если количество участников превышает количество вариантов, то кто нибудь 100% совпадёт. А вдруг совпадёт так, что при 364 днях и 365 участниках попадётся 3 человека, у кого будет в один день ДР, и тогда один день останется не праздником, и такая вероятность есть при бесконечно любом количестве участников, разве нет?
Андрей, это немного разные задачи: совпадение ДР хотя бы у одной пары из N участников и несовпадение ДР у всех (N участников и N разных дней рождений )
@@vladenec совпадение ДР хотя бы у одной пары из N участников = 1 - несовпадение ДР у всех. Глеб был прав, оно стремится к 100% но не достигнет никогда(даже при 1 млн человек, остается вероятность того что у них у всех хоть в 1 день будут дни рождения) , вопрос лишь в количестве 9 после запятой
Смотрела видос Савватеева о парадоксе др, вывод: если p-value=0.5, у нас нет оснований отвергнуть Н0 о том, что в группе из 23 человек нет совпадения др.
one_turn_chamber: chamber.append(chamber.pop(0))
bd = [len(set(np.random.randint(0,365,23))) for _ in range(10000)]
sns.histplot(bd, stat='probability')
Про ДР