더북(TheBook)

다른 모델의 연구 지금까지 살펴본 randomsurfer.pytransition.py는 데이터 주도 프로그램이 어떤 것인지 잘 보여주는 훌륭한 사례이다. 정수 n으로 시작해 페이지 간의 연결을 나타내는 0에서 n-1 사이의 정수 쌍을 담은 tiny.txt 같은 파일을 만들면 데이터 모델을 쉽게 생성할 수 있다. 연습문제에 나오는 다양한 모델에 적용해봐도 좋고 여러분이 연구하고 있는 어떤 것의 모델을 만들어도 좋다. 어떻게 웹 페이지 랭크를 정하는지 궁금했던 적이 있다면 이 계산을 통해 어떤 페이지가 다른 페이지보다 랭크가 높은 이유를 더욱 실감할 수 있다. 어떤 페이지들이 랭크가 높은가? 다른 페이지에 대한 링크가 많은 페이지가 높을까? 아니면 링크가 적은 페이지의 랭크가 높을까? 이번 절 연습문제는 랜덤 서퍼의 행동을 연구할 수 있는 기회를 많이 제공한다. randomsurfer.py가 표준 입력을 사용하므로 대형 데이터 모델을 생성하는 프로그램을 만들고, 생성된 데이터 모델을 randomsurfer.py에 파이프로 연결해 대형 데이터 모델에서 랜덤 서퍼가 어떻게 움직이는지 연구해보길 권한다. 이처럼 융통성이 높으므로 표준 입력과 표준 출력을 많이 사용한다.

웹의 구조를 이해하기 위해 랜덤 서퍼의 행동을 바로 시뮬레이션하고 싶은 생각이 들겠지만, 이 시뮬레이션은 한계가 있다. 다음과 같은 질문을 생각해보라. 이 시뮬레이션 방법으로 웹 페이지와 링크가 수백만 개가 되는 웹 모델에서의 페이지 랭크를 계산할 수 있을까? 얼핏 생각해도 대답은 아니다. 이렇게 페이지가 많으면 변환 행렬조차도 저장할 수 없기 때문이다. 페이지가 백만이면 변환 행렬의 요소 수만 1조이다. 컴퓨터에 이만한 데이터를 저장할 공간이 있나? 수천 페이지 정도 되는 더 작은 모델에는 randomsurfer.py를 이용해 페이지 랭크를 알아낼 수 있을까? 이 질문에 답하려면 여러 시뮬레이션을 아주 많이 시도해 결과를 기록한 후 실험 결과를 분석해야 할 것이다. 과학 문제를 해결할 때는 이렇게 접근하지만(도박꾼의 파산 문제가 대표적인 예이다. 2.4절에서는 또 다른 문제를 다룬다), 원하는 정확도에 도달하려면 실험을 아주 많이 해야 하므로 시간이 아주 오래 걸릴 수 있다. 이번 절에서 사용한 아주 작은 모델에 대해서는 소수점 서너 자리까지 정확한 결과가 나오려면 시뮬레이션을 수백만 번 실행해야 한다. 모델이 더 크면 추정 확률에 이만큼 접근하기 위해 시뮬레이션을 정말 많이 실행해야 한다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.