커뮤니티 탐지 알고리즘
SNA 이론 · 단계별 학습 차례

단원 3-4Community Detection Algorithms

커뮤니티 탐지 알고리즘

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

1. 지난 시간 연습문제 확인 (Checking Last Session's Exercises)

단원 3-3에서 낸 두 문제의 답을 먼저 맞춰 보자.

문제 1 — 3분할에서도 두 항이 같을까? (Last Session's Exercise 1 — Does It Hold for Three Groups?)

분할 P5={S1,S3,S5}{S2,S4}{S6,S7,S8}P_5=\{S_1,S_3,S_5\}\mid\{S_2,S_4\}\mid\{S_6,S_7,S_8\}에 대해:

모둠mcm_cDcD_cmcm\dfrac{m_c}{m}(Dc2m)2\left(\dfrac{D_c}{2m}\right)^2항의 값
{S1,S3,S5}\{S_1,S_3,S_5\}311144/576121/57623/576
{S2,S4}\{S_2,S_4\}1648/57636/57612/576
{S6,S7,S8}\{S_6,S_7,S_8\}37144/57649/57695/576
합계 QQ130/576 = 0.2257

세 항이 23, 12, 95로 전부 다르다. 모둠이 둘일 때는 DA+DB=2mD_A+D_B=2m이 성립해서 두 항이 언제나 같아졌지만, 셋이 되면 DA+DB2mD_A+D_B\neq 2m이므로 그 증명이 무너진다. 오늘 §10에서 이 P5P_5Louvain 알고리즘이 실제로 도중에 만들어 내는 분할이라는 것을 보게 된다.

문제 2 — 아령 그래프에서 다리를 끊으면 (Last Session's Exercise 2 — Cutting the Bridge of a Barbell)

아령 그래프 HH(삼각형 A와 B를 A1–B1 하나로 이은 6명 7간선):

상황mmmcm_cDcD_cQQ
다리가 있을 때 A|B로 나눔73, 37, 72(3749196)=1028=5140.35712\left(\frac{3}{7}-\frac{49}{196}\right)=\frac{10}{28}=\dfrac{5}{14}\approx 0.3571
다리 A1–B1을 끊고 A|B63, 36, 62(3636144)=122\left(\frac{3}{6}-\frac{36}{144}\right)=\dfrac{1}{2}

손실 12514=17\frac12-\frac5{14}=\frac{1}{7}전부 mc/mm_c/m 항에서 나왔다 ((Dc/2m)2\left(D_c/2m\right)^2 항은 다리가 있든 없든 2×142\times\frac14로 똑같다). 다리를 놓은 A1이 QQ에게는 벌점이었다는 뜻이다.

오늘은 이 HH를 다시 쓴다. §18의 두 연습문제에서 같은 아령 그래프에 알고리즘을 직접 돌려 볼 것이다. 값을 이미 알고 있으니 알고리즘이 그 값을 찾아내는지 확인하기에 딱 좋다.

2. 오늘의 질문: 4140개는 세어 봤지만 (Why We Need Algorithms)

단원 3-3에서 우리는 8명짜리 망 WW모든 분할 4140개를 전수 조사해서 QQ의 최댓값이 190/576190/576임을 확인했다. 8명은 그렇게 할 수 있었다. 그러면 34명인 가라테 클럽은?

사람 수 nn가능한 분할의 수 (벨 수 BnB_n)
552
84,140 ← 단원 3-3에서 전수 조사한 것
151,382,958,545
342.1195×10282.1195\times 10^{28}

2.1×10282.1\times10^{28}개는 1초에 10억 개씩 세어도 우주 나이보다 오래 걸린다. “두 모둠으로만 나눈다”고 제한을 걸어도 2331=8,589,934,5912^{33}-1=8{,}589{,}934{,}591가지다.

더 나쁜 소식: 모듈러리티 최대화는 NP-완전 문제로 증명되어 있다 (Brandes 외, 2008). 즉 “언제나 최적을 빠르게 찾는 방법”은 (아마도) 존재하지 않는다. 그래서 실제로 쓰는 것은 전부 휴리스틱(heuristic) — 좋은 답을 빨리 찾되 최적을 보장하지는 않는 방법 — 이다.

그런데 다행인 점이 하나 있다. 학급은 작다. 30명 규모라면 정수계획법으로 진짜 최댓값을 구하는 cluster_optimal()이 실제로 돌아간다 (§14에서 가라테 34명에 대해 실행해 볼 것이다). 즉 교사에게는 “최적을 알고 있는 상태에서 휴리스틱을 채점할 수 있는” 드문 상황이 주어진다.

3. 두 가지 방향 — 자를 것인가, 붙일 것인가 (Divisive vs Agglomerative)

커뮤니티를 찾는 방법은 크게 두 갈래다.

분리형 (divisive)병합형 (agglomerative)
출발점전원이 한 모둠전원이 혼자
하는 일모둠 사이를 잇는 간선을 끊는다붙일수록 이득인 둘을 합친다
보는 것“어느 간선이 다리인가”“어느 둘이 뜻밖에 가까운가”
대표Girvan–Newmanfast greedy, Louvain
QQ를 쓰는가자를 때는 안 쓴다 (마지막에 고를 때만)매 단계 ΔQ\Delta Q로 결정

두 방향은 정반대의 실수를 한다. 분리형은 다리를 잘 찾지만 다리가 여러 개면 헤매고, 병합형은 촘촘한 덩어리를 잘 찾지만 한 번 붙인 것을 되돌리지 못한다. 오늘은 같은 망 WW에 두 방향을 다 손으로 돌려서 그 차이를 눈으로 본다.

4. 간선 매개 중심성 — 손 계산 (Edge Betweenness by Hand)

단원 2-3에서 정점의 매개 중심성을 배웠다. 여기서는 대상이 간선이 된다.

CB(e)  =  s<tσst(e)σst C_B(e) \;=\; \sum_{s<t}\frac{\sigma_{st}(e)}{\sigma_{st}}

σst\sigma_{st} = ss에서 tt로 가는 최단경로의 개수, σst(e)\sigma_{st}(e) = 그중 간선 ee를 지나는 것의 개수.
즉 “모든 쌍이 서로에게 갈 때, 이 간선을 몇 번이나 밟고 지나가는가”. 갈림길이 있으면 공평하게 나눠 준다.

WW(8명, 12간선)로 계산한다. 정점 쌍은 (82)=28\binom{8}{2}=28개. 28쌍을 하나도 빼지 않고 전부 적는다.

(s,t)(s,t)거리σst\sigma_{st}최단경로 전부각 경로가 밟는 간선
(S1,S2)23S1-S3-S2 S1-S4-S2 S1-S5-S2각 경로에 13\tfrac13
(S1,S3)11S1-S3S1-S3에 1
(S1,S4)11S1-S4S1-S4에 1
(S1,S5)11S1-S5S1-S5에 1
(S1,S6)21S1-S5-S6S1-S5, S5-S6에 1씩
(S1,S7)31S1-S5-S6-S7S1-S5, S5-S6, S6-S7에 1씩
(S1,S8)31S1-S5-S6-S8S1-S5, S5-S6, S6-S8에 1씩
(S2,S3)11S2-S3S2-S3에 1
(S2,S4)11S2-S4S2-S4에 1
(S2,S5)11S2-S5S2-S5에 1
(S2,S6)21S2-S5-S6S2-S5, S5-S6
(S2,S7)31S2-S5-S6-S7S2-S5, S5-S6, S6-S7
(S2,S8)31S2-S5-S6-S8S2-S5, S5-S6, S6-S8
(S3,S4)23S3-S1-S4 S3-S2-S4 S3-S5-S4각 경로에 13\tfrac13
(S3,S5)11S3-S5S3-S5에 1
(S3,S6)21S3-S5-S6S3-S5, S5-S6
(S3,S7)31S3-S5-S6-S7S3-S5, S5-S6, S6-S7
(S3,S8)31S3-S5-S6-S8S3-S5, S5-S6, S6-S8
(S4,S5)11S4-S5S4-S5에 1
(S4,S6)21S4-S5-S6S4-S5, S5-S6
(S4,S7)31S4-S5-S6-S7S4-S5, S5-S6, S6-S7
(S4,S8)31S4-S5-S6-S8S4-S5, S5-S6, S6-S8
(S5,S6)11S5-S6S5-S6에 1
(S5,S7)21S5-S6-S7S5-S6, S6-S7
(S5,S8)21S5-S6-S8S5-S6, S6-S8
(S6,S7)11S6-S7S6-S7에 1
(S6,S8)11S6-S8S6-S8에 1
(S7,S8)11S7-S8S7-S8에 1 (S7-S6-S8은 길이 2라 최단이 아님)

간선별로 모아 보기 (Collecting by Edge)

간선이 간선을 밟는 쌍과 몫CBC_B
S1–S3(S1,S3) 1 + (S1,S2) 13\tfrac13 + (S3,S4) 13\tfrac135/3 ≈ 1.67
S1–S4(S1,S4) 1 + (S1,S2) 13\tfrac13 + (S3,S4) 13\tfrac135/3
S1–S5(S1,S5) 1 + (S1,S2) 13\tfrac13 + (S1,S6) 1 + (S1,S7) 1 + (S1,S8) 113/3 ≈ 4.33
S2–S3(S2,S3) 1 + (S1,S2) 13\tfrac13 + (S3,S4) 13\tfrac135/3
S2–S4(S2,S4) 1 + (S1,S2) 13\tfrac13 + (S3,S4) 13\tfrac135/3
S2–S5(S2,S5) 1 + (S1,S2) 13\tfrac13 + (S2,S6) 1 + (S2,S7) 1 + (S2,S8) 113/3
S3–S5(S3,S5) 1 + (S3,S4) 13\tfrac13 + (S3,S6) 1 + (S3,S7) 1 + (S3,S8) 113/3
S4–S5(S4,S5) 1 + (S3,S4) 13\tfrac13 + (S4,S6) 1 + (S4,S7) 1 + (S4,S8) 113/3
S5–S6{S1,,S5}\{S_1,\dots,S_5\}의 5명 × {S6,S7,S8}\{S_6,S_7,S_8\}의 3명 = 15쌍이 전부 이 간선을 지난다15
S6–S7S7로 가는 쌍 6개: (S1,S7)(S2,S7)(S3,S7)(S4,S7)(S5,S7)(S6,S7)6
S6–S8S8로 가는 쌍 6개6
S7–S8(S7,S8) 하나뿐1
검산 — 총합은 모든 쌍의 거리 합과 같아야 한다.
(s,t)(s,t)는 최단경로를 따라 간선을 정확히 d(s,t)d(s,t)번 밟는다(갈림길이 있어도 몫을 나눠 가지므로 합은 같다). 따라서 eCB(e)=s<td(s,t)\sum_e C_B(e)=\sum_{s<t} d(s,t).
거리쌍의 수기여
11212
2816
3824
거리 총합52
간선 매개 총합 =4×53+4×133+15+6+6+1=203+523+28=24+28=52=4\times\tfrac53+4\times\tfrac{13}3+15+6+6+1=\tfrac{20}{3}+\tfrac{52}{3}+28=24+28=\mathbf{52}
W의 간선 매개 중심성
그림 13. 굵기가 간선 매개. S5–S6 하나가 15로 압도적이다.

값이 말해 주는 것 (What the Values Tell Us)

  • S5–S6 = 15: 이 간선을 끊으면 15쌍이 서로에게 못 간다. 이 망의 유일한 다리다.
  • S7–S8 = 1: 삼각형 안쪽이라 “지나갈 일”이 없다. S7과 S8이 서로 갈 때뿐. 가까운 사이일수록 매개가 낮다는 것이 핵심 — 매개가 높은 간선은 친한 사이가 아니라 연결 담당이다.
  • 13/3 vs 5/3: 같은 오각형 간선인데 S5에 붙은 것(13/3)이 붙지 않은 것(5/3)보다 2.6배 높다. S5가 바깥으로 나가는 유일한 문이라서, S1~S4가 밖으로 나갈 때 반드시 S5를 거치기 때문이다.
교실 해석. 간선 매개가 높은 관계는 “친한 두 명”이 아니라 두 무리를 잇는 통로다. S5–S6이 끊어지면(자리 바꾸기, 전학, 다툼) 학급이 즉시 5명과 3명으로 갈라진다. 반대로 S7–S8은 끊어져도 학급 구조가 거의 안 변한다. 관계의 강도구조적 중요도는 다른 이야기다.

5. Girvan–Newman: 위에서 자르며 내려가기 (The Girvan–Newman Algorithm)

알고리즘 (Girvan & Newman, 2002)
  1. 모든 간선의 매개 중심성을 계산한다.
  2. 가장 높은 간선 하나를 제거한다.
  3. 남은 망에서 매개를 다시 계산한다. ← 이 재계산이 핵심
  4. 간선이 다 없어질 때까지 1~3을 반복하고, 도중에 생긴 분할들 중 QQ가 가장 큰 것을 답으로 고른다.

WW에 그대로 돌려 보자. 동점이면 번호가 작은 간선을 먼저 제거한다.

단계제거 간선그때의 매개덩어리분할QQ
1S5–S6152{S1,S2,S3,S4,S5} | {S6,S7,S8}190/576
2S1–S35/32(변화 없음)190/576
3S1–S55/22(변화 없음)190/576
4S1–S443{S1} | {S2,S3,S4,S5} | {S6,S7,S8}130/576
5S2–S33/23(변화 없음)130/576
6S3–S534{S1} | {S2,S4,S5} | {S3} | {S6,S7,S8}100/576
7S2–S414(변화 없음)100/576
8S2–S525{S1} | {S2} | {S3} | {S4,S5} | {S6,S7,S8}52/576
9S4–S516{S1}|{S2}|{S3}|{S4}|{S5}|{S6,S7,S8}34/576
10S6–S716(변화 없음)34/576
11S6–S827{S1}…{S6} | {S7,S8}−38/576
12S7–S818전원 혼자−78/576
재계산이 없으면 Girvan–Newman이 아니다. 단계 2에서 S1–S3의 매개는 원래 값 5/3 그대로였지만, 단계 3의 S1–S5는 2.5다 — 원래 13/3(≈4.33)이었던 값이 S5–S6과 S1–S3이 사라진 뒤 달라진 것이다. 단계 4의 S1–S4는 원래 5/3이었는데 4로 올라갔다. 간선을 하나 끊을 때마다 통행로가 바뀌므로, “처음 계산한 순위대로 12개를 차례로 지우는 것”은 전혀 다른 알고리즘이 된다.

단계 1에서 이미 끝났다 (The Split Is Already Done at Step 1)

QQ의 최댓값 190/576190/576첫 번째 간선을 자르자마자 나왔고, 그 뒤로는 계속 내려가기만 한다. WW에서 GN은 사실상 “다리를 한 번 짚는 것”만으로 답을 냈다. 이것이 분리형의 장점이다 — 다리가 뚜렷하면 한 방에 찾는다.

6. 병합 이득 ΔQ\Delta Q 공식 (The Merge-Gain Formula)

이제 반대 방향, 병합형으로 간다. 병합형은 매 단계 “이 둘을 합치면 QQ가 얼마나 오르나”를 물어야 한다. 단원 3-3의 모둠별 공식에서 바로 유도된다.

Q=c[mcm(Dc2m)2] Q=\sum_c\left[\frac{m_c}{m}-\left(\frac{D_c}{2m}\right)^2\right] 모둠 AABB를 합치면 새 모둠은 mA+mB+mABm_{A}+m_{B}+m_{AB}개의 내부 간선과 DA+DBD_A+D_B의 차수 합을 갖는다(mABm_{AB}AABB 사이의 간선 수). ΔQ=[mA+mB+mABm(DA+DB2m)2]합친 뒤[mAm(DA2m)2]A[mBm(DB2m)2]B \Delta Q=\underbrace{\left[\frac{m_A+m_B+m_{AB}}{m}-\left(\frac{D_A+D_B}{2m}\right)^2\right]}_{\text{합친 뒤}} -\underbrace{\left[\frac{m_A}{m}-\left(\frac{D_A}{2m}\right)^2\right]}_{A} -\underbrace{\left[\frac{m_B}{m}-\left(\frac{D_B}{2m}\right)^2\right]}_{B} mA/m, mB/mm_A/m,\ m_B/m은 서로 지워지고, (DA+DB)2DA2DB2=2DADB(D_A+D_B)^2-D_A^2-D_B^2=2D_AD_B이므로   ΔQ=mABm2DADB(2m)2   \boxed{\;\Delta Q=\frac{m_{AB}}{m}-\frac{2\,D_A D_B}{(2m)^2}\;}

WWm=12, 2m=24, (2m)2=576m=12,\ 2m=24,\ (2m)^2=576이므로 전부 576분의 정수로 떨어진다:

ΔQ=48mAB2DADB576 \Delta Q=\frac{48\,m_{AB}-2\,D_A D_B}{576}

이 공식이 모듈러리티 행렬과 같은 것임을 확인하기 (The Formula Is the Modularity Matrix Again)

둘 다 혼자인 두 사람 i,ji,j를 합칠 때는 mAB=A[i,j], DA=di, DB=djm_{AB}=A[i,j],\ D_A=d_i,\ D_B=d_j이므로

ΔQ=48A[i,j]2didj576=2(24A[i,j]didj)576=2(24B)[i,j]576 \Delta Q=\frac{48A[i,j]-2d_id_j}{576}=\frac{2\left(24A[i,j]-d_id_j\right)}{576}=\frac{2\cdot\left(24B\right)[i,j]}{576}
첫 번째 병합은 단원 3-3에서 만든 24B24B 표에서 가장 큰 칸을 고르는 것과 정확히 같다. B=AddT2mB=A-\frac{dd^{\mathsf T}}{2m}i,ji,j칸은 “iijj 사이에 우연보다 얼마나 더 있는가”였다. 탐욕 병합은 그 잉여가 가장 큰 쌍부터 붙인다.

단원 3-3의 24B24B 표에서 대각선 밖 최댓값을 찾아보면:

24A[i,j]24A[i,j]didjd_id_j(24B)[i,j](24B)[i,j]ΔQ\Delta Q (576분의)
S7,S8242×2 = 4+2040
S6,S7 / S6,S8243×2 = 6+1836
S1,S3 / S1,S4 / S2,S3 / S2,S4243×3 = 9+1530
S1,S5 / S2,S5 / S3,S5 / S4,S5 / S5,S6243×5 = 15+918
S1,S2 / S3,S4 / S1,S6 …09−9−18
S5,S7 / S5,S805×2 = 10−10−20
S1,S7 / S1,S8 / …03×2 = 6−6−12
가장 큰 이득이 S7–S8이라는 것에 주목하자. 차수가 2뿐인, 학급에서 가장 인기 없는 두 명이다. ΔQ\Delta QA[i,j]A[i,j]가 같으면 didjd_id_j작을수록 커진다. 즉 탐욕 병합은 “간선 하나가 가장 뜻밖인 쌍”부터 붙인다. 인기 있는 둘이 이어져 있는 것은 우연히도 그럴 만하므로 증거가 약하다.

7. fast greedy: 아래에서 붙이며 올라가기 (Fast Greedy / CNM)

알고리즘 (Clauset–Newman–Moore, 2004)
  1. 전원을 혼자 두고 시작한다 (Q=78/576Q=-78/576).
  2. 모든 모둠 쌍에 대해 ΔQ\Delta Q를 계산하고, 가장 큰 하나를 합친다.
  3. ΔQ\Delta Q의 최댓값이 음수가 되면 멈춘다.

손으로 끝까지 돌린다. 매 단계 후보를 전부 적는다 (같은 값이 여러 개면 하나만 대표로 적고 동점임을 밝힌다).

반복 1 — 전원이 혼자 (Iteration 1 — Everyone a Singleton)

후보는 (82)=28\binom82=28쌍. 위 §6의 표가 그대로 이 단계의 계산이다. 간선이 있는 12쌍은 양수, 없는 16쌍은 전부 음수.

후보mABm_{AB}DAD_ADBD_B48mAB2DADB48m_{AB}-2D_AD_BΔQ\Delta Q
{S7}+{S8}12248 − 8+40/576
{S6}+{S7}, {S6}+{S8}13248 − 12+36/576
{S1}+{S3} 등 4쌍13348 − 18+30/576
{S1}+{S5} 등 5쌍13548 − 30+18/576
간선 없는 16쌍0음수−8 … −20

{S7,S8} 병합. Q: 78+40=38/576Q:\ -78+40=\mathbf{-38}/576

반복 2 — {S7,S8}이 생겼다 (Iteration 2 — {S7,S8} Is Born)

후보mABm_{AB}DAD_ADBD_B계산ΔQ\Delta Q
{S6}+{S7,S8}23496 − 24+72/576
{S1}+{S3} 등13348 − 18+30/576
{S1}+{S5} 등13548 − 30+18/576
{S1}+{S7,S8}0340 − 24−24/576
{S5}+{S7,S8}0540 − 40−40/576

S6은 {S7,S8}과 두 개의 간선을 갖는다(S6–S7, S6–S8). mAB=2m_{AB}=2가 되면서 이득이 두 배로 뛰었다. → {S6,S7,S8} 병합. Q: 38+72=34/576Q:\ -38+72=\mathbf{34}/576

반복 3~6 — 오각형 쪽이 뭉친다 (Iterations 3–6 — the Pentagon Side Gathers)

반복최선의 병합mABm_{AB}DA,DBD_A,D_BΔQ\Delta Q병합 후 분할QQ
3{S1}+{S3} (동점 4개)13, 3+30{S1,S3}|{S2}|{S4}|{S5}|{S6,S7,S8}64/576
4{S1,S3}+{S5}26, 5+36{S1,S3,S5}|{S2}|{S4}|{S6,S7,S8}100/576
5{S1,S3,S5}+{S2} (동점 3개)211, 3+30{S1,S2,S3,S5}|{S4}|{S6,S7,S8}130/576
6{S1,S2,S3,S5}+{S4}314, 3+60{S1,S2,S3,S4,S5}|{S6,S7,S8}190/576
7{S1..S5}+{S6,S7,S8}117, 748 − 238 = −190전원 한 모둠0

반복 7의 ΔQ\Delta Q가 음수이므로 여기서 멈춘다. 최종 답은 190/576190/576 — GN과 같은 답, 그리고 단원 3-3에서 전수 조사로 확인한 진짜 최적이다.

검산 두 가지.
① 이득의 합: 78+40+72+30+36+30+60=190-78+40+72+30+36+30+60=\mathbf{190}
② 마지막 병합의 이득이 190/576-190/576이고 190190=0190-190=0 — 단원 3-3에서 증명한 “전원 한 모둠이면 QQ언제나 정확히 0”과 일치한다 ✓
탐욕은 되돌리지 못한다. WW에서는 운 좋게 최적에 닿았지만, 반복 3에서 {S1}+{S3}을 고른 순간 그 결정은 영원히 유지된다. 가라테(§14)에서는 이 근시안 때문에 fast greedy가 Q=0.3807Q=0.3807에 갇힌다 — 최적 0.41980.4198에 한참 못 미친다.

8. 두 길이 지나간 자리 (The Two Trajectories)

GN은 8모둠 쪽에서 2모둠 쪽으로 내려왔고, fast greedy는 8모둠에서 올라갔다. 같은 “모둠 수”에서 두 알고리즘이 만든 분할의 QQ를 나란히 놓아 본다.

모둠 수87654321
GN (자르며 내려옴)−78−3834521001301900
fast greedy (붙이며 올라감)−78−3834641001301900

(단위: /576)

Q 궤적 비교
그림 14. 두 알고리즘이 지나간 길. 5모둠 지점에서만 갈린다.

여덟 지점 중 일곱 곳에서 값이 같고, 5모둠에서만 갈린다:

알고리즘5모둠일 때의 분할QQ
GN{S1} | {S2} | {S3} | {S4,S5} | {S6,S7,S8}52/576
fast greedy{S1,S3} | {S2} | {S4} | {S5} | {S6,S7,S8}64/576

GN이 오각형을 “S4–S5만 남기고 다 끊은” 모양으로 만든 반면, fast greedy는 “S1–S3만 붙인” 모양을 만들었다. 방향이 반대이니 당연히 다른 중간 상태다. 중간 과정이 다른데 최종 답은 같다 — 구조가 뚜렷한 망에서는 길이 달라도 도착지가 같다. §14에서 구조가 뚜렷하지 않으면 어떻게 되는지 볼 것이다.

9. Louvain ① 국소 이동 (Louvain: Local Moving)

Louvain(Blondel 외, 2008)은 현재 가장 널리 쓰이는 방법이다. 두 단계를 번갈아 반복한다.

1단계 (국소 이동). 정점을 하나씩 훑으면서, 그 정점을 자기 모둠에서 일단 뺀 뒤 이웃이 속한 각 모둠에 넣어 보고 ΔQ\Delta Q가 가장 큰 곳으로 옮긴다. 아무도 안 움직일 때까지 반복한다.
2단계 (집계). 각 모둠을 정점 하나로 압축하고 1단계를 다시 한다.

정점 vv를 모둠 CC에 넣을 때의 이득은 §6 공식에서 mAB=kv,inm_{AB}=k_{v,\text{in}}(= vv에서 CC로 가는 간선 수), DA=dvD_A=d_v, DB=DCD_B=D_C로 놓은 것이다:

ΔQ=48kv,in2dvDC576 \Delta Q=\frac{48\,k_{v,\text{in}}-2\,d_v D_C}{576}

순서를 S1→S8로 두고 손으로 돌린다. 동점이면 번호가 작은 모둠을 택한다.

순회 1 (Sweep 1)

정점후보 모둠과 ΔQ\Delta Q (576분의)결정
S1 (d=3d=3){S3}: 48233576=+30\frac{48-2\cdot3\cdot3}{576}=+30  |  {S4}: +30+30  |  {S5}: 48235576=+18\frac{48-2\cdot3\cdot5}{576}=+18  |  혼자: 0{S3}로 이동
(S3·S4 동점)
S2 (d=3d=3){S1,S3}: kin=1,D=64836576=+12k_{\text{in}}=1,D=6\to\frac{48-36}{576}=+12  |  {S4}: +30+30  |  {S5}: +18+18{S4}로 이동
S3{S1}: +30+30  |  {S2,S4}: +12+12  |  {S5}: +18+18{S1}에 그대로
S4{S1,S3}: +12+12  |  {S2}: +30+30  |  {S5}: +18+18{S2}에 그대로
S5 (d=5d=5){S1,S3}: kin=2,D=69660576=+36k_{\text{in}}=2,D=6\to\frac{96-60}{576}=+36  |  {S2,S4}: +36+36  |  {S6}: 4830576=+18\frac{48-30}{576}=+18{S1,S3}으로 이동
S6 (d=3d=3){S1,S3,S5}: kin=1,D=114866576=k_{\text{in}}=1,D=11\to\frac{48-66}{576}=−18  |  {S7}: +36+36  |  {S8}: +36+36{S7}로 이동
S7 (d=2d=2){S6}: 4812576=+36\frac{48-12}{576}=+36  |  {S8}: 488576=\frac{48-8}{576}=+40{S8}로 이동
S8{S6}: +36+36  |  {S7}: +40+40{S7}에 그대로

순회 2 (Sweep 2)

정점후보 모둠과 ΔQ\Delta Q결정
S1{S3,S5}: kin=2,D=89648576=+48k_{\text{in}}=2,D=8\to\frac{96-48}{576}=+48  |  {S2,S4}: +12+12그대로
S2{S1,S3,S5}: kin=2,D=119666576=+30k_{\text{in}}=2,D=11\to\frac{96-66}{576}=+30  |  {S4}: +30+30동점 → 그대로
S3{S1,S5}: +48+48  |  {S2,S4}: +12+12그대로
S4{S1,S3,S5}: +30+30  |  {S2}: +30+30동점 → 그대로
S5{S1,S3}: +36+36  |  {S2,S4}: +36+36  |  {S6}: +18+18그대로
S6{S1,S3,S5}: 18−18  |  {S7,S8}: kin=2,D=49624576=k_{\text{in}}=2,D=4\to\frac{96-24}{576}=+72{S7,S8}로 이동
S7{S6,S8}: kin=2,D=59620576=+76k_{\text{in}}=2,D=5\to\frac{96-20}{576}=+76그대로
S8{S6,S7}: +76+76그대로

순회 3에서는 아무도 움직이지 않는다 → 1단계 종료.

1단계의 답: {S1,S3,S5}{S2,S4}{S6,S7,S8}\{S_1,S_3,S_5\}\mid\{S_2,S_4\}\mid\{S_6,S_7,S_8\}, Q=130/576=0.2257Q=130/576=0.2257.
최적 190/576190/576못 미친다. 그리고 이 분할은 §1에서 답을 맞춘 지난 시간의 P5P_5 바로 그것이다. 한 명씩만 물어보는 국소 이동은 여기서 막힌다.

왜 막혔는가 — 순회 2의 동점을 보라 (Why It Stalls — the Tie in Sweep 2)

S2에게 “{S1,S3,S5}로 옮길래?”라고 물으면 이득이 +30+30, 지금 있는 {S4}에 남는 것도 +30+30이다. 혼자 옮겨서는 아무 이득이 없다. S4도 마찬가지다. 그런데 S2와 S4가 함께 옮기면 이야기가 달라진다. 그것이 2단계다.

10. Louvain ② 집계 (Louvain: Aggregation)

1단계 결과의 각 모둠을 정점 하나로 압축한다. 모둠 안의 간선은 그 정점의 자기 고리가 되고, 모둠 사이의 간선은 가중치가 된다.

초정점원래 모둠내부 간선 (자기 고리)DcD_c
A{S1,S3,S5}S1–S3, S1–S5, S3–S5 → 33+3+5 = 11
B{S2,S4}S2–S4 → 13+3 = 6
C{S6,S7,S8}S6–S7, S6–S8, S7–S8 → 33+2+2 = 7
초정점 사이원래 간선mABm_{AB}
A–BS1–S4, S2–S3, S2–S5, S4–S54
A–CS5–S61
B–C없음0

검산: 내부 3+1+3=73+1+3=7, 사이 4+1+0=54+1+0=5, 합 12 = mm ✓   DD11+6+7=24=2m11+6+7=24=2m

초정점 3개로 다시 병합 이득 계산 (Merge Gains on the Three Super-Nodes)

후보mABm_{AB}DAD_ADBD_B48mAB2DADB48m_{AB}-2D_AD_BΔQ\Delta Q
A+B4116192 − 132+60/576
A+C111748 − 154−106/576
B+C0670 − 84−84/576

A와 B를 합친다 → Q=130+60=190/576Q = 130 + 60 = \mathbf{190}/576. 최적 도달. 다시 집계해도 더 합칠 것이 없으므로(A∪B와 C를 합치면 190-190) 여기서 끝난다.

집계 단계가 하는 일. 국소 이동에서 S2와 S4는 각각 혼자 움직여 봐야 이득이 0이었다. 그러나 둘을 한 덩어리로 묶어서 통째로 옮기니 +60+60이 나왔다. 개인에게 하나씩 물어보면 아무도 안 움직이는데, 짝끼리 같이 옮기면 모두가 이득인 상황 — 집계는 정확히 그런 상황을 잡아내기 위한 장치다.
교실 해석. 모둠을 재편할 때 “한 명씩 옮겨 볼까?”로는 절대 도달할 수 없는 배치가 있다. 서로 붙어 다니는 두세 명은 같이 옮겨야 의미가 있다. Louvain의 2단계는 이 사실을 알고리즘으로 만든 것이다.

11. Louvain은 왜 돌릴 때마다 다른가 (Why Louvain Is Unstable)

단원 3-3에서 “Louvain은 실행할 때마다 답이 달라진다”고만 하고 넘어갔다. 이제 이유를 정확히 짚을 수 있다.

원인은 §9 순회 1의 첫 줄에 이미 있었다.
S1에게 물었을 때 {S3}도 +30+30, {S4}도 +30+30으로 완전히 동점이었다. 어느 쪽을 고르느냐는 순전히 정점을 훑는 순서가 정한다. 그리고 Louvain은 그 순서를 무작위로 섞는다.

실제로 순서만 바꿔서 1단계를 200번 돌려 봤다.

1단계가 낸 분할QQ횟수 / 200
{S1,S2,S3,S4,S5} | {S6,S7,S8}190/57657 (28.5%)
{S1,S3,S5} | {S2,S4} | {S6,S7,S8}130/57670
{S1,S4,S5} | {S2,S3} | {S6,S7,S8}130/57669
{S1,S4} | {S2,S3,S5} | {S6,S7,S8}130/5764
  • S1→S8 순서(§9에서 손으로 돌린 것)는 130/576130/576에서 끝났다.
  • S8→S1 순서로 돌리면 1단계에서 바로 190/576190/576이 나온다.
  • 순서만으로 답이 갈린다. 1단계만 놓고 보면 최적에 닿는 것은 28.5%뿐.
그런데 WW에서는 결국 항상 최적이 나온다. 위 세 가지 실패 분할은 모두 Q=130/576Q=130/576이고, 어느 것이든 2단계 집계를 거치면 ΔQ=+60/576\Delta Q=+60/576짜리 병합이 하나 남아 있어 190/576190/576으로 올라간다. cluster_louvain(gW)를 20개의 서로 다른 seed로 돌려도 전부 190/576190/576이었다.
1단계는 흔들리지만, 2단계가 받쳐 준다.
가라테에서는 받쳐 주지 못한다. 34명 망에서 100번 돌린 결과 QQ는 0.3886 ~ 0.4198로 흩어졌고, 최댓값 0.4198에 닿은 것은 30번뿐이었다(§14). 망이 커지고 동점이 많아질수록 순서 의존성이 이긴다. Louvain은 반드시 여러 번 돌려서 가장 좋은 것을 쓰라.

12. walktrap: 걸어서 재는 거리 (Walktrap: Random-Walk Distance)

지금까지의 방법은 전부 QQ나 매개를 봤다. walktrap(Pons & Latapy, 2005)은 전혀 다른 발상이다.

발상: 망 위를 무작위로 걸으면 모둠 안에 갇히기 쉽다(그래서 “walk-trap”). 따라서 “몇 걸음 뒤에 어디 있을 확률”이 비슷한 두 사람은 같은 모둠일 것이다.

한 걸음 전이행렬 PP (The One-Step Transition Matrix)

P[i,j]=A[i,j]/diP[i,j]=A[i,j]/d_iii에 서 있을 때 다음 걸음에 jj로 갈 확률. WW의 차수는 (3,3,3,3,5,3,2,2)(3,3,3,3,5,3,2,2)이므로 각 행을 자기 차수로 나눈다.

S1S2S3S4S5S6S7S8
S1001/31/31/3000
S2001/31/31/3000
S51/51/51/51/501/500
S7000001/201/2

두 걸음 — 손으로 P2P^2의 한 행 구하기 (Two Steps — One Row of P² by Hand)

P2[1,k]=jP[1,j]P[j,k]P^2[1,k]=\sum_j P[1,j]\,P[j,k]. S1의 이웃은 S3, S4, S5뿐이므로 세 항만 살아남는다.

목적지 kkS1→S3→kkS1→S4→kkS1→S5→kk
S11313=545\frac13\cdot\frac13=\frac{5}{45}1313=545\frac13\cdot\frac13=\frac{5}{45}1315=345\frac13\cdot\frac15=\frac{3}{45}13/45
S21313=545\frac13\cdot\frac13=\frac{5}{45}1313=545\frac13\cdot\frac13=\frac{5}{45}1315=345\frac13\cdot\frac15=\frac{3}{45}13/45
S30 (S3–S3 없음)0 (S4–S3 없음)1315=345\frac13\cdot\frac15=\frac{3}{45}3/45
S4001315=345\frac13\cdot\frac15=\frac{3}{45}3/45
S51313=545\frac13\cdot\frac13=\frac{5}{45}1313=545\frac13\cdot\frac13=\frac{5}{45}010/45
S6001315=345\frac13\cdot\frac15=\frac{3}{45}3/45
S70000
S80000
합계 (확률이므로 1이어야 한다)45/45 = 1

같은 식으로 S7행도 구해 둔다(S7의 이웃은 S6, S8):

S1~S4S5S6S7S8
P2[7,]P^2[7,\cdot]01215=212\frac12\cdot\frac15=\frac{2}{12}1212=312\frac12\cdot\frac12=\frac{3}{12}1212+1212=512\frac12\cdot\frac12+\frac12\cdot\frac12\cdot\ldots=\frac{5}{12}212\frac{2}{12}
P2[8,]P^2[8,\cdot]0212\frac{2}{12}312\frac{3}{12}212\frac{2}{12}512\frac{5}{12}

(P2[7,7]P^2[7,7]: S7→S6→S7 =1213=16=\frac12\cdot\frac13=\frac16 와 S7→S8→S7 =1212=14=\frac12\cdot\frac12=\frac14의 합 =212+312=512=\frac{2}{12}+\frac{3}{12}=\frac{5}{12}.)

walktrap의 거리 (The Walktrap Distance)

rij(t)=k=1n(Pt[i,k]Pt[j,k])2dk r_{ij}(t)=\sqrt{\sum_{k=1}^{n}\frac{\left(P^t[i,k]-P^t[j,k]\right)^2}{d_k}} 분모의 dkd_k인기 보정이다. 차수가 큰 정점은 누구에게서 출발하든 잘 도달되므로, 그대로 두면 “인기 있는 사람 쪽 확률”이 거리 계산을 지배한다. 단원 3-3의 영 모형이 didjd_id_j로 인기를 빼 준 것과 같은 정신이다.

손으로 r(S7,S8)r(S_7,S_8)을 구해 본다. 위 표에서 두 행은 S7·S8 칸에서만 다르다.

kkP2[7,k]P^2[7,k]P2[8,k]P^2[8,k]dkd_k()2/dk(\text{차})^2/d_k
S1~S6같음00
S75/122/12+14+\frac1421/162=132\frac{1/16}{2}=\frac{1}{32}
S82/125/1214-\frac142132\frac{1}{32}
232=116\frac{2}{32}=\frac{1}{16}
r(S7,S8)=116=14=0.25 r(S_7,S_8)=\sqrt{\tfrac{1}{16}}=\tfrac14=0.25

거리를 다 재고 나면 (After Every Distance Is Measured)

r(t=2)r(t{=}2)직접 이웃?읽는 법
S1, S20.000아니오이웃이 {S3,S4,S5}\{S3,S4,S5\}완전히 같다 → 걸음 분포도 완전히 같다
S1, S50.166가장 가까운 “실제” 쌍
S6, S70.224삼각형 안
S7, S80.250위에서 손으로 구한 값
S1, S30.257이웃인데 S1–S5보다 멀다
S5, S60.302다리 — 이웃이지만 갈 곳이 서로 딴판
S1, S70.414아니오가장 먼 쌍
walktrap이 재는 것은 “연결”이 아니라 “행선지”다.
S1과 S2는 서로 이어져 있지도 않은데 거리가 정확히 0이다 — 갈 수 있는 곳이 똑같기 때문이다. 반대로 S1과 S3은 직접 이어져 있는데도 S1–S5보다 멀다.
이 “이웃이 같으면 같은 자리”라는 발상은 다음 단원 3-5(구조적 등위성)의 핵심이 된다.

walktrap은 이 거리로 가까운 모둠부터 병합(Ward 방식)한 뒤, 그 과정에서 QQ가 가장 높은 지점을 고른다. WW에서는 t=2,3,4,5t=2,3,4,5 어느 걸음 수로 해도 답이 190/576190/576으로 같았다.

교실 해석. S1과 S2는 서로 말 한마디 안 하는데 친구 목록이 똑같은 두 학생이다. “누구와 친한가”로 보면 남남이지만 “학급에서 어떤 자리에 있는가”로 보면 완전히 같다. 모둠을 짤 때 이 둘을 갈라 놓으면 두 모둠이 사실상 같아지고, 붙여 놓으면 서로 겹치는 인맥만 남는다 — 어느 쪽도 별 이득이 없다는 신호다.

13. R로 검증 (Verification in R)

library(igraph)
nm <- paste0("S",1:8)
W  <- matrix(0,8,8,dimnames=list(nm,nm))
el <- rbind(c(1,3),c(1,4),c(1,5),c(2,3),c(2,4),c(2,5),c(3,5),c(4,5),
            c(5,6),c(6,7),c(6,8),c(7,8))
for(i in 1:nrow(el)){ W[el[i,1],el[i,2]] <- 1; W[el[i,2],el[i,1]] <- 1 }
gW <- graph_from_adjacency_matrix(W, mode="undirected")

## (1) 간선 매개 — §4
edge_betweenness(gW)
#  S1-S3  S1-S4  S1-S5  S2-S3  S2-S4  S2-S5  S3-S5  S4-S5  S5-S6 S6-S7 S6-S8 S7-S8
#  1.667  1.667  4.333  1.667  1.667  4.333  4.333  4.333 15.000 6.000 6.000 1.000
sum(edge_betweenness(gW)); sum(distances(gW))/2   # 검산
# [1] 52
# [1] 52

## (2) 병합 이득 공식 — §6
dQ <- function(A,B,g=gW){ d <- degree(g)
  (48*sum(W[A,B]) - 2*sum(d[A])*sum(d[B])) / 576 }
dQ(7,8)*576   # [1] 40   <- 첫 병합
dQ(6,c(7,8))*576  # [1] 72

## (3) 알고리즘 8개 — W에서는 전원 일치
show <- function(cl) c(Q576=round(modularity(gW,membership(cl))*576),
                       k=length(unique(membership(cl))))
sapply(list(GN=cluster_edge_betweenness(gW), FG=cluster_fast_greedy(gW),
            LV=cluster_louvain(gW),          WT=cluster_walktrap(gW),
            LE=cluster_leading_eigen(gW),    LP=cluster_label_prop(gW),
            IM=cluster_infomap(gW),          OPT=cluster_optimal(gW)), show)
#       GN  FG  LV  WT  LE  LP  IM OPT
# Q576 190 190 190 190 190 190 190 190
# k      2   2   2   2   2   2   2   2

## (4) walktrap 거리 — §12
P <- W / degree(gW);  P2 <- P %*% P
sqrt(sum((P2[7,]-P2[8,])^2 / degree(gW)))   # [1] 0.25
sqrt(sum((P2[1,]-P2[2,])^2 / degree(gW)))   # [1] 0        <- S1과 S2는 완전히 같은 자리
WW에서는 여덟 가지 방법이 전부 같은 답을 냈다. 구조가 뚜렷하면 어떤 알고리즘을 쓰든 상관없다는 뜻이다. 알고리즘 선택이 문제가 되는 것은 구조가 애매할 때다. 이제 그런 망으로 간다.

14. 가라테: 정답이 있는 시험 (Karate: A Test with a Known Answer)

가라테 클럽은 실제로 어떻게 갈라졌는지가 기록된 드문 자료다. Mr. Hi 편 16명 / John A. 편 18명. 알고리즘들에게 채점표를 줄 수 있다.

가라테 4개 알고리즘 비교
그림 15. 색 = 알고리즘이 찾은 모둠, 모양 = 실제 파벌(○ Mr. Hi / □ John A.). 빨간 테두리가 파벌 경계를 넘은 학생.
방법QQ모둠 수크기파벌 경계를 넘은 학생무작위성
실제 파벌 (정답)0.3715218-16
cluster_optimal (정수계획)0.4198412-11-6-5없음없음
cluster_louvain (seed 4)0.4198412-11-6-5없음있음
cluster_infomap0.4020317-12-510번있음
cluster_label_prop (seed 1)0.4020317-12-510번있음
cluster_edge_betweenness (GN)0.4013512-10-6-5-13번없음
cluster_leading_eigen0.3934412-9-7-6없음없음
cluster_fast_greedy0.3807317-9-810번없음
cluster_walktrap0.353259-9-7-5-43번, 14번없음

읽을 것 다섯 가지 (Five Things to Read Off)

  1. Louvain(seed 4)이 정수계획법의 진짜 최댓값과 완전히 같은 분할을 찾았다. 명단까지 한 사람도 안 틀렸다. 다만 100번 중 30번만 그랬다(§11).
  2. fast greedy는 0.38070.3807에 갇혔다. 최적보다 0.039 낮다. §7에서 예고한 “되돌리지 못하는 탐욕”이 34명 규모에서 실제로 손해를 냈다.
  3. GN은 1명짜리 모둠을 만들었다 — 10번 학생. 매개가 높은 간선을 계속 끊다 보면 다리 역할만 하는 학생이 홀로 남는다. 분리형의 전형적인 부작용이다.
  4. walktrap이 QQ 기준으로는 꼴찌(0.3532)다. QQ를 목적함수로 쓰지 않으니 당연하다 — walktrap은 “걸음이 갇히는가”를 보지 “QQ가 오르는가”를 보지 않는다.
  5. 세 방법(optimal, Louvain, leading eigen)은 파벌 경계를 한 명도 넘지 않았다. 이들은 정답을 어긴 것이 아니라 더 잘게 쪼갠 것이다.

갈린 학생 세 명 (The Three Students Who Get Split)

학생실제 파벌차수이웃Mr.Hi / John A.
3번Mr. Hi101,2,4,8,9,10,14,28,29,335 / 5
10번John A.23, 341 / 1
14번Mr. Hi51,2,3,4,344 / 1

3번과 10번은 친구가 정확히 반반이다. 어느 알고리즘도 이들을 자신 있게 배치할 수 없는 것이 당연하다. 알고리즘이 갈리는 지점 = 실제로 경계에 서 있는 사람이다.

교실 해석. 알고리즘의 불일치가 오히려 정보다. 여러 방법이 똑같이 배치한 학생은 소속이 분명한 아이, 방법마다 달라지는 학생(3번·10번·14번)은 양쪽에 걸쳐 있는 아이다. 후자는 갈등의 중재자가 될 수도 있고, 양쪽 모두에게 어중간한 위치일 수도 있다 — 둘 다 관찰할 가치가 있다.

15. QQ가 높다고 진실에 가까운 것은 아니다 (Higher Q Is Not Closer to the Truth)

위 표를 QQ 순서로 다시 보면 이상한 일이 벌어진다.

분할QQ
optimal / Louvain의 4모둠0.4198
infomap의 3모둠0.4020
fast greedy의 3모둠0.3807
실제로 일어난 분열 (2모둠)0.3715
실제 정답이 꼴찌다. 1970년대에 실제로 벌어진 그 분열은, 모듈러리티 기준으로는 알고리즘들이 낸 어떤 답보다도 나쁜 분할이다. 즉 QQ를 더 높이는 방향으로 갈수록 “실제로 일어난 일”에서 멀어진다.

왜 그런가 — 세 가지를 구분하자 (Why — Three Things to Keep Apart)

물음답하는 것가라테에서
이 망은 어떻게 나뉘는가?QQ 최대화4모둠 (0.4198)
이 망은 둘로 나뉜다면 어떻게?2모둠 제한 QQ파벌 분할에 가깝다
이 사람들은 실제로 어떻게 갈라졌는가?역사적 사실2모둠 (0.3715)

QQ 최대화는 첫 번째 물음에만 답한다. 그리고 중요한 것은, optimal이 낸 4모둠이 실제 파벌을 어긴 것이 아니라 세분한 것이라는 점이다:

모둠명단실제 파벌
C1 (11명)1,2,3,4,8,12,13,14,18,20,22전원 Mr. Hi
C2 (5명)5,6,7,11,17전원 Mr. Hi
C3 (12명)9,10,15,16,19,21,23,27,30,31,33,34전원 John A.
C4 (6명)24,25,26,28,29,32전원 John A.

C1∪C2 = Mr. Hi 파벌 전체, C3∪C4 = John A. 파벌 전체다. 알고리즘은 틀린 것이 아니라 더 자세히 본 것이다. 단원 3-3에서 확인한 C2 = {5,6,7,11,17}(바깥 이웃이 1번 한 사람뿐인 다섯 명)이 여기서 다시 나온다.

결론. QQ분할끼리 비교하는 자이지 “진실에 얼마나 가까운가”의 척도가 아니다. QQ가 더 높은 답은 “더 옳은 답”이 아니라 다른 해상도로 본 답일 수 있다. 알고리즘을 채점할 때는 반드시 QQ 말고 다른 잣대(정답과의 일치, 모둠 수의 타당성, 해석 가능성)를 함께 봐야 한다.
교실 해석. 학급 사회도를 돌려 QQ가 가장 높은 분할이 나왔다고 해서 그것이 “학급의 진짜 모둠”은 아니다. 그것은 연결의 조밀함만으로 본 하나의 견해다. 교사가 아는 사실 — 같은 학원, 남매, 작년 같은 반 — 과 대조해야 비로소 의미가 생긴다.

16. 해상도 한계 (The Resolution Limit)

QQ에는 더 근본적인 한계가 있다. 작은 모둠은 아예 보이지 않는다. 손으로 증명할 수 있는 깔끔한 예가 있다.

삼각형 nn개를 고리로 이은 그래프 (A Ring of n Triangles)

삼각형 nn개를 만들고, 각 삼각형에서 하나씩 뽑아 다음 삼각형과 간선 하나로 잇는다. 누가 봐도 모둠은 nn다.

이유
mm4n4n삼각형마다 내부 3개 + 고리 1개
2m2m8n8n
mcm_c3삼각형 하나의 내부 간선
DcD_c8내부 기여 2×3=62\times3=6 + 고리 간선 2개(들어오고 나가는 것) = 8

삼각형 각각을 모둠으로 둘 때:

Q정답=n[34n(88n)2]=341n Q_{\text{정답}}=n\left[\frac{3}{4n}-\left(\frac{8}{8n}\right)^2\right]=\frac34-\frac{1}{n}

이웃한 두 삼각형을 한 모둠으로 묶으면 mc=3+3+1=7, Dc=8+8=16m_c=3+3+1=7,\ D_c=8+8=16이 되므로

ΔQ=[74n(168n)2]합친 모둠2[34n1n2]원래 두 모둠=74n4n264n+2n2=  14n2n2   \Delta Q=\underbrace{\left[\frac{7}{4n}-\left(\frac{16}{8n}\right)^2\right]}_{\text{합친 모둠}} -2\underbrace{\left[\frac{3}{4n}-\frac{1}{n^2}\right]}_{\text{원래 두 모둠}} =\frac{7}{4n}-\frac{4}{n^2}-\frac{6}{4n}+\frac{2}{n^2} =\boxed{\;\frac{1}{4n}-\frac{2}{n^2}\;}
nn14n2n2\frac{1}{4n}-\frac{2}{n^2}판정
411618\frac1{16}-\frac18−0.0625합치면 손해 (정상)
6124118\frac1{24}-\frac1{18}−0.0139합치면 손해 (정상)
8132132\frac1{32}-\frac1{32}정확히 0경계
9136281=98324\frac1{36}-\frac2{81}=\frac{9-8}{324}+1/324합치는 쪽이 이득!
12148172=32144\frac1{48}-\frac1{72}=\frac{3-2}{144}+1/144합치는 쪽이 이득!
n9n\ge 9이면 QQ는 “삼각형 두 개를 억지로 붙인 것”을 더 좋아한다. 망이 커질수록(=mm이 커질수록) 작은 모둠 하나하나가 “우연히 생길 법한 크기”로 보이기 시작하기 때문이다. 영 모형은 전체 2m2m을 기준으로 기대값을 계산하므로, 전체가 커지면 작은 덩어리의 존재감이 묻힌다.

2m\sqrt{2m} 기준 (The Rule of Thumb)

Fortunato & Barthélemy(2007)의 경험칙: Dc2mD_c\lesssim\sqrt{2m}인 모둠은 QQ가 잘 못 본다. 우리 예에서 확인해 보자. 2m=8n2m=8n이고 Dc=8D_c=8이므로

Dc=2m    8=8n    64=8n    n=8 D_c=\sqrt{2m}\;\Longleftrightarrow\;8=\sqrt{8n}\;\Longleftrightarrow\;64=8n\;\Longleftrightarrow\;n=8

손으로 구한 경계 n=8n=8정확히 일치한다.

해상도 한계
그림 16. 삼각형 12개 고리. 오른쪽이 QQ를 최대화한 답 — 이웃한 두 삼각형이 억지로 묶였다.

알고리즘을 바꿔도 소용없다 (Changing the Algorithm Does Not Help)

방법모둠 수QQ맞혔나
cluster_optimal60.7083아니오
cluster_louvain60.7083아니오
cluster_fast_greedy60.7083아니오
cluster_walktrap70.7014아니오
cluster_edge_betweenness80.6944아니오
cluster_infomap120.6667
QQ더 잘 최대화하는 알고리즘일수록 더 틀렸다. cluster_optimal은 진짜 최댓값을 찾았는데도 답이 6개다 — 알고리즘의 잘못이 아니라 QQ라는 자 자체의 한계이기 때문이다. 유일하게 맞힌 infomap은 더 좋은 최적화기라서가 아니라 QQ 대신 다른 목적함수(정보 압축 길이)를 쓰기 때문이다.
교실 해석. 학급 24명(간선 60개 정도)이면 2m=12011\sqrt{2m}=\sqrt{120}\approx 11. 차수 합이 11 미만인 모둠 — 즉 2~3명짜리 단짝 무리 — 은 QQ가 잘 못 본다. 교실에서 가장 중요한 “늘 붙어 다니는 셋”이 정작 모듈러리티에는 안 보일 수 있다는 뜻이다. 작은 무리를 찾고 싶다면 QQ가 아니라 단원 3-1·3-2의 클리크·kk-코어를 써야 한다.

17. 어떤 알고리즘을 쓸 것인가 (Choosing an Algorithm)

함수방식속도무작위성쓸 자리
cluster_optimal정수계획 완전탐색지수 시간없음학급 규모(~30명)면 이것을 쓰라. 진짜 최댓값을 준다
cluster_louvain국소 이동 + 집계매우 빠름있음큰 망의 표준. 여러 번 돌려 최고를 쓸 것
cluster_edge_betweenness매개 높은 간선 제거느림 O(m2n)O(m^2n)없음다리를 짚어 준다 — 분할보다 “끊어지면 위험한 관계”를 찾을 때
cluster_fast_greedy탐욕 병합빠름없음큰 모둠으로 쏠리는 경향. 요즘은 Louvain에 밀림
cluster_walktrap걸음 거리 + Ward보통없음잘게 나눔. “자리가 비슷한 사람”을 보고 싶을 때
cluster_infomap정보 압축보통있음해상도 한계가 다르다 — 작은 모둠을 볼 때 대안
cluster_leading_eigenBB의 최대 고유벡터보통없음단원 2-4의 고유벡터가 여기서 다시 나온다

실무 지침 다섯 가지 (Five Practical Guidelines)

① 한 번만 돌리지 말 것. Louvain·infomap·label propagation은 매번 다르다. 30번쯤 돌려 QQ의 분포를 보고, 가장 좋은 것 하나가 아니라 자주 나오는 모양을 믿으라.
② 학급은 작으니 cluster_optimal을 쓰라. 30명이면 몇 초 안에 끝난다. 휴리스틱의 불확실성을 아예 없앨 수 있는 드문 상황이다.
③ 여러 알고리즘이 일치하는 부분만 믿으라. WW에서는 8개가 전부 같았고(구조가 뚜렷), 가라테에서는 갈렸다. 갈리는 학생이 곧 경계에 선 학생이며, 그것이 오히려 찾던 정보다.
④ 모둠 수를 알고리즘에게 맡기지 말 것. 해상도 한계 때문에 2m\sqrt{2m}보다 작은 모둠은 안 보인다. 2~3명짜리 단짝은 클리크·kk-코어로 따로 찾아야 한다.
⑤ 부산물이 더 유용할 때가 있다. 가라테에서 GN이 가장 먼저 끊은 간선은 1번–32번(매개 71.39)이었다. 분할 결과보다 “이 관계가 끊어지면 학급이 갈라진다”는 이 정보가 교사에게는 더 실용적일 수 있다.
윤리. 알고리즘이 낸 모둠을 그대로 자리 배치에 쓰지 말 것. ① QQ는 다리 놓는 학생에게 벌점을 주고(단원 3-3 연습문제 2), ② 경계에 선 학생을 매번 다른 곳에 배치하며, ③ 작은 소외 집단을 아예 못 본다. 결과는 가설이지 진단이 아니다. 갈리는 학생의 이름은 낙인이 아니라 관찰 목록으로만 쓰라.

18. 연습문제 (Exercises)

문제 1 — 아령 그래프에 Girvan–Newman 돌리기

지난 시간의 아령 그래프 HH: 삼각형 A(A1,A2,A3)와 삼각형 B(B1,B2,B3)를 간선 A1–B1 하나로 이은 6명 7간선. 차수는 (3,2,2,3,2,2)(3,2,2,3,2,2), m=7m=7.

  1. 7개 간선의 매개 중심성을 전부 손으로 구하라. (15개 쌍을 모두 적고, 각 쌍의 최단경로가 어느 간선을 지나는지 표시할 것)
  2. 총합이 모든 쌍의 거리 합과 같은지 검산하라.
  3. GN이 첫 번째로 제거하는 간선은? 그때 QQ는?
  4. 두 번째로 제거되는 간선은 무엇이고, 그 뒤 QQ는 올라가는가 내려가는가?

§19 해설 — 먼저 풀고 맞춰 볼 것.

문제 2 — 같은 그래프에 fast greedy 돌리기

같은 HH. 2m=142m=14, (2m)2=196(2m)^2=196이므로 ΔQ=28mAB2DADB196\Delta Q=\dfrac{28\,m_{AB}-2D_AD_B}{196}이다.

  1. 전원이 혼자인 상태에서 15개 쌍 전부ΔQ\Delta Q를 구하라 (간선 있는 7쌍 + 없는 8쌍).
  2. 가장 큰 이득을 주는 병합은? 다리 A1–B1이 아닌 이유ΔQ\Delta Q 공식으로 설명하라.
  3. 끝까지 병합을 진행하고 매 단계의 QQ를 적어라. 최적값 5/145/14에 도달하는가?
  4. GN(문제 1)과 fast greedy는 같은 답에 도달했다. 그런데 다리 A1–B1을 다루는 방식은 어떻게 달랐는가?

§19 해설 — 먼저 풀고 맞춰 볼 것.

19. 해설과 답 (Solutions)

문제 1 해설 — 아령 그래프의 간선 매개 (Solution 1 — Edge Betweenness on the Barbell)

(1) 15개 쌍을 전부 전개한다. HH에서 A쪽 3명과 B쪽 3명은 반드시 A1–B1을 지난다.

거리σ\sigma최단경로지나는 간선
(A1,A2)11A1-A2A1–A2
(A1,A3)11A1-A3A1–A3
(A2,A3)11A2-A3A2–A3
(B1,B2)11B1-B2B1–B2
(B1,B3)11B1-B3B1–B3
(B2,B3)11B2-B3B2–B3
(A1,B1)11A1-B1A1–B1
(A1,B2)21A1-B1-B2A1–B1, B1–B2
(A1,B3)21A1-B1-B3A1–B1, B1–B3
(A2,B1)21A2-A1-B1A1–A2, A1–B1
(A3,B1)21A3-A1-B1A1–A3, A1–B1
(A2,B2)31A2-A1-B1-B2A1–A2, A1–B1, B1–B2
(A2,B3)31A2-A1-B1-B3A1–A2, A1–B1, B1–B3
(A3,B2)31A3-A1-B1-B2A1–A3, A1–B1, B1–B2
(A3,B3)31A3-A1-B1-B3A1–A3, A1–B1, B1–B3

갈림길이 하나도 없다(모든 σ=1\sigma=1) — 아령에는 우회로가 없으므로 분수가 안 나온다. 간선별로 모으면:

간선이 간선을 밟는 쌍CBC_B
A1–B1(A1,B1)(A1,B2)(A1,B3)(A2,B1)(A2,B2)(A2,B3)(A3,B1)(A3,B2)(A3,B3) — A쪽 3명 × B쪽 3명9
A1–A2(A1,A2)(A2,B1)(A2,B2)(A2,B3)4
A1–A3(A1,A3)(A3,B1)(A3,B2)(A3,B3)4
B1–B2(B1,B2)(A1,B2)(A2,B2)(A3,B2)4
B1–B3(B1,B3)(A1,B3)(A2,B3)(A3,B3)4
A2–A3(A2,A3) 하나뿐1
B2–B3(B2,B3) 하나뿐1

(2) 검산. 간선 매개 총합 =9+4+4+4+4+1+1=27=9+4+4+4+4+1+1=\mathbf{27}.

거리기여
1A·B 내부 6쌍 + (A1,B1)77
2(A1,B2)(A1,B3)(A2,B1)(A3,B1)48
3(A2,B2)(A2,B3)(A3,B2)(A3,B3)412
거리 총합27
답 (1)(2): A1–B1 = 9, A1–A2 = A1–A3 = B1–B2 = B1–B3 = 4, A2–A3 = B2–B3 = 1. 총합 27 = 거리 총합 27 ✓

(3) 첫 제거. 최댓값은 A1–B1의 9. 끊는 순간 두 삼각형으로 갈라진다.

모둠mcm_cDcD_cmcm\frac{m_c}{m}(Dc14)2\left(\frac{D_c}{14}\right)^2
A373/7 = 84/19649/19635/196
B3784/19649/19635/196
QQ70/196 = 5/14 ≈ 0.3571

두 항이 35로 같은 것은 단원 3-3에서 증명한 두 모둠 항등식 그대로다 (DA=DB=7D_A=D_B=7, mA=mB=3m_A=m_B=3).

(4) 두 번째 제거. A1–B1이 사라진 뒤 매개를 다시 계산하면 남은 것은 삼각형 두 개뿐이고, 삼각형 안에서는 모든 간선의 매개가 1로 똑같다 (각 간선은 자기 양 끝 쌍에만 쓰인다). 그러므로 어느 하나가 임의로 제거된다. 그러면 삼각형 하나가 경로 3개짜리로 바뀌지만 덩어리 수는 그대로 2개이므로 QQ는 원본망 기준으로 여전히 5/145/14다. 세 번째 제거에서 비로소 한 명이 떨어져 나가고 QQ가 내려간다.

답 (3)(4): 첫 제거는 A1–B1, 그때 Q=5/140.3571Q=5/14\approx0.3571단 한 번의 절단으로 최적에 도달한다. 두 번째부터는 삼각형 내부 간선(매개 1, 전부 동점)이 제거되며 QQ는 더 오르지 않고 곧 내려간다.
값의 의미. A1–B1의 매개 9는 “A쪽 3명 × B쪽 3명 = 9쌍이 전부 이 한 관계에 의존한다”는 뜻이다. 학급으로 치면 두 무리를 잇는 유일한 통로. 이 관계가 끊어지면 9쌍의 소통 경로가 동시에 사라진다. GN이 이런 간선을 가장 먼저 짚어 준다는 점이 실무적으로 가장 쓸모 있는 성질이다.

문제 2 해설 — 아령 그래프의 fast greedy (Solution 2 — Fast Greedy on the Barbell)

(1) 15쌍 전부. ΔQ=28mAB2DADB196\Delta Q=\dfrac{28\,m_{AB}-2D_AD_B}{196}, 차수는 A1=3, A2=2, A3=2, B1=3, B2=2, B3=2.

A[i,j]A[i,j]28A[i,j]28A[i,j]2didj2d_id_jΔQ\Delta Q (196분의)왜 그 값인가
A2–A31282·2·2 = 8+20둘 다 차수 2 — 우연히 이어질 이유가 가장 적다
B2–B31288+20위와 대칭
A1–A21282·3·2 = 12+16한쪽이 차수 3
A1–A312812+16
B1–B212812+16
B1–B312812+16
A1–B11282·3·3 = 18+10양쪽 다 차수 3 — 가장 “그럴 만한” 간선이라 이득이 가장 작다
A1–B2002·3·2 = 12−12간선 없음
A1–B30012−12간선 없음
A2–B10012−12간선 없음
A3–B10012−12간선 없음
A2–B2002·2·2 = 8−8간선 없음
A2–B3008−8간선 없음
A3–B2008−8간선 없음
A3–B3008−8간선 없음

쌍의 수 검산: 간선 있는 7쌍 + 없는 8쌍 = 15 = (62)\binom62

(2) 첫 병합은 A2–A3 (또는 B2–B3), +20/196+20/196. 다리 A1–B1은 +10/196+10/196으로 꼴찌다. 같은 “간선 1개”인데도 값이 갈리는 이유는 공식의 2didj2d_id_j 때문이다. 차수가 3·3인 A1–B1은 영 모형에서도 3314=0.64\frac{3\cdot3}{14}=0.64개쯤 기대되는 반면, 차수 2·2인 A2–A3는 2214=0.29\frac{2\cdot2}{14}=0.29개만 기대된다. 있으리라 기대되지 않았는데 있는 간선일수록 증거가 세다.

(3) 끝까지. 시작값은 Q=(di2m)2=9+4+4+9+4+4196=34196Q=-\sum\left(\frac{d_i}{2m}\right)^2=-\frac{9+4+4+9+4+4}{196}=-\frac{34}{196}.

반복최선의 병합mABm_{AB}DA,DBD_A,D_B계산ΔQ\Delta QQQ (196분의)
0— (전원 혼자)−34
1{A2}+{A3}12, 228 − 8+20−14
2{A1}+{A2,A3}23, 456 − 24+3218
3{B2}+{B3}12, 228 − 8+2038
4{B1}+{B2,B3}23, 456 − 24+3270
5{A}+{B}17, 728 − 98−700 → 중단

반복 2에서 mAB=2m_{AB}=2인 이유: A1은 A2와 A3 둘 다와 이어져 있다. 반복 5의 ΔQ\Delta Q가 음수이므로 멈춘다.

검산: 34+20+32+20+32=70-34+20+32+20+32=\mathbf{70} ✓   그리고 7070=070-70=0 — 전원 한 모둠이면 Q=0Q=0

답 (1)(2)(3): 첫 병합은 A2–A3(+20/196+20/196), 다리 A1–B1은 +10/196+10/196으로 가장 작다. ΔQ\Delta Q2didj2d_id_j를 빼므로 차수가 낮은 쌍의 간선일수록 이득이 크다. 끝까지 가면 Q=70/196=5/14Q=70/196=\mathbf{5/14} — 최적에 도달한다.

(4) 두 알고리즘의 다리 처리.

Girvan–Newmanfast greedy
다리를 언제 보나맨 처음 (매개 9, 1위)맨 마지막 (ΔQ\Delta Q +10, 꼴찌)
다리에 하는 일끊는다아무것도 안 한다
분할이 생기는 방식다리를 잘라서다리를 안 붙여서
단계 수1번4번
답 (4): GN은 다리를 가장 먼저 잘랐고, fast greedy는 다리를 한 번도 건드리지 않았다. 병합형에는 “자르기”라는 연산 자체가 없다 — 다리는 그저 끝까지 안 붙여진 채로 남아 경계가 된다. 두 방법이 같은 5/145/14에 도달했지만, 하나는 다리를 찾아서, 다른 하나는 덩어리를 찾아서 도달한 것이다.
교실 해석. 같은 모둠 편성을 얻어도 알고리즘이 알려 주는 것은 다르다. GN은 “A1–B1이 이 학급의 생명선이다”라고 말해 주고, fast greedy는 “A2·A3가 가장 확실하게 붙어 있는 짝이다”라고 말해 준다. 결과보다 과정에 정보가 더 많다. 실제로 학급 자료를 분석할 때는 최종 분할만 보지 말고 GN의 제거 순서와 fast greedy의 병합 순서를 함께 출력해 볼 것.