와츠·스트로가츠 모형 — 지름길 몇 개가 세상을 좁힌다
SNA 이론 · 단계별 학습 차례

단원 4-4The Watts–Strogatz Small-World Model

와츠·스트로가츠 모형 — 지름길 몇 개가 세상을 좁힌다

SNA 이론 · 단계별 학습STAGED+ 스터디
오늘 배우는 것 한 줄 요약
4-3은 모순으로 끝났다. G(n,p)G(n,p)거리는 맞히는데 뭉침을 못 맞힌다. 그 반대 극단이 고리 격자다 — 뭉침은 넘치는데(C=0.5C=0.5) 거리가 nn에 비례해 절망적으로 멀다.
와츠와 스트로가츠는 두 극단 사이에 손잡이 하나를 달았다: 재배선 확률 pp. p=0p=0이면 격자, p=1p=1이면 무작위. 놀라운 것은 그 사이다.
n=1000n=1000에서 p=0.01p=0.01 — 간선 5000개 중 겨우 몇 십 개를 옮겼을 뿐인데 거리는 86% 사라지고(L/L0=0.137L/L_0=0.137) 뭉침은 94% 남는다(C/C0=0.940C/C_0=0.940). 이 구간이 좁은 세상이다.
그리고 오늘은 igraph의 구현이 교과서 공식과 다르다는 것도 직접 증명한다 — 교과서는 (1p)3(1-p)^3, igraph는 (1p)6(1-p)^6.

1. 오늘의 질문: 두 극단 사이에 손잡이를 단다 (A Knob Between Two Extremes)

4-3에서 우리는 G(n,p)G(n,p)의 성적표를 두 축으로 나눠 받았다.

모형평균 거리 LL군집계수 CC한 줄 평
무작위 그래프 G(n,p)G(n,p)lnn/lnλ\ln n/\ln\lambda맞힘C=p0C=p\to 0틀림좁긴 한데 아무도 안 뭉친다
가라테 (실제)2.4080.2557좁으면서 동시에 뭉쳐 있다

실제 사회망은 두 성질을 동시에 가진다. 좁고, 뭉쳐 있다. G(n,p)G(n,p)는 앞의 절반만 준다. 그렇다면 뒤의 절반을 확실히 주는 모형에서 출발하면 어떨까?

그런 모형이 있다. 고리 격자(ring lattice)다. 학생들을 원형으로 둥글게 앉히고 양옆 가까운 몇 명씩만 친구로 잇는다. 옆자리끼리 서로 아는 게 당연하니 삼각형이 넘쳐난다. 하지만 반대편 학생에게 소식을 전하려면 원을 반 바퀴 돌아야 한다.

와츠–스트로가츠(1998)의 착상
두 극단은 정반대의 결함을 가진다. 격자는 뭉침 과잉 + 거리 과잉, 무작위는 뭉침 결핍 + 거리 적정.
그렇다면 격자에서 출발해 간선을 조금씩만 무작위로 옮겨 보자. 얼마나 옮겨야 거리가 무작위 수준으로 짧아질까? 그때 뭉침은 얼마나 남아 있을까?
두 질문의 답이 다르면 — 즉 거리가 뭉침보다 훨씬 빨리 무너지면 — 그 사이 어딘가에 좁으면서 뭉친 구간이 존재한다.

2. 정의 — 고리 격자와 재배선 (Ring Lattice and Rewiring)

2-1. 고리 격자 CnneiC_n^{\,\mathrm{nei}} (Ring Lattice)

정점 1,2,,n1,2,\dots,n을 시계 방향으로 원에 놓는다. 고리 거리(ring distance)를

ρ(i,j)  =  min(ij,  nij) \rho(i,j) \;=\; \min\bigl(|i-j|,\; n-|i-j|\bigr)

로 정의하고, 인접행렬을

