모듈러리티 Q — 분할에 점수를 매기는 법
SNA 이론 · 단계별 학습 차례

단원 3-3Modularity: Scoring a Partition

모듈러리티 Q — 분할에 점수를 매기는 법

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

1. 지난 시간 연습문제 확인 (Review of Last Exercises)

단원 3-2의 연습문제 두 개를 먼저 맞춰 본다. 자세한 전개는 노트 17 §16에 있고, 여기서는 핵심만 확인한다.

문제
1. {S5,S6,S7,S8}\{S5,S6,S7,S8\}은 몇-플렉스인가?집단 내 차수 (1,3,2,2)(1,3,2,2), 최소 1, s=4s=4k=41=3k = 4-1 = \mathbf{3}, 3-플렉스.
k<(s+2)/2=3k<(s+2)/2 = 3거짓이므로 지름 보장 없음. 그래도 실제 유도 지름은 2 — 충분조건일 뿐 필요조건이 아니다.
2. 간선 2개를 더해 S6를 3-코어에 넣으려면?S1–S6, S2–S6를 추가. 그러면 코어 번호가 (3,3,3,3,3,3,2,2)(3,3,3,3,3,\mathbf{3},2,2)가 되어 3-코어 ={S1,,S6}=\{S1,\dots,S6\}.
반대로 S1–S2, S3–S4를 더하면 왼쪽만 코어 4로 올라가고 S6는 그대로 2.
지난 단원의 도달점. 단원 3-1(클리크)과 3-2(n-클리크·k-플렉스·k-코어)에서 우리는 늘 하나의 집단을 놓고 “이 집단이 조건을 만족하는가?”를 물었다. 답은 언제나 예/아니오였다. 오늘은 질문의 형태 자체가 바뀐다.

2. 오늘의 질문 — 판정에서 채점으로 (From Detection to Scoring)

교실에서 실제로 필요한 것은 이런 질문이다.

“우리 반 26명을 이렇게 4모둠으로 나눴는데, 이 나눔이 좋은 나눔인가? 저쪽 나눔보다 나은가? 몇 점짜리인가?

이건 “이 5명이 클리크인가?”와 종류가 다른 질문이다.

구분단원 3-1, 3-2단원 3-3 (오늘)
영어subgroup detectionpartition scoring
대상집단 하나 SVS \subseteq V전원을 남김없이 나눈 분할 {C1,,CK}\{C_1,\dots,C_K\}
물음“이 집단은 조건을 만족하는가?”“이 나눔은 몇 점인가?”
답의 형태예 / 아니오실수 QQ 하나
바깥 사람신경 쓰지 않음반드시 어느 모둠엔가 들어감

왜 이게 새로운 질문인가 — 가라테 4-코어의 충격 (Why This Is a New Question)

지난 시간에 우리는 가라테 클럽에서 4-코어 10명 {1,2,3,4,8,9,14,31,33,34}\{1,2,3,4,8,9,14,31,33,34\}을 찾았다. 이 10명의 내부 밀도는 0.556으로 전체 밀도 0.139의 4배였다. 대단히 빽빽한 집단이다.

그렇다면 “4-코어 10명” 대 “나머지 24명”으로 반을 나누면 좋은 분할일까? 오늘 배울 QQ로 채점하면 이렇다.

분할QQ판정
{4-코어 10명} | {나머지 24명}0.0046사실상 0점 — 우연히 나눈 것과 다를 바 없음
Mr.Hi 파벌 16명 | John A 파벌 18명 (실제 분열)0.3715진짜 구조

왜 4-코어 분할은 0점인가? 4-코어 10명 사이의 간선은 25개지만, 그 10명이 바깥 24명과 맺은 간선은 38개다. 안보다 밖으로 더 많이 나간다. 빽빽하긴 하지만 그들은 반의 중심이지 한쪽 진영이 아니다.

오늘의 핵심. “빽빽한 집단을 찾는 것”과 “반을 잘 나누는 것”은 다른 문제다. 분할을 채점하려면 모둠 안에 간선이 많은가만으로는 안 되고 우연히 기대되는 것보다 많은가를 물어야 한다. 그 차이를 숫자로 만든 것이 모듈러리티 QQ다 (Newman & Girvan, 2004).

