SNA 이론 · 단계별 학습 차례

단원 1-6Geodesic Distance from Matrix Powers

측지거리 — 거듭제곱에서 최단거리 읽어내기

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

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

단원 1-3에서 AkA^k의 값은 걷기의 개수일 뿐 경로가 아니라는 것을 배웠다. 값 자체는 부풀려져 있다. 그런데 이렇게 물으면 얘기가 달라진다:

"ii에서 jj로 가는 소식이 최소 몇 단계를 거쳐야 하는가?"

답: A,A2,A3,A, A^2, A^3, \dots를 차례로 보며 [i,j][i,j] 칸에 0이 아닌 값이 처음 나타나는 kk를 찾으면 된다. 개수는 부정확하지만 "처음 등장하는 시점"은 정확하다. 왜 그런지가 오늘의 핵심이다.

5명 방향 네트워크
M2에서 M5까지 소식이 가려면 몇 단계? 그림으로 세어 보고 행렬로 확인한다

단원 1-3에서 이미 구해 둔 세 행렬을 그대로 쓴다. A4A^4만 새로 필요하다:

A=M1M2M3M4M5M101101M200100M310010M400000M510000A2=M1M2M3M4M5M120110M210010M301101M400000M501101 A=\begin{array}{c|ccccc} & M_1 & M_2 & M_3 & M_4 & M_5\\ \hline M_1 & 0 & 1 & 1 & 0 & 1\\ M_2 & 0 & 0 & 1 & 0 & 0\\ M_3 & 1 & 0 & 0 & 1 & 0\\ M_4 & 0 & 0 & 0 & 0 & 0\\ M_5 & 1 & 0 & 0 & 0 & 0 \end{array} \quad A^2=\begin{array}{c|ccccc} & M_1 & M_2 & M_3 & M_4 & M_5\\ \hline M_1 & 2 & 0 & 1 & 1 & 0\\ M_2 & 1 & 0 & 0 & 1 & 0\\ M_3 & 0 & 1 & 1 & 0 & 1\\ M_4 & 0 & 0 & 0 & 0 & 0\\ M_5 & 0 & 1 & 1 & 0 & 1 \end{array} A3=M1M2M3M4M5M112212M201101M320110M400000M520110A4=M1M2M3M4M5M141321M220110M312212M400000M512212 A^3=\begin{array}{c|ccccc} & M_1 & M_2 & M_3 & M_4 & M_5\\ \hline M_1 & 1 & 2 & 2 & 1 & 2\\ M_2 & 0 & 1 & 1 & 0 & 1\\ M_3 & 2 & 0 & 1 & 1 & 0\\ M_4 & 0 & 0 & 0 & 0 & 0\\ M_5 & 2 & 0 & 1 & 1 & 0 \end{array} \quad A^4=\begin{array}{c|ccccc} & M_1 & M_2 & M_3 & M_4 & M_5\\ \hline M_1 & 4 & 1 & 3 & 2 & 1\\ M_2 & 2 & 0 & 1 & 1 & 0\\ M_3 & 1 & 2 & 2 & 1 & 2\\ M_4 & 0 & 0 & 0 & 0 & 0\\ M_5 & 1 & 2 & 2 & 1 & 2 \end{array}

2. 측지거리의 정의 (Definition of Geodesic Distance)

정의. ii에서 jj까지의 측지거리(geodesic distance) d(i,j)d(i,j)ii에서 jj로 가는 가장 짧은 경로의 길이다. 행렬로는:

d(i,j)=min{k1:(Ak)[i,j]>0} d(i,j) = \min\{\,k \ge 1 : (A^k)[i,j] > 0 \,\}

그런 kk가 하나도 없으면 d(i,j)=d(i,j) = \infty(도달 불가)로 쓴다. 관례상 d(i,i)=0d(i,i) = 0이다. "측지"(geodesic)는 지구 위 두 점을 잇는 최단선을 뜻하는 말에서 왔고, 네트워크에서는 최단 경로를 가리킨다.

kk의 범위는 n1n-1까지만 보면 된다. 경로는 같은 사람을 두 번 지나지 않으므로 5명 네트워크에서 가장 긴 경로도 학생 5명을 지나는 4걸음이다. 즉 A,A2,A3,A4A, A^2, A^3, A^4까지 봐서 0이면 그 뒤는 볼 필요 없이 \infty다. 그래서 오늘 A4A^4까지만 계산했다.

