본문 바로가기

알고리즘/알고리즘 도감

페이지랭크

지난 글 : [알고리즘/알고리즘 도감] - 소수 판별법

 

페이지랭크(PageRank)는 검색 사이트에서 검색 결과의 순위를 결정하기 위해 사용되는 알고리즘이다. 

 

1

페이지랭크는 페이지 간의 링크 구조로부터 페이지의 가치를 산출하는 알고리즘이다. 산출까지의 구체적인 과정을 보자.

          페이지
       /    |    \
   페이지  페이지  페이지

위 그림에서 세 개의 페이지가 하나의 페이지를 링크하고 있다. 페이지랭크에서는 링크된 수가 많을 수록 중요한 페이지라고 판단한다. 위 표에서는 상위에 있는 페이지가 가장 중요한 페이지라 판단한다. 실제로는 각 페이지의 중요도가 계산에 의해 수치화된다. 기본적인 계산 방법을 보자.

 

2

          페이지
       /    |    \
      1     1     1

링크되지 않은 페이지의 점수를 1이라 하자.

            3
       /    |    \
      1     1     1

링크돼 있는 페이지의 점수는 링크를 하고 있는 페이지의 점수를 합한 것이 된다.

         0.5     0.5
           \     /
              1

단, 링크가 여러 페이지로 나누어지는 경우 링크 점수를 균등하게 배분한다.

 

3

        페이지(4)
            |    \
        페이지(3)  페이지(1)
       /    |    \
 페이지(1)페이지(1)페이지(1)

페이지랭크에서는 링크를 모으고 있는 페이지로부터 링크되는 경우 큰 가치를 지닌다. 최상단에 있는 페이지는 점수가 3인 페이지가 링크하고 있어 큰 점수를 부여받는다. 

 

4

하지만 위 방법에서는 링크가 원형을 이루는 경우 문제가 발생한다.

          2  -  2
          |  \  |
          1    1

각 페이지의 점수를 순서대로 계산하다 보면 무한 루프가 돼 루프 내의 페이지 점수가 계속 증가하게 된다. 

 

5

루프 문제는 '랜덤 서퍼 모덴(Random Surfer Model)'이라는 계산 방법으로 해결할 수 있다. 인터넷 서핑을 하는 사용자가 페이지를 열람하는 흐름을 보자.

1. 우연히 본 TV에서 재미있는 사이트가 소개돼 접속하려 한다.
2. 왼쪽 아래의 페이지에서 출발해 링크를 따라 다른 페이지로 이동한다.
        2(도착)- 2
          |  \  |
        1(출발) 1
3. 몇 개의 페이지를 방문하다 흥미가 떨어져 일단 서핑을 중단한다.
4. 그리고 며칠 후 친구가 추천해준 다른 페이지를 통해 인터넷 서핑을 시작한다.
          2 - 2(도착)
          |  \  |
          1  1(출발)
5. 여기서도 링크를 따라 다른 페이지로 이동하다 재미가 없어지면 서핑을 중단한다. 이처럼 어떤 페이지에서 
	열람을 시작해 몇 페이지 이동한 후 종료하는 동작이 반복된다.
6. 인터넷 공간으로 시점을 옮겨 이 동작을 보면, 인터넷 서핑을 하고 있는 사람은 페이지들을 정해진 횟수 없이
	이동한 후 다른 페이지로 이동하기를 반복하는 것처럼 보인다.
7. 인터넷 서핑을 하는 사람의 동작을 정의하면 확률 1 - a로 지금 있는 페이지의 링크 중 하나를 선택한다.
	확률 a로 다른 페이지로 이동한다.
8. 이동하는 확률인 a를 여기서는 15%라 하자. 이 정의에 따라 페이지 간 전이를 시뮬레이션 한다.
          0  -  0
          |  \  |
          0     0
	각 페이지 상의 숫자는 인터넷 서핑을 한 사람이 페이지를 방문한 수다. 현재는 시뮬레이션 전이므로
    모든 숫자가 0이다.
9. 정의에 따라 시뮬레이션을 하면 페이지당 방문 횟수의 차가 나온다.
          0  -  0
          |  \  |
          1     0
             |
          2  -  1
          |  \  |
          1     0
             |
         332 - 320
          |  \  |
         38    310
         
         페이지의 방문 횟수가 합계 1,000에 도달할 때까지 시뮬레이션을 했더니 위 같은 결과가 됐다.
10. 이것을 비율로 바꾸면 아래처럼 된다.
         33% - 32%
          |  \  |
         4%    31%
         이 값은 '특정 시점에 해당 페이지를 열람할 확률'을 나타낸다 볼 수 있다. 이것을 그대로 페이지의
         점수로 사용하는 것이 랜덤 서퍼 모델이다.

 

6

마지막으로, 페이지랭크의 값이 처음 설명한 링크의 가중치 계산과 일치하는지 확인한다.

           3
        /  |  \
       1   1   1
   =================        
          0.5
        /  |  \
   0.17  0.17  0.17

각 값을 반올림하고 있어 모두 합하면 1이 되지 않지만, 앞서 본 것과 비슷한 비율이란 것을 알 수 있다. 앞서 본 또 다른 링크 구조에서도 점수를 계산해보자.

            4
            | \
            3  1
          / | \
         1  1  1
    ==================
           0.36
             |   \
          0.27    0.09
       /    |   \
     0.09  0.09  0.09

여기서도 앞의 비율과 비슷한 비율이 나온다.

 

참고 서적 :

'알고리즘 > 알고리즘 도감' 카테고리의 다른 글

하노이의 탑  (0) 2022.07.07
소수 판별법  (0) 2022.07.05
유클리드  (0) 2022.07.04
k-means 알고리즘  (0) 2022.07.03
클러스터링  (0) 2022.07.02