본문바로가기
[코딩수학] 코딩으로 '확률' 정복하기
수학동아 2019.05.08 11:38 조회 3503

 

코딩 수학 5번째 시간입니다. 다들 코딩을 이용해 수학 문제를 효율적으로 풀고 계신가요? 간단한 수학 문제는 손으로도 풀고 코딩으로도 풀 수 있지만, 실생활 문제나 어렵고 복잡한 함수가 포함된 수학 문제는 손으로 풀기 어려운 경우가 많아요. 코딩을 활용하면 쉽게 해결할 수 있으니 열심히 익히고 활용해 보자고요! 

코딩 명령어를 익힌 뒤엔 해당 코딩 명령어로 풀 수 있는 수학 문제를 찾아 댓글로 달고 친구들과 토론해 보세요.

 

 

 

 

알파고의 승리 비결 ‘확률’

 

 

이번에 코딩으로 정복해 볼 수학 개념은 ‘확률’입니다. 확률은 어떤 사건이 일어날 가능성을 0과 1사이의 숫자로 나타낸 거예요. 이때 0은 사건이 절대 일어날 수 없음을 나타내고 1은 반드시 일어나는 걸 나타내지요. 처음 확률을 체계적으로 연구한 사람은 16세기 르네상스 시대에 활동한 이탈리아 수학자 지롤라모 카르다노예요. 카르다노는 카드놀이와 체스, 주사위 굴리기 같은 게임에서 이길 확률을 수학적으로 구해 발표했죠.

 

 

지롤라모 카르다노(1501~1576)

 

 

어떤 사건이 일어날 확률을 구하려면 먼저 모든 사건을 집합으로 나타내야 합니다. 예를 들어 동전을 던질 때 일어나는 사건은 {앞면, 뒷면}이며 1부터 6까지 쓰인 정육면체 주사위를 굴릴 때는 {1, 2, 3, 4, 5, 6}으로 나타내지요. 이런 사건들의 집합을 표본 공간이라고 합니다. 어떤 사건이 일어날 확률을 구하려면 해당 사건의 수를 표본 공간의 원소 수로 나누면 됩니다. 예를 들어 주사위를 굴릴 때 짝수가 나올 확률은 \frac{3}{6}=\frac{1}{2}입니다. 표본 공간의 원소 수는 6이고 이 중 짝수는 2, 4, 6 세 개니까요.

 

하지만 짝수가 나올 확률이 \frac{1}{2}이라고 해서 주사위를 2번 굴릴 때 반드시 짝수가 1번 나오는 건 아니에요. 사실 ‘진짜 확률’은 주사위를 직접 굴려야 알 수 있어요. 만약 주사위를 100번 굴려서 짝수가 48번 나왔으면 사건이 일어난 횟수(48)을 총 시행 횟수(100)으로 나누면 됩니다. 그러면 \frac{48}{100}=\frac{12}{25}가 되겠죠?

 

두 번째 방법(경험적 확률)을 이용하면 첫 번째 방법(수학적 확률)과 값이 다르지만, 두 번째 방법에서 시행 횟수가 커질수록 두 확률이 같아진다는 사실이 잘 알려져 있어요. 다만 시행을 많이 하려면 시간과 에너지가 무척 많이 들 텐데요. 시행을 컴퓨터로 대신하는 방법으로 알파고가 사용해 유명해진 ‘몬테카를로 시뮬레이션’이 있습니다.

 

몬테카를로 시뮬레이션은 컴퓨터에게 모의실험을 시켜 표본 공간에서 여러 번, 임의로 시행해서 해당 사건이 일어날 확률을 근사적으로 구하는 방법입니다. 알파고는 바둑돌을 놓을 수 있는 지점을 임의로 골라 모의로 바둑을 진행한 뒤 가장 이길 확률이 높은 지점에 바둑돌을 두었죠.

 

우리도 코딩을 이용해 몬테카를로 시뮬레이션을 이용해 확률을 구해볼까요?

 

 

 

.

.

.

 

 

 

코 딩 타 임

 

 

확률, 몬테카를로 시뮬레이션과 관련된 코딩 명령어를 이용해 모의실험을 해보고 그래프를 그려 수학적 확률과 통계적 확률이 같아지는지 살펴보자. 

☆★ SAGE의 언어를 R로 바꾸세요! ★☆

 

 

0단계 기초 익히기

❶ 표본 공간의 원소 중 하나를 뽑는 명령어는 sample로 모의실험 이름이 Dice면 Dice=sample()라고 입력한다. 