3. 왜 "처음 등장하는 kk"는 정확한가 (Why the First Hit Is Exact)

단원 1-3의 결론은 "AkA^k는 걷기를 센다"였다. 걷기는 경로보다 많으니 (A3)[1,3]=2(A^3)[1,3]=2처럼 실제 경로가 0개인데도 값이 2일 수 있었다. 그런데도 최단거리를 읽는 데는 문제가 없다. 근거는 다음 한 줄이다:

정리. 어떤 걷기가 최단이라면 그것은 반드시 경로다 (같은 사람을 두 번 지나지 않는다).

왜 그런가. 만약 최단 걷기가 같은 학생 vv를 두 번 지난다고 하자. 그러면 그 걷기는 ivvji \to \cdots \to v \to \cdots \to v \to \cdots \to j 모양이다. 가운데 vv에서 vv로 돌아오는 부분은 잘라내도 여전히 ii에서 jj로 가는 걷기다. 잘라낸 쪽이 더 짧으므로, 원래 걷기가 최단이었다는 가정에 모순이다. 따라서 최단 걷기에는 재방문이 없다. ∎

구체적으로 확인해 보자. 단원 1-3에서 본 M1→M3의 재방문 걷기들:

걷기길이잘라낼 수 있는 부분남는 것
M1→M3→M1→M33M1→M3→M1 (M1로 되돌아온 고리)M1→M3 길이 1
M1→M5→M1→M33M1→M5→M1M1→M3 길이 1

두 걷기 모두 길이 1로 줄어든다. 그래서 d(M1,M3)=1d(M_1,M_3) = 1이고, k=3k=3에서 나온 값 2는 최단거리 판정에 아무 영향을 주지 않는다. 부풀려진 걷기는 항상 더 짧은 진짜 경로의 "늘어난 버전"이므로, 최초 등장 시점을 앞당길 수는 없다. 그래서 AkA^k의 값은 못 믿어도 0인지 0이 아닌지는 믿을 수 있다.

4. 손 계산 ① d(M2,M5)d(M_2, M_5) (Reading One Cell)

M2에서 M5로 가는 최단거리를 구한다. 네 행렬의 [2,5][2,5] 칸을 kk가 커지는 순서로 확인한다:

kk(Ak)[2,5](A^k)[2,5]판정
10M2가 M5를 직접 지명하지 않았다계속
202걸음으로 M5에 닿는 길이 없다계속
313걸음 걷기가 1개 있다여기서 멈춤 → d=3d=3
40(4걸음 걷기는 없지만 무관)볼 필요 없음
d(M2,M5)=min{k:(Ak)[2,5]>0}=3 d(M_2, M_5) = \min\{k : (A^k)[2,5] > 0\} = \mathbf{3}

경로 복원. k=3k=3에서 값이 1이므로 걷기는 하나뿐이다. 단원 1-3 §6의 전수 목록에서 [2,5][2,5]에 해당하는 걷기는 M2→M3→M1→M5였고, 세 걸음 모두 새 사람을 밟는 경로였다. §3의 정리가 말한 대로다 — 최단 걷기는 경로다.

k=4k=4에서 값이 0으로 돌아간 것에 주의. (A4)[2,5]=0(A^4)[2,5]=0이다. "거리가 3인데 4걸음으로는 갈 수 없다"는 게 이상하게 들리지만 정상이다 — AkA^k정확히 kk걸음인 걷기만 센다. 3걸음 경로를 4걸음으로 늘리려면 중간에 왕복할 상호 지명이 필요한데, 이 경로(M2→M3→M1→M5) 위에는 M2·M3 사이에 왕복할 상호 지명이 없다. AkA^k의 0은 "거리가 kk보다 멀다"가 아니라 "정확히 kk걸음짜리 걷기가 없다"는 뜻이다. 그래서 반드시 kk작은 쪽부터 확인해야 한다.

5. 손 계산 ② 거리행렬 전체 채우기 (Filling the Whole Matrix)

같은 절차를 20개 칸(대각선 제외)에 모두 적용한다. 표에는 각 칸에서 처음 1이 나온 kk를 적는다.

