[리뷰] 몬테카를로 시뮬레이션으로 배우는 확률통계 with파이썬



비제이퍼블릭 출판사의 "몬테카를로 시뮬레이션으로 배우는 확률통계 with파이썬(장철원 저)"를 읽고 작성한 리뷰입니다.

표지


몬테카를로 시뮬레이션을 이해하기 위한 기초수학, 확률, 통계 등의 지식을 다룬 책으로, 어려운 개념을 예시, 숫자 대입, Python 구현 등 다각도로 곱씹을 수 있게 구성된 점이 인상적이다.

이 책을 읽게 된 계기는 통계 비전공자로써의 전공 지식에 대한 갈구도 있었지만 동 저자가 펴낸 전작을 읽고 많은 기대감을 느꼈기 때문이다.

저자가 펴낸 “선형대수와 통계학으로 배우는 머신러닝 with 파이썬”, “알고리즘 구현으로 배우는 선형대수 with 파이썬” 이 두권의 책을 모두 읽은 상태였기에 이번 책에 대한 기대감이 꽤 컸다.

전작을 읽으며 저자가 어려운 개념을 쉽게 전달한다는 점, 전공 지식과 현재 AI 기술을 익히는데 필요한 필수 지식 사이에서 적정선을 잘 추려 전달한다는 점 등이 대표적으로 느낀 장점이었는데 이번 도서 역시 그런 점에서 꽤 마음에 들었다.

2016년 알파고를 처음 접하고 충격에 빠져 강화학습 주제를 깊이있게 파고든 적이 있다. 강화학습을 바로 이해하기엔 너무 어려워 정책경사법, Sarsa, Q, DQN, 미니맥스법, 알파베타법, 몬테카를로 트리 탐색 등과 같은 관련 주제를 열심히 배우고 있었는데 뭐하나 쉬운 주제가 없었다.

기본적인 통계지식이 전무한 상태에서 이런 주제들이 이해가지 않는 것은 어찌보면 당연했다. 곧장 주위에 전공자에게 꽤 괜찮은 통계 관련 국내서를 추천받았는데 김우철 교수님이 저술한 “수리통계학”이라는 책이었다.

비록 지금까지도 이 책을 제대로 이해하고 있다고 장담할 수는 없지만 이 책 덕분에 꽤 많은 개념을 정리할 수 있었고 지금도 모르는 개념이 나오면 꽤 많은 도움을 받고 있어 정말 훌륭한 책이라는 사실을 부인할 수 없다.

다만 비전공자가 이런 도서를 처음으로 접하면 그 안에 축약된 기초지식의 징검다리를 쉽게 건너뛸 수 없는 것이 사실이다. 더불어 AI 이해를 목적으로 집필된 책이 아닌지라 당장 필요없는 개념을 익히고자 시간을 낭비하게 되기도 한다. 언젠가는 건너건너 다시 필요로 하게 될 개념들이 가득하지만 독자의 수준에 따라 명저의 가치는 쉽게 떨어지게 마련이다.

어쨌든 이 책을 읽으며 몬테카를로 시뮬레이션을 프로그래머 입장에서 보다 구체적으로 적용하고 쉽게 활용하는 방법을 알았다는 것이 이 책을 통해 얻은 가장 큰 소득이다.

그동안 접했던 대부분의 책들이 몬테카를로 시뮬레이션 과정을 구체적으로 적용하는 방법을 소개하고 있지 않아 개념적으로 혹은 추상적으로만 접하고 있었고 모든 주제가 그렇듯 직접 한땀한땀 손으로 구현하거나 실험하지 않고는 얻을 수 없는 경험에서 우러나오는 살아있는 지식을 익히기에 좋은 책이라는 생각이 들었다. 몬테카를로시뮬레이션

비전공자가 경험하지 않은 길을 쉽게 단정하기에 무리가 있겠지만 아마도 대학원 과정을 거치며 프로젝트에 몬테카를로 시뮬레이션을 직접 적용해 본 경험을 가진 자만이 이해할 수 있는 산 경험의 지식이 책에 담겨있다는 생각이 들었다.

