고유벡터 중심성과 페이지랭크
SNA 이론 · 단계별 학습 차례

단원 2-4Eigenvector Centrality and PageRank

고유벡터 중심성과 페이지랭크

SNA 이론 · 단계별 학습STAGED+ 스터디

1. 오늘의 질문 (Today's Question)

지금까지 세 지표는 모두 개수를 셌다.

단원지표무엇을 세었나
2-1연결정도내 친구가 몇 명인가
2-2근접모두까지 걸음 수가 몇 걸음인가
2-3매개최단경로가 나를 몇 번 지나는가

세 지표 모두 친구를 한 명 한 명 똑같이 취급한다. S1의 친구 두 명(S2, S3)과 S4의 친구 두 명(S3, S5)은 연결정도로 보면 똑같이 "2명"이다.

그런데 교실에서 우리가 실제로 하는 판단은 다르다. "쟤는 친구가 둘밖에 없지만, 그 둘이 반에서 제일 영향력 있는 애들이야." 이 문장을 숫자로 만들려면 질문을 바꿔야 한다.

오늘의 질문. 친구의 가 아니라 친구의 중요도를 더하면 어떻게 되는가? 그런데 "친구의 중요도"를 알려면 그 친구의 친구의 중요도를 알아야 하고 … 이 순환을 어떻게 끊는가?

오늘 배울 두 지표는 이 순환 문제를 서로 다른 방식으로 푼다. 그리고 같은 학생 S4에게 정반대 판정을 내린다.

7명 무방향 네트워크
단원 1-8부터 계속 쓰는 7명 무방향 네트워크 UU. 간선 8개: S1–S2, S1–S3, S2–S3, S3–S4, S4–S5, S5–S6, S5–S7, S6–S7

2. 순환 정의를 방정식으로 (Turning a Circular Definition into an Equation)

2-1. 말로 쓴 정의 (Definition in Words)

"중요한 친구를 둔 학생이 중요하다." 이 문장을 그대로 식으로 옮기면

xi    j=1nA[i,j]xj x_i \;\propto\; \sum_{j=1}^{n} A[i,j]\, x_j

오른쪽은 "ii의 이웃들의 점수를 전부 더한 값"이다. A[i,j]A[i,j]가 0이면 그 항은 사라지므로, 결국 이웃의 점수만 더해진다. \propto(비례)를 등호로 바꾸려면 비례상수가 필요하다. 그 상수를 λ\lambda라 쓰면

λxi  =  j=1nA[i,j]xjxi  =  1λj=1nA[i,j]xj \lambda\, x_i \;=\; \sum_{j=1}^{n} A[i,j]\, x_j \qquad\text{즉}\qquad x_i \;=\; \frac{1}{\lambda}\sum_{j=1}^{n} A[i,j]\, x_j

이 식을 nn개 전부 모아 한 줄로 쓰면 고윳값 방정식이 된다.

Ax  =  λx A\mathbf{x} \;=\; \lambda \mathbf{x}

순환이 끊긴 지점. "xx를 알아야 xx를 안다"는 순환이, "Ax=λxA\mathbf{x} = \lambda\mathbf{x}를 만족하는 x\mathbf{x}찾아라"는 풀 수 있는 문제로 바뀌었다. 순환 정의는 모순이 아니라 방정식이었던 것이다.

2-2. 식의 각 부분이 하는 일 (What Each Part of the Equation Does)

부분읽는 법왜 필요한가
A[i,j]A[i,j]iijj가 친구면 1, 아니면 0친구가 아닌 학생의 점수는 0을 곱해 자동으로 빠진다
xjx_j친구 jj의 점수여기가 핵심 — 1이 아니라 xjx_j를 더한다. xjx_j 자리에 전부 1을 넣으면 그냥 연결정도가 된다
j\sum_j이웃 전부에 대해 합친구가 많을수록 유리한 성질은 그대로 남는다
1/λ1/\lambda전체를 줄이는 비율이게 없으면 더할수록 점수가 무한히 커진다. λ\lambda점수의 인플레이션율

2-3. λ\lambdax\mathbf{x}는 여러 개다 — 어느 것을 쓰는가 (Many Eigenpairs: Which One to Use)

7×77 \times 7 행렬은 고윳값을 7개 가진다. 우리 AA의 7개는 (§13에서 검증)

2.342923,2,0.470683,1,1,1,1.813607 2.342923,\quad 2,\quad 0.470683,\quad -1,\quad -1,\quad -1,\quad -1.813607

이 중 가장 큰 것 λ1=2.342923\lambda_1 = 2.342923을 쓴다. 이유는 두 가지다.

이유내용
부호중심성 점수는 음수이면 해석이 불가능하다("영향력이 −0.3"?). 페론–프로베니우스 정리(Perron–Frobenius): 연결된 네트워크에서 가장 큰 고윳값에 딸린 고유벡터만 성분이 전부 양수다. 나머지 6개는 반드시 음수 성분을 포함한다
유일성같은 정리에 의해 λ1\lambda_1중복되지 않는다. 위 목록에서 1-1은 3개나 겹치지만 2.3429232.342923은 하나뿐이다 → 답이 하나로 정해진다

연결되어 있어야 한다. 페론–프로베니우스 정리는 네트워크가 연결되어 있을 때 성립한다. 단원 2-2 §9의 고립 학생 S8이 있으면 여기서도 문제가 생긴다 — 다만 근접 중심성처럼 전원 0이 되는 것이 아니라, 큰 조각만 점수를 받고 작은 조각은 전부 0이 되는 방식으로 망가진다. 역시 components()를 먼저 확인해야 한다.

2-4. 크기 맞추기 — 정규화 (Normalization)

Ax=λxA\mathbf{x} = \lambda\mathbf{x}의 해는 상수배만큼 자유롭다. x\mathbf{x}가 답이면 2x2\mathbf{x}도, 100x100\mathbf{x}도 답이다. 그래서 크기를 정하는 약속이 필요한데, 패키지마다 약속이 다르다(§13의 함정). 이 노트는 igraph 방식인 최댓값 = 1을 쓴다.

CE(i)  =  ximaxkxk0    CE(i)    1 C_E(i) \;=\; \frac{x_i}{\max_k x_k} \qquad\Longrightarrow\qquad 0 \;\le\; C_E(i) \;\le\; 1

3. 손 계산 ① 거듭제곱법 (Hand Calculation: Power Iteration)

고윳값 방정식을 푸는 가장 손쉬운 방법은 거듭제곱법이다. 아무 벡터에서 출발해 AA를 계속 곱하면 저절로 답에 가까워진다. 출발점은 "모두 똑같이 1점"으로 잡는다.

x(0)=(1,1,1,1,1,1,1),x(k)=Ax(k1) \mathbf{x}^{(0)} = (1,1,1,1,1,1,1), \qquad \mathbf{x}^{(k)} = A\,\mathbf{x}^{(k-1)}

3-1. 첫 걸음 x(1)=Ax(0)\mathbf{x}^{(1)} = A\mathbf{x}^{(0)} — 0인 항까지 전부 (First Step, Every Term Included)

x(1)[1]=j=17A[1,j]xj(0)\mathbf{x}^{(1)}[1] = \sum_{j=1}^{7} A[1,j]\cdot x^{(0)}_j. AA의 1행은 (0,1,1,0,0,0,0)(0,1,1,0,0,0,0)이다.

jj1234567
A[1,j]A[1,j]0110000
xj(0)x^{(0)}_j1111111
01=00\cdot1=011=11\cdot1=111=11\cdot1=101=00\cdot1=001=00\cdot1=001=00\cdot1=001=00\cdot1=02
x1(1)=0+1+1+0+0+0+0=2 x^{(1)}_1 = 0+1+1+0+0+0+0 = 2

일곱 명 모두 같은 방식으로 계산하면, x(0)x^{(0)}이 전부 1이므로 합은 1의 개수행합이 된다.

x(1)  =  (2,2,3,2,3,2,2) \mathbf{x}^{(1)} \;=\; (2,\,2,\,3,\,2,\,3,\,2,\,2)

첫 걸음은 연결정도다. AA에 모두-1 벡터를 곱하면 행합, 곧 연결정도(단원 1-4)다. 즉 거듭제곱법은 연결정도에서 출발해 점점 고쳐 나가는 과정이다. 연결정도는 고유벡터 중심성의 0번째 근사인 셈이다.

3-2. 둘째 걸음 x(2)=Ax(1)\mathbf{x}^{(2)} = A\mathbf{x}^{(1)} — 세 명 전개 (Second Step: Three Students Expanded)

이제 x(1)x^{(1)}이 전부 1이 아니므로 친구가 누구냐가 처음으로 반영된다.

iiA[i,]A[i,\cdot]전개 (0인 항 포함)xi(2)x^{(2)}_i왜 그 값인가
S1(0,1,1,0,0,0,0)(0,1,1,0,0,0,0)02+12+13+02+03+02+020\cdot2 + 1\cdot2 + 1\cdot3 + 0\cdot2 + 0\cdot3 + 0\cdot2 + 0\cdot25친구 S2(2점) + S3(3점)
S3(1,1,0,1,0,0,0)(1,1,0,1,0,0,0)12+12+03+12+03+02+021\cdot2 + 1\cdot2 + 0\cdot3 + 1\cdot2 + 0\cdot3 + 0\cdot2 + 0\cdot26친구 셋이 모두 2점 — 수는 많지만 질이 낮다
S4(0,0,1,0,1,0,0)(0,0,1,0,1,0,0)02+02+13+02+13+02+020\cdot2 + 0\cdot2 + 1\cdot3 + 0\cdot2 + 1\cdot3 + 0\cdot2 + 0\cdot26친구는 둘뿐인데 둘 다 3점 — S3를 따라잡았다
x(2)  =  (5,5,6,6,6,5,5) \mathbf{x}^{(2)} \;=\; (5,\,5,\,6,\,6,\,6,\,5,\,5)

단 두 걸음 만에 S4가 S3를 따라잡았다. 연결정도로는 S4(2)가 S3(3)보다 낮았지만, x(2)\mathbf{x}^{(2)}에서는 둘 다 6점이다. 친구 의 열세를 친구 로 메운 것이다. 계속 곱하면 어떻게 되는지 보자.

3-3. 열 걸음 전부 (All Ten Iterations)

각 줄 오른쪽은 최댓값으로 나눈 값(=그 시점의 CEC_E 근사)이다.

kkS1S2S3S4S5S6S7합의 비S4 (최대=1)S1 (최대=1)
0111111171.00001.0000
12232322162.28570.66670.6667
25566655382.37501.00000.8333
311111612161111882.31580.75000.6875
4272734323427272082.36360.94120.7941
5616186688661614842.32690.79070.7093
614714719017219014714711402.35540.90530.7737
733733746638046633733726602.33330.81550.7232
88038031054932105480380362522.35040.88430.7619
91857185725382108253818571857146122.33720.83060.7317
104395439558225076582243954395343002.34740.87190.7549
정확한 극한값 (§4)2.3429230.8536350.744644

두 가지가 동시에 수렴한다.

수렴하는 것무엇으로의미
비율 벡터(0.7446,0.7446,1,0.8536,1,0.7446,0.7446)(0.7446,\,0.7446,\,1,\,0.8536,\,1,\,0.7446,\,0.7446)고유벡터 x\mathbf{x}중심성 점수
합의 비 (k)(k1)\dfrac{\text{합}^{(k)}}{\text{합}^{(k-1)}}2.3429232.342923고윳값 λ1\lambda_1점수의 인플레이션율

3-4. 왜 위아래로 흔들리며 수렴하는가 (Why It Oscillates as It Converges)

S4 열을 보면 1.00.750.94120.79070.90531.0 \to 0.75 \to 0.9412 \to 0.7907 \to 0.9053 \to \cdots 로 정답 0.85360.8536번갈아 넘나든다. 곧장 다가가지 않는다.

이유는 다른 고윳값들에 있다. 출발 벡터 (1,1,,1)(1,1,\dots,1)을 7개 고유벡터로 분해하면, 계수가 0이 아닌 것은 셋뿐이다(§13에서 검증).

λ1=2.342923,λ=0.470683,λ=1.813607 \lambda_1 = 2.342923, \qquad \lambda = 0.470683, \qquad \lambda = -1.813607

λ=2\lambda = 2λ=1\lambda = -1짜리는 계수가 정확히 0이다 — 이 네트워크의 좌우 대칭(§4) 때문에 모두-1 벡터와 직교하기 때문이다. 남은 셋 중 λ1\lambda_1 다음으로 큰 것이 음수 1.813607-1.813607이라서 오차의 부호가 매 걸음 뒤집힌다. 오차가 줄어드는 속도는

1.8136072.342923  =  0.7741 \frac{|-1.813607|}{2.342923} \;=\; 0.7741

즉 한 걸음마다 오차가 약 77%로만 줄어든다. 10걸음을 가도 0.87190.8719로 아직 완전히 도착하지 못한 이유다. 손으로 정확한 값을 얻으려면 §4처럼 방정식을 직접 풀어야 한다.

4. 손 계산 ② 대칭성으로 정확한 답 구하기 (Exact Solution via Symmetry)

4-1. 이 네트워크는 좌우 대칭이다 (The Network Is Left-Right Symmetric)

UU를 자세히 보면 왼쪽 삼각형 {S1,S2,S3}오른쪽 삼각형 {S5,S6,S7}이 거울상이고, S4가 한가운데 있다. 다음과 같이 이름을 바꿔도 네트워크가 그대로다.

S1S6,S2S7,S3S5,S4S4 \text{S1}\leftrightarrow\text{S6},\qquad \text{S2}\leftrightarrow\text{S7},\qquad \text{S3}\leftrightarrow\text{S5},\qquad \text{S4}\leftrightarrow\text{S4}

게다가 왼쪽 삼각형 안에서 S1과 S2도 서로 바꿔도 똑같다(둘 다 S3와 서로에게만 연결). 답이 유일하므로(§2-3), 점수도 이 대칭을 따라야 한다. 미지수가 7개에서 3개로 줄어든다.

x1=x2=x6=x7=a,x3=x5=b,x4=c x_1 = x_2 = x_6 = x_7 = a, \qquad x_3 = x_5 = b, \qquad x_4 = c

4-2. 세 개의 방정식 — 0인 항까지 전부 (Three Equations, Every Term Included)

Ax=λxA\mathbf{x} = \lambda\mathbf{x}의 1행, 3행, 4행만 쓰면 충분하다(나머지는 대칭으로 같은 식).

jj=1234567=λxi=\lambda x_i
A[1,j]xjA[1,j]\,x_j0a0\cdot a1a1\cdot a1b1\cdot b0c0\cdot c0b0\cdot b0a0\cdot a0a0\cdot aa+ba+bλa\lambda a
A[3,j]xjA[3,j]\,x_j1a1\cdot a1a1\cdot a0b0\cdot b1c1\cdot c0b0\cdot b0a0\cdot a0a0\cdot a2a+c2a+cλb\lambda b
A[4,j]xjA[4,j]\,x_j0a0\cdot a0a0\cdot a1b1\cdot b0c0\cdot c1b1\cdot b0a0\cdot a0a0\cdot a2b2bλc\lambda c
(i)    a+b=λa(ii)    2a+c=λb(iii)    2b=λc \text{(i)}\;\; a + b = \lambda a \qquad \text{(ii)}\;\; 2a + c = \lambda b \qquad \text{(iii)}\;\; 2b = \lambda c

4-3. 세 식을 하나로 — λ\lambda의 3차방정식 (Combining Into a Cubic)

단계어디서 왔나
1b=(λ1)ab = (\lambda - 1)\,a(i)에서 aa를 오른쪽으로 넘김
2c=2bλ=2(λ1)aλc = \dfrac{2b}{\lambda} = \dfrac{2(\lambda-1)a}{\lambda}(iii)에 1단계 대입
32a+2(λ1)aλ=λ(λ1)a2a + \dfrac{2(\lambda-1)a}{\lambda} = \lambda(\lambda-1)a(ii)에 1·2단계 대입
42+2(λ1)λ=λ(λ1)2 + \dfrac{2(\lambda-1)}{\lambda} = \lambda(\lambda-1)양변을 aa로 나눔 (a0a \neq 0)
52λ+2λ2=λ3λ22\lambda + 2\lambda - 2 = \lambda^3 - \lambda^2양변에 λ\lambda를 곱하고 전개
6λ3λ24λ+2=0\lambda^3 - \lambda^2 - 4\lambda + 2 = 0정리

이 3차방정식의 세 근이 바로 계수가 0이 아니었던 그 세 고윳값이다(§3-4).

λ=2.3429231,λ=0.4706834,λ=1.8136065 \lambda = 2.3429231, \qquad \lambda = 0.4706834, \qquad \lambda = -1.8136065

확인. λ1=2.3429231\lambda_1 = 2.3429231을 넣으면 2.342923132.342923124(2.3429231)+2=8.0×101502.3429231^3 - 2.3429231^2 - 4(2.3429231) + 2 = 8.0 \times 10^{-15} \approx 0 ✓ (§13에서 polyroot()로 검증)

4-4. 점수 세 개 — 정확한 꼴 (Three Scores in Exact Form)

b=1b = 1로 두면(최댓값을 1로 맞추는 것과 같다) 1·2단계에서 곧바로

a=1λ11=11.3429231=0.7446443,c=2λ1=22.3429231=0.8536345 a = \frac{1}{\lambda_1 - 1} = \frac{1}{1.3429231} = 0.7446443, \qquad c = \frac{2}{\lambda_1} = \frac{2}{2.3429231} = 0.8536345
학생기호정확한 꼴순위
S3, S5bb111.000000공동 1위
S4cc2/λ12/\lambda_10.8536353위
S1, S2, S6, S7aa1/(λ11)1/(\lambda_1-1)0.744644공동 4위

§3-3 표의 극한값과 정확히 일치한다. 손으로 푼 3차방정식이 거듭제곱법 10걸음보다 정확하다.

5. 값 읽기 — 연결정도가 같은데 점수가 다르다 (Reading the Values)

5-1. 이웃합 표 — 정의를 그대로 확인 (Neighbor-Sum Table: Checking the Definition)

정의는 "이웃 점수의 합을 λ\lambda로 나눈 것"이었다. 일곱 명 전부 확인해 보자.

학생연결정도이웃이웃 점수의 합÷λ1\div\,\lambda_1CEC_E
S12S2(0.7446), S3(1.0000)1.7446441.744644/2.3429231.744644/2.3429230.744644
S22S1(0.7446), S3(1.0000)1.7446441.744644/2.3429231.744644/2.3429230.744644
S33S1(0.7446), S2(0.7446), S4(0.8536)2.3429232.342923/2.3429232.342923/2.3429231.000000
S42S3(1.0000), S5(1.0000)2.0000002.000000/2.3429232.000000/2.3429230.853635
S53S4(0.8536), S6(0.7446), S7(0.7446)2.3429232.342923/2.3429232.342923/2.3429231.000000
S62S5(1.0000), S7(0.7446)1.7446441.744644/2.3429231.744644/2.3429230.744644
S72S5(1.0000), S6(0.7446)1.7446441.744644/2.3429231.744644/2.3429230.744644

5-2. 오늘의 핵심 비교 — S4 대 S1 (The Key Comparison: S4 vs S1)

둘 다 연결정도 2다. 그런데 점수가 다르다.

친구 A친구 B÷λ1\div \lambda_1CEC_E
S4S3 = 1.0000S5 = 1.00002.0000÷2.342923\div 2.3429230.853635
S1S3 = 1.0000S2 = 0.74461.7446÷2.342923\div 2.3429230.744644
차이0.25540.1090

S4는 연결정도 2로 얻을 수 있는 최고점을 받았다. 이 네트워크에서 한 학생이 가질 수 있는 최고 점수는 1.0인데, S4의 친구는 둘 다 1.0이다 — 이보다 좋은 친구 조합은 존재하지 않는다. 반면 S1의 친구 중 하나(S2)는 0.7446짜리라 합이 모자란다. 친구 수는 같지만 친구의 질이 다르다 — 이것이 고유벡터 중심성이 새로 잡아낸 정보다.

5-3. 지금까지 네 지표의 판정 (What the Four Measures Say So Far)

학생CDC_D순위CCC_C순위CBC_B순위CEC_E순위
S10.333330.400040.000040.74464
S20.333330.400040.000040.74464
S30.500010.545520.533321.00001
S40.333330.600010.600010.85363
S50.500010.545520.533321.00001
S60.333330.400040.000040.74464
S70.333330.400040.000040.74464

고유벡터 중심성은 연결정도와 순위가 같다(S3·S5가 1위). 하지만 동점을 깨뜨렸다 — 연결정도가 2로 똑같던 다섯 명 중 S4만 따로 3위로 떼어 놓았다. 반대로 S4를 1위로 올렸던 근접·매개와는 갈라진다.

6. λ1\lambda_1은 무엇을 재는가 (What the Leading Eigenvalue Measures)

6-1. 평균 연결정도와 최대 연결정도 사이 (Between Mean and Maximum Degree)

λ1\lambda_1은 아무 숫자가 아니다. 항상 다음 범위에 갇힌다.

dˉ    λ1    dmax167=2.2857    2.342923    3 \bar{d} \;\le\; \lambda_1 \;\le\; d_{\max} \qquad\Longrightarrow\qquad \frac{16}{7} = 2.2857 \;\le\; 2.342923 \;\le\; 3

그래서 λ1\lambda_1"실효 평균 연결정도"로 읽을 수 있다. 평균은 2.29지만, 연결이 많은 학생끼리 서로 붙어 있으면 λ1\lambda_1이 평균보다 위로 올라간다. 우리 네트워크는 2.343으로 평균보다 조금 높다 — 삼각형 두 개 때문이다.

6-2. λ1\lambda_1은 걷기 개수의 증가율이다 — 단원 1-2·1-3과 만나는 지점 (The Growth Rate of Walk Counts)

§3-3 표의 "합" 열을 다시 보자: 7,16,38,88,208,484,7,\,16,\,38,\,88,\,208,\,484,\dots 그런데 x(k)\mathbf{x}^{(k)}의 성분은 정의상

xi(k)  =  j=1n(Ak)[i,j](k)  =  ij(Ak)[i,j] x^{(k)}_i \;=\; \sum_{j=1}^{n} (A^k)[i,j] \qquad\Longrightarrow\qquad \text{합}^{(k)} \;=\; \sum_{i}\sum_{j} (A^k)[i,j]

길이 kk짜리 걷기(walk)의 총 개수다. 단원 1-2에서 A2A^2, 단원 1-3에서 A3A^3로 셌던 바로 그 수다. R로 Ak\sum A^k를 직접 계산하면 §3-3의 합 열과 완전히 같다(§13에서 검증).

kk123456789
i,j(Ak)[i,j]\sum_{i,j}(A^k)[i,j]16388820848411402660625214612
앞 항과의 비2.28572.37502.31582.36362.32692.35542.33332.35042.3372

세 가지 해석이 한 점에서 만난다.
λ1\lambda_1 = 고윳값 방정식의 비례상수
λ1\lambda_1 = 걷기 개수가 한 걸음마다 늘어나는 배율 (2.34\approx 2.34배)
CE(i)C_E(i) = 아주 긴 걷기 중 ii에서 출발하는 것의 몫
소문이 한 다리 건널 때마다 경로 수가 2.34배로 늘어나고, 그중 어느 학생에게서 출발한 몫이 큰지가 고유벡터 중심성이다.

7. 고유벡터 중심성이 무너지는 곳 (Where Eigenvector Centrality Breaks)

지금까지는 무방향 네트워크였다. 방향이 생기면 상황이 완전히 달라진다. 4명짜리 "정보 전달" 네트워크를 보자. 화살표는 "내가 그 애에게 알려 준다"이다.

T1T2,T1T3,T2T3,T3T4 T_1 \to T_2, \qquad T_1 \to T_3, \qquad T_2 \to T_3, \qquad T_3 \to T_4 A  =  T1T2T3T4T10110T20010T30001T40000 A \;=\; \begin{array}{c|cccc} & T_1 & T_2 & T_3 & T_4 \\ \hline T_1 & 0 & 1 & 1 & 0 \\ T_2 & 0 & 0 & 1 & 0 \\ T_3 & 0 & 0 & 0 & 1 \\ T_4 & 0 & 0 & 0 & 0 \end{array}

7-1. 거듭제곱하면 사라진다 (Powers Drive It to Zero)

AA를 계속 곱해 보자.

A2A^2A3A^3A4A^4
0이 아닌 칸[T1,T3]=1,  [T1,T4]=1,  [T2,T4]=1[T_1,T_3]=1,\;[T_1,T_4]=1,\;[T_2,T_4]=1[T1,T4]=1[T_1,T_4]=1전부 0

길이 4짜리 걷기가 하나도 없다. 화살표를 거꾸로 갈 수 없으므로 어디서 출발해도 3걸음 안에 막다른 곳(T4T_4)에 닿는다. 따라서 모든 고윳값이 0이다.

λ1=λ2=λ3=λ4=0 \lambda_1 = \lambda_2 = \lambda_3 = \lambda_4 = 0

igraph는 오류를 내지 않는다. eigen_centrality(gd, directed=TRUE)$vector(0,0,0,1)(0,\,0,\,0,\,1)을 돌려준다. "T4T_4가 100점, 나머지 전원 0점"이라는 말이 되는 것처럼 생긴 쓰레기 값이다. 경고도 없다. 유일한 단서는 $value0이라는 것 — λ1=0\lambda_1 = 0이면 그 답은 버려야 한다.

7-2. 방향 네트워크에서 고유벡터 중심성의 근본 문제 (The Core Problem in Directed Networks)

문제내용교실에서
들어오는 화살표 0 → 점수 0아무도 나를 지명하지 않으면 jA[i,j]xj=0\sum_j A[i,j]x_j = 0T1T_1은 두 명에게 정보를 주는 출처인데 0점
0이 전염된다0점짜리에게서만 지명받은 학생도 0점, 연쇄적으로 퍼짐T2T_2T1T_1에게만 지명받아 역시 0점
막다른 학생이 다 가져간다T4T_4는 나가는 화살표가 없어 점수를 흡수만 한다듣기만 하고 아무에게도 전하지 않는 학생이 1위

구글이 웹페이지 순위를 매길 때 부딪힌 문제가 정확히 이것이다. 웹 링크는 방향이 있고, 나가는 링크가 없는 페이지가 수없이 많다. 이를 고치려고 만든 것이 페이지랭크다.

8. 페이지랭크 — 표를 나누어 준다 (PageRank: Splitting the Vote)

8-1. 정의 (Definition)

PR(i)  =  1dn  +  dj:jiPR(j)kjout PR(i) \;=\; \frac{1-d}{n} \;+\; d \sum_{j \,:\, j \to i} \frac{PR(j)}{k^{out}_j}

kjoutk^{out}_jjj나가는 연결정도(무방향이면 그냥 연결정도), dd감쇠계수(damping factor)로 관례상 d=0.85d = 0.85를 쓴다.

8-2. 고유벡터 중심성과 무엇이 다른가 — 두 군데만 바뀌었다 (Two Changes from Eigenvector Centrality)

고유벡터 중심성페이지랭크바뀐 이유
이웃이 주는 양xjx_j (통째로)PR(j)kjout\dfrac{PR(j)}{k^{out}_j} (나눠서)친구가 100명인 인기 학생의 지명 한 개는 값이 싸야 한다. 자기 점수를 친구 수만큼 쪼개서 나눠 준다
기본 점수없음1dn\dfrac{1-d}{n}아무도 지명하지 않아도 최소한 이만큼은 받는다 → §7의 "0점 전염"이 원천 차단된다
전체 합약속하기 나름 (§2-4)iPR(i)=1\sum_i PR(i) = 1확률로 읽을 수 있다 — "지금 이 학생에게 소문이 있을 확률"

8-3. 감쇠계수 dd의 뜻 — 무작위로 돌아다니는 학생 (The Damping Factor: A Randomly Wandering Student)

페이지랭크는 무작위 산책(random walk)으로 읽는 것이 가장 직관적이다. 소문 하나가 교실을 떠돈다고 하자. 매 걸음마다

확률무슨 일이 일어나나식의 어느 부분
d=0.85d = 0.85지금 있는 학생의 친구 중 한 명에게 무작위로 옮겨간다djPR(j)/kjoutd\sum_j PR(j)/k^{out}_j
1d=0.151-d = 0.15관계를 무시하고 반 전체 중 아무나에게 순간이동한다(1d)/n(1-d)/n

충분히 오래 돌아다닌 뒤 각 학생에게 머물 확률이 페이지랭크다. 0.15의 순간이동이 있기 때문에 막다른 학생에게 갇히지 않고, 아무도 지명 안 한 학생도 확률이 0이 되지 않는다.

9. 손 계산 ③ 페이지랭크 첫 걸음 (Hand Calculation: PageRank Step 1)

다시 무방향 UU로 돌아온다. 모두 같은 확률에서 출발한다.

PR(0)(i)=17=0.142857(모든 i) PR^{(0)}(i) = \frac{1}{7} = 0.142857 \quad (\text{모든 } i)

9-1. 준비 — 각자 친구 한 명에게 얼마씩 주는가 (Setup: How Much Each Passes to a Friend)

각 학생은 자기 점수를 친구 수로 나누어 친구 한 명당 그만큼 보낸다.

학생PR(0)PR^{(0)}연결정도친구 1명당 보내는 양
S11/71/721/72=114\dfrac{1/7}{2} = \dfrac{1}{14}0.0714286
S21/71/721/141/140.0714286
S31/71/731/73=121\dfrac{1/7}{3} = \dfrac{1}{21}0.0476190
S41/71/721/141/140.0714286
S51/71/731/211/210.0476190
S61/71/721/141/140.0714286
S71/71/721/141/140.0714286

여기서 이미 반전의 씨앗이 보인다. 친구가 많은 S3와 S5가 가장 적게 보낸다(0.0476 vs 0.0714). 고유벡터 중심성에서는 S3, S5가 만점(1.0)을 통째로 보냈다. 완전히 반대다.

기본 점수는 모두 같다.

1dn=10.857=0.157=3140=0.0214286 \frac{1-d}{n} = \frac{1-0.85}{7} = \frac{0.15}{7} = \frac{3}{140} = 0.0214286

9-2. PR(1)(S1)PR^{(1)}(\text{S1}) — 0인 항까지 전부 (Every Term Included)

AA의 1행은 (0,1,1,0,0,0,0)(0,1,1,0,0,0,0)이다.

jjA[1,j]A[1,j]PRj(0)/kjPR^{(0)}_j / k_j왜 그 값인가
S100.07142860.0000000자기 자신 — 대각선은 0
S210.07142860.0714286친구 S2가 친구 2명에게 반씩 → 나에게 절반
S310.04761900.0476190친구 S3는 친구 3명에게 1/3씩 → 나에게 3분의 1
S400.07142860.0000000친구 아님
S500.04761900.0000000친구 아님
S600.07142860.0000000친구 아님
S700.07142860.0000000친구 아님
받은 합계0.1190476
PR(1)(S1)  =  3140+0.85×0.1190476  =  0.0214286+0.1011905  =  0.1226190 PR^{(1)}(\text{S1}) \;=\; \frac{3}{140} + 0.85 \times 0.1190476 \;=\; 0.0214286 + 0.1011905 \;=\; \mathbf{0.1226190}

9-3. PR(1)(S3)PR^{(1)}(\text{S3})PR(1)(S4)PR^{(1)}(\text{S4})

jjA[3,j]A[3,j]|A[4,j]A[4,j]
S110.0714286|00.0000000
S210.0714286|00.0000000
S300.0000000|10.0476190
S410.0714286|00.0000000
S500.0000000|10.0476190
S600.0000000|00.0000000
S700.0000000|00.0000000
합계3/14=0.21428573/14 = 0.2142857|2/21=0.09523812/21 = 0.0952381
PR(1)(S3)=3140+0.85×314=0.0214286+0.1821429=0.2035714 PR^{(1)}(\text{S3}) = \frac{3}{140} + 0.85 \times \frac{3}{14} = 0.0214286 + 0.1821429 = \mathbf{0.2035714} PR(1)(S4)=3140+0.85×221=0.0214286+0.0809524=0.1023810 PR^{(1)}(\text{S4}) = \frac{3}{140} + 0.85 \times \frac{2}{21} = 0.0214286 + 0.0809524 = \mathbf{0.1023810}

단 한 걸음 만에 S4가 꼴찌로 내려갔다. S4는 친구가 둘뿐인데 그 둘(S3, S5)이 친구가 셋씩이라 각각 1/3만 보내 준다. 반면 S1은 친구 S2에게서 1/2을 받는다. 고유벡터 중심성에서 S4를 3위로 올려 준 바로 그 사실 ("내 친구가 잘나갔다")이 페이지랭크에서는 불리하게 작용한다.

9-4. 수렴 (Convergence)

kkS1S2S3S4S5S6S7
00.1428570.1428570.1428570.1428570.1428570.1428570.1428571
10.1226190.1226190.2035710.1023810.2035710.1226190.1226191
20.1312200.1312200.1691670.1367860.1691670.1312200.1312201
30.1251280.1251280.1911000.1172900.1911000.1251280.1251281
40.1287530.1287530.1776350.1297180.1776350.1287530.1287531
50.1264780.1264780.1859990.1220890.1859990.1264780.1264781
80.1275500.1275500.1820440.1257120.1820440.1275500.1275501
120.1273740.1273740.1826910.1251190.1826910.1273740.1273741
150.1273370.1273370.1828300.1249930.1828300.1273370.1273371
수렴값0.1273440.1273440.1828030.1250170.1828030.1273440.1273441
순위3317133

여기서도 §3-3처럼 위아래로 흔들리며 수렴한다(S4: 0.1024 → 0.1368 → 0.1173 → 0.1297 → …). 15걸음이면 소수 넷째 자리까지 맞는다.

10. S4가 페이지랭크 꼴찌인 이유 (Why S4 Ranks Last)

수렴한 값을 정의에 다시 넣어 왜 그 순서인지 확인한다. S4와 S1은 둘 다 연결정도 2인데 결과가 갈렸다.

10-1. S4가 받는 것 (What S4 Receives)

주는 학생그 학생의 PRPR그 학생의 연결정도S4에게 보내는 양
S30.18280330.182803/3=0.06093430.182803 / 3 = 0.0609343
S50.18280330.182803/3=0.06093430.182803 / 3 = 0.0609343
받은 합계0.1218687
PR(S4)=3140+0.85×0.1218687=0.0214286+0.1035884=0.1250170 PR(\text{S4}) = \frac{3}{140} + 0.85 \times 0.1218687 = 0.0214286 + 0.1035884 = \mathbf{0.1250170}

10-2. S1이 받는 것 (What S1 Receives)

주는 학생그 학생의 PRPR그 학생의 연결정도S1에게 보내는 양
S20.12734420.127344/2=0.06367200.127344 / 2 = 0.0636720
S30.18280330.182803/3=0.06093430.182803 / 3 = 0.0609343
받은 합계0.1246063
PR(S1)=3140+0.85×0.1246063=0.0214286+0.1059154=0.1273441 PR(\text{S1}) = \frac{3}{140} + 0.85 \times 0.1246063 = 0.0214286 + 0.1059154 = \mathbf{0.1273441}

10-3. 차이는 어디서 나왔나 (Where the Difference Comes From)

기여 ①기여 ②
S1S2에게서 0.0636720S3에게서 0.06093430.1246063
S4S3에게서 0.0609343S5에게서 0.06093430.1218687
차이0.002737700.0027376
0.0027376×0.85  =  0.0023270  =  0.12734410.1250170 0.0027376 \times 0.85 \;=\; 0.0023270 \;=\; 0.1273441 - 0.1250170 \quad\checkmark

차이의 정체는 딱 하나다. S1의 친구 S2는 연결정도 2라서 절반씩 주고, S4의 친구 S3·S5는 연결정도 3이라 3분의 1씩 준다. S2의 점수(0.1273)가 S3의 점수(0.1828)보다 낮은데도, 나누는 수가 작아서 결국 S1이 더 많이 받는다: 0.1273/2=0.0637>0.1828/3=0.06090.1273/2 = 0.0637 > 0.1828/3 = 0.0609.

10-4. 같은 학생, 정반대 판정 (Same Student, Opposite Verdicts)

지표S4 값순위이유
연결정도0.3333공동 3위친구가 2명
근접0.60001위모두에게서 가장 가깝다 (단원 2-2)
매개0.60001위모든 최단경로가 나를 지난다 (단원 2-3)
고유벡터0.85363위친구 둘 다 만점이라 유리
페이지랭크0.12507위 (꼴찌)친구 둘 다 바빠서 나에게 오는 몫이 작다

교실 해석 — 같은 학생을 다섯 가지로 읽기. S4는 두 무리를 잇는 다리 학생이다.

  • 근접·매개 1위 — 학급 전체에 무언가를 퍼뜨리거나 전달해야 할 때 S4가 최적이다. "반 전체에 빨리 알려야 한다", "두 무리를 섞어야 한다"면 S4가 답이다
  • 고유벡터 3위 — S4와 친한 두 명이 각 무리의 중심이므로, S4가 영향력 있는 사람과 통해 있다는 뜻이다
  • 페이지랭크 꼴찌 — 하지만 그 두 명은 각자 자기 무리를 챙기느라 바쁘다. 소문이 무작위로 떠돌 때 S4에게 도달할 확률이 가장 낮다. 정보가 저절로 흘러오지 않는 자리라는 뜻 — 담임이 먼저 챙겨야 하는 학생이다

모순이 아니다. "정보를 흘려보내기 좋은 자리"(매개)와 "정보가 흘러들어오기 좋은 자리"(페이지랭크)는 다른 자리다. S4는 앞은 최고, 뒤는 최악이다.

11. 무방향 네트워크에서 페이지랭크 ≈ 연결정도 (On Undirected Graphs, PageRank ≈ Degree)

페이지랭크 값을 연결정도의 몫과 나란히 놓아 보자.

di2m=di16(m=8 간선, 2m=16=idi, 단원 1-4의 악수 정리) \frac{d_i}{2m} = \frac{d_i}{16} \qquad (m = 8 \text{ 간선, } 2m = 16 = \textstyle\sum_i d_i,\ \text{단원 1-4의 악수 정리})
학생did_idi/16d_i/16PRPR (d=0.85d=0.85)차이
S1, S2, S6, S720.1250000.127344+0.002344
S3, S530.1875000.182803−0.004697
S420.1250000.125017+0.000017

거의 같다. 그리고 dd를 1에 가깝게 올리면 정확히 같아진다.

dd0.50.70.850.90.950.990.999
maxiPRidi/2m\max_i |PR_i - d_i/2m|0.017550.009820.004700.003090.001530.000300.00003

정리 (무방향·연결 네트워크). 무작위 산책의 정상분포는 정확히 πi=di/2m\pi_i = d_i / 2m이다. 페이지랭크는 여기에 순간이동 0.150.15를 섞은 것이므로, d1d \to 1이면 연결정도 몫으로 수렴한다.
따라서 무방향 교우관계 네트워크에서 페이지랭크는 연결정도에 거의 새 정보를 더하지 않는다. 순위가 뒤집히는 것은 S4처럼 값이 종이 한 장 차이(0.125000 vs 0.125017)로 갈리는 경우뿐이다 — 이런 순위 차이를 크게 해석하면 안 된다. 페이지랭크의 진짜 쓸모는 방향 네트워크(누가 누구를 지명했는가, 누가 누구에게 물어보는가)에 있다. 단원 2-6의 Knoke 자금·정보 네트워크가 그런 예다.

12. 중심화 — 그리고 별이 1이 아닌 이유 (Centralization: Why the Star Is Not 1)

Freeman 중심화 공식은 지금까지와 같다(단원 2-1 §7).

CE중심화  =  i=1n(CEmaxCE(i))tmax,tmax=n2=5    (igraph) C_E^{\text{중심화}} \;=\; \frac{\sum_{i=1}^{n}\bigl(C_E^{\max} - C_E(i)\bigr)}{t_{\max}}, \qquad t_{\max} = n - 2 = 5 \;\;\text{(igraph)}

12-1. 우리 네트워크 (Our Network)

학생CEC_E1CE1 - C_E
S10.7446440.255356
S20.7446440.255356
S31.0000000.000000
S40.8536350.146365
S51.0000000.000000
S60.7446440.255356
S70.7446440.255356
합계1.167788
CE중심화  =  1.1677885  =  0.233558 C_E^{\text{중심화}} \;=\; \frac{1.167788}{5} \;=\; \mathbf{0.233558}

12-2. 함정 — 별 모양이 1이 아니다 (The Pitfall: The Star Is Not 1)

지금까지 세 지표는 모두 별 모양에서 정확히 1이었다. 고유벡터는 아니다.

네트워크 (n=7)고유벡터 값(maxCE)\sum(\max - C_E)중심화
완전 그래프전원 1.00000.0000
고리(ring)전원 1.00000.0000
우리 UU0.745 … 1 … 0.8541.16780.2336
경로(path, 일렬)0.383, 0.707, 0.924, 1, 0.924, 0.707, 0.3831.97270.3945
K4K_4 + 꼬리 3개1, 0.786×3, 0.306×32.72690.5454
삼각형 + 꼬리 4개1, 0.595×2, 0.373×43.31870.6637
별 모양(star)1, 0.408×63.55050.7101 ← 1이 아님

고유벡터 중심화는 다른 세 지표와 같은 자에 놓고 비교할 수 없다. igraph가 쓰는 분모 tmax=n2=5t_{\max} = n-2 = 5실제로 도달 가능한 최댓값이 아니다. 별 모양조차 0.7101에서 멈춘다 — 별의 잎사귀들은 서로 연결되지 않아도 허브를 통해 0.4080.408씩 점수를 받기 때문이다. 그러므로 0.2336(고유벡터)이 0.4222(매개)보다 작다고 해서 "매개가 더 집중되어 있다"고 말할 수 없다. 같은 지표끼리, 다른 학급과만 비교할 것.

12-3. 네 중심화 값 (같은 네트워크) (Four Centralization Values)

지표중심화별에서의 값같은 자인가
연결정도 (2-1)0.16671
근접 (2-2)0.33331
매개 (2-3)0.42221
고유벡터 (2-4)0.23360.7101아니오

13. R로 검증 (Verification in R)

library(igraph)
nm <- paste0("S", 1:7)
U  <- matrix(0, 7, 7, dimnames = list(nm, nm))
el <- rbind(c("S1","S2"), c("S1","S3"), c("S2","S3"), c("S3","S4"),
            c("S4","S5"), c("S5","S6"), c("S5","S7"), c("S6","S7"))
for (i in 1:nrow(el)) { U[el[i,1], el[i,2]] <- 1; U[el[i,2], el[i,1]] <- 1 }
g <- graph_from_adjacency_matrix(U, mode = "undirected")

# --- 고윳값 7개 ---
eigen(U)$values
# 2.342923  2.000000  0.470683 -1.000000 -1.000000 -1.000000 -1.813607

# --- 고유벡터 중심성 (최대=1 정규화) ---
eigen_centrality(g)$vector
# 0.744644 0.744644 1.000000 0.853635 1.000000 0.744644 0.744644
eigen_centrality(g)$value
# 2.34292308278   ← lambda_1

# --- 3차방정식이 맞는지 (§4-3) ---
polyroot(c(2, -4, -1, 1))          # 2 - 4L - L^2 + L^3
# 0.4706834  -1.8136065  2.3429231
1 / (2.3429231 - 1)                # 0.7446443  = a
2 / 2.3429231                      # 0.8536345  = c

# --- 거듭제곱법 = 걷기 개수 (§6-2) ---
x <- rep(1, 7); for (k in 1:5) { x <- as.vector(U %*% x); cat(k, sum(x), "\n") }
# 1 16 / 2 38 / 3 88 / 4 208 / 5 484
M <- diag(7); for (k in 1:5) { M <- M %*% U; cat(k, sum(M), "\n") }
# 1 16 / 2 38 / 3 88 / 4 208 / 5 484   ← 같다

# --- 페이지랭크 ---
page_rank(g)$vector                # damping 기본값 0.85
# 0.127344 0.127344 0.182803 0.125017 0.182803 0.127344 0.127344
sum(page_rank(g)$vector)           # 1
igraph::degree(g) / sum(igraph::degree(g))
# 0.125 0.125 0.1875 0.125 0.1875 0.125 0.125   ← d→1의 극한

# --- 중심화 ---
centr_eigen(g)$centralization      # 0.2335577
centr_eigen(g)$theoretical_max     # 5  (= n-2)
centr_eigen(make_star(7, mode="undirected"))$centralization
# 0.7101021   ← 별인데도 1이 아니다 (§12-2)

13-1. 함정 ① — sna::evcent는 다른 자를 쓴다 (Pitfall I: sna::evcent Uses a Different Scale)

library(sna)
sna::evcent(U, gmode = "graph")
# 0.334805 0.334805 0.449618 0.383809 0.449618 0.334805 0.334805

값이 전혀 다르다. sna는 벡터 길이를 1로 맞추고(xi2=1\sqrt{\sum x_i^2} = 1), igraph는 최댓값을 1로 맞춘다. 서로 상수배 관계이므로 순위는 같지만 값은 다르다.

0.3348050.449618=0.744644(= igraph 값) \frac{0.334805}{0.449618} = 0.744644 \quad\text{(= igraph 값)}

두 값의 비 자체도 의미가 있다 — 최댓값 대 최솟값의 비는 §4에서 구한 b/ab/a이므로

0.4496180.334805=1.342923=λ11 \frac{0.449618}{0.334805} = 1.342923 = \lambda_1 - 1

두 패키지 값을 같은 표에 섞어 쓰면 안 된다. 단원 2-3 §10의 sna::betweenness(rescale=TRUE) 함정과 같은 종류다.

13-2. 함정 ② — 방향 네트워크에서 조용히 틀린 답 (Pitfall II: Silently Wrong in Directed Networks)

Dm <- matrix(0, 4, 4, dimnames = list(paste0("T",1:4), paste0("T",1:4)))
Dm["T1","T2"] <- 1; Dm["T1","T3"] <- 1; Dm["T2","T3"] <- 1; Dm["T3","T4"] <- 1
gd <- graph_from_adjacency_matrix(Dm, mode = "directed")

eigen_centrality(gd, directed = TRUE)$vector
# 0 0 0 1        ← 경고 없이 나오는 쓰레기 값
eigen_centrality(gd, directed = TRUE)$value
# 0              ← 이것이 유일한 단서. lambda_1 = 0이면 버릴 것

page_rank(gd)$vector
# 0.120452 0.171644 0.317542 0.390362   ← 전원 양수, 정상 동작

점검 순서.igraph::components(g)$no로 연결 여부 확인 (단원 2-2 §11) → ② 방향 네트워크면 eigen_centrality()$value가 0인지 확인 → ③ 0이거나 방향 네트워크라면 페이지랭크를 쓸 것.

13-3. 함정 ③ — 이름 가림(masking)은 여기서도 (Pitfall III: Name Masking Again)

environmentName(environment(evcent))   # "sna"

degree, closeness, betweenness, components에 이어 evcent도 sna가 가린다. 항상 igraph:: / sna::를 붙일 것. (다만 eigen_centralitypage_rank는 igraph에만 있어 충돌하지 않는다.)

14. 다섯 지표 종합과 교실 적용 (All Five Measures; Classroom Application)

학생CDC_D순위CCC_C순위CBC_B순위CEC_E순위PRPR순위
S10.333330.400040.000040.744640.12733
S20.333330.400040.000040.744640.12733
S30.500010.545520.533321.000010.18281
S40.333330.600010.600010.853630.12507
S50.500010.545520.533321.000010.18281
S60.333330.400040.000040.744640.12733
S70.333330.400040.000040.744640.12733

학생 7명에 대해 다섯 지표가 세 종류의 1위를 내놓았다: S3·S5(연결정도·고유벡터·페이지랭크), S4(근접·매개).

교실 적용 다섯 가지

  1. "친구 수는 적지만 잘나가는 애랑 친하다"를 숫자로. 고유벡터 중심성은 연결정도가 같은 학생들의 동점을 깨뜨린다. 우리 반에서 연결정도 2인 학생 다섯 명 중 S4만 따로 3위로 떨어져 나왔다. "누구와 친한가"가 처음으로 점수에 반영된 것이다
  2. 페이지랭크는 "정보가 나에게 흘러올 확률"이다. 매개 중심성이 내보내기에 좋은 자리를 재는 반면, 페이지랭크는 받아들이기에 좋은 자리를 잰다. S4는 앞이 1위, 뒤가 꼴찌 — 안내 사항이 저절로 흘러가지 않는 학생이다
  3. 인기 학생의 지명은 값이 싸다. 페이지랭크의 PR(j)/kjPR(j)/k_j는 "친구 30명인 아이가 나를 좋아한다"보다 "친구 2명인 아이가 나를 좋아한다"를 더 쳐준다. 교우관계 설문에서 몇 명을 적었는지가 그 지명의 무게를 바꾼다는 뜻이다
  4. 무방향 설문이면 페이지랭크를 굳이 쓰지 않아도 된다. (§11) "서로 친한 사이"로 만든 대칭 행렬에서는 페이지랭크가 연결정도와 거의 같다. 일방 지명을 그대로 살린 방향 네트워크에서만 새 정보를 준다
  5. 지표를 고르는 기준은 "무엇을 할 것인가"다. 전달자를 뽑는다 → 매개·근접 / 여론 주도자를 찾는다 → 고유벡터 ·페이지랭크 / 인기 조사 → 연결정도. 다섯 개를 함께 표로 놓고 순위가 갈리는 학생을 눈여겨볼 것

15. 연습문제 (Exercises)

연습문제 1. 단원 2-1~2-3에서 계속 썼던 개입을 다시 한다. S4와 S6을 새로 친구로 만들었다(간선 S4–S6 추가). 연결정도는 (2,2,3,3,3,3,2)(2,2,3,3,3,3,2)가 된다.

  1. x(0)=(1,1,1,1,1,1,1)\mathbf{x}^{(0)} = (1,1,1,1,1,1,1)에서 출발해 x(1), x(2), x(3)\mathbf{x}^{(1)},\ \mathbf{x}^{(2)},\ \mathbf{x}^{(3)}을 손으로 계산하라. 최소한 x(2)\mathbf{x}^{(2)}의 S3와 S4는 0인 항까지 전부 전개할 것.
  2. 정확한 답은 λ1=2.709275\lambda_1 = 2.709275, x=(0.3691,0.3691,0.6309,0.9711,1,1,0.7382)\mathbf{x} = (0.3691,\,0.3691,\,0.6309,\,0.9711,\,1,\,1,\,0.7382)이다. 연결정도가 똑같이 3인 네 학생 S3, S4, S5, S6의 점수가 0.6309, 0.9711, 1, 10.6309,\ 0.9711,\ 1,\ 1로 크게 갈렸다. 이웃합으로 그 이유를 설명하라.
  3. S3는 연결정도가 3으로 그대로인데 점수가 1.00.63091.0 \to 0.6309로 떨어졌다. 다리를 하나 더했을 뿐인데 왜 떨어졌는가?

먼저 풀고 §16 해설과 맞춰 볼 것.

연습문제 2. 이번에는 S3을 허브로 만든다(간선 S3–S5, S3–S6, S3–S7 추가). 연결정도는 (2,2,6,2,4,3,3)(2,2,6,2,4,3,3)이 된다.

  1. x(1)\mathbf{x}^{(1)}x(2)\mathbf{x}^{(2)}를 손으로 계산하라. x(2)\mathbf{x}^{(2)}의 S3는 0인 항까지 전부 전개할 것.
  2. 페이지랭크는 (0.1015,0.1015,0.2608,0.0954,0.1744,0.1332,0.1332)(0.1015,\,0.1015,\,0.2608,\,0.0954,\,0.1744,\,0.1332,\,0.1332)이고 S4가 또 꼴찌다. S4와 S1은 둘 다 연결정도 2인데 왜 갈렸는지, 받는 양을 직접 계산해서 보이라.
  3. 이 허브 네트워크의 고유벡터 중심화는 0.4889다. 단원 2-1~2-3에서 구한 세 중심화(연결정도 0.6667, 근접 0.7761, 매개 0.5889)와 나란히 놓고, "이 학급은 중심화가 높다"고 말할 수 있는지 판단하라.

먼저 풀고 §16 해설과 맞춰 볼 것.

16. 해설과 답 (Solutions)

16-1. 연습문제 1 — S4–S6 추가 (Exercise 1: Adding S4–S6)

① 무엇을 곱하는가

바뀐 인접행렬. 새로 1이 된 칸을 표시했다.

A  =  S1S2S3S4S5S6S7S10110000S21010000S31101000S40010110S50001011S60001101S70000110 A' \;=\; \begin{array}{c|ccccccc} & \text{S1} & \text{S2} & \text{S3} & \text{S4} & \text{S5} & \text{S6} & \text{S7} \\ \hline \text{S1} & 0 & 1 & 1 & 0 & 0 & 0 & 0 \\ \text{S2} & 1 & 0 & 1 & 0 & 0 & 0 & 0 \\ \text{S3} & 1 & 1 & 0 & 1 & 0 & 0 & 0 \\ \text{S4} & 0 & 0 & 1 & 0 & 1 & \textcolor{#b91c1c}{\mathbf{1}} & 0 \\ \text{S5} & 0 & 0 & 0 & 1 & 0 & 1 & 1 \\ \text{S6} & 0 & 0 & 0 & \textcolor{#b91c1c}{\mathbf{1}} & 1 & 0 & 1 \\ \text{S7} & 0 & 0 & 0 & 0 & 1 & 1 & 0 \end{array}

② 전개 — x(1)\mathbf{x}^{(1)}

x(0)\mathbf{x}^{(0)}이 전부 1이므로 x(1)\mathbf{x}^{(1)}은 행합, 곧 연결정도다.

x(1)=(2,2,3,3,3,3,2) \mathbf{x}^{(1)} = (2,\,2,\,3,\,3,\,3,\,3,\,2)

③ 전개 — x(2)=Ax(1)\mathbf{x}^{(2)} = A'\mathbf{x}^{(1)}, 0인 항까지 전부

iijj=1234567xi(2)x^{(2)}_i왜 그 값인가
S1020\cdot2121\cdot2131\cdot3030\cdot3030\cdot3030\cdot3020\cdot25S2(2) + S3(3)
S2121\cdot2020\cdot2131\cdot3030\cdot3030\cdot3030\cdot3020\cdot25S1(2) + S3(3)
S3121\cdot2121\cdot2030\cdot3131\cdot3030\cdot3030\cdot3020\cdot27S1(2)+S2(2)+S4(3) — 친구 셋 중 둘이 2점짜리
S4020\cdot2020\cdot2131\cdot3030\cdot3131\cdot3131\cdot3020\cdot29S3(3)+S5(3)+S6(3) — 친구 셋이 모두 3점
S5020\cdot2020\cdot2030\cdot3131\cdot3030\cdot3131\cdot3121\cdot28S4(3)+S6(3)+S7(2)
S6020\cdot2020\cdot2030\cdot3131\cdot3131\cdot3030\cdot3121\cdot28S4(3)+S5(3)+S7(2)
S7020\cdot2020\cdot2030\cdot3030\cdot3131\cdot3131\cdot3020\cdot26S5(3) + S6(3)

④ 전개 — x(3)=Ax(2)\mathbf{x}^{(3)} = A'\mathbf{x}^{(2)}

ii이웃의 x(2)x^{(2)}
S1S2(5) + S3(7)12
S2S1(5) + S3(7)12
S3S1(5) + S2(5) + S4(9)19
S4S3(7) + S5(8) + S6(8)23
S5S4(9) + S6(8) + S7(6)23
S6S4(9) + S5(8) + S7(6)23
S7S5(8) + S6(8)16

답 (1)

x(1)=(2,2,3,3,3,3,2),x(2)=(5,5,7,9,8,8,6),x(3)=(12,12,19,23,23,23,16) \mathbf{x}^{(1)} = (2,2,3,3,3,3,2), \quad \mathbf{x}^{(2)} = (5,5,7,9,8,8,6), \quad \mathbf{x}^{(3)} = (12,12,19,23,23,23,16)

최댓값으로 나누면 x(3)\mathbf{x}^{(3)}의 비율은 (0.5217,0.5217,0.8261,1,1,1,0.6957)(0.5217,\,0.5217,\,0.8261,\,1,\,1,\,1,\,0.6957) — 정답 (0.3691,)(0.3691,\dots) 쪽으로 가고 있다. k=2k=2에서 이미 S4가 단독 선두(9)였다는 점이 눈에 띈다.

⑤ (2)의 답 — 연결정도 3인 네 명이 갈린 이유

정확한 답 x=(0.3691,0.3691,0.6309,0.9711,1,1,0.7382)\mathbf{x} = (0.3691,\,0.3691,\,0.6309,\,0.9711,\,1,\,1,\,0.7382), λ1=2.709275\lambda_1 = 2.709275로 이웃합을 확인한다.

학생연결정도이웃과 그 점수이웃합÷λ1\div\,\lambda_1CEC_E
S33S1(0.3691), S2(0.3691), S4(0.9711)1.709275÷2.709275\div 2.7092750.6309
S43S3(0.6309), S5(1.0000), S6(1.0000)2.630898÷2.709275\div 2.7092750.9711
S53S4(0.9711), S6(1.0000), S7(0.7382)2.709275÷2.709275\div 2.7092751.0000
S63S4(0.9711), S5(1.0000), S7(0.7382)2.709275÷2.709275\div 2.7092751.0000

덤으로 S1과 S7도 확인해 두면 재미있다.

학생이웃과 그 점수이웃합CEC_E
S1S2(0.3691), S3(0.6309)1.000000 (정확히 1)0.3691
S7S5(1.0000), S6(1.0000)2.0000000.7382

답 (2)

네 명 모두 친구가 셋이지만, 친구의 점수 합1.7092.6312.7092.7091.709 \to 2.631 \to 2.709 \to 2.709로 다르다.

  • S5, S6 (1.0000) — 서로가 서로의 친구이고, 둘 다 S4(0.9711)와도 붙어 있다. 고득점자 셋이 뭉친 삼각형 {S4, S5, S6}의 일원이다
  • S4 (0.9711) — 친구 셋 중 둘(S5, S6)이 만점이지만 하나(S3)가 0.6309라 살짝 모자란다
  • S3 (0.6309) — 친구 셋 중 둘(S1, S2)이 0.3691짜리 최하위다. 혼자 잘난 친구 S4(0.9711)를 두었지만 나머지 둘이 점수를 끌어내린다

핵심. 연결정도는 (3,3,3,3)(3,3,3,3)으로 완전 동점이지만 고유벡터 중심성은 0.630.63에서 1.001.00까지 1.6배 차이로 벌린다. "친구가 몇 명인가"만으로는 보이지 않던 차이다.

⑥ (3)의 답 — S3의 점수가 떨어진 이유

개입 전개입 후변화
S3의 연결정도33변화 없음
S3의 이웃S1, S2, S4S1, S2, S4 (그대로)변화 없음
S1의 점수0.74460.3691−50%
S2의 점수0.74460.3691−50%
S4의 점수0.85360.9711+14%
S3의 이웃합2.34291.7093−27%
λ1\lambda_12.34292.7093+16%
S3의 점수1.00000.6309−37%

답 (3)

S3 자신은 아무것도 잃지 않았다. 친구 수도 그대로고 친구 명단도 그대로다. 떨어진 이유는 순전히 주변이 바뀌었기 때문이다. 두 가지가 동시에 일어났다.

  1. 이웃의 값이 떨어졌다. 새 삼각형 {S4, S5, S6}이 생기면서 네트워크의 무게중심이 오른쪽으로 이동했다. 왼쪽 삼각형에 갇힌 S1, S2는 0.7446 → 0.3691로 반토막 났고, S3의 이웃합도 함께 내려갔다
  2. 기준(λ1\lambda_1)이 올라갔다. 간선이 하나 늘어 걷기 개수의 증가율이 2.343 → 2.709로 커졌다. 나누는 수가 커졌으니 몫은 더 작아진다

고유벡터 중심성은 순전히 상대적인 점수다. 연결정도·매개 중심성과 결정적으로 다른 점이 이것이다 — 내가 가만히 있어도 남들이 움직이면 내 점수가 바뀐다.

교실 해석. S4와 S6을 붙여 준 개입은 지금까지 이렇게 평가되었다: 연결정도 중심화 0.1667 → 0.1(성공), 근접 중심성 6명 상승(성공), 매개 중심성은 S5의 과부하만 덜고 진짜 병목 S4는 그대로(부분 성공). 여기에 네 번째 평가가 붙는다 — S1, S2가 영향력에서 완전히 소외되었다(0.7446 → 0.3691). 새 다리는 오른쪽에 무게중심을 만들었고, 왼쪽 삼각형에만 속한 두 학생은 아무 일도 하지 않았는데 학급 여론에서 밀려났다. 한 곳을 이어 주면 다른 곳이 변방이 된다 — 개입은 항상 전체를 다시 봐야 한다.

16-2. 연습문제 2 — 허브 S3 (Exercise 2: Hub S3)

① 무엇을 곱하는가

A  =  S1S2S3S4S5S6S7S10110000S21010000S31101111S40010100S50011011S60010101S70010110 A'' \;=\; \begin{array}{c|ccccccc} & \text{S1} & \text{S2} & \text{S3} & \text{S4} & \text{S5} & \text{S6} & \text{S7} \\ \hline \text{S1} & 0 & 1 & 1 & 0 & 0 & 0 & 0 \\ \text{S2} & 1 & 0 & 1 & 0 & 0 & 0 & 0 \\ \text{S3} & 1 & 1 & 0 & 1 & \textcolor{#b91c1c}{\mathbf{1}} & \textcolor{#b91c1c}{\mathbf{1}} & \textcolor{#b91c1c}{\mathbf{1}} \\ \text{S4} & 0 & 0 & 1 & 0 & 1 & 0 & 0 \\ \text{S5} & 0 & 0 & \textcolor{#b91c1c}{\mathbf{1}} & 1 & 0 & 1 & 1 \\ \text{S6} & 0 & 0 & \textcolor{#b91c1c}{\mathbf{1}} & 0 & 1 & 0 & 1 \\ \text{S7} & 0 & 0 & \textcolor{#b91c1c}{\mathbf{1}} & 0 & 1 & 1 & 0 \end{array}

연결정도: (2,2,6,2,4,3,3)(2,\,2,\,\mathbf{6},\,2,\,4,\,3,\,3)

② 전개 — x(1)\mathbf{x}^{(1)}x(2)\mathbf{x}^{(2)}

x(1)=(2,2,6,2,4,3,3) \mathbf{x}^{(1)} = (2,\,2,\,6,\,2,\,4,\,3,\,3)

x(2)[3]\mathbf{x}^{(2)}[3]을 0인 항까지 전부:

jj1234567
A[3,j]A''[3,j]1101111
xj(1)x^{(1)}_j2262433
12=21\cdot2=212=21\cdot2=206=00\cdot6=012=21\cdot2=214=41\cdot4=413=31\cdot3=313=31\cdot3=316
ii이웃의 x(1)x^{(1)}xi(2)x^{(2)}_i왜 그 값인가
S1S2(2) + S3(6)8허브 S3 하나로 8점 — 허브와 붙어 있는 이득
S2S1(2) + S3(6)8S1과 동일
S3S1(2)+S2(2)+S4(2)+S5(4)+S6(3)+S7(3)16여섯 명 전부에게서 받는다
S4S3(6) + S5(4)10친구는 둘뿐인데 둘 다 고득점
S5S3(6)+S4(2)+S6(3)+S7(3)14허브와 붙어 있고 자기도 친구 4명
S6S3(6)+S5(4)+S7(3)13허브 + 준허브 S5
S7S3(6)+S5(4)+S6(3)13S6과 동일

답 (1)

x(1)=(2,2,6,2,4,3,3),x(2)=(8,8,16,10,14,13,13) \mathbf{x}^{(1)} = (2,\,2,\,6,\,2,\,4,\,3,\,3), \qquad \mathbf{x}^{(2)} = (8,\,8,\,16,\,10,\,14,\,13,\,13)

참고로 x(3)=(24,24,66,30,52,43,43)\mathbf{x}^{(3)} = (24,\,24,\,66,\,30,\,52,\,43,\,43), 정확한 답은 λ1=3.555676\lambda_1 = 3.555676, x=(0.3913,0.3913,1,0.5142,0.8282,0.7154,0.7154)\mathbf{x} = (0.3913,\,0.3913,\,1,\,0.5142,\,0.8282,\,0.7154,\,0.7154)다. 검산: S3의 이웃합 =0.3913+0.3913+0.5142+0.8282+0.7154+0.7154=3.5557=λ1= 0.3913+0.3913+0.5142+0.8282+0.7154+0.7154 = 3.5557 = \lambda_1÷λ1=1\div\lambda_1 = 1

③ (2)의 답 — S4가 또 꼴찌인 이유

각 학생이 친구 한 명에게 보내는 양부터 구한다(수렴한 PRPR 기준).

학생PRPR연결정도친구 1명당 보내는 양
S10.10152220.101522/2=0.0507610.101522/2 = 0.050761
S20.10152220.101522/2=0.0507610.101522/2 = 0.050761
S30.26080060.260800/6=0.0434670.260800/6 = 0.043467
S50.17439440.174394/4=0.0435990.174394/4 = 0.043599

이제 S1과 S4가 받는 양을 각각 계산한다.

주는 학생 ①주는 학생 ②받은 합계×0.85\times 0.85+3/140+\,3/140PRPR
S1S2 (연결정도 2) → 0.050761S3 (연결정도 6) → 0.0434670.0942280.080094+0.0214290.101522
S4S3 (연결정도 6) → 0.043467S5 (연결정도 4) → 0.0435990.0870660.074005+0.0214290.095434

답 (2)

둘 다 연결정도 2지만 친구가 얼마나 바쁜가가 다르다.

  • S1은 친구 중 하나(S2)가 연결정도 2라서 자기 점수의 절반을 통째로 준다 → 0.050761
  • S4는 친구가 S3(연결정도 6)와 S5(연결정도 4) — 둘 다 점수를 여러 조각으로 쪼갠다. S3는 점수가 0.2608로 S2의 2.6배나 되지만 6등분하므로 한 조각은 0.043467에 불과하다

차이는 0.0942280.087066=0.0071620.094228 - 0.087066 = 0.007162, 여기에 0.850.85를 곱하면 0.006088=0.1015220.0954340.006088 = 0.101522 - 0.095434
고유벡터 중심성과는 정반대다. 고유벡터에서 S4는 0.5142로 S1(0.3913)보다 높다 — "허브와 친하다"가 유리하게 작용했다. 페이지랭크에서는 같은 사실이 "허브는 바빠서 나에게 오는 몫이 작다"로 뒤집혀 꼴찌가 된다.

교실 해석. S4는 반장 S3과 친하다. "영향력 있는 애와 통해 있다"는 점에서는 유리하지만(고유벡터 3위 → 이 시나리오에서도 S1보다 위), 반장은 여섯 명을 상대하느라 바쁘다. 소문·정보가 실제로 S4에게 흘러들 확률은 학급에서 가장 낮다(페이지랭크 7위). "저 학생은 반장이랑 친하니까 알아서 다 알겠지"라는 판단이 틀리는 자리다.

④ (3)의 답 — 네 중심화를 나란히

지표기본 UU연습문제 1 (S4–S6)연습문제 2 (허브 S3)별에서의 값
연결정도0.16670.10000.66671
근접0.33330.38570.77611
매개0.42220.46670.58891
고유벡터0.23360.38430.48890.7101

답 (3)

말할 수 없다. 이유가 두 겹이다.

  1. 지표마다 값이 다르다. 허브 네트워크에서 네 값이 0.48890.77610.4889 \sim 0.7761로 흩어진다. 어느 하나가 "이 학급의 중심화"를 대표하지 못한다. 단원 2-2 §7에서 이미 확인한 문제다
  2. 고유벡터 중심화는 아예 다른 자다. (§12-2) 앞의 세 지표는 별 모양에서 1에 닿지만 고유벡터는 0.7101에서 멈춘다. 즉 고유벡터의 0.4889는 "만점 1점 중 0.49"가 아니라 "실질 상한 0.71 중 0.49"다. 0.4889 < 0.5889라고 해서 "고유벡터 기준으로 덜 집중되어 있다"고 읽으면 틀린다. 같은 자에 놓으면 0.4889/0.7101=0.6880.4889/0.7101 = 0.688로 오히려 매개(0.5889)보다 높다

보고하는 법. "이 학급은 중심화가 높다"가 아니라 "연결정도 기준 중심화가 0.67로, 기본 네트워크(0.17)의 4배다"처럼 ① 어떤 지표인지 ② 무엇과 비교한 것인지를 반드시 함께 밝힌다. 고유벡터 중심화는 다른 학급의 고유벡터 중심화와만 비교한다.

16-3. 오늘의 한 줄 요약 (One-Line Summary)

고유벡터 중심성 Ax=λ1xA\mathbf{x} = \lambda_1\mathbf{x} — 이웃의 점수를 통째로 더한다. "중요한 친구를 두면 나도 중요하다."
페이지랭크 PR(i)=1dn+djPR(j)/kjPR(i) = \frac{1-d}{n} + d\sum_j PR(j)/k_j — 이웃의 점수를 친구 수로 나누어 더한다. "중요한 친구가 바쁘면 나에게 오는 몫은 작다."
두 식의 차이는 분모 kjk_j 하나뿐인데, 같은 학생 S4에게 3위와 7위라는 정반대 판정을 내린다.

다음 단원 — 2-5: 가중 네트워크의 중심성 (tnet, α\alpha 조절). 지금까지 다섯 지표는 모두 간선을 있다/없다로만 보았다. 단원 1-8에서 만든 가중 네트워크 WW(친밀도 4, 2, 1, …)를 꺼내 "친구 수친밀도 합 중 무엇을 볼 것인가"를 α\alpha 하나로 조절하는 법을 배운다. 연결정도 did_i와 강도 sis_idi1αsiαd_i^{1-\alpha} s_i^{\alpha}로 섞는다.