다항 확률

이항, 삼항 및 다항 확률



이항 분포 게시물에서 출력이 확률 p의 성공 또는 보완 확률(1-p)의 실패인 예를 검토했습니다. 두 개 이상의 결과가 가능한 확률을 알고 싶다면 어떻게 해야 할까요? 예를 들어, 게임 결과는 승리, 패배 또는 무승부가 될 수 있으며 이는 삼항 분포입니다. 여러 결과가 있기 때문에 다항 확률 분포라고 합니다.

따라서 이항확률질량함수(pmf)는 다음과 같습니다.


성공 및 실패(k=2)와 같이 2개의 가능한 출력이 있으므로 x1+x2=n 및 p1+p2 =1이므로 다음과 같이 다시 작성할 수 있습니다.


다항 pmf는 x1+x2+...xk=n 및 p1+p2+..pk =1인 이항 pmf의 일반화입니다.


이항 pmf는 k=2인 다항 pmf의 특수한 경우임을 알 수 있습니다.

다항 대 초기하 확률



Python을 사용하여 실용적인 예를 들어 보겠습니다.

우리는 신제품을 출시하고 있으며 초기 테스트에서 100개의 리뷰 중 제품에 대한 긍정적인 피드백이 ⅔회, 부정적인 2/15회, 나머지는 중립적인 것으로 나타났습니다. 제품 프레젠테이션에 대한 3개의 무작위 리뷰를 데이터베이스에서 추출하는 경우 적어도 하나가 긍정적일 확률은 얼마입니까? 적어도 하나의 부정적인? 정확히 양수 1개, 음수 1개, 중립 1개?

대략적인 솔루션

실질적으로 프리젠테이션을 위해 동일한 리뷰를 두 번 사용하지 않을 것이므로 소위 교체 없는 실험입니다. 따라서 우리는 다항 분포를 사용할 수 없습니다. 리뷰를 꺼내면 나머지 리뷰의 비율이 변경되고 확률은 한 시행에서 다른 시행으로 동일하게 유지되지 않습니다. 그러나 여기서는 100개 중 3개의 리뷰만 추출한다고 가정하고 다음 시도마다 확률을 크게 변경하지 않습니다.

from scipy.stats import multinomial

# exactly 1 positive, 1 negative, and 1 neutral
one = multinomial.pmf([1, 1, 1], n=3, p=[2/3, 2/15, 1/5])

# at least on negative
min_one_neg = \
multinomial.pmf([1, 1, 1], n=3, p=[2/3, 2/15, 1/5]) + \
multinomial.pmf([2, 1, 0], n=3, p=[2/3, 2/15, 1/5]) + \
multinomial.pmf([0, 1, 2], n=3, p=[2/3, 2/15, 1/5]) + \
multinomial.pmf([1, 2, 0], n=3, p=[2/3, 2/15, 1/5]) + \
multinomial.pmf([0, 2, 1], n=3, p=[2/3, 2/15, 1/5]) + \
multinomial.pmf([0, 3, 0], n=3, p=[2/3, 2/15, 1/5])

# at least on positive

min_one_pos = \
multinomial.pmf([1, 1, 1], n=3, p=[2/15, 2/3, 1/5]) + \
multinomial.pmf([2, 1, 0], n=3, p=[2/15, 2/3, 1/5]) + \
multinomial.pmf([0, 1, 2], n=3, p=[2/15, 2/3, 1/5]) + \
multinomial.pmf([1, 2, 0], n=3, p=[2/15, 2/3, 1/5]) + \
multinomial.pmf([0, 2, 1], n=3, p=[2/15, 2/3, 1/5]) + \
multinomial.pmf([0, 3, 0], n=3, p=[2/15, 2/3, 1/5])

one, min_one_neg, min_one_pos


결과:
(0.10666666666666669, 0.34903703703703703, 0.962962962962963)

정확한 솔루션

대체 실험을 수행하는 요인을 설명하기 위해 다변량 초기하 확률 질량 함수를 사용합니다. 복잡한 이름에도 불구하고 매우 직관적인 분포이며 조합을 사용하여 확률을 계산합니다. 경우에 따라 여기에서 더 자세한 내용에 관심이 있는 사람은 개념에 대한 좋은 설명이 있는 링크입니다.

from math import factorial
def comb(n,x):
    # calculates combination of n choose k
    return factorial(n)/(factorial(x)*(factorial(n-x)))

# exactly 1 positive, 1 negative, and 1 neutral
one = (comb(67,1)*comb(13,1)*comb(20,1))/(comb(100,3))

# at least on negative
min_one_neg = \
(comb(67,1)*comb(13,1)*comb(20,1))/(comb(100,3))+\
(comb(67,0)*comb(13,1)*comb(20,2))/(comb(100,3))+\
(comb(67,2)*comb(13,1)*comb(20,0))/(comb(100,3))+\
(comb(67,0)*comb(13,2)*comb(20,1))/(comb(100,3))+\
(comb(67,1)*comb(13,2)*comb(20,0))/(comb(100,3))+\
(comb(67,0)*comb(13,3)*comb(20,0))/(comb(100,3))


# at least on positive
min_one_pos = \
(comb(67,1)*comb(13,1)*comb(20,1))/(comb(100,3))+\
(comb(67,1)*comb(13,2)*comb(20,0))/(comb(100,3))+\
(comb(67,1)*comb(13,0)*comb(20,2))/(comb(100,3))+\
(comb(67,2)*comb(13,0)*comb(20,1))/(comb(100,3))+\
(comb(67,2)*comb(13,1)*comb(20,0))/(comb(100,3))+\
(comb(67,3)*comb(13,0)*comb(20,0))/(comb(100,3))

one, min_one_neg, min_one_pos



결과:
(0.10773036487322202, 0.3444959802102659, 0.9662585034013607)

결론



우리가 예상한 대로 대략적이고 정확한 솔루션 결과는 매우 가깝습니다. 기본 개념을 이해하는 것 외에도 실용적인 데이터 과학 및 기계 학습의 세계에서 어떻게 적용되고 사용되는지가 더 흥미로울 수 있습니다. 다음 몇 개의 게시물에서 응용 프로그램 주제에 대한 나의 발견을 설명하려고 노력할 것입니다.

좋은 웹페이지 즐겨찾기