단원 4-4The Watts–Strogatz Small-World Model
와츠·스트로가츠 모형 — 지름길 몇 개가 세상을 좁힌다
4-3은 모순으로 끝났다. 는 거리는 맞히는데 뭉침을 못 맞힌다. 그 반대 극단이 고리 격자다 — 뭉침은 넘치는데() 거리가 에 비례해 절망적으로 멀다.
와츠와 스트로가츠는 두 극단 사이에 손잡이 하나를 달았다: 재배선 확률 . 이면 격자, 이면 무작위. 놀라운 것은 그 사이다.
에서 — 간선 5000개 중 겨우 몇 십 개를 옮겼을 뿐인데 거리는 86% 사라지고() 뭉침은 94% 남는다(). 이 구간이 좁은 세상이다.
그리고 오늘은 igraph의 구현이 교과서 공식과 다르다는 것도 직접 증명한다 — 교과서는 , igraph는 .
- 오늘의 질문: 두 극단 사이에 손잡이를 단다 (A Knob Between Two Extremes)
- 정의 — 고리 격자와 재배선 (Ring Lattice and Rewiring)
- 손 계산 ① 고리 격자의 군집계수 — 여섯 쌍 전부 (Clustering of the Ring Lattice)
- 손 계산 ② 고리 격자의 평균 거리 — 홉별 인원 전부 (Distance in the Ring Lattice)
- 격자는 이 커지면 절망적으로 멀다 (The Lattice Scales Badly)
- 손 계산 ③ 지름길 20개의 위력 (The Power of Twenty Shortcuts)
- 손 계산 ④ 왜 군집계수는 인가 — 여덟 경우 전부 (Why the Cube)
- R 검증 ① 두 곡선이 다른 속도로 무너진다 (Two Curves, Two Speeds)
- 좁은 세상 구간 (The Small-World Regime)
- R 구현 함정 — igraph는 이다 (An Implementation Trap)
- 왜 거리만 그렇게 빨리 무너지는가 (Why Only Distance Collapses)
- 가라테를 WS 지도에 올린다 (Karate on the WS Map)
- FMH는 지도 밖에 있다 (FMH Is Off the Map)
- WS가 여전히 못 하는 것 — 차수 축 (What WS Still Cannot Do)
- 교실 적용 (Classroom Application)
- 연습문제 (Exercises)
- 해설과 답 (Solutions)
1. 오늘의 질문: 두 극단 사이에 손잡이를 단다 (A Knob Between Two Extremes)
4-3에서 우리는 의 성적표를 두 축으로 나눠 받았다.
| 모형 | 평균 거리 | 군집계수 | 한 줄 평 |
|---|---|---|---|
| 무작위 그래프 | — 맞힘 | — 틀림 | 좁긴 한데 아무도 안 뭉친다 |
| 가라테 (실제) | 2.408 | 0.2557 | 좁으면서 동시에 뭉쳐 있다 |
실제 사회망은 두 성질을 동시에 가진다. 좁고, 뭉쳐 있다. 는 앞의 절반만 준다. 그렇다면 뒤의 절반을 확실히 주는 모형에서 출발하면 어떨까?
그런 모형이 있다. 고리 격자(ring lattice)다. 학생들을 원형으로 둥글게 앉히고 양옆 가까운 몇 명씩만 친구로 잇는다. 옆자리끼리 서로 아는 게 당연하니 삼각형이 넘쳐난다. 하지만 반대편 학생에게 소식을 전하려면 원을 반 바퀴 돌아야 한다.
두 극단은 정반대의 결함을 가진다. 격자는 뭉침 과잉 + 거리 과잉, 무작위는 뭉침 결핍 + 거리 적정.
그렇다면 격자에서 출발해 간선을 조금씩만 무작위로 옮겨 보자. 얼마나 옮겨야 거리가 무작위 수준으로 짧아질까? 그때 뭉침은 얼마나 남아 있을까?
두 질문의 답이 다르면 — 즉 거리가 뭉침보다 훨씬 빨리 무너지면 — 그 사이 어딘가에 좁으면서 뭉친 구간이 존재한다.
2. 정의 — 고리 격자와 재배선 (Ring Lattice and Rewiring)
2-1. 고리 격자 (Ring Lattice)
정점 을 시계 방향으로 원에 놓는다. 고리 거리(ring distance)를
로 정의하고, 인접행렬을
로 놓는다. 즉 양옆으로 명씩 잇는다. 그러면
| 양 | 공식 | 일 때 |
|---|---|---|
| 모든 정점의 차수 | 4 — 전원 똑같다 | |
| 간선 수 | ||
| 삼각형 수 | ||
| 연결 삼중쌍 |
2-2. 재배선 (Rewiring)
격자의 각 간선을 훑으면서 확률 로 한쪽 끝을 무작위 정점으로 갈아 끼운다. 갈아 끼워진 간선은 원을 가로지르는 지름길(shortcut)이 된다.
| 결과 | 성질 | |
|---|---|---|
| 손대지 않은 고리 격자 | 최대, 최대 | |
| 중간 — 오늘의 주인공 | ??? | |
| 거의 무작위 그래프 | 최소, 최소 |
간선을 추가하면 밀도가 올라가 버려서 격자·무작위와 공정하게 비교할 수 없다. 재배선은 간선 수 을 그대로 유지한 채 위치만 바꾼다. 그래서 과 이 같은 밀도를 갖고, 오직 구조만 다르다. (다만 §6에서는 설명을 위해 일부러 "추가"를 써서 지름길의 효과만 떼어 본다.)
3. 손 계산 ① 고리 격자의 군집계수 — 여섯 쌍 전부 (Clustering of the Ring Lattice)
로 두고 1번 학생의 지역 군집계수를 손으로 구한다.
1번의 이웃은 고리 거리 1, 2 이내의 정점이다:
| 이웃 후보 | ? | |||
|---|---|---|---|---|
| 1 | 19 | 1 | O | |
| 2 | 18 | 2 | O | |
| 19 | 1 | 1 | O | |
| 18 | 2 | 2 | O | |
| 3 | 17 | 3 | X | |
| 17 | 3 | 3 | X |
이웃 집합 , 차수 . 지역 군집계수의 정의는
여섯 쌍을 하나도 빠뜨리지 않고 전부 확인한다. 두 이웃 가 이어져 있으려면 여야 한다.
| # | 쌍 | ? | ||||
|---|---|---|---|---|---|---|
| 1 | 1 | 19 | 1 | O | 1 | |
| 2 | 17 | 3 | 3 | X | 0 | |
| 3 | 16 | 4 | 4 | X | 0 | |
| 4 | 18 | 2 | 2 | O | 1 | |
| 5 | 17 | 3 | 3 | X | 0 | |
| 6 | 1 | 19 | 1 | O | 1 |
0인 항까지 전부 더하면
3-1. 일반 공식으로 (The General Formula)
이 셈에는 규칙이 있다. 의 이웃 명 중 서로 이어진 쌍의 수는
이고 전체 쌍은 이므로
방금 손으로 센 값과 맞는지 검산한다. : 분자 — 위 표에서 O가 정확히 3개였다. 분모 ✓. ✓.
| 읽기 | ||||
|---|---|---|---|---|
| 1 | 2 | 0 | 0 | 양옆 1명씩 — 삼각형이 아예 없다 |
| 2 | 4 | 0.500000 | 0.500000 | 위에서 손으로 센 값 |
| 3 | 6 | 0.600000 | 0.600000 | 연습문제 1 |
| 4 | 8 | 0.642857 | 0.642857 | |
| 5 | 10 | 0.666667 | 0.666667 | §8 이후의 기준 격자 |
| 6 | 12 | 0.681818 | 0.681818 | 에서 로 수렴 |
4. 손 계산 ② 고리 격자의 평균 거리 — 홉별 인원 전부 (Distance in the Ring Lattice)
같은 격자()에서 1번 학생의 평균 거리를 구한다.
한 홉에 최대 칸까지 갈 수 있으므로, 고리 거리 만큼 떨어진 정점까지의 최단 거리(홉 수)는
1번에서 본 나머지 19명을 고리 거리별로 전부 늘어놓는다. 고리 거리 인 정점은 시계·반시계 두 방향에 하나씩 2명씩인데, 만 정반대편 한 사람(11번)뿐이다.
| 해당 정점 | 인원 | 거리 합 기여 | ||
|---|---|---|---|---|
| 1 | 2, 20 | 2 | 1 | |
| 2 | 3, 19 | 2 | 1 | |
| 3 | 4, 18 | 2 | 2 | |
| 4 | 5, 17 | 2 | 2 | |
| 5 | 6, 16 | 2 | 3 | |
| 6 | 7, 15 | 2 | 3 | |
| 7 | 8, 14 | 2 | 4 | |
| 8 | 9, 13 | 2 | 4 | |
| 9 | 10, 12 | 2 | 5 | |
| 10 | 11 (혼자) | 1 | 5 | |
| 합계 | 19 | — | 55 | |
홉별로 다시 묶으면 이렇게 된다 — 같은 인원(4명)이 홉마다 반복된다는 게 격자의 본질이다.
| 홉 | 1 | 2 | 3 | 4 | 5 | 합 |
|---|---|---|---|---|---|---|
| 인원 | 4 | 4 | 4 | 4 | 3 | 19 |
| 인원 | 4 | 8 | 12 | 16 | 15 | 55 |
모든 정점이 대칭이므로 이 값이 곧 전체 평균 거리다.
> g <- sample_smallworld(1, 20, 2, 0)
> mean_distance(g); diameter(g); transitivity(g)
[1] 2.894736842
[1] 5
[1] 0.5
격자에서 홉당 칸씩 나아가고 최대 고리 거리가 이므로 지름은 대략 , 평균은 그 절반인 면 . 실제 2.895 — 작은 에서는 16% 어긋난다. 이 근사는 이 클 때만 좋다(§5에서 확인). 연습문제 2에서 이 오차가 다시 나온다.
5. 격자는 이 커지면 절망적으로 멀다 (The Lattice Scales Badly)
4-3의 핵심은 무작위 그래프의 거리가 으로 아주 천천히 자란다는 것이었다. 격자는 정반대다.
| 격자 () | 근사 | 격자 | 참고: | |
|---|---|---|---|---|
| 20 | 2.8947 | 2.50 | 0.5000 | 2.16 |
| 100 | 12.8788 | 12.50 | 0.5000 | 3.32 |
| 500 | 62.8758 | 62.50 | 0.5000 | 4.48 |
| 1000 | 125.3754 | 125.00 | 0.5000 | 4.98 |
을 50배 키우면 격자의 거리는 43배가 되고, 무작위 그래프의 거리는 2.3배가 된다. 에서 격자는 무작위보다 25배 멀다.
한편 는 이 아무리 커져도 0.5로 못 박혀 있다. 격자는 뭉침은 완벽하고 거리는 재앙이다. 정확히 의 반대다.
| 거리 | 군집 | |
|---|---|---|
| 고리 격자 | — 재앙 | 0.5 — 완벽 |
| 무작위 | — 완벽 | — 재앙 |
| 실제 사회망 | 짧다 | 크다 |
6. 손 계산 ③ 지름길 20개의 위력 (The Power of Twenty Shortcuts)
재배선의 효과를 이해하려면 먼저 지름길 하나가 무엇을 하는지를 봐야 한다. 설명을 깨끗하게 하려고 여기서는 재배선 대신 추가를 쓴다 — 기존 간선은 하나도 건드리지 않고 무작위 간선만 몇 개 더한다. 그러면 지름길의 효과만 떼어 볼 수 있다.
격자에서 출발한다. 원래 값은 .
| 추가한 간선 | 전체 간선 대비 | 감소율 | 감소율 | ||
|---|---|---|---|---|---|
| 0 | — | 50.4505 | — | 0.66667 | — |
| 1 | 0.02% | 41.4436 | −17.9% | 0.66640 | −0.04% |
| 2 | 0.04% | 34.9603 | −30.7% | 0.66610 | −0.08% |
| 5 | 0.10% | 28.5489 | −43.4% | 0.66520 | −0.22% |
| 10 | 0.20% | 19.7122 | −60.9% | 0.66370 | −0.44% |
| 20 | 0.40% | 12.6718 | −74.9% | 0.66070 | −0.89% |
간선 하나를 더했을 뿐인데 평균 거리가 18% 사라진다. 간선 20개(전체의 0.4%)면 거리가 4분의 1로 줄고, 군집계수는 0.89%만 준다.
6-1. 은 어디서 나왔나 — 분자와 분모를 직접 센다 (Counting the Numerator and Denominator)
군집계수의 전역 정의는 다. 간선 20개를 추가했을 때 분자 와 분모 가 각각 어떻게 되는지 손으로 센다.
분자 (삼각형 수) — 간선을 추가하면 삼각형은 절대 줄지 않는다. 새 간선이 우연히 새 삼각형을 만들 수는 있지만, 에서 무작위로 고른 두 점이 공통 이웃을 가질 확률은 지극히 작다. 그러므로
분모 (연결 삼중쌍 수) — 이건 확실히 는다. 격자에서는 전원이 차수 10이므로
새 간선 하나는 양 끝의 차수를 10에서 11로 올린다. 한쪽 끝에서 늘어나는 삼중쌍은
양 끝이 있으니 간선 하나당 . 간선 20개면
따라서
> # 20회 평균 실측
> T = 10000.8 P2 = 45400.9 C = 0.6608327
# 손 계산 예측: T = 10000, P2 = 45400, C = 0.6607930 → 소수 셋째 자리까지 일치
지름길을 놓아도 삼각형은 하나도 부서지지 않는다. 군집계수가 조금 떨어진 것은 삼각형이 없어져서가 아니라 분모만 늘어나 희석됐기 때문이다 (, 겨우 +0.89%).
반면 거리는 75%가 사라졌다. 같은 20개의 간선이 한쪽 축은 거의 안 건드리고 다른 축은 박살 낸다. 이 비대칭이 좁은 세상의 전부다. (왜 그런지는 §11)
※ 위 표의 값은 난수 한 번의 결과다. 20회 반복 평균은 13.31로, 12~14 사이에서 흔들린다. 결론(4분의 1로 줄어든다)은 바뀌지 않는다.
7. 손 계산 ④ 왜 군집계수는 인가 — 여덟 경우 전부 (Why the Cube)
이제 진짜 재배선으로 돌아온다. 교과서는 재배선 후의 군집계수를
이라고 말한다. 왜 세제곱인가?
격자 안의 삼각형 하나를 골라 보자 — 예컨대 에서 . 이 삼각형은 간선 세 개로 이루어진다:
1 — 2 2 — 3 1 — 3
재배선은 각 간선을 독립적으로 훑으면서 확률 로 한쪽 끝을 옮긴다. 그러면 이 삼각형이 살아남으려면 세 간선이 모두 살아남아야 한다. 셋 중 하나라도 옮겨지면 삼각형은 끊긴다.
로 놓고 여덟 가지 경우를 하나도 빼놓지 않고 전개한다. (S = 살아남음, 확률 / R = 재배선됨, 확률 )
| # | 1—2 | 2—3 | 1—3 | 확률 계산 | 확률 | 삼각형 |
|---|---|---|---|---|---|---|
| 1 | S | S | S | 0.729 | 살아남음 | |
| 2 | R | S | S | 0.081 | 끊김 | |
| 3 | S | R | S | 0.081 | 끊김 | |
| 4 | S | S | R | 0.081 | 끊김 | |
| 5 | R | R | S | 0.009 | 끊김 | |
| 6 | R | S | R | 0.009 | 끊김 | |
| 7 | S | R | R | 0.009 | 끊김 | |
| 8 | R | R | R | 0.001 | 끊김 | |
| 확률 합 (검산) | 1.000 | — | ||||
검산: ✓
삼각형이 살아남는 경우는 단 하나(1번 줄)뿐이다. 그러므로
그리고 §6에서 확인했듯 분모 는 거의 안 변한다. 재배선은 간선 수를 유지하므로 차수의 합은 그대로고, 차수가 흩어지면서 가 조금 늘 뿐이다:
| 0 | 0.01 | 0.03 | 0.1 | 0.2 | 0.3 | 0.5 | 1.0 | |
|---|---|---|---|---|---|---|---|---|
| 분자 | 10000 | 9419 | 8318 | 5334 | 2699 | 1297 | 304 | 166 |
| 1.000 | 0.942 | 0.832 | 0.533 | 0.270 | 0.130 | 0.030 | 0.017 | |
| 분모 | 45000 | 45099 | 45299 | 45969 | 46796 | 47527 | 48644 | 49910 |
| 1.000 | 1.002 | 1.007 | 1.022 | 1.040 | 1.056 | 1.081 | 1.109 |
분모는 가 1까지 가도 11%밖에 안 움직이는데 분자는 1.7%까지 떨어진다. 그러니 의 거동은 사실상 전부 삼각형 이야기다. 따라서
8. R 검증 ① 두 곡선이 다른 속도로 무너진다 (Two Curves, Two Speeds)
(차수 10, 간선 5000개)에서 를 훑는다. 각 마다 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) }))
| 0 | 0 | 50.450 | 1.0000 | 0.6667 | 1.0000 |
| 0.0001 | 0.5 | 45.267 | 0.8973 | 0.6664 | 0.9996 |
| 0.0003 | 1.5 | 32.023 | 0.6347 | 0.6653 | 0.9980 |
| 0.001 | 5 | 20.071 | 0.3978 | 0.6626 | 0.9938 |
| 0.003 | 15 | 11.349 | 0.2250 | 0.6546 | 0.9819 |
| 0.01 | 50 | 6.932 | 0.1374 | 0.6269 | 0.9403 |
| 0.03 | 150 | 5.032 | 0.0997 | 0.5521 | 0.8281 |
| 0.1 | 500 | 3.898 | 0.0773 | 0.3492 | 0.5237 |
| 0.3 | 1500 | 3.371 | 0.0668 | 0.0805 | 0.1207 |
| 1.0 | 5000 | 3.256 | 0.0645 | 0.0099 | 0.0149 |
※ 둘째 열 은 교과서 기준(간선 단위 재배선)의 기댓값이다. igraph의 실제 구현에서는 그 약 2배의 간선이 건드려진다 — 이유는 §10에서 밝힌다.
양끝 검산 — 두 극단이 우리가 아는 값과 맞는지 확인한다.
| 지점 | 이론 | 이론값 | 실측 |
|---|---|---|---|
| 의 | (§3) | 0.66667 | 0.66667 |
| 의 | (§4) | 50.0 | 50.45 |
| 의 | (4-3 §6) | 0.01001 | 0.0099 |
| 의 | (4-3 §3) | 3.000 | 3.256 |
즉 의 WS 그래프는 4-3에서 배운 무작위 그래프 그 자체다. 우리는 지금 4-3의 세계와 격자의 세계를 잇는 다리 위를 걷고 있고, 양쪽 끝이 제대로 붙어 있음을 확인했다.
9. 좁은 세상 구간 (The Small-World Regime)
표의 줄을 다시 읽는다.
평균 거리: — 86%가 사라졌다 ()
군집계수: — 94%가 남았다 ()
비교 대상인 무작위 그래프의 거리는 3.26이다. 우리는 간선 2%만 건드려서 거리의 대부분을 무작위 수준으로 끌어내리고 격자의 뭉침은 거의 그대로 유지했다.
왜 이런 구간이 존재하는가는 두 곡선의 기울기를 비교하면 보인다.
| 이 잃은 비율 | 가 잃은 비율 | 비 ( 손실 / 손실) | |
|---|---|---|---|
| 0.001 | 60.2% | 0.6% | 97배 |
| 0.003 | 77.5% | 1.8% | 43배 |
| 0.01 | 86.3% | 6.0% | 14배 |
| 0.03 | 90.0% | 17.2% | 5.2배 |
| 0.1 | 92.3% | 47.6% | 1.9배 |
| 0.3 | 93.3% | 87.9% | 1.1배 |
가 작을수록 비대칭이 극단적이다. 에서는 거리가 군집보다 97배 빠르게 무너진다.
그림 3의 노란 띠()는 시각적 안내일 뿐 엄밀한 정의가 아니다. 게다가 이 위치는 에 의존한다 — 이 커질수록 왼쪽으로 이동한다. 실제로 필요한 지름길의 개수는 대략 상수인데 비율 개수는 이 커질수록 작아지기 때문이다. "작은 에서 두 곡선이 크게 벌어진다"가 핵심이고, 특정 숫자는 부차적이다.
10. R 구현 함정 — igraph는 이다 (An Implementation Trap)
여기서 실측과 이론을 맞춰 보다가 이상한 것을 발견했다. §7에서 유도한 과 §8의 실측 를 나란히 놓으면 중간 에서 심하게 어긋난다.
| 실측 | 오차 | ||
|---|---|---|---|
| 0.01 | 0.9419 | 0.9703 | 0.028 |
| 0.03 | 0.8294 | 0.9127 | 0.083 |
| 0.1 | 0.5219 | 0.7290 | 0.207 |
| 0.2 | 0.2611 | 0.5120 | 0.251 |
| 0.3 | 0.1219 | 0.3430 | 0.221 |
오차 0.25는 무시할 수 없다. 실측이 이론보다 훨씬 빨리 떨어진다. §7의 표에서 분모 는 거의 안 움직인다는 걸 이미 확인했으므로, 문제는 분자(삼각형)가 예상보다 빨리 죽는다는 데 있다.
10-1. 결정적 실험 — 원래 간선이 몇 % 살아남는지 직접 센다 (The Decisive Test)
§7의 논증은 "간선 하나가 살아남을 확률 "를 전제로 했다. 그것부터 확인한다. 격자의 간선 목록을 저장해 두고, 재배선 후에도 남아 있는 간선의 비율을 센다.
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) # 원래 간선의 생존 비율
| 실측 간선 생존율 | 어느 쪽? | |||
|---|---|---|---|---|
| 0.01 | 0.9805 | 0.9900 | 0.9801 | |
| 0.03 | 0.9415 | 0.9700 | 0.9409 | |
| 0.10 | 0.8104 | 0.9000 | 0.8100 | |
| 0.20 | 0.6399 | 0.8000 | 0.6400 | |
| 0.30 | 0.4912 | 0.7000 | 0.4900 | |
| 0.50 | 0.2547 | 0.5000 | 0.2500 |
소수 넷째 자리까지 다. 우연이 아니다.
sample_smallworld는 간선이 아니라 양 끝점을 각각 확률 로 재배선한다.간선이 온전히 남으려면 양쪽 끝이 모두 무사해야 하므로 그러면 삼각형은 간선 3개가 모두 살아야 하므로 교과서의 이 아니다.
10-2. 으로 다시 맞춰 본다 (Refitting with the Sixth Power)
| 실측 | 오차 | 오차 | |||
|---|---|---|---|---|---|
| 0.001 | 0.9944 | 0.9970 | 0.0026 | 0.9940 | 0.0004 |
| 0.003 | 0.9828 | 0.9910 | 0.0082 | 0.9821 | 0.0007 |
| 0.01 | 0.9419 | 0.9703 | 0.0284 | 0.9415 | 0.0004 |
| 0.03 | 0.8294 | 0.9127 | 0.0833 | 0.8330 | 0.0036 |
| 0.1 | 0.5219 | 0.7290 | 0.2071 | 0.5314 | 0.0095 |
| 0.2 | 0.2611 | 0.5120 | 0.2509 | 0.2621 | 0.0010 |
| 0.3 | 0.1219 | 0.3430 | 0.2211 | 0.1176 | 0.0043 |
| 0.5 | 0.0281 | 0.1250 | 0.0969 | 0.0156 | 0.0125 |
| 평균 절대오차 () | 0.0968 | 0.0026 | |||
의 평균 오차는 0.0026, 의 37분의 1이다. 논쟁의 여지가 없다.
에서 실측이 보다 조금 높아지는 것도 설명된다. 그쯤 되면 재배선된 간선이 워낙 많아 새 삼각형이 우연히 생기기 시작한다. 극단인 에서 실측 0.0149는 격자 삼각형의 잔재가 아니라 무작위 그래프가 원래 갖는 군집계수(, 4-3 §6)다.
① 개념은 이 맞다 — "삼각형이 살려면 간선 3개가 다 살아야 한다"는 논리는 옳고, 이게 교과서와 원논문의 논증이다.
② igraph로 숫자를 맞출 때는 을 써야 한다 — 구현이 끝점 단위로 재배선하기 때문이다.
③ 일반화하면 간선 생존율을 라 할 때 삼각형 생존율은 이고, 구현에 따라 일 수도 일 수도 있다. 먼저 를 실측해라.
연습문제 2에서 이 차이가 답을 두 배 가까이 갈라놓는다.
11. 왜 거리만 그렇게 빨리 무너지는가 (Why Only Distance Collapses)
에서 거리는 군집보다 97배 빠르게 무너졌다(§9). 이 비대칭의 원인은 간선 하나가 두 지표에 미치는 영향의 사정거리가 다르다는 데 있다.
| 군집계수 에 대한 영향 | 평균 거리 에 대한 영향 | |
|---|---|---|
| 사정거리 | 국소 — 그 간선이 낀 삼각형만 | 전역 — 망 전체의 정점 쌍 |
| 영향 크기 | 간선 하나가 낀 삼각형은 4~8개(평균 6) → 전체 10000개 중 0.06% | 지름길 하나가 수만 쌍의 최단 경로를 갈아 치움 |
| §6의 실측 | 간선 20개 → −0.89% | 간선 20개 → −74.9% |
11-1. 지름길 하나가 몇 쌍을 살리는가 — 어림 계산 (A Back-of-Envelope Count)
고리에서 정점 1과 정점 501을 잇는 지름길 하나를 놓았다고 하자. 원래 이 두 점 사이의 거리는 홉이었는데 이제 1홉이다.
이득을 보는 것은 이 두 점만이 아니다. 1번 근처에 있는 사람들과 501번 근처에 있는 사람들이 전부 이 다리를 건넌다. 고리에서 1번으로부터 홉 안에 있는 사람은 대략 명이다. 까지만 쳐도 양쪽에 200명씩이니, 이 다리 하나로 최단 경로가 짧아지는 쌍은 대략 쌍이다.
전체 쌍 수는 . 즉 지름길 하나가 전체 쌍의 8%를 건드린다.
반대쪽을 세어 본다. 고리 거리 인 간선 가 낀 삼각형의 수는 와 의 공통 이웃 수와 같고, 세어 보면 이다.
| 1 | 2 | 3 | 4 | 5 | 합 | |
|---|---|---|---|---|---|---|
| 그런 간선 수 | 1000 | 1000 | 1000 | 1000 | 1000 | 5000 |
| 낀 삼각형 | 8 | 7 | 6 | 5 | 4 | 평균 6 |
검산: 모든 간선에 대해 더하면 ✓ (삼각형 하나는 간선 3개에서 각각 세어지므로 가 나와야 한다.)
그러므로 간선 하나를 옮겨서 부술 수 있는 삼각형은 평균 6개 — 전체 10000개 중 0.06%다.
이것이 §9에서 본 "97배"의 정체다. (어림 계산이라 정확히 97은 아니지만, 두 자릿수 배율이라는 결론은 같다.)
같은 반 안에서 친구를 한 명 바꾸는 것과 다른 반 친구를 한 명 만드는 것은 망에 미치는 효과가 전혀 다르다.
반 안에서 친구를 바꾸면 우리 모둠의 뭉침이 조금 달라질 뿐 반 전체의 정보 흐름은 그대로다.
그런데 다른 반 친구 한 명이 생기면, 내 주변 20명과 그 친구 주변 20명 사이의 400쌍이 갑자기 가까워진다. 소문·정보·유행이 이 다리 하나를 타고 넘어온다.
학년 전체를 좁게 만드는 것은 반 안의 친밀도가 아니라 반을 가로지르는 몇 개의 연결이다.
12. 가라테를 WS 지도에 올린다 (Karate on the WS Map)
WS 모형은 를 0에서 1까지 움직이면 평면에 곡선 하나를 그린다. 실제 망은 그 곡선 위에 있을까?
가라테 클럽: . 격자로 흉내 내려면 차수를 맞춰야 하므로 → .
| 모형 | 읽기 | ||
|---|---|---|---|
| 격자 | 4.6364 | 0.5000 | 뭉침 2배 과잉, 거리 2배 과잉 |
| WS | 4.2460 | 0.4728 | |
| WS | 3.6042 | 0.4222 | |
| WS | 3.3203 | 0.3721 | |
| WS | 2.9835 | 0.2924 | 가 실제와 가장 가깝다 |
| WS | 2.7431 | 0.1851 | |
| WS | 2.6383 | 0.1384 | |
| WS (무작위) | 2.6024 | 0.1185 | 뭉침 부족 |
| 실제 가라테 | 2.4082 | 0.2557 | 곡선 위가 아니다 |
12-1. WS는 가라테를 얼마나 잘 설명했나 (How Well Did WS Do)
먼저 잘한 점. 4-3에서 는 가라테의 를 1.8배 과소평가했고 격자는 2배 과대평가했다. WS는 를 0.1 근처로 돌리면 — 실제 0.2557과 14% 차이다. 어느 극단보다도 훨씬 낫다.
이제 못한 점. 를 맞추는 에서 인데 실제는 2.41이다. 게다가 더 이상한 것이 있다.
를 아무리 돌려도 WS 곡선은 가라테의 거리에 도달하지 못한다. 를 포기하고 완전 무작위까지 가도 안 된다.
왜? WS는 차수를 거의 균일하게 유지하기 때문이다. 격자에서는 전원이 차수 4였고, 재배선을 해도 차수는 4 근처에서만 흔들린다. 그런데 실제 가라테에는 차수 17짜리 두목이 있다. 허브는 자기에게 연결된 모든 사람을 2홉 안에 묶어 버리므로, 허브가 있으면 같은 밀도에서도 거리가 더 짧아진다. §14에서 숫자로 확인한다.
13. FMH는 지도 밖에 있다 (FMH Is Off the Map)
FMH 거대 컴포넌트: . 차수를 맞추면 → .
그런데 §3에서 경고했듯 인 고리 격자에는 삼각형이 하나도 없다:
출발점의 군집계수가 0이면, 재배선을 아무리 해도 는 올라갈 데가 없다.
| 모형 | ||
|---|---|---|
| 격자 | 110.0000 | 0.0000 |
| WS | 66.1594 | 0.0000 |
| WS | 21.9122 | 0.0008 |
| WS | 14.2609 | 0.0022 |
| WS | 9.0696 | 0.0037 |
| WS (무작위) | 7.7898 | 0.0043 |
| 실제 FMH 거대성분 | 16.8773 | 0.2840 |
WS 곡선 전체에서 의 최댓값이 0.0043이다. 실제는 0.2840 — 66배다. 를 어디에 놓아도 실제 점 근처에 갈 수 없다. 그림 4 오른쪽에서 빨간 삼각형이 회색 곡선에서 아득히 떠 있는 이유다.
둘 다다. 그리고 구분해서 봐야 한다.
설정의 문제: 은 정수 로 맞출 수가 없다. 이면 차수 2(밀도 부족 + ), 면 차수 4(간선이 실제의 1.5배). WS는 평균 차수가 짝수일 때만 자연스럽게 정의된다.
모형의 문제: 더 근본적으로, 평균 차수 2.61인 망에서 를 만들려면 차수가 적은 사람들끼리도 삼각형을 이뤄야 한다. WS의 균일한 격자에서는 불가능하다. 실제 FMH의 삼각형은 차수 높은 소수에게 몰려 있다 — 이것 역시 차수 분포 이야기다.
14. WS가 여전히 못 하는 것 — 차수 축 (What WS Still Cannot Do)
세 단원째 같은 것이 발목을 잡는다. 4-1에서 의 첫 번째 실패가 차수 분산 과소평가였다. WS도 똑같다.
| 모형 (가라테 크기, ) | 차수 분산 | 최대 차수 | 읽기 |
|---|---|---|---|
| 고리 격자 () | 0.000 | 4 | 전원이 똑같다 |
| WS | 3.448 | — | 푸아송 수준 |
| 실제 가라테 | 15.037 | 17 | 4.4배 |
WS는 를 0에서 1까지 다 돌려도 차수 분산이 0에서 3.45까지만 움직인다. 실제의 15.04에는 어느 에서도 도달하지 못한다. 이건 조율의 문제가 아니라 모형의 구조적 한계다 — WS는 애초에 모든 사람에게 같은 수의 간선을 나눠 주고 시작한다.
그리고 이 한계가 §12에서 본 이상한 현상을 설명한다.
같은 이라도, 간선을 골고루 나눠 주면(WS) 거리가 2.60이고 몰아 주면(실제, 차수 17짜리 두목 존재) 2.41이다.
허브는 자기 이웃 17명을 서로 2홉으로 묶는다. 허브 두 명이 서로 이어져 있으면 망의 절반이 3홉 안에 들어온다. 균일 차수 모형은 이 지름길을 만들 방법이 없다.
차수 분포는 뭉침만이 아니라 거리도 지배한다.
| 축 | (4-1~4-3) | WS (오늘) | 어디서 |
|---|---|---|---|
| 평균 거리 | 맞힘 | 맞힘 ( 조절) | 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)
모둠으로 앉히면 아이들의 교우 관계는 자연히 격자에 가까워진다 — 옆·앞뒤 몇 명씩만 자주 어울린다. 격자의 성질을 그대로 물려받는다: 모둠 안 결속()은 높고, 반 전체를 도는 거리()는 길다. "우리 반은 친한데 이상하게 정보가 안 돈다"는 상황이 정확히 이것이다.
§9의 답은 생각보다 훨씬 적다이다. 전체 관계의 1%만 바꿔도 거리는 86% 사라졌다. 30명 학급에서 두세 명만 모둠을 가로질러 옮겨도 반 전체의 정보 흐름은 확 달라지고, 기존 모둠의 결속은 거의 그대로 남는다.
전면 개편은 필요 없다. 오히려 전면 개편()은 모든 모둠의 결속을 함께 부순다.
§11의 계산이 알려 준 것: 지름길의 가치는 양 끝이 서로 멀 때 최대다. 같은 모둠 안에서 자리를 바꾸는 건 아무 효과가 없다. 서로 접점이 전혀 없던 두 무리를 잇는 한 명이 400쌍을 가깝게 만든다.
실무적으로: 모둠 편성 때 "친한 애들끼리 떼어 놓기"보다 "두 무리 사이를 연결할 아이 한두 명 배치하기"가 훨씬 효율이 좋다.
WS는 전원의 차수를 거의 같게 유지한다(§14). 즉 이 모형의 세계에는 외톨이도 인기인도 없다. 그런데 실제 교실의 가장 중요한 문제(친구가 하나뿐인 아이, 반을 좌우하는 인기 학생)는 전부 차수 분포의 문제다.
오늘 배운 것으로 "우리 반이 얼마나 좁고 얼마나 뭉쳐 있나"는 진단할 수 있지만, "누가 위험한가"는 진단할 수 없다. 그건 4-5의 주제다.
같은 접촉 수를 가져도 격자형 교실(모둠 안에서만)과 지름길이 있는 교실(반을 가로지르는 왕래)은 확산 속도가 완전히 다르다. 만 되어도 거리가 7분의 1이 된다. 학급 간 이동이 몇 건만 있어도 학년 전체가 한 덩어리가 된다는 뜻이다 — 방역에서 "접촉을 줄이기"보다 "가로지르는 접촉을 줄이기"가 효과가 큰 이유다.
16. 연습문제 (Exercises)
24명 학급을 원형으로 앉히고 양옆 3명씩(, 차수 6) 친구로 이었다.
(a) 간선 수 과 모든 학생의 차수를 구하라.
(b) 1번 학생의 이웃은 누구누구인가? 그 15쌍을 하나도 빠뜨리지 말고 고리 거리를 적어 연결 여부를 판정하고, 지역 군집계수를 구하라. §3의 공식과 맞는지 검산하라.
(c) 홉별 인원을 세어 1번에서의 평균 거리를 구하라. 근사식 와 얼마나 차이 나는가?
(d) 같은 크기의 무작위 그래프()는 이었다. 격자는 무작위보다 거리가 몇 배 멀고 군집이 몇 배 높은가?
먼저 풀고 §17 해설과 맞춰 볼 것.
30명 학급에서 교우 관계를 조사했더니 친구 쌍이 60개(), 평균 거리 2.6, 군집계수 0.35였다.
(a) 평균 차수를 구하고, 그에 맞는 격자의 를 정하라. 그 격자의 를 공식으로, 를 홉별 인원을 세어 손으로 구하라. 근사식 와 비교하라.
(b) 교과서 법칙 으로 를 구하라. 그리고 §10에서 확인한 igraph 법칙 으로도 구하라. 두 값이 얼마나 다른가?
(c) igraph 법칙의 에서 WS를 2000번 돌렸더니 의 평균 3.081(sd 0.241), 의 평균 0.366(sd 0.049)이었다. 관측값 2.6과 0.35의 점수를 각각 구하라. 어느 축이 어긋나는가?
(d) (c)의 어긋남은 이 학급에 대해 무엇을 말해 주는가? 참고로 같은 크기 무작위 그래프 는 다.
먼저 풀고 §17 해설과 맞춰 볼 것.
17. 해설과 답 (Solutions)
연습문제 1 (a) — 간선 수와 차수 (Edges and Degrees)
고리 격자에서는 각자 왼쪽 명, 오른쪽 명과 이어지므로
연습문제 1 (b) — 15쌍 전부 (All Fifteen Pairs)
1번의 이웃은 고리 거리 3 이내: 오른쪽으로 , 왼쪽으로 .
두 이웃 는 일 때 이어져 있다. 15쌍 전부를 전개한다.
| # | 쌍 | ? | 왜 그 값인가 | ||||
|---|---|---|---|---|---|---|---|
| 1 | 1 | 23 | 1 | O | 1 | 바로 옆자리 | |
| 2 | 2 | 22 | 2 | O | 1 | 한 칸 건너 — 3 이내 | |
| 3 | 20 | 4 | 4 | X | 0 | 고리를 돌아도 4칸 — 초과 | |
| 4 | 21 | 3 | 3 | O | 1 | 고리를 돌면 딱 3칸 | |
| 5 | 22 | 2 | 2 | O | 1 | 1번을 사이에 두고 2칸 | |
| 6 | 1 | 23 | 1 | O | 1 | 바로 옆자리 | |
| 7 | 19 | 5 | 5 | X | 0 | 양쪽 끝 — 5칸 | |
| 8 | 20 | 4 | 4 | X | 0 | 4칸 — 아깝게 초과 | |
| 9 | 21 | 3 | 3 | O | 1 | 딱 3칸 | |
| 10 | 18 | 6 | 6 | X | 0 | 이웃 중 가장 먼 두 명 | |
| 11 | 19 | 5 | 5 | X | 0 | 5칸 | |
| 12 | 20 | 4 | 4 | X | 0 | 4칸 | |
| 13 | 1 | 23 | 1 | O | 1 | 바로 옆자리 | |
| 14 | 2 | 22 | 2 | O | 1 | 한 칸 건너 | |
| 15 | 1 | 23 | 1 | O | 1 | 바로 옆자리 |
0인 항까지 전부 더한다:
공식 검산:
분자 공식으로도 검산한다: 이어진 이웃 쌍의 수 — 위 표의 O가 정확히 9개 ✓
> g <- sample_smallworld(1, 24, 3, 0)
> transitivity(g, type="local")[1]; transitivity(g)
[1] 0.6
[1] 0.6
값의 의미: 내 친구 여섯 명을 둘씩 짝지으면 15가지 조합이 있는데, 그중 9쌍이 이미 서로 친구다. 격자에서는 가 커질수록 이 비율이 올라간다 (면 0.5, 이면 0.6, 로 가면 0.75). "양옆을 넓게 볼수록 내 주변이 더 촘촘히 얽힌다"는 뜻이다.
연습문제 1 (c) — 홉별 인원과 평균 거리 (Hops and Mean Distance)
한 홉에 최대 칸 가므로 . 에서 1번으로부터 고리 거리 인 사람은 에 2명씩, 정반대편 (13번)에 1명 — 합 명 ✓
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 인원 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 1 |
| 1 | 1 | 1 | 2 | 2 | 2 | 3 | 3 | 3 | 4 | 4 | 4 |
홉별로 묶으면
| 홉 | 해당 | 인원 | 인원 |
|---|---|---|---|
| 1 | 1, 2, 3 | ||
| 2 | 4, 5, 6 | ||
| 3 | 7, 8, 9 | ||
| 4 | 10, 11, 12 | ||
| 합계 | 23 | 56 | |
지름은 4(가장 먼 사람이 4홉).
> mean_distance(g); diameter(g)
[1] 2.434782609
[1] 4
근사식과 비교: . 실제는 2.4348이므로 근사가 18% 낮다. §4에서 본 것과 같은 이유다 — 이 근사는 이 에 비해 아주 클 때만 좋고, 은 홉이 4단계밖에 없어서 끝단 효과가 크다.
연습문제 1 (d) — 무작위와의 비교 (Lattice vs Random)
값의 의미: 는 너무 작아서 격자의 거리 벌점이 거의 안 나타난다.
§5에서 일 때 격자는 무작위보다 25배 멀었는데, 여기서는 1.29배뿐이다.
격자의 거리는 에 비례해 자라고 무작위는 이므로, 둘의 차이는 이 커져야 벌어진다.
반대로 군집의 차이(2.34배)는 과 거의 무관하다 — 격자는 늘 0.6이고 무작위는 밀도(=0.261)에
가까운 값을 갖기 때문이다. 여기서 무작위 가 밀도 와
거의 같은 것도 4-3 §6의 를 다시 확인해 준다.
연습문제 2 (a) — 격자 만들기 (Building the Lattice)
(이번엔 평균 차수가 정확히 짝수라 §13의 FMH 같은 문제가 없다.)
:
검산으로 삼각형과 삼중쌍을 직접 세어 본다:
— 홉별 인원을 센다. 이므로 . 에서 에 2명씩, (16번)에 1명 — 합 명 ✓
| 홉 | 해당 | 인원 | 인원 |
|---|---|---|---|
| 1 | 1, 2 | 4 | 4 |
| 2 | 3, 4 | 4 | 8 |
| 3 | 5, 6 | 4 | 12 |
| 4 | 7, 8 | 4 | 16 |
| 5 | 9, 10 | 4 | 20 |
| 6 | 11, 12 | 4 | 24 |
| 7 | 13, 14 | 4 | 28 |
| 8 | 15 | 1 | 8 |
| 합계 | 29 | 120 | |
근사식과 비교: — 실제보다 9% 낮다. 연습문제 1(c)의 18%보다는 작지만 여전히 어긋난다. 홉이 8단계로 늘어나 끝단 효과가 상대적으로 줄었기 때문이다.
연습문제 2 (b) — 두 법칙으로 풀기 (Solving for p Two Ways)
먼저 비를 구한다:
교과서 법칙 :
igraph 법칙 :
재배선되는 간선 수로 옮기면 (igraph는 끝점 단위이므로 간선이 건드려질 확률은 ):
| 법칙 | 건드려지는 간선 비율 | 60개 중 몇 개 | |
|---|---|---|---|
| 교과서 | 0.1121 | 12.7개 | |
| igraph | 0.0577 | 6.7개 |
값의 의미: 같은 관측값 를 설명하는 데
"관계의 11%를 흔들어야 한다"와 "6%면 된다"는 실무적으로 전혀 다른 결론이다.
어느 쪽이 맞는지는 쓰는 도구의 구현에 달려 있다. §10에서 실측으로 확인했듯,
R의 sample_smallworld를 쓸 거라면 0.0577이 옳다.
연습문제 2 (c) — 점수 (z-Scores)
에서 WS를 2000번 돌린 결과와 관측값을 대조한다.
| 축 | 관측 | WS 평균 | sd | 판정 | |
|---|---|---|---|---|---|
| 2.6 | 3.0813 | 0.2408 | 어긋난다 — 실제가 더 짧다 | ||
| 0.35 | 0.3662 | 0.0491 | 맞는다 |
거리 축이 어긋난다. 군집은 거의 완벽하게 맞는다(당연하다 — 를 에 맞춰 정했으니). 그런데 그 에서 WS가 예측하는 거리 3.08보다 실제 학급이 2 표준편차만큼 짧다.
값의 의미: 은 "를 맞추도록 를 골랐으니 맞는 게 당연하다"는 동어반복에 가깝다. 진짜 검정은 에서 일어난다 — 한 축을 맞춘 뒤 모형이 남은 축에 대해 내놓는 예측이 데이터와 맞는가? 여기서는 맞지 않는다.
연습문제 2 (d) — 그래서 이 학급은 어떤 학급인가 (Reading the Misfit)
세 모형과 실제를 나란히 놓는다.
| 모형 | 읽기 | ||
|---|---|---|---|
| 격자 | 4.138 | 0.500 | 너무 멀고 너무 뭉쳤다 |
| WS | 3.081 | 0.366 | 뭉침은 맞는데 아직 멀다 |
| 실제 학급 | 2.600 | 0.350 | 뭉쳐 있으면서 더 좁다 |
| 무작위 | 2.487 | 0.134 | 충분히 좁지만 안 뭉쳤다 |
실제 학급의 거리 2.600은 무작위 그래프의 2.487에 거의 닿아 있다 (격자→무작위 구간 에서 무작위 쪽으로 93% 지점). 그런데 군집계수는 무작위의 2.6배다.
왜 그런가 — §12에서 가라테가 보인 것과 정확히 같은 현상이다. 가라테의 실제 거리 2.408은 WS 의 2.602보다도 짧았고, 그 원인은 차수 17짜리 허브였다. WS는 전원의 차수를 4 근처에 묶어 두므로 이런 지름길을 만들 수 없다.
이 학급도 마찬가지로 차수가 큰 학생 몇 명이 있을 것이다. 친구가 10명 넘는 아이 두세 명이 서로 이어져 있으면, 그들만으로 반 전체가 3홉 안에 들어온다. 그러면서 각자의 모둠 안에서는 여전히 삼각형이 촘촘하다 — 뭉침과 좁음을 동시에 얻는 방법이다.
이 말해 주는 것: 이 반에는 "연결자"가 있다. 자리 배치나 모둠 편성만으로 설명되는 것보다 반이 더 좁다면, 그건 여러 모둠에 두루 걸쳐 있는 학생이 존재한다는 뜻이다.
진단 절차로 쓸 수 있다: ① 관측 로 를 맞춘다 ② 그 에서 WS가 예측하는 을 구한다 ③ 실제 이 예측보다 유의하게 짧으면 허브형 학생을 찾아본다 ④ 실제 이 예측보다 길면 반이 모둠별로 갈라져 있다는 신호다.
주의: 이 진단은 "누가 허브인가"까지는 말해 주지 않는다. 그건 차수와 중심성을 직접 봐야 한다 — 4-5의 주제다.
다음 단원 예고 — 4-5. 오늘 WS는 군집계수 축을 정복했지만
차수 축에서는 오히려 보다 나빴다(분산 0 ~ 3.45 대 실제 15.04).
그리고 연습문제 2와 §12가 똑같은 결론에 도달했다: 남은 것은 전부 차수 분포 문제다.
4-5에서는 차수 분포를 정면으로 잰다 — 히스토그램, 누적분포, 로그–로그 그림,
그리고 "허브가 있다"는 말을 어떻게 측정 가능한 진술로 바꿀 것인가.