A[i,j]  =  {11ρ(i,j)nei0그 밖 A[i,j] \;=\; \begin{cases} 1 & 1\le \rho(i,j)\le \mathrm{nei} \\ 0 & \text{그 밖} \end{cases}

로 놓는다. 즉 양옆으로 nei\mathrm{nei}명씩 잇는다. 그러면

공식n=20, nei=2n=20,\ \mathrm{nei}=2일 때
모든 정점의 차수k=2neik=2\,\mathrm{nei}4 — 전원 똑같다
간선 수m=nk/2=nneim=nk/2=n\cdot\mathrm{nei}20×2=4020\times 2=40
삼각형 수T=nnei(nei1)/2T=n\cdot\mathrm{nei}(\mathrm{nei}-1)/220×2×1/2=2020\times 2\times 1/2=20
연결 삼중쌍P2=n(2nei2)P_2=n\binom{2\,\mathrm{nei}}{2}20×(42)=12020\times\binom{4}{2}=120

2-2. 재배선 (Rewiring)

격자의 각 간선을 훑으면서 확률 pp로 한쪽 끝을 무작위 정점으로 갈아 끼운다. 갈아 끼워진 간선은 원을 가로지르는 지름길(shortcut)이 된다.

pp결과성질
00손대지 않은 고리 격자CC 최대, LL 최대
0<p<10<p<1중간 — 오늘의 주인공???
11거의 무작위 그래프CC 최소, LL 최소
재배선 확률에 따른 20명 고리 격자의 변화
그림 1. n=20, nei=2n=20,\ \mathrm{nei}=2. pp가 커질수록 원 둘레의 간선이 원을 가로지르는 지름길로 바뀐다. p=0.05p=0.05에서는 지름길이 하나 생겼을 뿐인데 벌써 LL이 2.89에서 2.75로 줄었고, CC는 0.500에서 0.492로 거의 그대로다.
왜 "재배선"이지 "추가"가 아닌가
간선을 추가하면 밀도가 올라가 버려서 격자·무작위와 공정하게 비교할 수 없다. 재배선은 간선 수 mm을 그대로 유지한 채 위치만 바꾼다. 그래서 p=0p=0p=1p=1같은 밀도를 갖고, 오직 구조만 다르다. (다만 §6에서는 설명을 위해 일부러 "추가"를 써서 지름길의 효과만 떼어 본다.)

3. 손 계산 ① 고리 격자의 군집계수 — 여섯 쌍 전부 (Clustering of the Ring Lattice)

n=20, nei=2n=20,\ \mathrm{nei}=2로 두고 1번 학생의 지역 군집계수를 손으로 구한다.

1번의 이웃은 고리 거리 1, 2 이내의 정점이다:

이웃 후보1j|1-j|n1jn-|1-j|ρ(1,j)\rho(1,j)2\le 2?
j=2j=21191O
j=3j=32182O
j=20j=201911O
j=19j=191822O
j=4j=43173X
j=18j=181733X

이웃 집합 N(1)={19,20,2,3}N(1)=\{19,\,20,\,2,\,3\}, 차수 k1=4k_1=4. 지역 군집계수의 정의는

C1  =  N(1) 안에서 실제로 이어진 쌍의 수(k12)  =  ?(42)  =  ?6 C_1 \;=\; \frac{N(1)\ \text{안에서 실제로 이어진 쌍의 수}}{\binom{k_1}{2}} \;=\; \frac{?}{\binom{4}{2}} \;=\; \frac{?}{6}

여섯 쌍을 하나도 빠뜨리지 않고 전부 확인한다. 두 이웃 u,vu,v가 이어져 있으려면 ρ(u,v)2\rho(u,v)\le 2여야 한다.

#{u,v}\{u,v\}uv|u-v|nuvn-|u-v|ρ(u,v)\rho(u,v)2\le 2?A[u,v]A[u,v]
1{19,20}\{19,20\}1191O1
2{19,2}\{19,2\}1733X0
3{19,3}\{19,3\}1644X0
4{20,2}\{20,2\}1822O1
5{20,3}\{20,3\}1733X0
6{2,3}\{2,3\}1191O1

0인 항까지 전부 더하면

1+0+0+1+0+1  =  3C1  =  36  =  0.5 1+0+0+1+0+1 \;=\; 3 \qquad\Longrightarrow\qquad C_1 \;=\; \frac{3}{6} \;=\; \mathbf{0.5}

3-1. 일반 공식으로 (The General Formula)

이 셈에는 규칙이 있다. ii의 이웃 2nei2\,\mathrm{nei}명 중 서로 이어진 쌍의 수는

#{이어진 이웃 쌍}  =  3nei(nei1)2 \#\{\text{이어진 이웃 쌍}\} \;=\; \frac{3\,\mathrm{nei}(\mathrm{nei}-1)}{2}

이고 전체 쌍은 (2nei2)=nei(2nei1)\binom{2\,\mathrm{nei}}{2}=\mathrm{nei}(2\,\mathrm{nei}-1)이므로

C  =  3nei(nei1)/2nei(2nei1)  =  3(nei1)2(2nei1)  =  3(k2)4(k1)(k=2nei) C \;=\; \frac{3\,\mathrm{nei}(\mathrm{nei}-1)/2}{\mathrm{nei}\,(2\,\mathrm{nei}-1)} \;=\; \frac{3(\mathrm{nei}-1)}{2(2\,\mathrm{nei}-1)} \;=\; \frac{3(k-2)}{4(k-1)} \qquad (k=2\,\mathrm{nei})

방금 손으로 센 값과 맞는지 검산한다. nei=2\mathrm{nei}=2: 분자 321/2=33\cdot 2\cdot 1/2=3 — 위 표에서 O가 정확히 3개였다. 분모 23=62\cdot 3=6 ✓. C=3/6=0.5C=3/6=0.5 ✓.

nei\mathrm{nei}k=2neik=2\,\mathrm{nei}3(nei1)2(2nei1)\dfrac{3(\mathrm{nei}-1)}{2(2\,\mathrm{nei}-1)}3(k2)4(k1)\dfrac{3(k-2)}{4(k-1)}읽기
1200양옆 1명씩 — 삼각형이 아예 없다
240.5000000.500000위에서 손으로 센 값
360.6000000.600000연습문제 1
480.6428570.642857
5100.6666670.666667§8 이후의 기준 격자
6120.6818180.681818nei\mathrm{nei}\to\infty에서 3/43/4로 수렴
nei=1\mathrm{nei}=1이면 C=0C=0이다 — 놓치기 쉬운 함정이다. 양옆 1명씩만 이으면 그냥 고리 하나이고, 고리에는 삼각형이 없다. "격자니까 뭉쳐 있겠지"가 무조건 참은 아니다. §13에서 FMH가 정확히 이 함정에 걸린다.

4. 손 계산 ② 고리 격자의 평균 거리 — 홉별 인원 전부 (Distance in the Ring Lattice)

같은 격자(n=20, nei=2n=20,\ \mathrm{nei}=2)에서 1번 학생의 평균 거리를 구한다.

한 홉에 최대 nei=2\mathrm{nei}=2까지 갈 수 있으므로, 고리 거리 ρ\rho만큼 떨어진 정점까지의 최단 거리(홉 수)는

d  =  ρnei  =  ρ2 d \;=\; \left\lceil \frac{\rho}{\mathrm{nei}} \right\rceil \;=\; \left\lceil \frac{\rho}{2} \right\rceil

1번에서 본 나머지 19명을 고리 거리별로 전부 늘어놓는다. 고리 거리 ρ\rho인 정점은 시계·반시계 두 방향에 하나씩 2명씩인데, ρ=10\rho=10만 정반대편 한 사람(11번)뿐이다.

ρ\rho해당 정점인원ρ/2\lceil \rho/2\rceil거리 합 기여
12, 20212×1=22\times 1=2
23, 19212×1=22\times 1=2
34, 18222×2=42\times 2=4
45, 17222×2=42\times 2=4
56, 16232×3=62\times 3=6
67, 15232×3=62\times 3=6
78, 14242×4=82\times 4=8
89, 13242×4=82\times 4=8
910, 12252×5=102\times 5=10
1011 (혼자)151×5=51\times 5=5
합계1955

홉별로 다시 묶으면 이렇게 된다 — 같은 인원(4명)이 홉마다 반복된다는 게 격자의 본질이다.

dd12345
인원4444319
d×d\times인원4812161555
L1  =  41+42+43+44+3519  =  4+8+12+16+1519  =  5519  =  2.894737 L_1 \;=\; \frac{4\cdot 1+4\cdot 2+4\cdot 3+4\cdot 4+3\cdot 5}{19} \;=\; \frac{4+8+12+16+15}{19} \;=\; \frac{55}{19} \;=\; \mathbf{2.894737}

모든 정점이 대칭이므로 이 값이 곧 전체 평균 거리다.

> g <- sample_smallworld(1, 20, 2, 0)
> mean_distance(g);  diameter(g);  transitivity(g)
[1] 2.894736842
[1] 5
[1] 0.5
근사식과 비교
격자에서 홉당 nei\mathrm{nei}칸씩 나아가고 최대 고리 거리가 n/2n/2이므로 지름은 대략 n/(2nei)n/(2\,\mathrm{nei}), 평균은 그 절반인 L    n4nei L \;\approx\; \frac{n}{4\,\mathrm{nei}} n=20, nei=2n=20,\ \mathrm{nei}=220/8=2.520/8=2.5. 실제 2.895 — 작은 nn에서는 16% 어긋난다. 이 근사는 nn이 클 때만 좋다(§5에서 확인). 연습문제 2에서 이 오차가 다시 나온다.

5. 격자는 nn이 커지면 절망적으로 멀다 (The Lattice Scales Badly)

4-3의 핵심은 무작위 그래프의 거리가 lnn\ln n으로 아주 천천히 자란다는 것이었다. 격자는 정반대다.

nn격자 LL (nei=2\mathrm{nei}=2)근사 n/8n/8격자 CC참고: lnn/ln4\ln n/\ln 4
202.89472.500.50002.16
10012.878812.500.50003.32
50062.875862.500.50004.48
1000125.3754125.000.50004.98

nn을 50배 키우면 격자의 거리는 43배가 되고, 무작위 그래프의 거리는 2.3배가 된다. n=1000n=1000에서 격자는 무작위보다 25배 멀다.

격자와 무작위 그래프의 거리 성장
그림 2 (4-3에서 이어옴). 평균 차수를 4로 똑같이 맞춰도 격자(빨강)는 nn에 비례, 무작위(파랑)는 lnn\ln n에 비례. 실제 망은 파란 쪽에 붙어 있다.

한편 CCnn이 아무리 커져도 0.5로 못 박혀 있다. 격자는 뭉침은 완벽하고 거리는 재앙이다. 정확히 G(n,p)G(n,p)의 반대다.

거리 LL군집 CC
고리 격자n/(4nei)n/(4\,\mathrm{nei}) — 재앙0.5 — 완벽
무작위 G(n,p)G(n,p)lnn/lnλ\ln n/\ln\lambda — 완벽p0p\to 0 — 재앙
실제 사회망짧다크다

6. 손 계산 ③ 지름길 20개의 위력 (The Power of Twenty Shortcuts)

재배선의 효과를 이해하려면 먼저 지름길 하나가 무엇을 하는지를 봐야 한다. 설명을 깨끗하게 하려고 여기서는 재배선 대신 추가를 쓴다 — 기존 간선은 하나도 건드리지 않고 무작위 간선만 몇 개 더한다. 그러면 지름길의 효과만 떼어 볼 수 있다.

n=1000, nei=5n=1000,\ \mathrm{nei}=5 격자에서 출발한다. 원래 값은 m=5000, L0=50.4505, C0=2/3m=5000,\ L_0=50.4505,\ C_0=2/3.

추가한 간선전체 간선 대비LLLL 감소율CCCC 감소율
050.45050.66667
10.02%41.4436−17.9%0.66640−0.04%
20.04%34.9603−30.7%0.66610−0.08%
50.10%28.5489−43.4%0.66520−0.22%
100.20%19.7122−60.9%0.66370−0.44%
200.40%12.6718−74.9%0.66070−0.89%

간선 하나를 더했을 뿐인데 평균 거리가 18% 사라진다. 간선 20개(전체의 0.4%)면 거리가 4분의 1로 줄고, 군집계수는 0.89%만 준다.

6-1. C=0.6607C=0.6607은 어디서 나왔나 — 분자와 분모를 직접 센다 (Counting the Numerator and Denominator)

군집계수의 전역 정의는 C=3T/P2C=3T/P_2다. 간선 20개를 추가했을 때 분자 TT와 분모 P2P_2가 각각 어떻게 되는지 손으로 센다.

분자 TT(삼각형 수) — 간선을 추가하면 삼각형은 절대 줄지 않는다. 새 간선이 우연히 새 삼각형을 만들 수는 있지만, n=1000n=1000에서 무작위로 고른 두 점이 공통 이웃을 가질 확률은 지극히 작다. 그러므로

T    T0  =  nnei(nei1)2  =  1000×5×42  =  10000 T \;\approx\; T_0 \;=\; n\cdot\frac{\mathrm{nei}(\mathrm{nei}-1)}{2} \;=\; 1000\times\frac{5\times 4}{2} \;=\; \mathbf{10000}

분모 P2P_2(연결 삼중쌍 수) — 이건 확실히 는다. 격자에서는 전원이 차수 10이므로

P2,0  =  i(ki2)  =  1000×(102)  =  1000×45  =  45000 P_{2,0} \;=\; \sum_i \binom{k_i}{2} \;=\; 1000\times\binom{10}{2} \;=\; 1000\times 45 \;=\; \mathbf{45000}

새 간선 하나는 양 끝의 차수를 10에서 11로 올린다. 한쪽 끝에서 늘어나는 삼중쌍은

(112)(102)  =  5545  =  10 \binom{11}{2}-\binom{10}{2} \;=\; 55-45 \;=\; 10

양 끝이 있으니 간선 하나당 10+10=2010+10=20. 간선 20개면

P2  =  45000+20×20  =  45000+400  =  45400 P_2 \;=\; 45000 + 20\times 20 \;=\; 45000+400 \;=\; \mathbf{45400}

따라서

C  =  3TP2  =  3×1000045400  =  3000045400  =  0.660793 C \;=\; \frac{3T}{P_2} \;=\; \frac{3\times 10000}{45400} \;=\; \frac{30000}{45400} \;=\; \mathbf{0.660793}
> # 20회 평균 실측
> T = 10000.8   P2 = 45400.9   C = 0.6608327
#   손 계산 예측: T = 10000, P2 = 45400, C = 0.6607930  →  소수 셋째 자리까지 일치
이 손 계산이 말해 주는 것
지름길을 놓아도 삼각형은 하나도 부서지지 않는다. 군집계수가 조금 떨어진 것은 삼각형이 없어져서가 아니라 분모만 늘어나 희석됐기 때문이다 (450004540045000\to 45400, 겨우 +0.89%).
반면 거리는 75%가 사라졌다. 같은 20개의 간선이 한쪽 축은 거의 안 건드리고 다른 축은 박살 낸다. 이 비대칭이 좁은 세상의 전부다. (왜 그런지는 §11)

※ 위 표의 LL 값은 난수 한 번의 결과다. 20회 반복 평균은 13.31로, 12~14 사이에서 흔들린다. 결론(4분의 1로 줄어든다)은 바뀌지 않는다.

7. 손 계산 ④ 왜 군집계수는 (1p)3(1-p)^3인가 — 여덟 경우 전부 (Why the Cube)

이제 진짜 재배선으로 돌아온다. 교과서는 재배선 후의 군집계수를

C(p)    C(0)(1p)3 C(p) \;\approx\; C(0)\,(1-p)^3

이라고 말한다. 왜 세제곱인가?

격자 안의 삼각형 하나를 골라 보자 — 예컨대 n=20, nei=2n=20,\ \mathrm{nei}=2에서 {1,2,3}\{1,2,3\}. 이 삼각형은 간선 세 개로 이루어진다:

1 — 2  2 — 3  1 — 3

재배선은 각 간선을 독립적으로 훑으면서 확률 pp로 한쪽 끝을 옮긴다. 그러면 이 삼각형이 살아남으려면 세 간선이 모두 살아남아야 한다. 셋 중 하나라도 옮겨지면 삼각형은 끊긴다.

p=0.1p=0.1로 놓고 여덟 가지 경우를 하나도 빼놓지 않고 전개한다. (S = 살아남음, 확률 1p=0.91-p=0.9 / R = 재배선됨, 확률 p=0.1p=0.1)

#1—22—31—3확률 계산확률삼각형
1SSS0.9×0.9×0.90.9\times 0.9\times 0.90.729살아남음
2RSS0.1×0.9×0.90.1\times 0.9\times 0.90.081끊김
3SRS0.9×0.1×0.90.9\times 0.1\times 0.90.081끊김
4SSR0.9×0.9×0.10.9\times 0.9\times 0.10.081끊김
5RRS0.1×0.1×0.90.1\times 0.1\times 0.90.009끊김
6RSR0.1×0.9×0.10.1\times 0.9\times 0.10.009끊김
7SRR0.9×0.1×0.10.9\times 0.1\times 0.10.009끊김
8RRR0.1×0.1×0.10.1\times 0.1\times 0.10.001끊김
확률 합 (검산)1.000

검산: 0.729+3(0.081)+3(0.009)+0.001=0.729+0.243+0.027+0.001=1.0000.729+3(0.081)+3(0.009)+0.001 = 0.729+0.243+0.027+0.001 = 1.000

삼각형이 살아남는 경우는 단 하나(1번 줄)뿐이다. 그러므로

P(삼각형 생존)  =  (1p)3  =  0.93  =  0.729 P(\text{삼각형 생존}) \;=\; (1-p)^3 \;=\; 0.9^3 \;=\; \mathbf{0.729}

그리고 §6에서 확인했듯 분모 P2P_2는 거의 안 변한다. 재배선은 간선 수를 유지하므로 차수의 은 그대로고, 차수가 흩어지면서 (ki2)\sum\binom{k_i}{2}가 조금 늘 뿐이다:

pp00.010.030.10.20.30.51.0
분자 TT1000094198318533426991297304166
T/T0T/T_01.0000.9420.8320.5330.2700.1300.0300.017
분모 P2P_24500045099452994596946796475274864449910
P2/P2,0P_2/P_{2,0}1.0001.0021.0071.0221.0401.0561.0811.109

분모는 pp가 1까지 가도 11%밖에 안 움직이는데 분자는 1.7%까지 떨어진다. 그러니 C(p)/C(0)C(p)/C(0)의 거동은 사실상 전부 삼각형 이야기다. 따라서

C(p)C(0)  =  3T(p)/P2(p)3T0/P2,0    T(p)T0  =  (1p)3 \frac{C(p)}{C(0)} \;=\; \frac{3T(p)/P_2(p)}{3T_0/P_{2,0}} \;\approx\; \frac{T(p)}{T_0} \;=\; (1-p)^3

8. R 검증 ① 두 곡선이 다른 속도로 무너진다 (Two Curves, Two Speeds)

n=1000, nei=5n=1000,\ \mathrm{nei}=5(차수 10, 간선 5000개)에서 pp를 훑는다. 각 pp마다 20회 평균.

ps <- c(0, 1e-4, 3e-4, 1e-3, 3e-3, 0.01, 0.03, 0.1, 0.3, 1)
set.seed(202)
res <- t(sapply(ps, function(p) {
  r <- replicate(20, { g <- sample_smallworld(1, 1000, 5, p)
                       c(mean_distance(g), transitivity(g)) })
  rowMeans(r) }))
pppmp\,mL(p)L(p)L/L0L/L_0C(p)C(p)C/C0C/C_0
0050.4501.00000.66671.0000
0.00010.545.2670.89730.66640.9996
0.00031.532.0230.63470.66530.9980
0.001520.0710.39780.66260.9938
0.0031511.3490.22500.65460.9819
0.01506.9320.13740.62690.9403
0.031505.0320.09970.55210.8281
0.15003.8980.07730.34920.5237
0.315003.3710.06680.08050.1207
1.050003.2560.06450.00990.0149

※ 둘째 열 pmp\,m교과서 기준(간선 단위 재배선)의 기댓값이다. igraph의 실제 구현에서는 그 약 2배의 간선이 건드려진다 — 이유는 §10에서 밝힌다.

양끝 검산 — 두 극단이 우리가 아는 값과 맞는지 확인한다.

지점이론이론값실측
p=0p=0CC3(nei1)2(2nei1)=3429\dfrac{3(\mathrm{nei}-1)}{2(2\,\mathrm{nei}-1)}=\dfrac{3\cdot 4}{2\cdot 9} (§3)0.666670.66667
p=0p=0LLn/(4nei)=1000/20n/(4\,\mathrm{nei})=1000/20 (§4)50.050.45
p=1p=1CCC=p밀도=m/(n2)C=p_{\text{밀도}}=m/\binom{n}{2} (4-3 §6)0.010010.0099
p=1p=1LLlnn/lnλ=ln1000/ln10\ln n/\ln\lambda=\ln 1000/\ln 10 (4-3 §3)3.0003.256

p=1p=1의 WS 그래프는 4-3에서 배운 무작위 그래프 그 자체다. 우리는 지금 4-3의 세계와 격자의 세계를 잇는 다리 위를 걷고 있고, 양쪽 끝이 제대로 붙어 있음을 확인했다.

재배선 확률에 따른 거리와 군집의 붕괴 속도
그림 3. 가로축은 pp(로그 눈금), 세로축은 p=0p=0일 때 대비 비율. 파란 LL 곡선은 p0.001p\approx 0.001에서 이미 무너져 있고, 빨간 CC 곡선은 p0.03p\approx 0.03까지 버틴다. 두 곡선 사이가 벌어진 노란 구간이 좁은 세상이다.

9. 좁은 세상 구간 (The Small-World Regime)

표의 p=0.01p=0.01 줄을 다시 읽는다.

간선 5000개 중 100개 남짓(2%)을 건드렸다.
평균 거리: 50.456.9350.45 \to 6.9386%가 사라졌다 (L/L0=0.137L/L_0=0.137)
군집계수: 0.6670.6270.667 \to 0.62794%가 남았다 (C/C0=0.940C/C_0=0.940)

비교 대상인 무작위 그래프의 거리는 3.26이다. 우리는 간선 2%만 건드려서 거리의 대부분을 무작위 수준으로 끌어내리고 격자의 뭉침은 거의 그대로 유지했다.

왜 이런 구간이 존재하는가는 두 곡선의 기울기를 비교하면 보인다.

ppLL이 잃은 비율CC가 잃은 비율비 (LL 손실 / CC 손실)
0.00160.2%0.6%97배
0.00377.5%1.8%43배
0.0186.3%6.0%14배
0.0390.0%17.2%5.2배
0.192.3%47.6%1.9배
0.393.3%87.9%1.1배

pp가 작을수록 비대칭이 극단적이다. p=0.001p=0.001에서는 거리가 군집보다 97배 빠르게 무너진다.

"좁은 세상 구간"의 경계는 정해져 있지 않다
그림 3의 노란 띠(0.003p0.050.003\lesssim p\lesssim 0.05)는 시각적 안내일 뿐 엄밀한 정의가 아니다. 게다가 이 위치는 nn에 의존한다 — nn이 커질수록 왼쪽으로 이동한다. 실제로 필요한 지름길의 개수는 대략 상수인데 비율 p=p=개수/m/mmm이 커질수록 작아지기 때문이다. "작은 pp에서 두 곡선이 크게 벌어진다"가 핵심이고, 특정 숫자는 부차적이다.

10. R 구현 함정 — igraph는 (1p)6(1-p)^6이다 (An Implementation Trap)

여기서 실측과 이론을 맞춰 보다가 이상한 것을 발견했다. §7에서 유도한 (1p)3(1-p)^3과 §8의 실측 C/C0C/C_0를 나란히 놓으면 중간 pp에서 심하게 어긋난다.

pp실측 C/C0C/C_0(1p)3(1-p)^3오차
0.010.94190.97030.028
0.030.82940.91270.083
0.10.52190.72900.207
0.20.26110.51200.251
0.30.12190.34300.221

오차 0.25는 무시할 수 없다. 실측이 이론보다 훨씬 빨리 떨어진다. §7의 표에서 분모 P2P_2는 거의 안 움직인다는 걸 이미 확인했으므로, 문제는 분자(삼각형)가 예상보다 빨리 죽는다는 데 있다.

10-1. 결정적 실험 — 원래 간선이 몇 % 살아남는지 직접 센다 (The Decisive Test)

§7의 논증은 "간선 하나가 살아남을 확률 =1p=1-p"를 전제로 했다. 그것부터 확인한다. 격자의 간선 목록을 저장해 두고, 재배선 후에도 남아 있는 간선의 비율을 센다.

E0 <- apply(as_edgelist(lat), 1, function(e) paste(sort(e), collapse="-"))
g  <- sample_smallworld(1, n, nei, p)
E1 <- apply(as_edgelist(g),   1, function(e) paste(sort(e), collapse="-"))
mean(E0 %in% E1)          # 원래 간선의 생존 비율
pp실측 간선 생존율1p1-p(1p)2(1-p)^2어느 쪽?
0.010.98050.99000.9801(1p)2(1-p)^2
0.030.94150.97000.9409(1p)2(1-p)^2
0.100.81040.90000.8100(1p)2(1-p)^2
0.200.63990.80000.6400(1p)2(1-p)^2
0.300.49120.70000.4900(1p)2(1-p)^2
0.500.25470.50000.2500(1p)2(1-p)^2

소수 넷째 자리까지 (1p)2(1-p)^2다. 우연이 아니다.

igraph의 sample_smallworld는 간선이 아니라 양 끝점을 각각 확률 pp로 재배선한다.
간선이 온전히 남으려면 양쪽 끝이 모두 무사해야 하므로 P(간선 생존)  =  (1p)×(1p)  =  (1p)2 P(\text{간선 생존}) \;=\; (1-p)\times(1-p) \;=\; (1-p)^2 그러면 삼각형은 간선 3개가 모두 살아야 하므로 P(삼각형 생존)  =  [(1p)2]3  =  (1p)6 P(\text{삼각형 생존}) \;=\; \bigl[(1-p)^2\bigr]^3 \;=\; \mathbf{(1-p)^6} 교과서의 (1p)3(1-p)^3이 아니다.

10-2. (1p)6(1-p)^6으로 다시 맞춰 본다 (Refitting with the Sixth Power)

pp실측 C/C0C/C_0(1p)3(1-p)^3오차(1p)6(1-p)^6오차
0.0010.99440.99700.00260.99400.0004
0.0030.98280.99100.00820.98210.0007
0.010.94190.97030.02840.94150.0004
0.030.82940.91270.08330.83300.0036
0.10.52190.72900.20710.53140.0095
0.20.26110.51200.25090.26210.0010
0.30.12190.34300.22110.11760.0043
0.50.02810.12500.09690.01560.0125
평균 절대오차 (p0.2p\le 0.2)0.09680.0026

(1p)6(1-p)^6의 평균 오차는 0.0026, (1p)3(1-p)^337분의 1이다. 논쟁의 여지가 없다.

p0.3p\ge 0.3에서 실측이 (1p)6(1-p)^6보다 조금 높아지는 것도 설명된다. 그쯤 되면 재배선된 간선이 워낙 많아 새 삼각형이 우연히 생기기 시작한다. 극단인 p=1p=1에서 실측 0.0149는 격자 삼각형의 잔재가 아니라 무작위 그래프가 원래 갖는 군집계수(C=p밀도=0.01001C=p_{\text{밀도}}=0.01001, 4-3 §6)다.

공부할 때 어떻게 다룰 것인가
개념(1p)3(1-p)^3이 맞다 — "삼각형이 살려면 간선 3개가 다 살아야 한다"는 논리는 옳고, 이게 교과서와 원논문의 논증이다.
igraph로 숫자를 맞출 때(1p)6(1-p)^6을 써야 한다 — 구현이 끝점 단위로 재배선하기 때문이다.
③ 일반화하면 간선 생존율을 qq라 할 때 삼각형 생존율은 q3q^3이고, 구현에 따라 q=1pq=1-p일 수도 q=(1p)2q=(1-p)^2일 수도 있다. 먼저 qq를 실측해라.
연습문제 2에서 이 차이가 답을 두 배 가까이 갈라놓는다.

11. 왜 거리만 그렇게 빨리 무너지는가 (Why Only Distance Collapses)

p=0.001p=0.001에서 거리는 군집보다 97배 빠르게 무너졌다(§9). 이 비대칭의 원인은 간선 하나가 두 지표에 미치는 영향의 사정거리가 다르다는 데 있다.

군집계수 CC에 대한 영향평균 거리 LL에 대한 영향
사정거리국소 — 그 간선이 낀 삼각형만전역 — 망 전체의 정점 쌍
영향 크기간선 하나가 낀 삼각형은 4~8개(평균 6)
→ 전체 10000개 중 0.06%
지름길 하나가 수만 쌍의 최단 경로를 갈아 치움
§6의 실측간선 20개 → CC −0.89%간선 20개 → LL −74.9%

11-1. 지름길 하나가 몇 쌍을 살리는가 — 어림 계산 (A Back-of-Envelope Count)

n=1000, nei=5n=1000,\ \mathrm{nei}=5 고리에서 정점 1과 정점 501을 잇는 지름길 하나를 놓았다고 하자. 원래 이 두 점 사이의 거리는 500/5=100\lceil 500/5\rceil=100홉이었는데 이제 1홉이다.

이득을 보는 것은 이 두 점만이 아니다. 1번 근처에 있는 사람들501번 근처에 있는 사람들이 전부 이 다리를 건넌다. 고리에서 1번으로부터 tt홉 안에 있는 사람은 대략 2neit=10t2\,\mathrm{nei}\,t=10t명이다. t=20t=20까지만 쳐도 양쪽에 200명씩이니, 이 다리 하나로 최단 경로가 짧아지는 쌍은 대략 200×200=40000200\times 200=\mathbf{40000}쌍이다.

전체 쌍 수는 (10002)=499500\binom{1000}{2}=499500. 즉 지름길 하나가 전체 쌍의 8%를 건드린다.

반대쪽을 세어 본다. 고리 거리 ρ\rho인 간선 {i,j}\{i,j\}가 낀 삼각형의 수는 iijj공통 이웃 수와 같고, 세어 보면 2neiρ12\,\mathrm{nei}-\rho-1이다.

ρ\rho12345
그런 간선 수100010001000100010005000
낀 삼각형 2neiρ12\,\mathrm{nei}-\rho-187654평균 6

검산: 모든 간선에 대해 더하면 1000(8+7+6+5+4)=30000=3T=3×100001000(8+7+6+5+4)=30000=3T=3\times 10000 ✓ (삼각형 하나는 간선 3개에서 각각 세어지므로 3T3T가 나와야 한다.)

그러므로 간선 하나를 옮겨서 부술 수 있는 삼각형은 평균 6개 — 전체 10000개 중 0.06%다.

8%0.06%    133 \frac{8\%}{0.06\%} \;\approx\; \mathbf{133}\text{배}

이것이 §9에서 본 "97배"의 정체다. (어림 계산이라 정확히 97은 아니지만, 두 자릿수 배율이라는 결론은 같다.)

교실로 옮기면
같은 반 안에서 친구를 한 명 바꾸는 것다른 반 친구를 한 명 만드는 것은 망에 미치는 효과가 전혀 다르다.
반 안에서 친구를 바꾸면 우리 모둠의 뭉침이 조금 달라질 뿐 반 전체의 정보 흐름은 그대로다.
그런데 다른 반 친구 한 명이 생기면, 내 주변 20명과 그 친구 주변 20명 사이의 400쌍이 갑자기 가까워진다. 소문·정보·유행이 이 다리 하나를 타고 넘어온다.
학년 전체를 좁게 만드는 것은 반 안의 친밀도가 아니라 반을 가로지르는 몇 개의 연결이다.

12. 가라테를 WS 지도에 올린다 (Karate on the WS Map)

WS 모형은 pp를 0에서 1까지 움직이면 (L,C)(L,C) 평면에 곡선 하나를 그린다. 실제 망은 그 곡선 위에 있을까?

가라테 클럽: n=34, m=78, λ=4.588n=34,\ m=78,\ \lambda=4.588. 격자로 흉내 내려면 차수를 맞춰야 하므로 2nei4.5882\,\mathrm{nei}\approx 4.588nei=2\mathrm{nei}=2.

모형LLCC읽기
격자 p=0p=04.63640.5000뭉침 2배 과잉, 거리 2배 과잉
WS p=0.01p=0.014.24600.4728
WS p=0.03p=0.033.60420.4222
WS p=0.05p=0.053.32030.3721
WS p=0.1p=0.12.98350.2924CC가 실제와 가장 가깝다
WS p=0.2p=0.22.74310.1851
WS p=0.3p=0.32.63830.1384
WS p=1p=1 (무작위)2.60240.1185뭉침 부족
실제 가라테2.40820.2557곡선 위가 아니다
가라테와 FMH를 WS 곡선 위에 놓기
그림 4. 가로축 평균 거리(로그), 세로축 군집계수. 회색 점이 pp를 0에서 1까지 움직인 WS 곡선. 빨간 삼각형이 실제 망. 왼쪽(가라테): 실제 점이 곡선 바로 아래를 지난다 — 아깝게 빗나갔다. 오른쪽(FMH): 실제 점이 곡선에서 아득히 멀다.

12-1. WS는 가라테를 얼마나 잘 설명했나 (How Well Did WS Do)

먼저 잘한 점. 4-3에서 G(n,p)G(n,p)는 가라테의 CC를 1.8배 과소평가했고 격자는 2배 과대평가했다. WS는 pp를 0.1 근처로 돌리면 C=0.2924C=0.2924 — 실제 0.2557과 14% 차이다. 어느 극단보다도 훨씬 낫다.

이제 못한 점. CC를 맞추는 p=0.1p=0.1에서 L=2.98L=2.98인데 실제는 2.41이다. 게다가 더 이상한 것이 있다.

가라테의 실제 거리(2.408)는 WS가 p=1p=1까지 가서 내놓는 최솟값(2.602)보다도 짧다.
pp를 아무리 돌려도 WS 곡선은 가라테의 거리에 도달하지 못한다. CC를 포기하고 완전 무작위까지 가도 안 된다.

왜? WS는 차수를 거의 균일하게 유지하기 때문이다. 격자에서는 전원이 차수 4였고, 재배선을 해도 차수는 4 근처에서만 흔들린다. 그런데 실제 가라테에는 차수 17짜리 두목이 있다. 허브는 자기에게 연결된 모든 사람을 2홉 안에 묶어 버리므로, 허브가 있으면 같은 밀도에서도 거리가 더 짧아진다. §14에서 숫자로 확인한다.

13. FMH는 지도 밖에 있다 (FMH Is Off the Map)

FMH 거대 컴포넌트: n=439, m=573, λ=2.610n=439,\ m=573,\ \lambda=2.610. 차수를 맞추면 2nei2.612\,\mathrm{nei}\approx 2.61nei=1\mathrm{nei}=1.

그런데 §3에서 경고했듯 nei=1\mathrm{nei}=1인 고리 격자에는 삼각형이 하나도 없다:

C(0)  =  3(nei1)2(2nei1)  =  3×02×1  =  0 C(0) \;=\; \frac{3(\mathrm{nei}-1)}{2(2\,\mathrm{nei}-1)} \;=\; \frac{3\times 0}{2\times 1} \;=\; \mathbf{0}

출발점의 군집계수가 0이면, 재배선을 아무리 해도 CC는 올라갈 데가 없다.

모형LLCC
격자 p=0p=0110.00000.0000
WS p=0.01p=0.0166.15940.0000
WS p=0.1p=0.121.91220.0008
WS p=0.2p=0.214.26090.0022
WS p=0.5p=0.59.06960.0037
WS p=1p=1 (무작위)7.78980.0043
실제 FMH 거대성분16.87730.2840

WS 곡선 전체에서 CC최댓값이 0.0043이다. 실제는 0.284066배다. pp를 어디에 놓아도 실제 점 근처에 갈 수 없다. 그림 4 오른쪽에서 빨간 삼각형이 회색 곡선에서 아득히 떠 있는 이유다.

이건 WS의 실패인가, 우리 설정의 실패인가
둘 다다. 그리고 구분해서 봐야 한다.
설정의 문제: λ=2.61\lambda=2.61은 정수 2nei2\,\mathrm{nei}로 맞출 수가 없다. nei=1\mathrm{nei}=1이면 차수 2(밀도 부족 + C=0C=0), nei=2\mathrm{nei}=2면 차수 4(간선이 실제의 1.5배). WS는 평균 차수가 짝수일 때만 자연스럽게 정의된다.
모형의 문제: 더 근본적으로, 평균 차수 2.61인 망에서 C=0.284C=0.284를 만들려면 차수가 적은 사람들끼리도 삼각형을 이뤄야 한다. WS의 균일한 격자에서는 불가능하다. 실제 FMH의 삼각형은 차수 높은 소수에게 몰려 있다 — 이것 역시 차수 분포 이야기다.

14. WS가 여전히 못 하는 것 — 차수 축 (What WS Still Cannot Do)

세 단원째 같은 것이 발목을 잡는다. 4-1에서 G(n,p)G(n,p)의 첫 번째 실패가 차수 분산 과소평가였다. WS도 똑같다.

모형 (가라테 크기, n=34n=34)차수 분산최대 차수읽기
고리 격자 p=0p=0 (nei=2\mathrm{nei}=2)0.0004전원이 똑같다
WS p=1p=13.448푸아송 수준
실제 가라테15.037174.4배

WS는 pp를 0에서 1까지 다 돌려도 차수 분산이 0에서 3.45까지만 움직인다. 실제의 15.04에는 어느 pp에서도 도달하지 못한다. 이건 조율의 문제가 아니라 모형의 구조적 한계다 — WS는 애초에 모든 사람에게 같은 수의 간선을 나눠 주고 시작한다.

그리고 이 한계가 §12에서 본 이상한 현상을 설명한다.

왜 실제 가라테가 WS p=1p=1보다도 짧은가
같은 n=34, m=78n=34,\ m=78이라도, 간선을 골고루 나눠 주면(WS) 거리가 2.60이고 몰아 주면(실제, 차수 17짜리 두목 존재) 2.41이다.
허브는 자기 이웃 17명을 서로 2홉으로 묶는다. 허브 두 명이 서로 이어져 있으면 망의 절반이 3홉 안에 들어온다. 균일 차수 모형은 이 지름길을 만들 방법이 없다.
차수 분포는 뭉침만이 아니라 거리도 지배한다.
G(n,p)G(n,p) (4-1~4-3)WS (오늘)어디서
평균 거리맞힘맞힘 (pp 조절)4-3 §4 / §8
군집계수완전 실패맞힘 — 오늘의 성과4-3 §8 / §12
차수 분산3.8배 과소4.4배 과소 — 더 나쁨4-1 §10 / §14
고립자·거대성분실패해당 없음 (격자는 항상 연결)4-2

→ 다음 두 단원(4-5, 4-6)은 바로 이 차수 축을 정면으로 다룬다. 차수 분포를 어떻게 재고, 어떤 모형이 허브를 만들어 내는가.

15. 교실 적용 (Classroom Application)

① 자리 배치는 고리 격자다
모둠으로 앉히면 아이들의 교우 관계는 자연히 격자에 가까워진다 — 옆·앞뒤 몇 명씩만 자주 어울린다. 격자의 성질을 그대로 물려받는다: 모둠 안 결속(CC)은 높고, 반 전체를 도는 거리(LL)는 길다. "우리 반은 친한데 이상하게 정보가 안 돈다"는 상황이 정확히 이것이다.
② 자리를 바꿀 때, 몇 명을 바꿔야 하나
§9의 답은 생각보다 훨씬 적다이다. 전체 관계의 1%만 바꿔도 거리는 86% 사라졌다. 30명 학급에서 두세 명만 모둠을 가로질러 옮겨도 반 전체의 정보 흐름은 확 달라지고, 기존 모둠의 결속은 거의 그대로 남는다.
전면 개편은 필요 없다. 오히려 전면 개편(p1p\to 1)은 모든 모둠의 결속을 함께 부순다.
③ 누구를 옮길 것인가 — 다리 놓기
§11의 계산이 알려 준 것: 지름길의 가치는 양 끝이 서로 멀 때 최대다. 같은 모둠 안에서 자리를 바꾸는 건 아무 효과가 없다. 서로 접점이 전혀 없던 두 무리를 잇는 한 명이 400쌍을 가깝게 만든다.
실무적으로: 모둠 편성 때 "친한 애들끼리 떼어 놓기"보다 "두 무리 사이를 연결할 아이 한두 명 배치하기"가 훨씬 효율이 좋다.
④ 소외 학생 문제에는 WS가 답이 아니다
WS는 전원의 차수를 거의 같게 유지한다(§14). 즉 이 모형의 세계에는 외톨이도 인기인도 없다. 그런데 실제 교실의 가장 중요한 문제(친구가 하나뿐인 아이, 반을 좌우하는 인기 학생)는 전부 차수 분포의 문제다.
오늘 배운 것으로 "우리 반이 얼마나 좁고 얼마나 뭉쳐 있나"는 진단할 수 있지만, "누가 위험한가"는 진단할 수 없다. 그건 4-5의 주제다.
⑤ 감염병·소문의 확산 속도
같은 접촉 수를 가져도 격자형 교실(모둠 안에서만)과 지름길이 있는 교실(반을 가로지르는 왕래)은 확산 속도가 완전히 다르다. p=0.01p=0.01만 되어도 거리가 7분의 1이 된다. 학급 간 이동이 몇 건만 있어도 학년 전체가 한 덩어리가 된다는 뜻이다 — 방역에서 "접촉을 줄이기"보다 "가로지르는 접촉을 줄이기"가 효과가 큰 이유다.

16. 연습문제 (Exercises)

연습문제 1. 고리 격자 C243C_{24}^{\,3}를 손으로 완전히 분석하기
24명 학급을 원형으로 앉히고 양옆 3명씩(nei=3\mathrm{nei}=3, 차수 6) 친구로 이었다.

(a) 간선 수 mm과 모든 학생의 차수를 구하라.
(b) 1번 학생의 이웃은 누구누구인가? 그 15쌍을 하나도 빠뜨리지 말고 고리 거리를 적어 연결 여부를 판정하고, 지역 군집계수를 구하라. §3의 공식과 맞는지 검산하라.
(c) 홉별 인원을 세어 1번에서의 평균 거리를 구하라. 근사식 n/(4nei)n/(4\,\mathrm{nei})와 얼마나 차이 나는가?
(d) 같은 크기의 무작위 그래프(n=24, m=72n=24,\ m=72)는 L=1.891, C=0.256L=1.891,\ C=0.256이었다. 격자는 무작위보다 거리가 몇 배 멀고 군집이 몇 배 높은가?
먼저 풀고 §17 해설과 맞춰 볼 것.
연습문제 2. 실제 학급을 WS 지도 위에 올리기
30명 학급에서 교우 관계를 조사했더니 친구 쌍이 60개(m=60m=60), 평균 거리 2.6, 군집계수 0.35였다.

(a) 평균 차수를 구하고, 그에 맞는 격자의 nei\mathrm{nei}를 정하라. 그 격자의 C0C_0를 공식으로, L0L_0홉별 인원을 세어 손으로 구하라. 근사식 n/(4nei)n/(4\,\mathrm{nei})와 비교하라.
(b) 교과서 법칙 C(p)=C0(1p)3C(p)=C_0(1-p)^3으로 pp를 구하라. 그리고 §10에서 확인한 igraph 법칙 C(p)=C0(1p)6C(p)=C_0(1-p)^6으로도 구하라. 두 값이 얼마나 다른가?
(c) igraph 법칙의 pp에서 WS를 2000번 돌렸더니 LL의 평균 3.081(sd 0.241), CC의 평균 0.366(sd 0.049)이었다. 관측값 2.6과 0.35의 zz점수를 각각 구하라. 어느 축이 어긋나는가?
(d) (c)의 어긋남은 이 학급에 대해 무엇을 말해 주는가? 참고로 같은 크기 무작위 그래프 G(30,60)G(30,60)L=2.487, C=0.134L=2.487,\ C=0.134다.
먼저 풀고 §17 해설과 맞춰 볼 것.

17. 해설과 답 (Solutions)

연습문제 1 (a) — 간선 수와 차수 (Edges and Degrees)

고리 격자에서는 각자 왼쪽 nei\mathrm{nei}명, 오른쪽 nei\mathrm{nei}명과 이어지므로

k  =  2nei  =  2×3  =  6(전원 동일) k \;=\; 2\,\mathrm{nei} \;=\; 2\times 3 \;=\; 6 \quad(\text{전원 동일}) m  =  nk2  =  24×62  =  nnei  =  24×3  =  72 m \;=\; \frac{nk}{2} \;=\; \frac{24\times 6}{2} \;=\; n\cdot\mathrm{nei} \;=\; 24\times 3 \;=\; 72
답 (a): m=72m=\mathbf{72}, 모든 학생의 차수는 6\mathbf{6}.

연습문제 1 (b) — 15쌍 전부 (All Fifteen Pairs)

1번의 이웃은 고리 거리 3 이내: 오른쪽으로 2,3,42,3,4, 왼쪽으로 24,23,2224,23,22.

N(1)  =  {2,3,4,22,23,24},k1=6,(62)=15 N(1) \;=\; \{2,\,3,\,4,\,22,\,23,\,24\},\qquad k_1=6,\qquad \binom{6}{2}=15

두 이웃 u,vu,vρ(u,v)=min(uv,24uv)3\rho(u,v)=\min(|u-v|,\,24-|u-v|)\le 3일 때 이어져 있다. 15쌍 전부를 전개한다.

#uv|u-v|24uv24-|u-v|ρ\rho3\le 3?A[u,v]A[u,v]왜 그 값인가
1{2,3}\{2,3\}1231O1바로 옆자리
2{2,4}\{2,4\}2222O1한 칸 건너 — 3 이내
3{2,22}\{2,22\}2044X0고리를 돌아도 4칸 — 초과
4{2,23}\{2,23\}2133O1고리를 돌면 딱 3칸
5{2,24}\{2,24\}2222O11번을 사이에 두고 2칸
6{3,4}\{3,4\}1231O1바로 옆자리
7{3,22}\{3,22\}1955X0양쪽 끝 — 5칸
8{3,23}\{3,23\}2044X04칸 — 아깝게 초과
9{3,24}\{3,24\}2133O1딱 3칸
10{4,22}\{4,22\}1866X0이웃 중 가장 먼 두 명
11{4,23}\{4,23\}1955X05칸
12{4,24}\{4,24\}2044X04칸
13{22,23}\{22,23\}1231O1바로 옆자리
14{22,24}\{22,24\}2222O1한 칸 건너
15{23,24}\{23,24\}1231O1바로 옆자리

0인 항까지 전부 더한다:

1+1+0+1+1+1+0+0+1+0+0+0+1+1+1  =  9 1+1+0+1+1+1+0+0+1+0+0+0+1+1+1 \;=\; \mathbf{9} C1  =  915  =  0.6 C_1 \;=\; \frac{9}{15} \;=\; \mathbf{0.6}

공식 검산:

3(nei1)2(2nei1)  =  3×22×5  =  610  =  0.6  \frac{3(\mathrm{nei}-1)}{2(2\,\mathrm{nei}-1)} \;=\; \frac{3\times 2}{2\times 5} \;=\; \frac{6}{10} \;=\; 0.6 \ \checkmark

분자 공식으로도 검산한다: 이어진 이웃 쌍의 수 =3nei(nei1)/2=3×3×2/2=9=3\,\mathrm{nei}(\mathrm{nei}-1)/2 = 3\times 3\times 2/2 = 9 — 위 표의 O가 정확히 9개

> g <- sample_smallworld(1, 24, 3, 0)
> transitivity(g, type="local")[1];  transitivity(g)
[1] 0.6
[1] 0.6
답 (b): N(1)={2,3,4,22,23,24}N(1)=\{2,3,4,22,23,24\}, 이어진 쌍 9개 / 15쌍, C1=9/15=0.6C_1=9/15=\mathbf{0.6}. 공식 3(nei1)/(2(2nei1))=0.63(\mathrm{nei}-1)/(2(2\,\mathrm{nei}-1))=0.6과 일치.

값의 의미: 내 친구 여섯 명을 둘씩 짝지으면 15가지 조합이 있는데, 그중 9쌍이 이미 서로 친구다. 격자에서는 nei\mathrm{nei}가 커질수록 이 비율이 올라간다 (nei=2\mathrm{nei}=2면 0.5, 33이면 0.6, \infty로 가면 0.75). "양옆을 넓게 볼수록 내 주변이 더 촘촘히 얽힌다"는 뜻이다.

연습문제 1 (c) — 홉별 인원과 평균 거리 (Hops and Mean Distance)

한 홉에 최대 nei=3\mathrm{nei}=3칸 가므로 d=ρ/3d=\lceil \rho/3\rceil. n=24n=24에서 1번으로부터 고리 거리 ρ\rho인 사람은 ρ=1,,11\rho=1,\dots,112명씩, 정반대편 ρ=12\rho=12(13번)에 1명 — 합 2×11+1=232\times 11+1=23명 ✓

ρ\rho123456789101112
인원222222222221
ρ/3\lceil \rho/3\rceil111222333444

홉별로 묶으면

dd해당 ρ\rho인원d×d\times인원
11, 2, 32+2+2=62+2+2=61×6=61\times 6=6
24, 5, 62+2+2=62+2+2=62×6=122\times 6=12
37, 8, 92+2+2=62+2+2=63×6=183\times 6=18
410, 11, 122+2+1=52+2+\mathbf{1}=54×5=204\times 5=20
합계2356
L1  =  16+26+36+4523  =  6+12+18+2023  =  5623  =  2.434783 L_1 \;=\; \frac{1\cdot 6+2\cdot 6+3\cdot 6+4\cdot 5}{23} \;=\; \frac{6+12+18+20}{23} \;=\; \frac{56}{23} \;=\; \mathbf{2.434783}

지름은 4(가장 먼 사람이 4홉).

> mean_distance(g);  diameter(g)
[1] 2.434782609
[1] 4

근사식과 비교: n/(4nei)=24/12=2n/(4\,\mathrm{nei})=24/12=2. 실제는 2.4348이므로 근사가 18% 낮다. §4에서 본 것과 같은 이유다 — 이 근사는 nnnei\mathrm{nei}에 비해 아주 클 때만 좋고, n=24, nei=3n=24,\ \mathrm{nei}=3홉이 4단계밖에 없어서 끝단 효과가 크다.

답 (c): 홉별 인원 6, 6, 6, 5, 거리 합 56, L=56/23=2.4348L=56/23=\mathbf{2.4348}, 지름 4. 근사식 n/(4nei)=2n/(4\,\mathrm{nei})=218% 과소평가.

연습문제 1 (d) — 무작위와의 비교 (Lattice vs Random)

L격자L무작위  =  2.43481.8914  =  1.287 배 \frac{L_{\text{격자}}}{L_{\text{무작위}}} \;=\; \frac{2.4348}{1.8914} \;=\; \mathbf{1.287}\ \text{배} C격자C무작위  =  0.60.2559  =  2.345 배 \frac{C_{\text{격자}}}{C_{\text{무작위}}} \;=\; \frac{0.6}{0.2559} \;=\; \mathbf{2.345}\ \text{배}
답 (d): 거리는 1.29배 멀고, 군집은 2.34배 높다.

값의 의미: n=24n=24너무 작아서 격자의 거리 벌점이 거의 안 나타난다. §5에서 n=1000n=1000일 때 격자는 무작위보다 25배 멀었는데, 여기서는 1.29배뿐이다. 격자의 거리는 nn에 비례해 자라고 무작위는 lnn\ln n이므로, 둘의 차이는 nn이 커져야 벌어진다.
반대로 군집의 차이(2.34배)는 nn과 거의 무관하다 — 격자는 늘 0.6이고 무작위는 밀도(=0.261)에 가까운 값을 갖기 때문이다. 여기서 무작위 C=0.2559C=0.2559가 밀도 p=72/(242)=0.2609p=72/\binom{24}{2}=0.2609와 거의 같은 것도 4-3 §6의 C=pC=p를 다시 확인해 준다.

교실 해석: 24명 한 반은 격자로 앉혀도 이미 좁다(평균 2.43홉). 소규모 학급에서는 자리 배치가 정보 흐름에 미치는 영향이 크지 않다. 자리 배치의 효과는 학년 전체·학교 전체처럼 nn이 클 때 폭발적으로 커진다. 반면 뭉침의 차이는 24명에서도 2.3배로 뚜렷하다 — "자리 배치는 반 전체의 소통보다 모둠 내 결속에 더 직접적으로 작용한다"는 뜻이다.

연습문제 2 (a) — 격자 만들기 (Building the Lattice)

λ  =  2mn  =  2×6030  =  42nei=4  nei=2 \lambda \;=\; \frac{2m}{n} \;=\; \frac{2\times 60}{30} \;=\; 4 \qquad\Longrightarrow\qquad 2\,\mathrm{nei}=4 \ \Rightarrow\ \mathrm{nei}=2

(이번엔 평균 차수가 정확히 짝수라 §13의 FMH 같은 문제가 없다.)

C0C_0:

C0  =  3(nei1)2(2nei1)  =  3×12×3  =  0.5 C_0 \;=\; \frac{3(\mathrm{nei}-1)}{2(2\,\mathrm{nei}-1)} \;=\; \frac{3\times 1}{2\times 3} \;=\; \mathbf{0.5}

검산으로 삼각형과 삼중쌍을 직접 세어 본다:

T  =  nnei(nei1)2  =  30×2×12  =  30,P2  =  n(2nei2)  =  30×(42)  =  180 T \;=\; n\cdot\frac{\mathrm{nei}(\mathrm{nei}-1)}{2} \;=\; 30\times\frac{2\times 1}{2} \;=\; 30, \qquad P_2 \;=\; n\binom{2\,\mathrm{nei}}{2} \;=\; 30\times\binom{4}{2} \;=\; 180 C0  =  3TP2  =  90180  =  0.5  C_0 \;=\; \frac{3T}{P_2} \;=\; \frac{90}{180} \;=\; 0.5 \ \checkmark

L0L_0 — 홉별 인원을 센다. nei=2\mathrm{nei}=2이므로 d=ρ/2d=\lceil \rho/2\rceil. n=30n=30에서 ρ=1,,14\rho=1,\dots,14에 2명씩, ρ=15\rho=15(16번)에 1명 — 합 2×14+1=292\times 14+1=29명 ✓

dd해당 ρ\rho인원d×d\times인원
11, 244
23, 448
35, 6412
47, 8416
59, 10420
611, 12424
713, 14428
81518
합계29120
L0  =  4+8+12+16+20+24+28+829  =  12029  =  4.137931 L_0 \;=\; \frac{4+8+12+16+20+24+28+8}{29} \;=\; \frac{120}{29} \;=\; \mathbf{4.137931}

근사식과 비교: n/(4nei)=30/8=3.75n/(4\,\mathrm{nei})=30/8=3.75 — 실제보다 9% 낮다. 연습문제 1(c)의 18%보다는 작지만 여전히 어긋난다. 홉이 8단계로 늘어나 끝단 효과가 상대적으로 줄었기 때문이다.

답 (a): λ=4\lambda=4, nei=2\mathrm{nei}=\mathbf{2}, C0=0.5C_0=\mathbf{0.5}, L0=120/29=4.1379L_0=120/29=\mathbf{4.1379} (지름 8). 근사식 3.75는 9% 과소평가.

연습문제 2 (b) — 두 법칙으로 pp 풀기 (Solving for p Two Ways)

먼저 비를 구한다:

C관측C0  =  0.350.5  =  0.7 \frac{C_{\text{관측}}}{C_0} \;=\; \frac{0.35}{0.5} \;=\; \mathbf{0.7}

교과서 법칙 (1p)3=0.7(1-p)^3=0.7:

1p  =  0.71/3  =  0.887904p  =  0.11210 1-p \;=\; 0.7^{1/3} \;=\; 0.887904 \qquad\Longrightarrow\qquad p \;=\; \mathbf{0.11210}

igraph 법칙 (1p)6=0.7(1-p)^6=0.7:

1p  =  0.71/6  =  0.942287p  =  0.05771 1-p \;=\; 0.7^{1/6} \;=\; 0.942287 \qquad\Longrightarrow\qquad p \;=\; \mathbf{0.05771}

재배선되는 간선 수로 옮기면 (igraph는 끝점 단위이므로 간선이 건드려질 확률은 1(1p)21-(1-p)^2):

법칙pp건드려지는 간선 비율60개 중 몇 개
교과서 (1p)3(1-p)^30.11211(10.1121)2=0.21161-(1-0.1121)^2=0.211612.7개
igraph (1p)6(1-p)^60.05771(10.0577)2=0.11211-(1-0.0577)^2=0.11216.7개
답 (b): 교과서 법칙 p=0.1121p=\mathbf{0.1121}, igraph 법칙 p=0.0577p=\mathbf{0.0577}. igraph 쪽이 거의 절반이다. 실제로 옮겨지는 간선 수로 보면 12.7개 대 6.7개.

값의 의미: 같은 관측값 C=0.35C=0.35를 설명하는 데 "관계의 11%를 흔들어야 한다"와 "6%면 된다"는 실무적으로 전혀 다른 결론이다. 어느 쪽이 맞는지는 쓰는 도구의 구현에 달려 있다. §10에서 실측으로 확인했듯, R의 sample_smallworld를 쓸 거라면 0.0577이 옳다.

검증 습관: 모형의 모수를 데이터에 맞출 때, 공식을 믿기 전에 그 공식이 당신이 쓰는 함수의 동작과 일치하는지 확인해야 한다. §10에서 한 것처럼 간선 생존율을 한 번만 재 보면 5분이면 끝난다.

연습문제 2 (c) — zz점수 (z-Scores)

p=0.0577p=0.0577에서 WS를 2000번 돌린 결과와 관측값을 대조한다.

관측WS 평균sdz=(관측평균)/sdz=(\text{관측}-\text{평균})/\text{sd}판정
LL2.63.08130.24082.63.08130.2408=2.00\dfrac{2.6-3.0813}{0.2408}=\mathbf{-2.00}어긋난다 — 실제가 더 짧다
CC0.350.36620.04910.350.36620.0491=0.33\dfrac{0.35-0.3662}{0.0491}=\mathbf{-0.33}맞는다
답 (c): zL=2.00z_L=\mathbf{-2.00}, zC=0.33z_C=\mathbf{-0.33}.
거리 축이 어긋난다. 군집은 거의 완벽하게 맞는다(당연하다 — ppCC에 맞춰 정했으니). 그런데 그 pp에서 WS가 예측하는 거리 3.08보다 실제 학급이 2 표준편차만큼 짧다.

값의 의미: zC=0.33z_C=-0.33은 "CC를 맞추도록 pp를 골랐으니 맞는 게 당연하다"는 동어반복에 가깝다. 진짜 검정은 zLz_L에서 일어난다 — 한 축을 맞춘 뒤 모형이 남은 축에 대해 내놓는 예측이 데이터와 맞는가? 여기서는 맞지 않는다.

연습문제 2 (d) — 그래서 이 학급은 어떤 학급인가 (Reading the Misfit)

세 모형과 실제를 나란히 놓는다.

모형LLCC읽기
격자 p=0p=04.1380.500너무 멀고 너무 뭉쳤다
WS p=0.0577p=0.05773.0810.366뭉침은 맞는데 아직 멀다
실제 학급2.6000.350뭉쳐 있으면서 더 좁다
무작위 G(30,60)G(30,60)2.4870.134충분히 좁지만 안 뭉쳤다

실제 학급의 거리 2.600은 무작위 그래프의 2.487에 거의 닿아 있다 (격자→무작위 구간 [2.487,4.138][2.487,\,4.138]에서 무작위 쪽으로 93% 지점). 그런데 군집계수는 무작위의 2.6배다.

답 (d): 이 학급은 WS가 설명할 수 있는 것보다 더 극단적인 좁은 세상이다. 모둠 수준의 뭉침(C=0.35C=0.35)을 거의 무작위 수준의 짧은 거리(2.60 ≈ 무작위 2.49)와 동시에 달성하고 있다. WS는 CC를 맞추면 LL이 따라오지 못한다.

왜 그런가 — §12에서 가라테가 보인 것과 정확히 같은 현상이다. 가라테의 실제 거리 2.408은 WS p=1p=1의 2.602보다도 짧았고, 그 원인은 차수 17짜리 허브였다. WS는 전원의 차수를 4 근처에 묶어 두므로 이런 지름길을 만들 수 없다.

이 학급도 마찬가지로 차수가 큰 학생 몇 명이 있을 것이다. 친구가 10명 넘는 아이 두세 명이 서로 이어져 있으면, 그들만으로 반 전체가 3홉 안에 들어온다. 그러면서 각자의 모둠 안에서는 여전히 삼각형이 촘촘하다 — 뭉침과 좁음을 동시에 얻는 방법이다.

교실 해석
zL=2.00z_L=-2.00이 말해 주는 것: 이 반에는 "연결자"가 있다. 자리 배치나 모둠 편성만으로 설명되는 것보다 반이 더 좁다면, 그건 여러 모둠에 두루 걸쳐 있는 학생이 존재한다는 뜻이다.
진단 절차로 쓸 수 있다: ① 관측 CCpp를 맞춘다 ② 그 pp에서 WS가 예측하는 LL을 구한다 ③ 실제 LL이 예측보다 유의하게 짧으면 허브형 학생을 찾아본다 ④ 실제 LL이 예측보다 길면 반이 모둠별로 갈라져 있다는 신호다.
주의: 이 진단은 "누가 허브인가"까지는 말해 주지 않는다. 그건 차수와 중심성을 직접 봐야 한다 — 4-5의 주제다.

다음 단원 예고 — 4-5. 오늘 WS는 군집계수 축을 정복했지만 차수 축에서는 오히려 G(n,p)G(n,p)보다 나빴다(분산 0 ~ 3.45 대 실제 15.04). 그리고 연습문제 2와 §12가 똑같은 결론에 도달했다: 남은 것은 전부 차수 분포 문제다.
4-5에서는 차수 분포를 정면으로 잰다 — 히스토그램, 누적분포, 로그–로그 그림, 그리고 "허브가 있다"는 말을 어떻게 측정 가능한 진술로 바꿀 것인가.