AAA2A^2A3A^3A4A^4dd최단 경로
[1,2][1,2]10211M1→M2
[1,3][1,3]11231M1→M3
[1,4][1,4]01122M1→M3→M4
[1,5][1,5]10211M1→M5
[2,1][2,1]01022M2→M3→M1
[2,3][2,3]10111M2→M3
[2,4][2,4]01012M2→M3→M4
[2,5][2,5]00103M2→M3→M1→M5
[3,1][3,1]10211M3→M1
[3,2][3,2]01022M3→M1→M2
[3,4][3,4]10111M3→M4
[3,5][3,5]01022M3→M1→M5
[4,][4,\ast]0000없음 — M4는 나가는 화살표가 없다
[5,1][5,1]10211M5→M1
[5,2][5,2]01022M5→M1→M2
[5,3][5,3]01122M5→M1→M3
[5,4][5,4]00113M5→M1→M3→M4

정리하면 거리행렬 DD는:

D=M1M2M3M4M5M101121M220123M312012M40M512230 D=\begin{array}{c|ccccc} & M_1 & M_2 & M_3 & M_4 & M_5\\ \hline M_1 & 0 & 1 & 1 & 2 & 1\\ M_2 & 2 & 0 & 1 & 2 & 3\\ M_3 & 1 & 2 & 0 & 1 & 2\\ M_4 & \infty & \infty & \infty & 0 & \infty\\ M_5 & 1 & 2 & 2 & 3 & 0 \end{array}

6. 거리는 대칭이 아니다 (Distance Is Not Symmetric)

방향 네트워크에서 d(i,j)d(i,j)d(j,i)d(j,i)다를 수 있다. DD에서 짝을 찾아보면:

d(i,j)d(i,j)d(j,i)d(j,i)읽기
M1, M21 M1→M22 M2→M3→M1M1의 말은 M2에게 바로, M2의 말은 M1에게 두 단계 걸려
M2, M532 M5→M1→M2방향에 따라 1단계 차이
M3, M41 M3→M4M3의 말은 M4에게 닿지만, M4의 말은 아무에게도 못 닿는다
M1, M311상호 지명이므로 양방향 1 (대칭)

대칭이 되는 조건. 무방향 네트워크(또는 모든 지명이 상호인 경우)에서는 d(i,j)=d(j,i)d(i,j) = d(j,i)가 항상 성립하고 DD는 대칭행렬이 된다. 방향 데이터를 다룰 때는 DD의 위쪽 삼각과 아래쪽 삼각이 다른 정보임을 잊지 말아야 한다. "둘이 얼마나 가까운가"라는 질문 자체가 방향 네트워크에서는 두 개로 갈라진다.

7. 지름과 평균거리 (Diameter & Mean Distance)

거리행렬을 하나의 숫자로 요약하는 두 방법이 있다. 둘 다 \infty를 어떻게 처리하는가가 관건이다.

지름 (Diameter)

diameter=maxij,  d(i,j)<d(i,j) \text{diameter} = \max_{i \ne j,\; d(i,j) < \infty} d(i,j)

DD에서 \infty를 뺀 가장 큰 값을 찾는다. 3이 두 개 있다 (d(M2,M5)=3d(M_2,M_5)=3, d(M5,M4)=3d(M_5,M_4)=3) → 지름 = 3. "도달 가능한 두 학생 사이라도 최대 3단계면 소식이 전해진다"는 뜻이다.

평균 측지거리 (Mean Geodesic Distance)

\infty는 평균에 넣을 수 없으므로 도달 가능한 순서쌍만 평균한다. DD에서 대각선(0)과 \infty 4칸을 빼면 남는 칸은 204=1620 - 4 = 16개다. 값별로 개수를 세어 더한다:

거리해당 칸개수기여
1[1,2] [1,3] [1,5] [2,3] [3,1] [3,4] [5,1]77×1=77\times1=7
2[1,4] [2,1] [2,4] [3,2] [3,5] [5,2] [5,3]77×2=147\times2=14
3[2,5] [5,4]22×3=62\times3=6
[4,1] [4,2] [4,3] [4,5]4제외
1627
dˉ=2716=1.6875 \bar{d} = \frac{27}{16} = \mathbf{1.6875}