학사 출신의 연구자들에게는 이미 먼길을 실무의 길로 뛰어들어 학문의 길로 가기엔 꽤 늦어버린 독자들에게는 이런 경험이 녹아있는 책이 매우 소중하다.

이 책이 담고 있는 커리큘럼은 결국 몬테카를로 시뮬레이션이라는 종착역을 향한다. 몬테카를로 시뮬레이션을 제대로 이해하기 위해 필요한 기초수학, 확률, 통계 등의 내용을 담고 있는 셈이다.

기초수학부터 진행하기에 선수 지식이 거의 필요하지 않다는 점과 익혔어도 기억이 가물거리는 독자에게는 꽤 자신있게 책을 학습할 수 있는 용기를 준다. 그리고 저자 특유의 쉬운 전달력이 자신감을 배가시켜 준다.

고등학교 수학시간에 무리수 e를 배울 때 잠깐 졸았던 기억이 있다. 졸음이 깨고 나자 e가 도대체 뭔지 모르는 상태에서 이어지는 뒷 과정은 헬 그 자체였다. 물론 쉬운 개념인지라 곧 다시 익힐 수 있었지만 수학의 기초가 얼마나 중요한지 깨달은 사건이었는데 이 책은 기초 수학을 매우 쉽게 전달하고 있어 당시 기억이 어렴풋이 떠올랐다.

e는 무리수 e라고도 하고 책에서 설명하는 대로 자연상수, 오일러 상수, 네이피어 상수 등 이름도 여러가지로 표현될 정도로 중요한 수인데 0부터 무한대에 이르는 팩토리얼 값을 분모로 하여 모두 더한 수 이다.

이 책의 독특한 장점 중 하나는 하나의 개념을 세번 정도 설명해 준다는 점이다. 먼저 우리말로 설명해주고, 다음으로 수식을 설명하며, 마지막으로 Python 언어로 구현해보는 단계를 따른다.

보다 세부적으로 들어가면 우리말로 설명할 때는 예시를 많이 들고 혼동 되는 개념을 잘 정리해준다. 어느 학생이나 배울 때 헷갈려하는 부분을 명확히 짚어준다. 아래 배반과 독립에 대한 개념이 대표적인 예이다. 배반과독립

수식을 설명할 때는 직접 숫자를 넣어준다. 수포자들 대부분은 기호를 무서워한다. 기호와 사칙연산 사이에는 사실 거대한 축약이 숨어있는데 되려 수학을 좋아하는 이들은 기호를 소중히 여기는 데 반해 그렇지 않은 사람들은 기호만큼 두려운 것이 없다.

그 축약의 공포를 극복하는 방법은 우리가 잘 아는 자연수 등을 직접 대입해보면서 풀어헤쳐 보는 것이라 생각하는데 아례 예시처럼 자연 상수도 직접 숫자를 넣어 풀어 헤쳐보면 별 것 아닌 개념임을 알 수 있다. 자연상수

마지막으로 Python 언어로 구현해보며 한 번 더 의미를 되새길 수 있다. 위의 그림처럼 직접 언어로 구현해보면 기호가 더 쉽게 느껴진다.

결국 팩토리얼을 분모 값으로 갖는 숫자들의 집합이라는 사실과 시그마 ∑ 기호는 그냥 숫자 전부를 열거하기 힘드니 for문과 동일한 것이구나 등 Python 언어로 또 다른 시각으로 개념을 이해하다보면 다차원적으로 깊이있는 이해가 가능해진다.

Python 구현 방식에는 두가지 방법이 소개된다. 하나는 직접 밑바닥부터 구현하는 방식, 다른 하나는 누군가 만든 라이브러리를 활용하여 구현해 보는 방식이다.