오늘의 네트워크 — 단원 3-2의 WW를 그대로 (Today's Network)

같은 8명 네트워크 WW를 쓴다. 간선 12개, 차수는 (3,3,3,3,5,3,2,2)(3,3,3,3,5,3,2,2), idi=24\sum_i d_i = 24.

W의 분할 P1
그림 1. 네트워크 WW와 분할 P1 ={S1,,S5}{S6,S7,S8}=\{S1,\dots,S5\}\,|\,\{S6,S7,S8\}. 빨간 점선이 유일한 교차 간선(S5–S6).

지난 시간에 3-코어이자 2-플렉스로 나온 {S1,,S5}\{S1,\dots,S5\}와, 삼각형 {S6,S7,S8}\{S6,S7,S8\}. 이 분할을 P1이라 부르고, 오늘 이것이 몇 점인지 손으로 계산한다.

3. 첫 시도와 그 실패 — 내부 간선 비율 (First Attempt: Internal Edge Fraction)

가장 먼저 떠오르는 채점법은 이것이다.

f=모둠 안에 들어간 간선 수전체 간선 수=cmcm f = \frac{\text{모둠 안에 들어간 간선 수}}{\text{전체 간선 수}} = \frac{\sum_c m_c}{m}

여기서 mcm_c는 모둠 cc 안쪽 간선 수, m=12m=12는 전체 간선 수다. WW에서 몇 개 분할에 대해 계산해 보자.

분할모둠 안 간선교차 간선ff
P1 = {S1..S5} | {S6,S7,S8}8+3=118+3=11111/12=0.916711/12 = 0.9167
P2 = {S1..S6} | {S7,S8}9+1=109+1=10210/12=0.833310/12 = 0.8333
P3 = 전원 한 모둠1212012/12=1.000012/12 = 1.0000 ← 만점
실패. ff를 최대로 만드는 방법은 언제나 “모두를 한 모둠에 넣는 것”이다. 교차 간선이 0이 되니 당연히 f=1f=1. 그런데 “반 전체가 한 모둠”은 아무것도 나누지 않은 것이므로, 채점 기준으로서는 완전히 쓸모없다.

무엇이 빠졌나 (What Is Missing)

ff는 “모둠 안에 간선이 몇 개 있나”만 센다. 물어야 할 것은 “모둠 안에 간선이 많은 편인가”다. 많고 적음을 말하려면 비교 대상이 있어야 한다.

“S6, S7, S8 사이에 간선이 3개 있다”는 사실 자체로는 아무 뜻도 없다.
“아무 관계도 없이 우연히 이었어도 3개쯤 나왔을 것인가?”를 물어야 뜻이 생긴다.

그 “우연히 나왔을 값”을 만드는 것이 다음 절의 영 모형이다.

4. 기준선을 만든다 — 영 모형 (The Null Model: Configuration Model)

반쪽 간선(스터브) 그림 (The Stub Picture)

네트워크의 간선 12개를 전부 가위로 반씩 자른다고 상상하자. 간선 하나가 반쪽 2개가 되므로 반쪽은 총 2m=242m = 24개다. 그리고 반쪽은 각 정점에 차수만큼 붙어 있다.

정점S1S2S3S4S5S6S7S8
차수 did_i = 반쪽 개수3333532224

이제 이 24개의 반쪽을 눈을 감고 아무렇게나 두 개씩 짝지어 다시 이어 붙인다. 그러면 차수는 그대로인데 연결 상대는 완전히 무작위인 네트워크가 만들어진다. 이것을 배열 모형(configuration model)이라 한다.

왜 하필 차수를 보존하나. “S5는 인기가 많다”는 것은 커뮤니티의 증거가 아니다. S5는 친구가 5명이니 어느 집단에 넣어도 그 집단 안에 간선이 많이 생긴다. 우리가 알고 싶은 것은 “인기만으로 설명되는 것보다 더 뭉쳐 있는가”이므로, 인기(차수)는 기준선에 미리 넣어 두고 그 위에 남는 것만 본다.

기대 간선 수의 손 계산 (Expected Edge Count by Hand)

정점 ii의 반쪽 하나를 집었다고 하자. 남은 2m12m-1개 중 정점 jj의 반쪽은 djd_j개이므로, 그 하나가 jj로 갈 확률은 dj/(2m1)d_j/(2m-1)이다. ii의 반쪽이 did_i개이므로

E[A[i,j]]  =  didj2m1    didj2m \mathbb{E}\big[A[i,j]\big] \;=\; \frac{d_i\, d_j}{2m-1} \;\approx\; \frac{d_i\, d_j}{2m}

mm이 커지면 2m12m2m-1 \approx 2m이므로, 관례상 didj/2md_i d_j / 2m을 쓴다. 이 근사가 좋은 이유는 다음 절에서 확인할 깔끔한 성질들 때문이다.

did_idjd_jdidj/2md_i d_j / 2m실제 A[i,j]A[i,j]차이읽는 법
S5–S65315/24=0.62515/24 = 0.6251+0.375우연이라면 0.625개쯤인데 실제로 1개 — 조금 많다
S1–S2339/24=0.3759/24 = 0.3750−0.375우연이라면 0.375개쯤인데 실제로 0개 — 모자란다
S7–S8224/24=0.16674/24 = 0.16671+0.833우연이라면 거의 안 생길 관계인데 실제로 있다 — 매우 많다
S5–S75210/24=0.416710/24 = 0.41670−0.4167인기 많은 S5라면 있을 법한데 없다
여기서 벌써 중요한 것이 보인다. S7–S8과 S5–S6은 둘 다 실제 간선 1개지만 가치가 다르다. S7·S8은 차수가 2뿐인 “인기 없는” 둘이라 우연히 이어질 확률이 낮다 → 그런데도 이어져 있으니 +0.833. S5는 워낙 인기가 많아 어디든 이어질 만하다 → +0.375. 같은 1개라도 “놀라움의 크기”가 다르다.

검산 — 기대값의 총합은 mm이어야 한다 (Check — the Expected Values Must Sum to m)

영 모형이 만든 그래프도 간선이 12개여야 말이 된다. 확인해 보자.

i<jdidj2m+idi222m  =  12i,jdidj2m  =  12(idi)22m  =  12(2m)22m  =  m \sum_{i<j} \frac{d_i d_j}{2m} + \sum_i \frac{d_i^2}{2\cdot 2m} \;=\; \frac{1}{2}\sum_{i,j}\frac{d_i d_j}{2m} \;=\; \frac{1}{2}\cdot\frac{\left(\sum_i d_i\right)^2}{2m} \;=\; \frac{1}{2}\cdot\frac{(2m)^2}{2m} \;=\; m

WW에서는 12242/24=12=m\tfrac12 \cdot 24^2/24 = 12 = m. ✓ (R로도 확인했다 — §14.)

5. 모듈러리티 행렬 BB (The Modularity Matrix)

모든 쌍에 대해 “실제 − 기대”를 계산해 행렬로 만든다.

  B[i,j]  =  A[i,j]    didj2m   \boxed{\;B[i,j] \;=\; A[i,j] \;-\; \frac{d_i\, d_j}{2m}\;}

WW2m=242m=24이므로 모든 값이 24분의 몇으로 딱 떨어진다. 아래 표는 24×B[i,j]24 \times B[i,j], 즉 분자만 적은 것이다 (예: 9-99/24=0.375-9/24 = -0.375를 뜻한다).

S1S2S3S4S5S6S7S8행합
S1−9−9+15+15+9−9−6−60
S2−9−9+15+15+9−9−6−60
S3+15+15−9−9+9−9−6−60
S4+15+15−9−9+9−9−6−60
S5+9+9+9+9−25+9−10−100
S6−9−9−9−9+9−9+18+180
S7−6−6−6−6−10+18−4+200
S8−6−6−6−6−10+18+20−40

파란 칸 = 모둠 1 {S1,,S5}\{S1,\dots,S5\} 블록, 초록 칸 = 모둠 2 {S6,S7,S8}\{S6,S7,S8\} 블록 (§8에서 씀).

모듈러리티 행렬 히트맵
그림 2. 모듈러리티 행렬 BB의 히트맵(실수 값). 빨강 = 기대보다 많음, 파랑 = 기대보다 적음. 테두리가 분할 P1의 두 블록.

대각선은 왜 음수인가 (Why the Diagonal Is Negative)

A[i,i]=0A[i,i] = 0(자기 자신과는 친구가 아니다)이므로 B[i,i]=0di2/2m=di2/2mB[i,i] = 0 - d_i^2/2m = -d_i^2/2m으로 항상 음수다. S5는 25/241.04-25/24 \approx -1.04로 가장 큰 음수인데, 차수가 가장 크기 때문이다. 이건 결함이 아니라 영 모형이 자기 고리(self-loop)를 허용하기 때문에 생기는 정직한 대가다. 반쪽 24개를 무작위로 짝지으면 S5의 반쪽 두 개가 서로 만나는 일도 생긴다.

행합이 0이다 — 가장 좋은 검산 도구 (Row Sums Are Zero — the Best Check)

jB[i,j]  =  jA[i,j]=di    di2mjdj=2m  =  didi  =  0 \sum_j B[i,j] \;=\; \underbrace{\sum_j A[i,j]}_{= \,d_i} \;-\; \frac{d_i}{2m}\underbrace{\sum_j d_j}_{=\,2m} \;=\; d_i - d_i \;=\; 0

손으로 확인해 보자.

항을 전부 더한다 (0인 항 없음 — 모든 칸이 값을 가진다)
S1(9)+(9)+(+15)+(+15)+(+9)+(9)+(6)+(6)(-9)+(-9)+(+15)+(+15)+(+9)+(-9)+(-6)+(-6)0
S3(+15)+(+15)+(9)+(9)+(+9)+(9)+(6)+(6)(+15)+(+15)+(-9)+(-9)+(+9)+(-9)+(-6)+(-6)0
S5(+9)+(+9)+(+9)+(+9)+(25)+(+9)+(10)+(10)(+9)+(+9)+(+9)+(+9)+(-25)+(+9)+(-10)+(-10)0
S6(9)+(9)+(9)+(9)+(+9)+(9)+(+18)+(+18)(-9)+(-9)+(-9)+(-9)+(+9)+(-9)+(+18)+(+18)0
S7(6)+(6)+(6)+(6)+(10)+(+18)+(4)+(+20)(-6)+(-6)+(-6)+(-6)+(-10)+(+18)+(-4)+(+20)0
S8(6)+(6)+(6)+(6)+(10)+(+18)+(+20)+(4)(-6)+(-6)+(-6)+(-6)+(-10)+(+18)+(+20)+(-4)0
이 성질의 뜻. BB 전체의 합도 0이다. 즉 “기대보다 많은 곳”의 총량과 “기대보다 적은 곳”의 총량이 정확히 같다. 그러므로 좋은 분할이란 양수 칸을 최대한 모둠 안에 가두고 음수 칸을 최대한 모둠 밖으로 내보내는 나눔이다. 표에서 +15,+18,+20+15, +18, +20 같은 큰 양수가 어디에 있는지 보면 분할 P1이 왜 좋은 답인지 눈으로도 보인다.

6. 정의 — QQ (Definition of Modularity)

이제 정의를 쓸 수 있다. 각 정점 ii의 소속 모둠 번호를 cic_i라 하고, 같은 모둠이면 1, 아니면 0인 표시 함수를 δ(ci,cj)\delta(c_i,c_j)라 하자.

  Q  =  12mi=1nj=1n[A[i,j]didj2m]δ(ci,cj)  =  12mi,j같은 모둠B[i,j]   \boxed{\;Q \;=\; \frac{1}{2m}\sum_{i=1}^{n}\sum_{j=1}^{n} \left[\,A[i,j] - \frac{d_i d_j}{2m}\,\right]\delta(c_i, c_j) \;=\; \frac{1}{2m}\sum_{\substack{i,j \\ \text{같은 모둠}}} B[i,j]\;}

말로 옮기면 이렇다.

QQ = (모둠 안 쌍들의 “실제 − 기대”를 전부 더한 뒤) ÷ 2m2m
모둠 밖 쌍은 아예 세지 않는다. 2m2m으로 나누는 것은 “간선 개수 대비 비율”로 만들기 위해서다.

같은 값을 모둠별로 묶어 쓴 공식이 계산에는 훨씬 편하다. 모둠 cc에 대해 mcm_c = 모둠 안 간선 수, Dc=icdiD_c = \sum_{i \in c} d_i = 모둠 구성원 차수의 합이라 하면

  Q  =  c=1K[  mcm실제 비율    (Dc2m) ⁣2우연히 기대되는 비율  ]   \boxed{\;Q \;=\; \sum_{c=1}^{K}\left[\;\underbrace{\frac{m_c}{m}}_{\text{실제 비율}} \;-\; \underbrace{\left(\frac{D_c}{2m}\right)^{\!2}}_{\text{우연히 기대되는 비율}}\;\right]\;}
기호WW의 모둠 1 {S1..S5}\{S1..S5\}
mm전체 간선 수12
mcm_c모둠 cc 안쪽 간선 수8
DcD_c모둠 cc 구성원의 전체 차수 합 (바깥으로 나간 간선도 포함)3+3+3+3+5=173+3+3+3+5 = 17
KK모둠 개수2
DcD_c를 헷갈리지 말 것. DcD_c모둠 안 차수가 아니라 전체 차수의 합이다. S5의 차수는 5이고, 그중 하나(S5–S6)는 모둠 밖으로 나가지만 DcD_c에는 5를 그대로 더한다. Dc/2mD_c/2m은 “이 모둠이 반 전체 간선 끝(반쪽)의 몇 %를 차지하는가”라는 뜻이고, 그 제곱이 “아무렇게나 이었을 때 양쪽 끝이 모두 이 모둠에 떨어질 확률”이다.

(Dc/2m)2\left(D_c/2m\right)^2의 직관 (The Intuition)

간선 하나를 무작위로 만든다고 하자. 반쪽 두 개를 뽑는데,

  • 첫 번째 반쪽이 모둠 cc에 속할 확률 Dc/2m\approx D_c/2m
  • 두 번째 반쪽도 모둠 cc에 속할 확률 Dc/2m\approx D_c/2m
  • 둘 다 cc에 떨어져 모둠 안 간선이 될 확률 (Dc/2m)2\approx (D_c/2m)^2

모둠 1은 17/24=0.70817/24 = 0.708, 즉 반쪽의 70.8%를 차지한다. 그러니 아무렇게나 이어도 간선의 0.7082=0.5020.708^2 = 0.502, 약 절반은 저절로 모둠 1 안에 떨어진다. 실제는 8/12=0.6678/12 = 0.667이므로 초과분은 0.6670.502=0.1650.667 - 0.502 = 0.165뿐이다.

7. 두 공식이 같다는 증명 (Equivalence of the Two Formulas)

δ\delta 형태와 모둠별 형태가 같은 값임을 확인한다. 두 줄이면 끝난다.

단계근거
Q=12mci,jc[A[i,j]didj2m]\displaystyle Q = \frac{1}{2m}\sum_{c}\sum_{i,j \in c}\left[A[i,j] - \frac{d_i d_j}{2m}\right]δ(ci,cj)=1\delta(c_i,c_j)=1인 쌍 = 어떤 모둠 cc 안의 쌍. 모둠별로 묶었다
i,jcA[i,j]=2mc\displaystyle \sum_{i,j\in c} A[i,j] = 2 m_c모둠 안 간선 {i,j}\{i,j\}A[i,j]A[i,j]A[j,i]A[j,i]두 번 세어진다
i,jcdidj=(icdi)(jcdj)=Dc2\displaystyle \sum_{i,j\in c} d_i d_j = \Big(\sum_{i\in c} d_i\Big)\Big(\sum_{j\in c} d_j\Big) = D_c^2이중합이 곱으로 분리된다
Q=12mc[2mcDc22m]\displaystyle Q = \frac{1}{2m}\sum_c\left[2m_c - \frac{D_c^2}{2m}\right]②, ③을 ①에 대입
Q=c[2mc2mDc24m2]=c[mcm(Dc2m)2]\displaystyle Q = \sum_c\left[\frac{2m_c}{2m} - \frac{D_c^2}{4m^2}\right] = \sum_c\left[\frac{m_c}{m} - \left(\frac{D_c}{2m}\right)^2\right]1/2m1/2m을 안으로 넣고 정리 ∎
②의 “두 번”이 핵심. i,j\sum_{i,j}i,ji,j순서쌍으로 훑으므로 간선 하나가 두 번 센다. 그래서 2mc2m_c가 되고, 이것이 1/2m1/2m의 2와 만나 결국 mc/mm_c/m이라는 깔끔한 “비율”이 된다. 2m2m으로 나눈 이유가 여기 있다.

8. 손 계산 ① — 분할 P1의 QQ (Hand Calculation: Q of P1)

P1 ={S1,S2,S3,S4,S5}{S6,S7,S8}= \{S1,S2,S3,S4,S5\} \,|\, \{S6,S7,S8\}. 두 가지 길로 각각 계산해 답을 맞춰 본다.

길 A — BB 행렬의 블록을 통째로 더한다 (Route A — Summing Blocks of B)

§5 표에서 파란 블록 25칸초록 블록 9칸의 값을 전부 더한다. 0인 항은 하나도 없다. 모든 칸을 다 쓴다 (단위: 1/241/24).

모둠 1 블록 — 5×5=255\times 5 = 25
5개 항 전개행별 합
S1(9)+(9)+(+15)+(+15)+(+9)(-9)+(-9)+(+15)+(+15)+(+9)+21+21
S2(9)+(9)+(+15)+(+15)+(+9)(-9)+(-9)+(+15)+(+15)+(+9)+21+21
S3(+15)+(+15)+(9)+(9)+(+9)(+15)+(+15)+(-9)+(-9)+(+9)+21+21
S4(+15)+(+15)+(9)+(9)+(+9)(+15)+(+15)+(-9)+(-9)+(+9)+21+21
S5(+9)+(+9)+(+9)+(+9)+(25)(+9)+(+9)+(+9)+(+9)+(-25)+11+11
모둠 1 블록 합 =21+21+21+21+11= 21+21+21+21+11+95+95
모둠 2 블록 — 3×3=93\times 3 = 9
3개 항 전개행별 합
S6(9)+(+18)+(+18)(-9)+(+18)+(+18)+27+27
S7(+18)+(4)+(+20)(+18)+(-4)+(+20)+34+34
S8(+18)+(+20)+(4)(+18)+(+20)+(-4)+34+34
모둠 2 블록 합 =27+34+34= 27+34+34+95+95

블록 합을 24로 나눠 실제 값으로 되돌리고, 2m=242m=24로 한 번 더 나눈다.

Q  =  124(9524+9524)  =  12419024  =  190576  =  95288  =  0.3299 Q \;=\; \frac{1}{24}\left(\frac{95}{24} + \frac{95}{24}\right) \;=\; \frac{1}{24}\cdot\frac{190}{24} \;=\; \frac{190}{576} \;=\; \frac{95}{288} \;=\; 0.3299

길 B — 모둠별 공식 (Route B — the Per-Community Formula)

모둠mcm_cDcD_cmcm\dfrac{m_c}{m}(Dc2m)2\left(\dfrac{D_c}{2m}\right)^2차이(항)
{S1,S2,S3,S4,S5}\{S1,S2,S3,S4,S5\}83+3+3+3+5=173{+}3{+}3{+}3{+}5=17812=384576\dfrac{8}{12} = \dfrac{384}{576}(1724)2=289576\left(\dfrac{17}{24}\right)^2 = \dfrac{289}{576}95576=0.16493\dfrac{95}{576} = 0.16493
{S6,S7,S8}\{S6,S7,S8\}33+2+2=73{+}2{+}2=7312=144576\dfrac{3}{12} = \dfrac{144}{576}(724)2=49576\left(\dfrac{7}{24}\right)^2 = \dfrac{49}{576}95576=0.16493\dfrac{95}{576} = 0.16493
QQ = 두 항의 합190576=0.3299\dfrac{190}{576} = 0.3299
두 길이 같은 답을 냈다. Q(P1)=190576=952880.3299Q(\text{P1}) = \dfrac{190}{576} = \dfrac{95}{288} \approx 0.3299.
길 A는 “쌍 하나하나의 놀라움을 다 더한다”는 정의 그대로이고, 길 B는 “모둠 단위로 실제 비율과 기대 비율을 뺀다”는 실용 공식이다. 손 계산에는 길 B가 훨씬 빠르지만, QQ가 무엇인지 이해하려면 길 A를 알아야 한다.

값 하나하나의 뜻 (What Each Value Means)

읽는 법
8/12=0.6678/12 = 0.667전체 간선의 66.7%가 모둠 1 안에 들어 있다
(17/24)2=0.502(17/24)^2 = 0.502차수만 같게 두고 아무렇게나 이어도 50.2%는 저절로 모둠 1 안에 들어온다
0.6670.502=0.1650.667 - 0.502 = 0.165모둠 1이 순수하게 벌어들인 몫. 우연을 넘어선 응집
3/12=0.2503/12 = 0.250모둠 2 안에 25%의 간선
(7/24)2=0.085(7/24)^2 = 0.085모둠 2는 반쪽의 29%뿐이라 우연 기대치가 8.5%에 불과
0.2500.085=0.1650.250 - 0.085 = 0.165작지만 기대치의 약 3배를 달성 — 모둠 1과 똑같은 기여
교실 해석. 모둠 1은 5명이 8개 간선, 모둠 2는 3명이 3개 간선이다. 간선 수만 보면 모둠 1이 훨씬 커 보이지만, QQ에 대한 기여는 정확히 같다. 모둠 2(S6·S7·S8)는 인원도 적고 인기도 없는(차수 3, 2, 2) 세 명이지만, 가진 관계를 거의 전부 자기들끼리 썼다. QQ는 “큰 무리”가 아니라 “자기 몫보다 잘한 무리”에 점수를 준다. 교실에서 조용한 소수 그룹이 사실은 가장 결속력이 강한 경우를 놓치지 않게 해 준다.

9. 두 항이 같았던 것은 우연이 아니다 (The Two-Community Identity)

§8에서 두 모둠의 항이 정확히 95/57695/576로 같았다. 신기한 우연처럼 보이지만 모둠이 2개일 때는 언제나 그렇다. 증명해 보자.

모둠 A, B의 항을 각각 TA,TBT_A, T_B라 하고 교차 간선 수를 xx라 하자.

단계근거
TATB=mAmBm[(DA2m)2(DB2m)2]T_A - T_B = \dfrac{m_A - m_B}{m} - \left[\left(\dfrac{D_A}{2m}\right)^2 - \left(\dfrac{D_B}{2m}\right)^2\right]두 항을 그대로 뺐다
(DA2m)2(DB2m)2=(DA+DB2m)(DADB2m)\left(\dfrac{D_A}{2m}\right)^2 - \left(\dfrac{D_B}{2m}\right)^2 = \left(\dfrac{D_A + D_B}{2m}\right)\left(\dfrac{D_A - D_B}{2m}\right)a2b2=(a+b)(ab)a^2-b^2 = (a+b)(a-b)
DA+DB=idi=2mD_A + D_B = \sum_i d_i = 2m 이므로 첫 괄호 =1= 1모든 정점이 A 아니면 B에 속한다
DA=2mA+x,DB=2mB+xD_A = 2m_A + x,\quad D_B = 2m_B + xA 구성원의 차수 합 = (A 안 간선의 양끝 2mA2m_A) + (밖으로 나간 끝 xx)
DADB=2(mAmB)D_A - D_B = 2(m_A - m_B)④에서 xx가 소거된다
TATB=mAmBm2(mAmB)2m=mAmBmmAmBm=0T_A - T_B = \dfrac{m_A-m_B}{m} - \dfrac{2(m_A-m_B)}{2m} = \dfrac{m_A-m_B}{m} - \dfrac{m_A-m_B}{m} = \mathbf{0}②③⑤를 ①에 대입 ∎

WW에서 숫자로 확인 (Checking the Numbers on W)

확인 항목모둠 1모둠 2
mcm_c83
Dc=2mc+xD_c = 2m_c + x2(8)+1=172(8)+1 = 172(3)+1=72(3)+1 = 7
DA+DBD_A + D_B17+7=24=2m17 + 7 = 24 = 2m
DADBD_A - D_B177=10=2(83)17-7 = 10 = 2(8-3)
95/57695/57695/57695/576
세 가지 쓸모.
검산 도구 — 모둠 2개짜리 분할은 한쪽만 계산하고 2배하면 된다. 두 항이 다르게 나오면 계산이 틀린 것이다.
mAm_A가 아무리 커도 DAD_A가 함께 커지므로 큰 모둠이라고 유리하지 않다.
③ 모둠이 3개 이상이면 성립하지 않는다 (연습문제 1에서 직접 확인).
R로 WW의 2-분할 126개 전부를 검사했고 예외는 0개였다 (§14).

10. 손 계산 ② — 극단 분할과 QQ의 범위 (Extreme Partitions and the Range of Q)

극단 ① — 전원 한 모둠 Q=0\Rightarrow Q = 0 (항상) (Extreme 1 — Everyone in One Community)

모둠이 하나뿐이면 mc=mm_c = m, Dc=2mD_c = 2m이다.

Q=mm(2m2m)2=11=0 Q = \frac{m}{m} - \left(\frac{2m}{2m}\right)^2 = 1 - 1 = \mathbf{0}

§3에서 이 분할은 f=1f=1만점이었다. QQ에서는 정확히 0점이다. 게다가 이건 WW만의 성질이 아니라 어떤 네트워크에서도 반드시 0이다. QQff의 실패를 정확히 겨냥해 고쳤음을 보여준다.

극단 ② — 8명 각자 따로 \Rightarrow 음수 (Extreme 2 — All Singletons)

모든 모둠이 1명이면 mc=0m_c = 0이고 Dc=diD_c = d_i다.

Q=i=18[0(di24)2]=1576idi2 Q = \sum_{i=1}^{8}\left[0 - \left(\frac{d_i}{24}\right)^2\right] = -\frac{1}{576}\sum_i d_i^2
iiS1S2S3S4S5S6S7S8
did_i3333532224
di2d_i^299992594478
=di2/576=-d_i^2/5769-99-99-99-925-259-94-44-478-78

(마지막 줄은 576576분의 값의 분자다.)

Q=78576=0.1354 Q = -\frac{78}{576} = -0.1354

음수다. “아무도 같은 모둠이 아니다”는 우연히 나눈 것보다도 나쁘다. 당연하다 — 실제로 존재하는 12개 간선을 전부 모둠 밖으로 내보냈으니.

가장 나쁜 분할 (The Worst Partition)

WW의 8명을 나누는 방법은 벨 수 B8=4140B_8 = 4140가지다. 전부 계산해 보면(§14)

순위분할QQ
최고{S1,S2,S3,S4,S5}{S6,S7,S8}\{S1,S2,S3,S4,S5\}\,|\,\{S6,S7,S8\} = P1190/576=+0.3299190/576 = +0.3299
최저{S1,S2,S6}{S3,S4,S7}{S5,S8}\{S1,S2,S6\}\,|\,\{S3,S4,S7\}\,|\,\{S5,S8\} 등 4가지194/576=0.3368-194/576 = -0.3368

최저 분할을 보면 무슨 짓을 한 것인지 알 수 있다. 세 모둠 모두 안쪽 간선이 0개다. 서로 친구가 아닌 S1·S2를 굳이 묶고, 이웃이 아닌 S5와 S8을 묶었다. 즉 기대보다 적은 쌍만 골라 같은 모둠으로 만든 것이다. BB 행렬로 말하면 음수 칸만 블록 안에 가두는 나눔이다. 실제로

Q=92+82+72576=81+64+49576=194576 Q = -\frac{9^2 + 8^2 + 7^2}{576} = -\frac{81+64+49}{576} = -\frac{194}{576}

로, 세 모둠의 차수합 Dc=(9,8,7)D_c = (9, 8, 7)의 제곱만 남아 전부 벌점이 된다.

QQ의 이론적 범위: 12Q<1-\tfrac12 \le Q < 1.
상한 — 크기가 같은 덩어리 KK개가 완전히 분리되어 있을 때 Q=11/KQ = 1 - 1/K로, KK를 키워도 1에 다가갈 뿐 도달하지 못한다. (삼각형 KK개를 떨어뜨려 놓고 계산해 확인했다 — §14.)
하한 1/2-1/2는 이분 그래프를 “양쪽을 각각 한 모둠으로” 나눌 때 나온다.
실전에서는 0Q0.70 \le Q \le 0.7 범위를 벗어나는 일이 거의 없다.
KK2345
삼각형 KK개가 완전 분리되었을 때 QQ1/2=0.5001/2 = 0.5002/3=0.6672/3 = 0.6673/4=0.7503/4 = 0.7504/5=0.8004/5 = 0.800

11. 손 계산 ③ — 분할 비교표 (Comparing Partitions)

이제 WW의 여러 분할을 같은 자로 잰다. 모둠이 2개인 것은 §9의 항등식 덕에 한쪽만 계산하고 2배했다. 분수는 전부 576576분의 값이다.

분할모둠별 (mc,Dc)(m_c, D_c)항들QQ한 줄 진단
P1 {S1..S5} | {S6,S7,S8}(8,17)(8,17), (3,7)(3,7)95+9595 + 95190/576190/576
=0.3299=0.3299
4140개 중 1위. 교차 간선이 1개뿐
P6 {S1,S2,S3,S4} | {S5,S6,S7,S8}(4,12)(4,12), (4,12)(4,12)48+4848 + 4896/57696/576
=0.1667=0.1667
S5를 억지로 떼어냄 → 교차 간선 4개
P2 {S1..S6} | {S7,S8}(9,20)(9,20), (1,4)(1,4)32+3232 + 3264/57664/576
=0.1111=0.1111
S6를 왼쪽에 넣음. 안 간선은 늘었으나 DcD_c 벌점이 더 큼
P3 전원 한 모둠(12,24)(12,24)000/5760/576
=0.0000=0.0000
나누지 않았으므로 0점 (항상)
P4 8명 각자 따로(0,di)(0,d_i) × 878-7878/576-78/576
=0.1354=-0.1354
간선을 전부 밖으로 버림
최악 {S1,S2,S6}|{S3,S4,S7}|{S5,S8}(0,9)(0,9), (0,8)(0,8), (0,7)(0,7)194-194194/576-194/576
=0.3368=-0.3368
사이 나쁜 사람만 골라 묶음

P2가 왜 P1보다 나쁜지 — 한 줄로 보기 (Why P2 Loses to P1)

P2는 S6를 왼쪽 모둠에 넣었다. 얻은 것과 잃은 것을 재 보자.

P1P2변화
왼쪽 모둠 안 간선 mcm_c89+1+1 (S5–S6이 안으로)
왼쪽 모둠 차수합 DcD_c1720+3+3 (S6의 차수 3이 통째로)
실제 비율 mc/mm_c/m0.66670.66670.75000.7500+0.0833+0.0833
기대 비율 (Dc/2m)2(D_c/2m)^20.50170.50170.69440.6944+0.1927+0.1927
0.16490.16490.05560.05560.1094-0.1094
QQ의 작동 원리가 여기 그대로 보인다. S6를 데려오면 간선을 1개 얻지만 차수합은 3이 늘어난다. 기대 비율은 DcD_c제곱에 비례하므로 차수합 증가가 훨씬 무겁게 벌점을 매긴다. 즉 QQ“들어오려면 자기 관계의 대부분을 이 모둠 안에서 쓰는 사람이어야 한다”고 요구한다. S6는 관계 3개 중 1개만 왼쪽으로 향하므로 입장 자격이 없다.
교실 해석. 이 계산은 “모둠에 한 명 더 넣을까?”라는 실제 고민의 답이다. 그 학생이 새 모둠 쪽으로 관계 대부분을 갖고 있으면 넣는 게 낫고, 바깥에 친구가 더 많으면 억지로 넣는 순간 모둠 전체의 응집도 점수가 떨어진다. S6은 “왼쪽 무리와 오른쪽 무리를 잇는 다리”이지 어느 한쪽 소속이 아니다.

12. 한 사람을 옮기면 (Moving One Node)

P1에서 한 명씩 반대편 모둠으로 옮겨 보면, 그 사람이 지금 자리에 얼마나 확실히 속해 있는지가 숫자로 나온다.

옮긴 사람옮긴 뒤 QQ변화해석
P1 원본190/576=0.3299190/576 = 0.3299기준
S1 / S2 / S3 / S488/576=0.152888/576 = 0.1528102/576-102/576넷 다 대칭이므로 손해가 같다
S596/576=0.166796/576 = 0.166794/576-94/576손해가 가장 작다 — 유일하게 양쪽에 다리를 걸친 사람
S664/576=0.111164/576 = 0.1111126/576-126/576오른쪽 삼각형이 깨진다
S7 / S846/576=0.079946/576 = 0.0799144/576-144/576손해가 가장 크다 — 관계 전부가 모둠 안에 있다
“소속 확실성”의 척도. S7·S8은 차수가 2뿐인 가장 인기 없는 학생인데도 옮겼을 때 손해가 가장 크다. 관계 2개가 100% 모둠 안에 있기 때문이다. 반대로 차수 5로 가장 인기 많은 S5는 옮겨도 손해가 가장 적다. 관계 5개 중 1개가 이미 반대편을 향하기 때문이다.
인기와 소속감은 별개다.
교실 해석. 모둠 편성표를 놓고 학생을 한 명씩 다른 모둠으로 옮겨 보며 QQ 변화를 재면, “이 학생은 어느 모둠에 있어야 하는가”가 아니라 “이 학생은 지금 자리에 얼마나 확실히 속해 있는가”를 알 수 있다. 변화량이 작은 학생(여기서는 S5)은 경계에 있는 학생이다. 이런 학생은 두 모둠 사이의 정보 통로 역할을 할 수 있어 오히려 자원이 되기도 하고, 어느 쪽에도 온전히 끼지 못하는 상태일 수도 있다. 숫자는 어느 쪽인지 말해주지 않으므로 반드시 관찰로 확인해야 한다.

13. QQ를 읽는 법 (Interpreting Q)

QQ
Q<0Q < 0우연히 나눈 것보다 못하다. 사이 나쁜 사람들을 묶어 놓았다는 뜻
Q=0Q = 0우연 수준. “전원 한 모둠”이 늘 여기 해당
0<Q<0.30 < Q < 0.3약한 구조. 구조가 정말 없을 수도, 분할이 나쁠 수도 있다
0.3Q0.70.3 \le Q \le 0.7뚜렷한 커뮤니티 구조. 실제 사회망 대부분이 여기 (Newman & Girvan)
Q>0.7Q > 0.7거의 완전히 분리된 덩어리들. 사회망에서는 드물다

중요한 경고 — 무작위 그래프도 QQ가 0이 아니다 (A Warning — Random Graphs Have Nonzero Q)

“전원 한 모둠”은 Q=0Q=0이지만, 그건 주어진 분할 하나의 값이다. 무작위 네트워크라도 4140가지를 다 뒤져 가장 좋은 분할을 고르면 QQ는 꽤 커진다. WW차수열이 똑같은(3,3,3,3,5,3,2,23,3,3,3,5,3,2,2) 무작위 그래프 300개를 만들어 각각 최적 분할을 찾아 봤다.

대상최적 QQ
무작위 그래프 300개의 평균0.2311
무작위 그래프 300개의 중앙값0.2273
무작위 그래프 300개의 최댓값0.4091
실제 WW의 최적 QQ0.3299 (무작위의 94.15%보다 큼)
Q=0.33Q = 0.33이 나왔으니 커뮤니티가 있다”고 말하면 안 된다. 아무 구조 없는 그래프에서도 최적화만 하면 0.23쯤은 나오고, 운 나쁘면 0.41까지 나온다. 특히 정점 수가 적을수록 이 효과가 크다.
올바른 결론은 이렇다: “같은 차수를 가진 무작위 그래프와 비교했을 때 WW의 0.3299는 상위 6% 안에 든다.” QQ절대 점수가 아니라 비교용 자다.

또 하나의 함정 — 분할끼리만 비교할 것 (Another Pitfall — Compare Partitions Only)

QQmmdid_i로 정규화되어 있지만, 다른 네트워크끼리QQ를 비교하는 것은 위험하다. 크기·밀도가 다르면 QQ가 도달할 수 있는 최댓값 자체가 다르기 때문이다. QQ같은 네트워크 위의 여러 분할을 줄 세울 때 가장 믿을 만하다.

14. R로 검증 (R Verification)

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")
d  <- degree(gW); m <- ecount(gW)          # d = 3 3 3 3 5 3 2 2 ,  m = 12

## --- 모듈러리티 행렬 B (24를 곱해 정수로 보기) ---
B <- W - outer(d,d)/(2*m)
24*B
#     S1  S2  S3  S4  S5  S6  S7  S8
#  S1 -9  -9  15  15   9  -9  -6  -6
#  S2 -9  -9  15  15   9  -9  -6  -6
#  S3 15  15  -9  -9   9  -9  -6  -6
#  S4 15  15  -9  -9   9  -9  -6  -6
#  S5  9   9   9   9 -25   9 -10 -10
#  S6 -9  -9  -9  -9   9  -9  18  18
#  S7 -6  -6  -6  -6 -10  18  -4  20
#  S8 -6  -6  -6  -6 -10  18  20  -4
rowSums(B)                                  # 0 0 0 0 0 0 0 0   (행합 = 0)
sum(B)                                      # 0
sum(outer(d,d))/(2*(2*m))                   # 12   (= m, 기대 간선 총합)

## --- 블록 합 (§8 길 A) ---
24*sum(B[1:5,1:5]); 24*sum(B[6:8,6:8])      # 95   95

## --- P1의 Q: 세 가지 방법 ---
P1 <- c(1,1,1,1,1,2,2,2)
modularity(gW, P1)                          # 0.3298611   ( = 190/576 )
sum(B[outer(P1,P1,"==")]) / (2*m)           # 0.3298611   (정의 그대로)
sum(sapply(1:2, function(c){ v <- which(P1==c)
  sum(W[v,v])/2/m - (sum(d[v])/(2*m))^2 }))  # 0.3298611   (모둠별 공식)

## --- 다른 분할들 ---
modularity(gW, c(1,1,1,1,1,1,2,2))          # 0.1111111   P2  = 64/576
modularity(gW, c(1,1,1,1,2,2,2,2))          # 0.1666667   P6  = 96/576
modularity(gW, rep(1,8))                    # 0           전원 한 모둠
modularity(gW, 1:8)                         # -0.1354167  전원 각자 = -78/576

## --- 전수 탐색: 8명을 나누는 4140가지 모두 ---
# 최대 Q = 0.3298611 = 190/576  →  {S1,S2,S3,S4,S5} | {S6,S7,S8}   (유일)
# 최소 Q = -0.3368056 = -194/576 →  {S1,S2,S6}|{S3,S4,S7}|{S5,S8} 등 4가지
# Q > 0 인 분할은 4140개 중 372개 (9.0%)

## --- 2-분할 항등식: 두 항이 늘 같은가 (126개 전수) ---
# 검사한 2-분할 126개, 두 항이 다른 경우 0개

## --- 완전 분리된 삼각형 K개: Q = 1 - 1/K ---
for(K in 2:5){
  g <- disjoint_union(replicate(K, make_full_graph(3), simplify=FALSE))
  cat(K, modularity(g, rep(1:K, each=3)), 1-1/K, "\n") }
# 2 0.5       0.5
# 3 0.6666667 0.6666667
# 4 0.75      0.75
# 5 0.8       0.8

가라테 클럽(§15) 부분은 이렇다.

kel <- as.matrix(read.table("karate_net.txt"))
gk  <- add_edges(simplify(graph_from_edgelist(kel, directed=FALSE)), c(9,31))   # 78개 교정판
hi  <- c(1,2,3,4,5,6,7,8,11,12,13,14,17,18,20,22)      # Mr.Hi 파벌 16명
fac <- ifelse(1:34 %in% hi, 1, 2)

modularity(gk, fac)                          # 0.3714661   실제 분열
modularity(gk, ifelse(coreness(gk)>=4, 1, 2))# 0.0046021   4-코어 | 나머지
modularity(gk, rep(1,34))                    # 0           전원 한 덩어리
modularity(gk, 1:34)                         # -0.0498       전원 각자

## 4-코어는 왜 0점인가: 안쪽 25개 vs 바깥으로 38개
c4 <- which(coreness(gk)>=4)
sum(as.matrix(as_adjacency_matrix(gk))[c4,c4])/2               # 25  (안쪽)
sum(degree(gk)[c4]) - 2*25                                     # 38  (교차)

## Louvain은 실행마다 결과가 달라진다 (100회)
set.seed(4); modularity(cluster_louvain(gk))                   # 0.4198  (관측 최댓값)
# 100회: Q 최소 0.3886 / 중앙값 0.4188 / 최대 0.4198,  모둠 수 4개가 99번·3개가 1번
#        최댓값 0.4198에 도달한 경우 30/100
#        실제 파벌 경계를 한 명도 넘지 않은 경우 43/100

## 결정적 방법 셋 (3회 돌려도 같은 값)
modularity(cluster_edge_betweenness(gk))     # 0.4013   크기 12-10-6-5-1
modularity(cluster_fast_greedy(gk))          # 0.3807   크기 17-9-8
modularity(cluster_walktrap(gk))             # 0.3532   크기 9-9-7-5-4

15. 실전 — 가라테 클럽의 실제 분열 (Karate Club: The Real Split)

가라테 클럽은 실제로 두 쪽으로 갈라졌다. 사범 Mr. Hi 편 16명, 회장 John A 편 18명. 이 실제로 일어난 분열이 몇 점인지 재 본다. (간선 78개짜리 교정판 데이터 — CLAUDE.md 참조.)

가라테 클럽 실제 분열
그림 3. 가라테 클럽의 실제 분열. 빨간 점선이 파벌을 넘는 간선 10개.

손 계산 — m=78m = 78, 2m=1562m = 156 (The Hand Calculation)

모둠인원mcm_cDcD_cmc/mm_c/m(Dc/2m)2(D_c/2m)^2
Mr. Hi 파벌16337633/78=0.423133/78 = 0.4231(76/156)2=0.2373(76/156)^2 = 0.2373+0.18573+0.18573
John A 파벌18358035/78=0.448735/78 = 0.4487(80/156)2=0.2630(80/156)^2 = 0.2630+0.18573+0.18573
QQ(실제 분열)0.3715

검산 ①: 33+35+10교차=78=m33 + 35 + \underbrace{10}_{\text{교차}} = 78 = m
검산 ②: Dc=2mc+xD_c = 2m_c + x2(33)+10=762(33)+10 = 76 ✓, 2(35)+10=802(35)+10 = 80
검산 ③: 76+80=156=2m76 + 80 = 156 = 2m
검산 ④ (§9 항등식): 두 항이 같다 ✓

지난 단원의 4-코어와 비교 (Compared with the 4-Core)

분할mcm_cDcD_c교차 간선QQ
{4-코어 10명} | {나머지 24명}25 / 1588 / 68380.0023+0.0023=0.00460.0023 + 0.0023 = \mathbf{0.0046}
{Mr.Hi 16명} | {John A 18명}33 / 3576 / 80100.1857+0.1857=0.37150.1857 + 0.1857 = \mathbf{0.3715}
결정적인 숫자는 “교차 38”이다. 4-코어 10명은 안쪽 간선이 25개인데 바깥으로 나간 간선이 38개다. 안보다 밖이 더 많다. 이들은 한쪽 진영이 아니라 클럽 전체의 중심이기 때문이다.
실제로 노트 17에서 확인했듯 4-코어 10명은 파벌이 섞여 있다 — Mr.Hi 쪽 6명(1, 2, 3, 4, 8, 14)과 John A 쪽 4명(9, 31, 33, 34). “빽빽함”과 “한 편임”은 다른 것이다.

기계는 사람보다 높은 점수를 낸다 (The Machine Scores Higher Than the Truth)

단원 3-4에서 배울 알고리즘들을 미리 돌려 봤다.

분할 방법모둠 수모둠 크기QQ파벌이 섞인 모둠
Louvain (set.seed(4))412, 11, 6, 50.41980개
Girvan–Newman (edge betweenness)512, 10, 6, 5, 10.40131개 (3번 학생 1명이 반대편에)
Fast greedy317, 9, 80.38071개 (10번 학생 1명이 반대편에)
실제 일어난 분열218, 160.3715— (기준)
Walktrap59, 9, 7, 5, 40.35321개 (3번·14번 2명)
QQ가 가장 큰 분할이 “정답”은 아니다. Louvain의 0.4198은 실제 분열의 0.3715보다 높다. 그렇다고 “클럽이 실제로는 4개로 갈라졌어야 했다”는 뜻이 아니다. 실제 분열은 사람이 편을 고른 결과이고, QQ간선의 배치만 본다. 게다가 네 방법이 서로 다른 답을 냈다 — 3개, 4개, 5개로 모둠 수부터 제각각이다.

Louvain은 돌릴 때마다 답이 달라진다 (Louvain Answers Differently Each Run)

위 표의 Louvain 행에 set.seed(4)를 적어 둔 이유가 있다. Louvain은 정점을 훑는 순서를 무작위로 정하므로 실행할 때마다 결과가 바뀐다. 100번 돌려 봤다.

항목
QQ의 최솟값 / 중앙값 / 최댓값0.3886 / 0.4188 / 0.4198
모둠 수4개가 99번, 3개가 1번
최댓값 Q=0.4198Q=0.4198에 도달한 횟수30 / 100
실제 파벌 경계를 한 명도 넘지 않은 횟수43 / 100

즉 “Louvain이 파벌을 정확히 세분한다”는 것은 절반도 안 되는 경우에만 참이다. 다른 결정적(deterministic) 방법 셋은 매번 같은 답을 내지만, 그 답도 모두 파벌이 섞인 모둠을 정확히 1개씩 갖고 있다.

가장 좋았던 Louvain 결과 (Q=0.4198Q = 0.4198) (The Best Louvain Result)

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

이 결과에서는 Louvain이 실제 파벌을 틀리게 나눈 것이 아니라 더 잘게 쪼갰다: C1C2=C1 \cup C2 = Mr.Hi 파벌 16명, C3C4=C3 \cup C4 = John A 파벌 18명. QQ가 0.3715에서 0.4198로 오른 것은 각 파벌 안에도 하위 그룹이 실제로 있기 때문이다.

C2 = {5,6,7,11,17}\{5, 6, 7, 11, 17\}이 특히 선명한 예다. 이 다섯 명은 코어 번호가 (3,3,3,3,2)(3,3,3,3,2)로 4-코어에 못 든 주변부인데, 그들끼리는 6개 간선(밀도 0.6, 전체 밀도 0.139의 4배)으로 촘촘히 얽혀 있다. 그리고 결정적으로 — 이 다섯 명의 바깥 이웃은 1번(Mr. Hi) 단 한 사람뿐이다. 바깥으로 나가는 간선 4개가 전부 1번을 향한다. 사범 한 명에게만 매달린, 자기들끼리 완결된 작은 무리인 것이다. QQ는 이런 구조를 놓치지 않는다.

교실 해석. 어떤 반은 “남학생/여학생” 두 덩어리로 보이지만 그 안이 다시 “축구하는 남학생 / 게임하는 남학생”으로 나뉘기도 한다. QQ를 재 보면 후자의 4모둠 분할이 점수가 더 높게 나올 수 있다. 어느 수준의 나눔을 볼 것인가QQ가 정해 주지 않는다 — 교사가 목적에 따라 정한다. (이 “몇 개로 나눌 것인가” 문제는 단원 3-4에서 본격적으로 다룬다.)

16. 교실 적용 (Classroom Application)

① 모둠 편성표 채점하기. 교우관계 조사로 네트워크를 만들고, 지금 쓰는 모둠 편성표의 QQ를 계산한다.
Q0Q \approx 0이면 “이 편성은 관계를 전혀 반영하지 않았다”는 뜻이다. (그것이 의도된 편성일 수도 있다 — 아래 ④ 참조.)
Q0.3Q \ge 0.3이면 “이미 존재하는 무리를 그대로 모둠으로 만들었다”는 뜻이다.
② 두 편성안 중 고르기. QQ의 가장 안전하고 정직한 쓰임이다. 같은 반, 같은 관계 데이터 위에서 편성안 A와 B를 재면 “어느 쪽이 기존 관계를 더 많이 살렸는가”를 한 숫자로 비교할 수 있다. 서로 다른 학급의 QQ를 비교하는 것은 피할 것 (§13).
③ 경계에 선 학생 찾기. §12처럼 학생을 한 명씩 다른 모둠으로 옮겨 보고 QQ변화량을 기록한다. 변화가 작은 학생은 지금 모둠에 느슨하게 걸쳐 있다.
주의 — 이것은 “소외 학생”과 다르다. 다리 역할을 하는 인기 학생(S5)도 변화량이 작게 나온다. 숫자는 주의를 기울일 대상을 짚어 줄 뿐, 왜 그런지는 관찰과 대화로만 알 수 있다.
QQ가 낮은 편성이 더 좋을 때도 있다. QQ를 최대화하면 이미 친한 애들끼리만 모으는 편성이 나온다. 이것은 협력 학습에는 좋을 수 있으나 관계 확장에는 최악이다.
새 관계를 만드는 것이 목표라면 오히려 QQ를 일부러 낮게 잡되, 아무도 완전히 혼자가 되지 않도록 각 모둠에 최소 1명의 아는 사람을 배치한다. QQ목표가 아니라 계기판이다.
윤리적 주의. 교우관계 데이터로 계산한 QQ나 소속 확실성 수치를 학생이나 학부모에게 그대로 보여주는 것은 위험하다. 관계는 계속 변하고, 한 시점의 설문은 그날의 기분에 크게 좌우된다. 이 수치는 교사가 어디를 더 살펴볼지 정하는 데만 쓰고, 판단의 근거는 항상 관찰이어야 한다.

17. 연습문제 (Exercises)

문제 1. 네트워크 WW세 모둠으로 나눈 분할 P5={S1,S3,S5}    {S2,S4}    {S6,S7,S8} \text{P5} = \{S1,S3,S5\} \;|\; \{S2,S4\} \;|\; \{S6,S7,S8\} QQ를 손으로 구하시오.
  1. 각 모둠의 mcm_cDcD_c를 구하고, 검산으로 cmc+(교차 간선)=12\sum_c m_c + (\text{교차 간선}) = 12cDc=24\sum_c D_c = 24를 확인할 것.
  2. 세 항을 576576분수로 각각 구한 뒤 더하시오.
  3. §9의 항등식(두 항이 같다)이 여기서도 성립하는가? 성립하지 않는다면 왜인가?
  4. P1의 Q=190/576Q = 190/576과 비교해 어느 쪽이 좋은 분할이고, 그 차이가 어디서 왔는지 설명하시오.

참고: WW의 간선은 S1–S3, S1–S4, S1–S5, S2–S3, S2–S4, S2–S5, S3–S5, S4–S5, S5–S6, S6–S7, S6–S8, S7–S8이고 차수는 (3,3,3,3,5,3,2,2)(3,3,3,3,5,3,2,2)이다. → §18 해설 (먼저 풀고 맞춰 볼 것)

문제 2. 아래 아령 네트워크(barbell graph) HH를 생각하자. 6명이 삼각형 두 개를 이루고, 다리 하나(A1–B1)로 연결되어 있다.
    A2 ---- A3            B2 ---- B3
      \    /                \    /
       \  /                  \  /
        A1 ---------------- B1
     간선: A1-A2, A1-A3, A2-A3, B1-B2, B1-B3, B2-B3, A1-B1  (총 7개)
  1. 차수를 모두 적고 idi=2m\sum_i d_i = 2m을 확인하시오.
  2. 분할 {A1,A2,A3}{B1,B2,B3}\{A1,A2,A3\}\,|\,\{B1,B2,B3\}QQ분수로 구하시오. (§9 항등식을 써서 한쪽만 계산하고 2배 할 것.)
  3. 이제 다리 A1–B1을 끊으면 같은 분할의 QQ는 얼마가 되는가? §10의 Q=11/KQ = 1 - 1/K와 맞는지 확인하시오.
  4. 다리 하나가 있고 없고가 QQ를 얼마나 바꾸는가? 그 이유를 mc/mm_c/m(Dc/2m)2(D_c/2m)^2 두 항의 변화로 나누어 설명하시오.

§18 해설 (먼저 풀고 맞춰 볼 것)

18. 해설과 답 (Solutions)

문제 1 해설 — P5의 QQ (Solution 1 — Q of P5)

① 무엇을 세는가. 각 모둠 안에 들어간 간선을 WW의 간선 목록에서 하나씩 확인한다. 12개 간선을 하나도 빠뜨리지 않고 어디에 속하는지 분류한다.

간선S1,S3,S5S2,S4S6,S7,S8교차
S1–S3
S1–S4
S1–S5
S2–S3
S2–S4
S2–S5
S3–S5
S4–S5
S5–S6
S6–S7
S6–S8
S7–S8
mcm_c3135

검산: 3+1+3+5=12=m3+1+3+5 = 12 = m

② 차수합 DcD_c. 모둠 밖으로 나간 간선도 포함해서 전체 차수를 더한다.

모둠항을 전부 전개DcD_c
{S1,S3,S5}\{S1,S3,S5\}dS1+dS3+dS5=3+3+5d_{S1}+d_{S3}+d_{S5} = 3+3+511
{S2,S4}\{S2,S4\}dS2+dS4=3+3d_{S2}+d_{S4} = 3+36
{S6,S7,S8}\{S6,S7,S8\}dS6+dS7+dS8=3+2+2d_{S6}+d_{S7}+d_{S8} = 3+2+27
검산 11+6+711+6+724=2m24 = 2m

③ 세 항 전개. 분모를 576=242576 = 24^2로 통일한다. mc/m=mc/12=48mc/576m_c/m = m_c/12 = 48m_c/576임에 주의.

모둠mc/mm_c/m(Dc/24)2(D_c/24)^2항 (/576/576)왜 그 값인가
{S1,S3,S5}\{S1,S3,S5\}312=144576\dfrac{3}{12} = \dfrac{144}{576}112576=121576\dfrac{11^2}{576} = \dfrac{121}{576}144121=23144-121 = \mathbf{23}차수합 11로 반쪽의 46%를 쥐고 있어 기대치가 높다. 실제 3개는 그 기대를 겨우 넘는다
{S2,S4}\{S2,S4\}112=48576\dfrac{1}{12} = \dfrac{48}{576}62576=36576\dfrac{6^2}{576} = \dfrac{36}{576}4836=1248-36 = \mathbf{12}간선 1개뿐이지만 두 명이라 기대치도 낮다. 소폭 흑자
{S6,S7,S8}\{S6,S7,S8\}312=144576\dfrac{3}{12} = \dfrac{144}{576}72576=49576\dfrac{7^2}{576} = \dfrac{49}{576}14449=95144-49 = \mathbf{95}P1과 똑같은 모둠이므로 항도 똑같다. 기대치의 약 3배
=23+12+95= 23 + 12 + 95130
답 (1)(2). mc=(3,1,3)m_c = (3, 1, 3), Dc=(11,6,7)D_c = (11, 6, 7), 교차 간선 5개. Q(P5)=23576+12576+95576=130576=65288=0.2257 Q(\text{P5}) = \frac{23}{576} + \frac{12}{576} + \frac{95}{576} = \frac{130}{576} = \frac{65}{288} = \mathbf{0.2257}
답 (3). 성립하지 않는다. 세 항은 23,12,9523, 12, 95로 모두 다르다.
§9의 증명에서 결정적으로 쓴 것은 DA+DB=2mD_A + D_B = 2m이었다. 모둠이 2개일 때만 두 모둠의 차수합이 전체를 채우므로 (DA+DB)/2m=1(D_A+D_B)/2m = 1이 되어 제곱차가 깔끔하게 접혔다. 모둠이 3개면 DA+DB=11+6=1724D_A + D_B = 11+6 = 17 \ne 24이므로 그 단계가 무너진다.
따라서 항등식은 “모둠 2개” 전용 검산 도구다. 3개 이상이면 각 항을 따로 계산해야 한다.
답 (4). P1이 더 좋다: 190/576=0.3299>130/576=0.2257190/576 = 0.3299 > 130/576 = 0.2257. 차이는 60/576=0.104260/576 = 0.1042.
차이가 어디서 왔는지가 중요하다. 두 분할은 오른쪽 모둠 {S6,S7,S8}\{S6,S7,S8\}완전히 같고 그 항도 95/57695/576로 같다. 다른 것은 왼쪽뿐이다.
왼쪽 처리항의 합
P1: {S1..S5}\{S1..S5\}통째로95
P5: {S1,S3,S5}\{S1,S3,S5\}{S2,S4}\{S2,S4\}쪼갬23+12=3523 + 12 = \mathbf{35}
쪼개면서 S1–S4, S2–S3, S2–S5, S4–S5 네 개의 간선을 모둠 밖으로 내보냈다. 왼쪽 8개 간선 중 절반을 버린 셈이다. QQ는 이 손실을 60/57660/576만큼의 벌점으로 정확히 잡아낸다.
교실 해석. {S1,,S5}\{S1,\dots,S5\}는 지난 단원에서 2-플렉스이자 3-코어였던, 서로 거의 다 아는 다섯 명이다. 이 다섯을 억지로 3명·2명으로 쪼개면 그 안의 관계 8개 중 4개가 모둠 경계를 넘어가 버린다. “이미 뭉쳐 있는 무리를 반으로 자르는 편성”이 왜 나쁜 편성인지를 QQ가 숫자로 말해 준다. 반대로 {S6,S7,S8}\{S6,S7,S8\}처럼 관계가 자기들끼리 닫혀 있는 무리는 어떤 분할에서도 온전히 남으므로 항상 같은 점수를 낸다.

문제 2 해설 — 아령 네트워크 HH (Solution 2 — the Barbell Network H)

① 무엇을 세는가. 간선 7개를 놓고 각 정점이 몇 개에 등장하는지 센다.

정점붙어 있는 간선을 전부 나열did_i
A1A1–A2, A1–A3, A1–B13
A2A1–A2, A2–A32
A3A1–A3, A2–A32
B1B1–B2, B1–B3, A1–B13
B2B1–B2, B2–B32
B3B1–B3, B2–B32
=3+2+2+3+2+2= 3+2+2+3+2+214=2m=2(7)14 = 2m = 2(7)
답 (1). d=(3,2,2,3,2,2)d = (3,2,2,3,2,2), m=7m = 7, 2m=142m = 14. ✓

② 다리가 있을 때. 모둠 {A1,A2,A3}\{A1,A2,A3\}의 안쪽 간선은 A1–A2, A1–A3, A2–A3 세 개 → mA=3m_A = 3. 차수합은 3+2+2=7=DA3+2+2 = 7 = D_A. 검산 DA=2mA+x=2(3)+1=7D_A = 2m_A + x = 2(3) + 1 = 7 ✓ (교차 간선 x=1x=1은 다리).

모둠mc/mm_c/m(Dc/14)2(D_c/14)^2왜 그 값인가
{A1,A2,A3}\{A1,A2,A3\}37=1228\dfrac{3}{7} = \dfrac{12}{28}(714)2=14=728\left(\dfrac{7}{14}\right)^2 = \dfrac14 = \dfrac{7}{28}12728=528\dfrac{12-7}{28} = \dfrac{5}{28}반쪽의 정확히 절반(7/14)을 차지하므로 기대치가 1/4. 실제는 3/7
{B1,B2,B3}\{B1,B2,B3\}대칭이므로 완전히 같다 → 528\dfrac{5}{28} (§9 항등식으로도 확인됨)두 삼각형이 거울상
답 (2). Q=2×528=1028=5140.3571 Q = 2 \times \frac{5}{28} = \frac{10}{28} = \boxed{\frac{5}{14}} \approx \mathbf{0.3571} 전수 탐색으로 확인하면 이것이 HH최적 분할이다.

③ 다리를 끊으면. mm이 7에서 6으로, 2m2m이 14에서 12로 줄고, A1과 B1의 차수가 3에서 2로 떨어져 여섯 명 모두 차수 2가 된다.

모둠mcm_cDcD_cmc/mm_c/m(Dc/12)2(D_c/12)^2
{A1,A2,A3}\{A1,A2,A3\}32+2+2=62+2+2=636=12\dfrac36 = \dfrac12(612)2=14\left(\dfrac{6}{12}\right)^2 = \dfrac141214=14\dfrac12-\dfrac14 = \dfrac14
{B1,B2,B3}\{B1,B2,B3\}3612\dfrac1214\dfrac1414\dfrac14
답 (3). Q=14+14=12=0.5 Q = \frac14 + \frac14 = \boxed{\frac12} = 0.5 K=2K=2개의 크기가 같은 덩어리가 완전히 분리되었으므로 §10의 Q=11/K=11/2=1/2Q = 1 - 1/K = 1 - 1/2 = 1/2정확히 일치한다. ✓ 이것이 두 모둠으로 나눌 때 도달할 수 있는 이론상 최댓값이다.

④ 다리 하나의 값. 0.50.3571=0.1429=1/70.5 - 0.3571 = 0.1429 = 1/7만큼 떨어진다. 두 항이 각각 어떻게 변했는지 나누어 본다.

다리 없음다리 있음변화이유
mc/mm_c/m (실제 비율)3/6=0.50003/6 = 0.50003/7=0.42863/7 = 0.42860.0714-0.0714안쪽 간선은 3개 그대로인데 분모 mm이 6→7로 늘었다. 새로 생긴 간선이 모둠 밖으로 갔으므로 비율이 희석된다
(Dc/2m)2(D_c/2m)^2 (기대 비율)(6/12)2=0.2500(6/12)^2 = 0.2500(7/14)2=0.2500(7/14)^2 = 0.250000DcD_c2m2m똑같이 1과 2씩 늘어 비율 1/21/2가 유지된다. 대칭 구조라 기대치는 전혀 바뀌지 않는다
0.25000.25000.17860.17860.0714=1/14-0.0714 = -1/14전부 실제 비율 쪽에서 왔다
답 (4). QQ1/25/141/2 \to 5/141/70.14291/7 \approx 0.1429 떨어진다 (두 모둠이므로 항별 손실 1/141/14의 2배).
손실은 전적으로 mc/mm_c/m 항에서 발생했고, 기대 항 (Dc/2m)2(D_c/2m)^21/41/4로 그대로다. 간선 하나가 모둠 밖에 추가되면 DcD_c2m2m이 함께 커져 기대치는 유지되는 반면, 실제 비율의 분모만 커져 점수가 깎이기 때문이다.
교실 해석. 두 모둠을 잇는 다리 하나가 QQ를 0.14나 떨어뜨린다. QQ를 최대화하려는 알고리즘은 그래서 다리를 끊는 방향으로 움직인다. 그런데 교실에서 두 무리를 잇는 그 한 명(A1·B1 같은 학생)은 정보가 반 전체로 퍼지는 유일한 통로다. 관계 확장이나 정보 확산이 목표라면 QQ가 벌점을 매기는 바로 그 다리를 지켜야 한다.
이것이 §16 ④에서 말한 “QQ는 목표가 아니라 계기판”의 구체적인 사례다. 높은 QQ잘 뭉쳤다는 뜻이지 좋은 교실이라는 뜻이 아니다.

다음 단원 예고단원 3-4. 커뮤니티 탐지 알고리즘 (Community Detection Algorithms)
오늘 우리는 주어진 분할을 채점할 수 있게 되었다. 그런데 정작 필요한 것은 가장 좋은 분할을 찾는 것이다. WW는 8명이라 B8=4140B_8 = 4140가지를 전수 탐색할 수 있었지만, 가라테 34명은 B342.1×1028B_{34} \approx 2.1 \times 10^{28}가지다. 컴퓨터로도 불가능하다.
다음 시간에는 이 거대한 공간을 영리하게 뒤지는 세 가지 방법을 손으로 따라간다 — Girvan–Newman(간선 매개중심성이 높은 다리부터 잘라 나간다), Louvain(오늘 §12에서 한 “한 사람씩 옮겨 보기”를 QQ가 오르지 않을 때까지 반복한다), walktrap(무작위 걷기가 커뮤니티 밖으로 잘 못 나간다는 성질을 쓴다). 오늘 계산한 가라테의 Q=0.3715Q = 0.3715를 이들이 어떻게 0.42까지 끌어올리는지, 그리고 그것이 왜 “더 정확한 답”은 아닌지를 확인한다.