\infty를 뺐다는 사실을 반드시 함께 보고해야 한다. "평균 1.69단계"만 말하면 네트워크가 촘촘하게 들리지만, 실제로는 순서쌍 20개 중 4개(20%)는 아예 도달 불가다. 도달 불가 비율을 함께 적는 것이 정직한 요약이다. igraph의 mean_distance()도 기본값 unconnected = TRUE에서 도달 불가 쌍을 제외하고 평균한다.

8. R 검증 (Verification in R)

library(igraph)
g <- graph_from_adjacency_matrix(A, mode = "directed")

distances(g, mode = "out")
#     M1  M2  M3 M4  M5
#  M1   0   1   1  2   1
#  M2   2   0   1  2   3
#  M3   1   2   0  1   2
#  M4 Inf Inf Inf  0 Inf     ← M4에서 나갈 수 없다
#  M5   1   2   2  3   0

diameter(g)                # 3
mean_distance(g)           # 1.6875   ← Inf 제외한 16쌍의 평균

# mode 인자 주의: "out"은 나가는 방향(내가 남에게), "in"은 들어오는 방향
distances(g, mode = "in")["M4", ]   # M4로 들어오는 거리: 2 2 1 0 3

§2의 정의를 그대로 코드로 옮겨 손 계산과 맞춰 볼 수도 있다:

# A^k에서 처음 0이 아닌 k 찾기 — 정의를 직접 구현
D <- matrix(Inf, 5, 5, dimnames = dimnames(A))
diag(D) <- 0
P <- diag(5)
for (k in 1:4) {
  P <- P %*% A                      # P = A^k
  D[D == Inf & P > 0] <- k          # 아직 안 채워진 칸만 채운다
}
D                                    # distances(g, mode="out")와 동일

# sna 패키지
library(sna)
geodist(A)$gdist    # 위 distances(g,"out")와 동일 (도달 불가는 Inf)
geodist(A)$counts   # 최단 경로가 몇 개인지 — 단원 2-3(매개 중심성)의 재료

sna::geodist()inf.replace 인자에 주의. 기본값은 inf.replace = Inf이므로 도달 불가가 그대로 \infty로 남는다(위 출력). 그런데 이 인자에 유한한 값을 주면(옛 교재에서 inf.replace = 5처럼 노드 수를 넣는 관행이 있었다) 도달 불가 쌍이 "거리 5"로 바뀌어 평균거리를 왜곡한다 — 무한을 유한한 값으로 낮추므로 과소평가다. 평균을 내기 전에 행렬 안에 어떤 값이 들어 있는지 반드시 확인할 것.

9. 교실 해석 (Classroom Interpretation)

① 측지거리는 "소식이 도는 단계 수"다. d(M2,M5)=3d(M_2,M_5)=3은 M2가 아는 이야기가 M5에게 닿으려면 최소 세 사람의 입을 거쳐야 한다는 뜻이다. 학급 공지·소문 확산 속도를 가늠할 때 쓰는 값이며, 지름 3은 "최악의 경우에도 3단계"라는 상한이다.

② 평균거리보다 도달 불가 쌍이 더 중요하다. 우리 반의 평균거리는 1.69로 짧지만, M4는 아무에게도 말을 전할 수 없는 위치다(DD의 M4 행이 전부 \infty). "평균적으로 가깝다"는 요약이 개별 학생의 고립을 가린다. 거리행렬을 볼 때는 평균보다 \infty가 있는 행·열을 먼저 찾아야 한다.

③ 행과 열을 구별해 읽어야 한다. M4의 은 전부 \infty이지만 (2,2,1,0,3)(2,2,1,0,3)로 모두 유한하다. "M4에게 소식을 전하는 것은 가능하지만 M4의 소식은 퍼지지 않는다." 교사가 M4에게 전달하는 것은 잘 되지만 M4의 어려움이 또래를 통해 드러나기는 어려운 구조다 — 담임이 직접 확인해야 하는 이유다.

