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) 확률을 한계 확률이라고 한다(표의 가장자리에 어떻게 있는지 주의한다).

우리는 두 가지 성별(동전의 양면과 비슷하기 때문에)이 있기 때문에 우리는 모든 가능한 결과를 직관적으로 찾아낼 수 있다.
  • 첫째 아이(소년), 둘째 아이(소년)
  • 첫째 아이(남자), 둘째 아이(여자)
  • 첫째 아이(소녀), 둘째 아이(소년)
  • 첫째 아이(여자), 둘째 아이(여자)
  • 4가지 가능한 결과가 있기 때문에 4가지 결과 중 어느 하나를 얻을 확률(1/4)이 있다.우리는 이러한 확률을 표의 중간에 써서 결합 확률을 만들 수 있다.

    요컨대 첫 아이가 남자가 아니면 여자일 확률은 50/50으로 간단하다.두 번째 아이가 남자아이나 여자아이일 확률도 50/50이다.한 장의 표에 놓을 때, 이것은 한계 확률이 생긴다.
    이제 우리는'첫 번째 아이는 남자아이, 두 번째 아이는 여자'라고 말할 확률을 알고 싶다.첫 번째 아이가 특정 성별(소년)과 두 번째 아이가 특정 성별(소녀)을 가질 확률이기 때문에 이것은 연합 확률이다.
    만약 두 사건이 독립적이라면 이런 상황에서 그들의 연합 확률은 모든 사건 발생 확률의 곱셈이다.
    첫 번째 아이가 남자아이(1/2)와 두 번째 아이가 여자아이(1/2)일 확률;각 한계 확률의 곱셈은 바로 연합 확률(1/2*1/2=1/4)이다.

    다른 세 가지 연합 확률에 대해서는 이 점을 중복할 수 있다.

    조건 확률


    지금 우리는 조건 확률에 들어간다. 이것은 사건이 발생하는 확률(즉, 두 번째 아이는 남자아이나 여자아이)이거나 다른 사건이 발생하는 조건(즉, 첫 번째 아이는 남자아이)이다.
    이 점에서 확률 진술을 쓰기 시작하는 것은 수학에서의 표현 방식과 유사할 수도 있다.
    연합 확률은 발생하는 모든 단독 사건 (그것들이 독립 사건이라고 가정하는 것) 의 곱셈이다.예를 들어 우리는 두 개의 단독 사건이 있을 수 있다.
  • P(첫 아이=남자아이): 1/2
  • P(둘째 아이=남자아이): 1/2
  • 다음은 그들의 연합 확률이다.
  • P (첫째 아이=남자아이,둘째 아이=남자아이)
  • P (첫째아이=남자아이)*P (둘째아이=남자아이)
  • (1/2 * 1/2 = 1/4)
  • 조건 확률과 연합 확률 사이에는 관계가 있다.
    다음은 해당 조건의 확률입니다.
  • P(둘째 아이=남자아이|첫째 아이=남자아이)
  • P (첫째아이=남자아이,둘째아이=남자아이)/P (첫째아이=남자아이)
  • 이렇게 하는 목적은:
  • (1/4)/(1/2) = 1/2
    또는
  • (1/4) * (2/1) = 1/2
  • 다시 말하면 첫 번째 아이가 남자아이라고 가정하면 두 번째 아이가 남자아이일 확률은 여전히 50%이다.
    지금 우리는 본문에서 제시한 두 가지 결과를 해결할 준비가 되어 있다.

    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
  • P (첫 아이=여자아이,두 번째 아이=여자) = 1/4
  • 둘째, 우리는 이 점이 인정받기를 바란다. "조금 큰 아이는 여자다."
  • P (첫 아이=여자) = 1/2
  • 조건 확률:
  • P (첫째아이=여자아이,둘째아이=여자)/P (첫째아이=여자)
  • (1/4)/(1/2)=(1/4)*(2/1)=(2/4)=1/2 또는 약 50%
  • 이제 두 번째 결과를 분석해 보겠습니다.

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


    마찬가지로 우리는 두 아이가 모두 여자라는 것부터 시작한다.
  • P (첫 아이=여자아이,두 번째 아이=여자) = 1/4
  • 그리고 우리는 최소한 한 명의 아이가 여자라는 조건이 있었다.우리는 연합 확률표를 참고할 것이다.우리는 최소한 한 아이가 여자일 가능성을 계산하려 했을 때, 두 아이가 모두 남자아이일 가능성을 배제했다.이것은 실제로compliment부터 적어도 한 아이가 여자아이이다.나머지 4분의 3의 확률은 조건에 부합된다.

    적어도 한 아이가 여자일 확률은:
  • (1/4) + (1/4) + (1/4) = 3/4
  • 그래서:
  • P(첫 아이=여자아이,두 번째 아이=여자)/P("적어도 한 아이는 여자아이")
  • (1/4)/(3/4) = (1/4)*(4/3) = (4/12) = 1/3 또는 33%
  • 배달 열쇠


    두 사건이 서로 독립할 때 그것들의 연합 확률은 모든 사건의 곱셈이다.
  • P(E,F)=P(E)*P(F)
  • 그것들의 조건 확률은 연합 확률을 조건 확률(즉 P(F)로 나눈 것이다.
  • P(E | F)=P(E,F)/P(F)
  • 그래서 우리의 두 가지 도전 장면에 대해 우리는 다음과 같은 것을 가지고 있다.
    도전1:
  • B = 두 아이 모두 여자일 확률
  • G = 나이 많은 아이가 여자일 확률
  • 이것은 P(B | G) = P(B, G)/P(G)로 나타낼 수 있습니다.
    도전2:
  • B = 두 아이 모두 여자일 확률
  • L = 최소한 한 아이가 여자일 확률
  • 이것은 P(B | L) = P(B, L)/P(L)로 표현할 수 있습니다.

    파이썬 코드


    우리가 직감을 가지고 종이에서 이 문제를 해결한 이상 우리는 코드로 조건 확률을 표시할 수 있다.
    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:
  • P(B | G)=P(B,G)/P(G)
    또는 더 명확하게 말하자면
  • P(두 여자|연상여자)=P(두 여자)/P(연상여자)
  • 도전2:
  • P(B | L)=P(B,L)/P(L)
    또는 더 명확하게 말하자면
  • P(두 여자|한 여자)=P(두 여자)/P(한 여자)
  • 조건 확률은 코드의 조건 문장이다.
    우선, 우리는 무작위 함수를 만들어서 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 등에 관한 더 많은 내용.

    좋은 웹페이지 즐겨찾기