❷ 괄호 안에 c()를 적고, c()의 괄호 안에는 표본 공간의 원소를 적는다. 주사위를 굴릴 때 표본 공간은 c(1, 2, 3, 4, 5, 6)이다. 

❸ 표본 공간 옆에 원하는 시행 횟수와 replace=TRUE를 쉼표로 구분해 적는다. replace=TRUE는 시행할 때마다 표본 공간의 원소를 중복해서 뽑을 수 있다는 뜻이다.

 

 

1단계 따라하기 

①1부터 6까지 써 있는 정육면체 주사위를 10번 굴리는 모의 실험을 해보고 나오는 수를 기록해 보자. 또 [Evaluate]를 누를 때마다 결과가 바뀌는 것을 확인하자.

 

 

동전 던지기를 20번 하는 모의 실험을 해보고 나오는 수를 기록해 보자.  [Evaluate]을 여러 번 눌러 결과가 바뀌는 것을 확인하자.

 

1부터 45까지 적힌 45개의 공 중 1개를 꺼내는 시행을 총 6개 시행하자. [Evaluate]를 여러 번 누르면서 결과가 바뀌는 것을 확인해 보자.

 

 

 

2단계 나아가기

동전 던지기를 5000번 하는 모의 실험을 통해 동전 앞면이 나올 확률을 그래프로 나타내자(몬테카를로 시뮬레이션). [Evaluate]를 누를 때마다 그래프 모양이 바뀌지만,  시행 횟수가 많아질수록 동전 앞면이 나올 확률은 \frac{1}{2}에 수렴한다. 즉, 시행 횟수가 많을수록 수학적 확률과 경험적 확률이 같아진다.

 

 

 

3단계 활용하기

주사위 굴리기를 통해 나오는 수의 평균은 3.5 라는 사실을 시행 횟수가 충분히 큰 모의 실험을 통해 그래프로 나타내 알아보자. 

 

 

 

 

 

 

-끝-

 

 

 

 

  •  
    이재윤_코딩수학 Lv.1 2019.05.08 12:54

    확률과 몬테카를로 시뮬레이션은 AI 인공지능, 주식 예측, 기업에서의 의사결정 등 사회에서 어떻게 쓸 것인지 많이 연구되고 있는 방법이며 앞으로 더욱 중요하게 사용될 전망입니다^^   SAGE의 언어를 R로 바꾼 다음에 실행버튼을 누르세요!

    댓글 작성하기 좋아요1 댓글수1
  •  
    je Lv.1 2019.05.12 15:48

    몬테카를로 시뮬레이션 정말 신기하네요!! 항상 흥미로운 수학 내용을 알려주셔서 감사합니다ㅎㅎ

    댓글 작성하기 좋아요0 댓글수0
  •  
    MMCCM Lv.1 2019.05.12 20:36

    멋집니다 ㅎㅎ 나중에 문제도 풀어봐야겠네요!

    댓글 작성하기 좋아요0 댓글수0
  •  
    디듀우 Lv.6 2019.05.31 23:09

    숫자 카드가 n이 적힌 것이 n개, n-1이 적힌 것이 n-1개, ... 등으로 있을 때 1개 뽑았을 때 뽑히는 카드에 적힌 값의 평균값을 몬테카를로 방법으로 구해보아요!

    댓글 작성하기 좋아요1 댓글수1
    •  
      코딩수학_이재윤 Lv.1 2019.06.04 15:21

      디두유 친구 좋은 통찰력이에요.  디두유 친구가 낸 문제는 수리통계학의 정수라고 할 수 있는 '중심극한 정리(central limit theorem: CLT)와  맥락이 닿아있습니다.   몬테카를로 방법을 통해,  평균의 분포를 구할 수 있고,  n이 점점 커질 수록  정규분포에 가까워 지는 것을 증명(+시각화)할 수 있어요 !   다음번에 통계 관련한 코딩수학에서 기회가 된다면 다뤄보겠습니다.  관련 위키 내용을 링크로 공유하겠습니다 https://ko.wikipedia.org/wiki/중심_극한_정리

      좋아요0
  •  
    손성민 Lv.4 2019.10.05 14:49 비밀댓글
    비밀 댓글이 등록 되었습니다.
    댓글 작성하기 댓글수0
  • 폴리매스 문제는 과학기술진흥기금 및 복권기금의 재원으로 운영되고, 과학기술정보통신부와 한국과학창의재단의 지원을 받아 수행된 성과물로 우리나라의 과학기술 발전과 사회적 가치 증진에 기여하고 있습니다.

  • ☎문의 02-6749-3911