④ 거리 1과 2는 질이 다르다. d=1d=1은 직접 친구, d=2d=2는 "친구의 친구"다. 정보 전달에서 한 단계마다 왜곡·누락이 생기므로 d=2d=2d=1d=1의 절반이 아니라 훨씬 약한 연결로 보는 것이 안전하다. 다만 사회학에서는 d=2d=2의 약한 연결이 새로운 정보를 가져오는 통로(약한 연결의 강함)라는 관점도 있다.

⑤ 다음 단계 예고. 오늘 만든 거리행렬 DD는 그대로 근접 중심성(closeness centrality)의 재료가 된다 — 한 학생의 행을 다 더해 역수를 취하면 "이 학생이 모두에게 얼마나 빨리 닿는가"가 된다. 그런데 \infty가 하나라도 있으면 합이 \infty가 되어 버리는 문제가 생긴다. → 단원 2-2

10. 연습문제 (Exercises)

문제 1. d(M5,M4)d(M_5, M_4)를 §4처럼 구하시오. ① A,A2,A3A, A^2, A^3[5,4][5,4] 칸 값을 차례로 적고 ② 처음 0이 아닌 kk를 판정하고 ③ 그 최단 경로를 M5→?→?→M4 형태로 쓰고, 그것이 경로인지(재방문이 없는지) 확인하시오.

문제 2. DD의 M4 행은 전부 \infty인데 M4 열은 전부 유한하다. ① 이 비대칭이 AA의 어떤 특징에서 나오는지 단원 1-4의 용어(외향/내향 연결정도)로 설명하시오. ② 만약 M4가 M3을 지명한다면(A[4,3]=1A[4,3]=1 추가) M4 행의 \infty 4개는 각각 어떤 값이 되는가? DD의 M3 행을 이용해 하나하나 계산하시오. (힌트: M4에서 출발하는 모든 길은 이제 반드시 M3을 먼저 거친다.)

먼저 스스로 풀고 §11 해설과 맞춰 볼 것.

11. 연습문제 해설과 답 (Solutions)

11-1. 문제 1 — d(M5,M4)d(M_5,M_4) (One More Cell)

① 세 행렬의 [5,4][5,4] 칸. §1의 행렬들에서 5행 4열만 뽑아 온다:

kk(Ak)[5,4](A^k)[5,4]판정
10M5는 M4를 직접 지명하지 않았다 (M5의 지명은 M1 하나뿐)계속
202걸음으로 M4에 못 닿는다 — M5→M1까지 간 뒤 M1→M4 지명이 없다계속
313걸음 걷기 1개d=3d=3

② 판정. 처음 0이 아닌 값이 k=3k=3에서 나왔으므로

d(M5,M4)=3 d(M_5, M_4) = \mathbf{3}

③ 경로 복원. M4를 지명한 사람은 M3 한 명뿐이므로 마지막 걸음은 반드시 M3→M4다. 그렇다면 앞의 2걸음은 M5에서 M3까지 가는 길이어야 하고, (A2)[5,3]=1(A^2)[5,3]=1이 그것이다 — M5→M1→M3(단원 1-2 연습문제 1). 이어 붙이면:

M5M1M3(A2)[5,3]=1    M4A[3,4]=1 \underbrace{M_5 \to M_1 \to M_3}_{(A^2)[5,3]=1} \;\to\; \underbrace{M_4}_{A[3,4]=1}

d(M5,M4)=3d(M_5,M_4) = 3, 최단 경로는 M5→M1→M3→M4 하나.

경로인가: M5, M1, M3, M4 네 학생이 모두 다르므로 재방문 없는 경로다 ✓. §3의 정리가 보장한 대로다 — 최단이면 경로다. (M5에서 M4로 가는 경로는 하나 더 있다 — M5→M1→M2→M3→M4, 길이 4. 경로가 여러 개일 때 가장 짧은 것만 측지거리가 된다는 점을 확인해 둘 것.)

참고로 이 값 3은 §7에서 본 이 네트워크의 지름이기도 하다 (d(M2,M5)=3d(M_2,M_5)=3과 함께 가장 먼 쌍).

교실 해석. M5의 이야기가 M4에게 닿으려면 M1과 M3을 모두 거쳐야 한다. 두 사람 중 누구 하나만 빠져도 통로가 끊긴다(M5의 유일한 지명이 M1이고, M4를 지명한 유일한 사람이 M3이므로). 이런 "대체 통로가 없는 연결"이 매개 중심성이 잡아내는 구조다. → 단원 2-3