결국 실무에서는 깔끔하고 생산성 좋은 후자의 방식이 활용되지만 후자의 방식은 개념을 이해하는 데는 도움이 되지 않는다. 복잡한 개념이 블랙박스처럼 가려져 있어 원하는 기능과 목적만을 달성할 뿐 내부 개념을 가리고 있기 때문이다.

아래 카이제곱 분포를 직접 생성하는 과정이 그렇다. 복잡한 수식의 일부 수식에 해당하는 수열, 감마함수 등을 직접 구현해보면 앞서 언급한 또 하나의 새로운 관점과 시각으로 카이제곱 분포를 이해할 수 있다. 카이제곱

이는 사이킷 런 라이브러리 하나면 불과 알파벳 몇 단어로 쉽게 구현할 수 있는 개념이지만 이런 밑바닥의 구현은 해당 개념을 확실히 이해하는데는 코드량과 반비례하게 오히려 지름길이 된다.

통계 전공 지식 측면에서 눈에 띄는 부분은 두 부분이었다. 하나는 확률과정을 깊이있게 다루고 있다는 점과 주요 확률 분포를 하나씩 상세하게 구현해 본다는 점이다.

전자의 경우 확률 변수에 시간이라는 개념이 더해져 전이 확률, 마르코프 체인으로 이어지는 과정에 대한 개념을 확실히 이해할 수 있게 해준다. 이는 곧 이 책의 목적인 몬테카를로 시뮬레이션을 익히는데 중요한 거름이 된다. 마르코프체인

후자 역시 마찬가지다. 보통 확률 분포는 너무 종류가 많은데 반해 실생활에 적용될 수 있는 자명한 현상에는 제약이 있어 학습 효율이 떨어지는 파트이기에 생략하는 책들이 많다.

하지만 나는 개인적으로 확률 분포는 시간이 걸리더라도 밑바닥까지 한 번 쯤 풀어 헤쳐봐야 하는 중요한 개념이라 생각한다. 논문을 읽을 때마다 분포 수식이 등장할 때마다 개념이 탄탄하지 못해 자신감이 떨어지고 확실한 이해에 방해를 받은 적이 한 두번이 아니기 때문이다.

책의 말미에 예시로 게임이나 주가에 확률을 적용해보는 예시에서도 확률 분포에 대한 이해가 얼마나 중요한지를 여실히 느낄 수 있다. 주가 예측 예제의 경우에서도 브라운 운동을 적용해보며 확률분포를 어떻게 적용하는지 구체적인 예시가 잘 녹아있다. 주가예측

물론 다소 아쉬운 점도 있다. 방대한 데이터의 위력으로 수학적으로 깔끔하게 떨어지는 엄밀함의 위력은 예전같지 못하지만 그래도 확률 통계 책이라면 검정에 대한 부분이나 P-value 정도의 개념은 한번 쯤 짚고 넘어갔으면 하는 바램이 있다.

더불어 애써 배운 몬테카를로시뮬레이션이 강화학습 등 후행적으로 어떤 기술로 이어질 수 있는지 앞으로 어떤 것을 배우면 더 유익할지에 대한 구체적인 언급이 있다면 독자들에게 더욱 도움이 될 수 있을 듯 하다.

하지만 이 부분은 저자가 집필한 다른 도서 “선형대수와 통계학으로 배우는 머신러닝 with 파이썬”, “알고리즘 구현으로 배우는 선형대수 with 파이썬” 등을 읽다보면 자연스레 연계될 지식이기에 큰 문제는 아니다.

정리하자면 이 책은 몬테카를로 시뮬레이션을 이해하기 위한 기초수학, 확률, 통계 등의 지식을 다룬 책이다. 그 과정에서 저자 특유의 쉬운 전달력과 다차원적인 시선으로 개념을 이해하는데 도움을 주는 저자만의 장치가 인상적이다.

실무와 학문 사이에 적정선을 유지한 것도 특징이기에 난해하고 추상적인 전공서적 대신 난이도와 깊이 두마리 토끼를 효율적으로 잡고 싶은 독자들에게 추천하고 싶다.







© 2019.04. by theorydb

Powered by theorydb