Python과 확률

조건부 확률부터 마르코프까지 - 1) 조건부 확률과 독립 사건

Yoo Sung Hyun 2021. 12. 14. 23:07
728x90

조건부 확률. 쉽고도 어렵다.

명확한 사건과 조건, 그리고 적은 상태와 그의 이행은 사실 손으로도 계산 해봄직 하다.

하지만, 현실은 그렇게 녹록지는 않은 법. 많아지면 손으로 하기는 엄두도 안나거니와, 디버깅은 더더욱이 엄두도 안난다.

 

딥러닝을 함에 있어, 조건부 확률과 마르코프 체인은 기본 소양이어야 함을 알고있었다. 한 2년전에 진지하게 파봤던 적도 있고.

하지만 실제로 실무에 써보니, 조건부 확률이라는게 현업과 고객을 이해시키기에는 아득히 어려운 개념이었다.

(내가 실무 담당자가 아닌 통계학 선생님이 된 기분이랄까...?)

 

겸사겸사 나도 다시 맥락을 좀 옳바르게 잡고, 잊어버리지 않기 위해 기록으로 남기며, 통계와 코딩이 믹스매치가 안되는 많은 실무 담당자들에게 힘이 되길 바란다.

 

독립과 종속에 대한 이야기는, 한번쯤은 들어본 적 있을 것이다.

독립, 브라질과 아르헨티나가 토너먼트에서 완전히 다른 조에 만나서, 결승전 이전에 만날 가능성이 없다.

  => 서로 영향을 미치지 못하니, 독립적이다.

종속, 브라질과 아르헨티나가 토너먼트에서 결승전에 만나게 된다.

  => 서로 영향을 미쳐서 한팀만 올라가게 되니, 종속적이다.

 뭐, 호기심 증진을 위해 미래의 이야기를 먼저 잠시 빌리자면, 축구는 엄밀히 이팀과 저팀의 독립으로만 이루어진 게임은 아니다. (물론 반대편 대진은 독립이다.)

 이를테면, 아르헨티나가 독일, 스페인, 영국 등 무수한 강팀을 계~속 이기고 올라와야 하는데, 브라질은 아주 손쉬운 한국 같은 팀만 만난다면?

 지금 주제를 끝까지 따라 가면, 위와 같은 상황에서의 승리확률을 구하게 될 지도 모르니, 재밌게 나아가보자.

 

토너먼트 대진에서 아르헨티나와의 한판 붙을 확률을 구하려면,

1) 아르헨티나가 독일을 이기고, 스페인을 이기고, 영국을 이기고 결승에 진출할 확률

2) 브라질이 한국을 이기고, 중국을 이기고, 일본을 이기고 결승에 진출할 확률

3) 그 속에서 발생될 독일, 스페인, 영국, 한국, 중국, 일본의 각각의 상태들

이런 복잡한 각종 상태들과 그에 상응하는 확률을 전부 구해야하지만, 이런 확률들을 구하기위해 아주 간단한 자그마한 개념부터 차차 올라가보도록 하자.

 

일단, 아르헨티나가 결승에 가서 브라질이랑 한판 붙으려면, 대진 중에 아르헨티나와 브라질은 만나면 안된다, 즉 독립이어야한다.

당장 우리는 이런 실생활의 상황이 독립인지 바로 분간해낼 수 있는가?

  => 이번 주제의 핵심 Agenda는 파이썬으로 독립과 종속확률을 구해내는 방법을 논한다.

 

독립인지 종속인지 알기 위해서는, 먼저 우리는 조건부 확률에 대해서 알아야 한다.

토너먼트는 조금 모호하고, 외부요인도 많다고 생각되어 체감이 잘 안될 수 있으니, 케이스를 극도로 추려서 주사위가지고 한번 돌려보자.

 

Task 1. 주사위에서 2의 배수가 나올 확률과 3의 배수가 나올 확률은 독립적인가?

Task 2. 주사위에서 짝수가 나올 확률과 소수가 나올 확률은 독립적인가?

 

독립과 종속을 논할때 가장 많이 제시되는 예시이다. 어떻게 생각하는가? 필자는 주사위는 어짜피 따로 던지는데 당연히 독립이지~ 라고 생각했었다...ㅋㅋ

하지만 정답은 NO, Task 2는 종속이다.

독립과 종속 확률은 행위에서 영향을 미치는 것이 아니라, 확률에서 영향을 미치는가를 보아야 한다.

독립? 부분을 잘 보자

독립시행의 조건은 '독립?' 이라고 적힌 곳의 조건 3개를 모두 True라면, 독립시행이라고 볼 수 있다.

Task 2의 경우,

1) 짝수와 소수가 나올 확률 = 짝수가 나올확률 * 소수가 나올확률

2) 짝수가 나올확률 = 소수가 나오고 짝수가 나올확률 or 소수가 나올확률 = 짝수가 나오고 소수가 나올 확률

3) 소수가 나오고 짝수가 나올확률 = 소수가 아니고 짝수가 나올 확률 or 짝수가 나오고 소수가 나올확률 = 짝수가 아니고 소수가 나올 확률

를 만족해야하는데, 주사위는 기껏해야 n/6의 확률이니까, 손쉽게 구해볼 수 있다.

 

이거를 이제 손으로 일일히 구하고 있으면, 그냥 확/통 공부가 되겠는데, 우리는 파이썬으로 배우고 있지 않은가?

Python 소스로 구현하여 Task 1과 Task 2를 확인해보자.

https://github.com/YooSungHyun/probability/blob/main/is_indepen.py

 

GitHub - YooSungHyun/probability: Independent, Markov Property, Chain, HMM and BEYOND!🚀

Independent, Markov Property, Chain, HMM and BEYOND!🚀 - GitHub - YooSungHyun/probability: Independent, Markov Property, Chain, HMM and BEYOND!🚀

github.com

flag 어디서 False가 떨어지는가? 조건부확률 즉 flag 2에서 바로 False가 떨어진다.

주사위는 따로 던지는데?, 소수가 나오는게 짝수에 종속이라고? 이해가 잘 되지 않을 수 있다.

 

하지만 수식을 좀 보면 납득이 가는게, 이것은 '행위'가 아닌 '확률'의 조건이다.

즉, 조건부확률은 '~하고 나서'가 아니라, '~의 전제하에' 라는 의미로 이해하는 것이 더 옳바를 것이다.

짝수가 나오고 나서, 소수가 나올 확률인게 아니라,

짝수가 나올 전제 하에, 소수가 나올 확률이 되기 때문에, 짝수가 안나오게되면 소수도 아무런 의미가 없어진다. (종속)

 

조건부 확률을 바라보는 관점에 대해서 좀 생각이 바뀌었거나, 아니면 다시금 확신이 들었는가?

자, 그렇다면 필자는 참고로, 사다리타기 혹은 제비뽑기등을 할때, 가장 늦게 뽑는 편이다.

왜냐하면, 내가 폭탄을 고를 확률보다, 상대방들이 먼저 폭탄을 고를 확률이 더 높다는 판단이기 때문이다.

이 판단은 과연 확률적으로 옳은 판단인가? 그른 판단인가?

 

위의 소스를 살짝 변형해서, Case별로 확률만 구해 넣을 수 있다면, is_indepen 소스는 어디서든 활용해볼 수 있을 것이다.

조건부 확률은 이후에 나올 베이즈 정리에서부터 계속 활용될 이야기이니, 미리 기본을 잘 잡고 나아가도록 하자!🚀

728x90