11-2. 문제 2 — 비대칭의 원인과 회복 (Why M4's Row Is All Infinite)

① 원인. 단원 1-4에서 구한 값을 그대로 쓴다:

M4의 값수치거리행렬에서의 결과
dout(4)d_{\text{out}}(4)0나가는 화살표가 없다 → 어떤 kk에서도 (Ak)[4,j]=0(A^k)[4,j]=0행이 전부 \infty
din(4)d_{\text{in}}(4)1M3이 지명했다 → M3에 닿을 수 있는 학생은 모두 M4에도 닿는다 → 열이 유한

답 ① 외향 연결정도가 0이기 때문이다. 행합이 0이면 AkA^k의 그 행도 영원히 0이므로 (단원 1-4 §3의 경고) M4에서 출발하는 걷기가 아예 없다. 반대로 내향 연결정도가 1이라 들어오는 통로는 살아 있다. 이런 정점을 그래프 이론에서 싱크(sink, 흡수점)라 부른다 — 들어오기만 하고 나가지 않는다.

A[4,3]=1A[4,3]=1을 추가하면. 힌트대로, M4에서 나가는 유일한 지명이 M3이므로 M4에서 어디로 가든 첫 걸음은 M3이고 그 뒤는 M3에서 가는 길과 똑같다. 따라서 각 목적지 jj에 대해

d(M4,j)=1+d(M3,j) d'(M_4, j) = 1 + d(M_3, j)

DD의 M3 행 (1,2,0,1,2)(1,\,2,\,0,\,1,\,2)를 가져와 하나씩 더한다:

목적지 jjd(M3,j)d(M_3,j)1+d(M3,j)1 + d(M_3,j)실제 경로
M112M4→M3→M1
M223M4→M3→M1→M2
M301M4→M3 (첫 걸음이 곧 도착)
M523M4→M3→M1→M5

답 ② M4 행의 \infty 네 개가 각각 d(M4,M1)=2d'(M_4,M_1)=2, d(M4,M2)=3d'(M_4,M_2)=3, d(M4,M3)=1d'(M_4,M_3)=1, d(M4,M5)=3d'(M_4,M_5)=3으로 바뀐다. 즉 새 M4 행은 (2,3,1,0,3)(2,\,3,\,1,\,0,\,3)이다.

부수 효과: 도달 불가 쌍이 4개에서 0개로 사라지므로 이제 모든 순서쌍이 연결된다 (강하게 연결된 네트워크 — 단원 1-7). 지름은 3으로 그대로이고, 평균거리는 20쌍 전체를 평균해 (27+2+3+1+3)/20=36/20=1.8(27 + 2+3+1+3)/20 = 36/20 = 1.8커진다. 멀지만 연결된 쌍이 새로 생기면 평균거리가 올라갈 수 있다는 점을 확인해 둘 것 — 연결이 늘었으니 평균거리가 줄 것이라고 착각하기 쉽다.

# 문제 1
A2 <- A %*% A; A3 <- A2 %*% A
c(A[5,4], A2[5,4], A3[5,4])       # 0 0 1  → d = 3
all_simple_paths(g, from="M5", to="M4")
# [[1]] M5 M1 M2 M3 M4   ← 길이 4
# [[2]] M5 M1 M3 M4      ← 길이 3 = 최단 경로

# 문제 2
Ax <- A; Ax[4,3] <- 1
gx <- graph_from_adjacency_matrix(Ax, mode="directed")
distances(gx, mode="out")["M4", ]   # M1 M2 M3 M4 M5 → 2 3 1 0 3  ✓
mean_distance(gx)                   # 1.8    ← 1.6875에서 늘어났다
diameter(gx)                        # 3      ← 그대로
is_connected(gx, mode = "strong")   # TRUE   ← 모든 쌍이 서로 도달 가능

다음 단원 — 1-7: 도달가능성 행렬과 강한/약한 컴포넌트. 오늘 \infty로 표시한 칸들을 0/1로만 요약하면 도달가능성 행렬이 되고, 거기서 "서로 오갈 수 있는 학생 집단"이 드러난다. · 이 문서: notes/06_단원1-6_측지거리_Ak에서_최단거리.html