Python의 조건 확률: 개념, 표 및 코드
개술
이 글은 나Data Science from Scratch by Joel Grus가 보도한 6장이다.우리는 이전의 개념, 예를 들어 한계 확률과 연합 확률을 이해함으로써 조건 확률을 이해하도록 노력할 것이다.
마지막으로 우리는 코드를 통해 모든 개념을 한데 연결할 것이다.관심 있는 사람들에게 너는 이 문장의 밑에 있는 코드로 뛰어넘을 수 있다.
도전하다
이 절의 첫 번째 도전은 두 조건의 확률 문장을 구분하는 것이다.
설정입니다.우리는 두 명의 아이가 있고 두 개의 가설이 있는 가정이 있다.우선 모든 아이가 남자아이일 수도 있고 여자아이일 수도 있다.둘째, 두 번째 아이의 성별은 첫 번째 아이의 성별에 독립한다.
Outcome 1: What is the probability of the event "both children are girls" (B) conditional on the event "the older child is a girl" (G)?
진술일의 확률은 약 50% 또는 (1/2)이다.
Outcome 2: What is the probability of the event "both children are girls" (B) conditional on the event "at least one of the children is a girl" (L)?
진술2의 확률은 약 33% 또는(1/3)이다.
그런데 언뜻 보면 비슷해 보여요.
한계 확률과 결합 확률
이 책은 조건 확률로 바로 넘어갔지만, 우선 한계 확률과 연합 확률을 살펴봐야 한다.그리고 우리는 우리가 차이를 찾아내는 데 도움을 줄 연합확률표와 총화확률을 만들 것이다.그리고 우리는 조건 확률로 계속할 것이다.
우선, 우리는 우리의 처지가 독립이라는 것을 의식해야 한다.한 아이의 성별은 두 번째 아이와 독립한다.
이런 상황에서의 직감은 의존 상황과 다르다.예를 들어 만약에 우리가 한 장의 카드에서 두 장의 카드를 뽑는다면 확률은 다르다.국왕을 그릴 확률.♠️ (4/52)와 두 번째 국왕을 끌어들일 확률입니다.♣️ 지금(3/51);두 번째 종목(두 번째 왕)의 확률은 첫 추첨 결과에 달려 있다.
이름 모를 두 아이로 돌아가다.
우리는 첫 아이가 남자아이나 여자아이일 확률이 50/50이라고 말할 수 있다.그 밖에 두 번째 아이가 첫 번째 아이와 독립할 확률도 50/50이다.우리의 첫 번째 가설은 모든 아이가 소년이나 소녀일 수 있다는 것을 기억해라.
우리들은 이 숫자들을 표 안에 두자.여기에 표시된 (1/2) 확률을 한계 확률이라고 한다(표의 가장자리에 어떻게 있는지 주의한다).
우리는 두 가지 성별(동전의 양면과 비슷하기 때문에)이 있기 때문에 우리는 모든 가능한 결과를 직관적으로 찾아낼 수 있다.
요컨대 첫 아이가 남자가 아니면 여자일 확률은 50/50으로 간단하다.두 번째 아이가 남자아이나 여자아이일 확률도 50/50이다.한 장의 표에 놓을 때, 이것은 한계 확률이 생긴다.
이제 우리는'첫 번째 아이는 남자아이, 두 번째 아이는 여자'라고 말할 확률을 알고 싶다.첫 번째 아이가 특정 성별(소년)과 두 번째 아이가 특정 성별(소녀)을 가질 확률이기 때문에 이것은 연합 확률이다.
만약 두 사건이 독립적이라면 이런 상황에서 그들의 연합 확률은 모든 사건 발생 확률의 곱셈이다.
첫 번째 아이가 남자아이(1/2)와 두 번째 아이가 여자아이(1/2)일 확률;각 한계 확률의 곱셈은 바로 연합 확률(1/2*1/2=1/4)이다.
다른 세 가지 연합 확률에 대해서는 이 점을 중복할 수 있다.
조건 확률
지금 우리는 조건 확률에 들어간다. 이것은 사건이 발생하는 확률(즉, 두 번째 아이는 남자아이나 여자아이)이거나 다른 사건이 발생하는 조건(즉, 첫 번째 아이는 남자아이)이다.
이 점에서 확률 진술을 쓰기 시작하는 것은 수학에서의 표현 방식과 유사할 수도 있다.
연합 확률은 발생하는 모든 단독 사건 (그것들이 독립 사건이라고 가정하는 것) 의 곱셈이다.예를 들어 우리는 두 개의 단독 사건이 있을 수 있다.
다음은 해당 조건의 확률입니다.
또는
지금 우리는 본문에서 제시한 두 가지 결과를 해결할 준비가 되어 있다.
Outcome 1: What is the probability of the event "both children are girls" (B) conditional on the event "the older child is a girl" (G)?
우리 그것을 분해합시다.우선, 우리는 두 아이가 모두 여자일 가능성을 알고 싶다.우리는 두 사건의 결과를 얻을 것이다.첫 아이가 여자일 확률(1/2)과 두 번째 아이가 여자일 확률(1/2).그래서 두 아이는 모두 여자아이, 1/2*1/2=1/4
Outcome 2: What is the probability of the event "both children are girls" (B) conditional on the event "at least one of the children is a girl" (L)?
마찬가지로 우리는 두 아이가 모두 여자라는 것부터 시작한다.
적어도 한 아이가 여자일 확률은:
배달 열쇠
두 사건이 서로 독립할 때 그것들의 연합 확률은 모든 사건의 곱셈이다.
도전1:
도전2:
파이썬 코드
우리가 직감을 가지고 종이에서 이 문제를 해결한 이상 우리는 코드로 조건 확률을 표시할 수 있다.
import enum, random
class Kid(enum.Enum):
BOY = 0
GIRL = 1
def random_kid() -> Kid:
return random.choice([Kid.BOY, Kid.GIRL])
both_girls = 0
older_girl = 0
either_girl = 0
random.seed(0)
for _ in range(10000):
younger = random_kid()
older = random_kid()
if older == Kid.GIRL:
older_girl += 1
if older == Kid.GIRL and younger == Kid.GIRL:
both_girls += 1
if older == Kid.GIRL or younger == Kid.GIRL:
either_girl += 1
print("P(both | older):", both_girls / older_girl) # 0.5007089325501317
print("P(both | either):", both_girls / either_girl) # 0.3311897106109325
우리는 코드가 모든 연합 확률을 관찰함으로써 우리의 직감을 증명하는 것을 볼 수 있다either_girl #7,464 / 10,000 ~ roughly 75% or 3/4 probability that there is at least one girl
both_girls #2,472 / 10,000 ~ roughly 25% or 1/4 probability that both children are girls
older_girl #4,937 / 10,000 ~ roughly 50% or 1/2 probability that the first child is a girl
코드 분해
도전1:
또는 더 명확하게 말하자면
또는 더 명확하게 말하자면
우선, 우리는 무작위 함수를 만들어서
random.choice
방법으로 성별을 분배한다. 이렇게 하면 모든 아이(즉, Kid
류의 실례)가 남자아이나 여자아이일 수 있다.이것은 우리가 구상한 첫 번째 가설이다.import enum, random
class Kid(enum.Enum):
BOY = 0
GIRL = 1
def random_kid() -> Kid:
return random.choice([Kid.BOY, Kid.GIRL])
다음에 우리는 연합 분포를 대표하는 변수를 창설한다.한 변수는 두 아이 모두 여자아이both_girls
에 적용되고, 한 변수는 나이가 많은 아이만 여자아이older_girl
, 한 변수는 적어도 한 아이가 여자아이either_girl
에 적용된다.우선, 어떤 아이가 여자가 될 확률은 (1/2)로 우리의 가설과 일치한다. 우리는 다음과 같이 예상한다.
older_girl #4,937 / 10,000 ~ roughly 50% or 1/2 probability that the first child is a girl
회상해 보자. 우리가 모든 아이가 여자아이(1/2)의 곱셈을 계산해 낼 때, 우리는 두 아이가 모두 여자아이(1/4)의 연합 확률을 계산해 낼 수 있다.따라서 다음을 예상합니다.both_girls #2,472 / 10,000 ~ roughly 25% or 1/4 probability that both children are girls
마지막으로 생각해 보자. 만약에 우리가 두 아이 중 적어도 한 명이 여자아이라고 계산하려고 한다면 우리는 두 아이가 모두 남자아이가 떠난 것(1/4+1/4+1/4=3/4) 확률을 배제할 수 있다(위 표 참조).따라서 다음을 예상합니다.either_girl #7,464 / 10,000 ~ roughly 75% or 3/4 probability that there is at least one girl
위에서 본 숫자를 얻기 위해 우리는 10000개의 장면 시뮬레이션을 만들었는데 그 중에서 첫 번째 아이와 두 번째 아이(위 표 참조)는 각 장면에서 무작위로 성별을 분배하고 일부 결과가 정확한지 확인하기 위해 코드를 조건부로 필터했다True
.random.seed(0)
for _ in range(10000):
younger = random_kid()
older = random_kid()
if older == Kid.GIRL:
older_girl += 1
if older == Kid.GIRL and younger == Kid.GIRL:
both_girls += 1
if older == Kid.GIRL or younger == Kid.GIRL:
either_girl += 1
이 시뮬레이션은 결합 확률을 생성한 다음 두 가지 결과에 대한 조건 확률을 찾는 데 사용됩니다.print("P(both | older):", both_girls / older_girl) # 0.5007089325501317
print("P(both | either):", both_girls / either_girl) # 0.3311897106109325
데이터 과학, 머신러닝, R, 파이톤, SQL 등에 관한 더 많은 내용.
Reference
이 문제에 관하여(Python의 조건 확률: 개념, 표 및 코드), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/paulapivat/conditional-probability-with-python-concepts-tables-code-3e4k텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)