차수 분포를 읽는 법 — '허브가 있다'를 숫자로
SNA 이론 · 단계별 학습 차례

단원 4-5Reading the Degree Distribution

차수 분포를 읽는 법 — '허브가 있다'를 숫자로

SNA 이론 · 단계별 학습STAGED+ 스터디
오늘 배우는 것 한 줄 요약
4-3과 4-4가 똑같은 자리에서 끝났다. G(n,p)G(n,p)도 WS도 차수 축을 못 맞힌다 — 가라테의 차수 분산은 15.04인데 두 모형은 3.45와 0을 내놓았다.
그런데 "허브가 있다"는 말은 아직 느낌이다. 오늘 그것을 측정 가능한 진술로 바꾼다.
도구는 세 가지다: ① CCDF Fˉ(k)=P(Kk)\bar F(k)=P(K\ge k) — 히스토그램이 꼬리에서 구멍투성이가 될 때도 매끄럽다 ② 로그–로그 기울기 — 기울기 +1+\,1을 뒤집으면 지수 γ\gamma가 나온다 ③ 같은 평균의 푸아송과의 대조 — "무작위였다면 몇 명이었을까".
그리고 오늘의 가장 중요한 교훈은 부정적인 것이다: 어떤 자료든 거듭제곱으로 적합은 된다. 적합됐다는 사실 자체는 증거가 아니다.

1. 오늘의 질문: 느낌을 숫자로 (From a Feeling to a Number)

지난 두 단원의 성적표를 한 장으로 합치면 이렇게 된다.

모형거리 LL군집 CC차수 분산최대 차수
가라테 (실제, n=34n=34)2.4080.255715.0417
G(n,p)G(n,p) 무작위 4-3맞힘틀림3.92≈ 9.2
WS 고리 격자 p=0p=0 4-4틀림맞힘04
WS p0.1p\approx0.1 4-4맞힘맞힘0.73≈ 5.9
WS p=1p=1 (끝까지 재배선) 4-4맞힘틀림3.41≈ 8.2

WS는 손잡이 하나로 거리와 군집을 동시에 맞혔다. 그런데 오른쪽 두 열은 그대로다. 격자는 모두가 차수 4라 분산이 정확히 0이고, 거리·군집을 맞히는 p0.1p \approx 0.1에서도 분산은 겨우 0.73이다. 손잡이를 끝까지 돌려 p=1p=1로 만들어도 3.41에서 멈춘다. 실제는 15.04다. 네 배 넘게 모자란다.

이 차이가 뭘 뜻하는지는 이미 안다. 가라테에는 차수 17인 사람(34번, 사범)과 차수 16인 사람(1번, 관장)이 있다. 학급으로 치면 반 전체의 절반과 이름을 트고 지내는 학생이다. 그런 사람이 있는 반과 없는 반은 다른 반이다.

오늘 답해야 할 질문은 이것이다.
"이 반에는 허브가 있다"는 말을 어떻게 재는가?
최대 차수 하나만 보면 될까? (안 된다 — 반 크기에 따라 최대 차수는 저절로 커진다)
평균 차수는? (안 된다 — 평균은 간선 수만 말해 줄 뿐 쏠림은 말하지 않는다)
필요한 건 분포 전체의 모양이다. 그 모양을 보는 법이 오늘의 주제다.

2. 정의 — 차수 분포와 CCDF (Degree Distribution and the CCDF)

2-1. 세 가지를 구별한다 (Distinguishing Three Things)

정점이 nn개인 그래프에서 deg(i)\deg(i)ii번의 차수라 하자. 세 가지 함수를 정의한다.

기호정의읽는 법쓰임새
nkn_k#{i:deg(i)=k}\#\{i : \deg(i) = k\}차수가 정확히 kk인 사람 수원자료
P(k)P(k)nk/nn_k / n차수가 정확히 kk일 확률
= 차수 분포
히스토그램. 이론 공식은 대개 이 모양
Fˉ(k)\bar F(k)1n#{i:deg(i)k}\dfrac{1}{n}\#\{i : \deg(i) \ge k\}차수가 kk 이상일 확률
= 상보누적분포(CCDF)
그림으로 볼 때는 거의 항상 이것

셋은 서로에게서 복원된다.

Fˉ(k)  =  jkP(j),P(k)  =  Fˉ(k)Fˉ(k+1),Fˉ(0)=1 \bar F(k) \;=\; \sum_{j \ge k} P(j), \qquad P(k) \;=\; \bar F(k) - \bar F(k+1), \qquad \bar F(0) = 1

검산은 두 개를 늘 같이 쓴다.

knk=n(사람 수),kknk=2m(악수 정리) \sum_k n_k = n \quad(\text{사람 수}), \qquad \sum_k k\,n_k = 2m \quad(\text{악수 정리})
이름 주의. Fˉ\bar F상보누적분포함수(complementary CDF, CCDF)다. "생존 함수(survival function)"라고도 부른다. 보통 말하는 누적분포 F(k)=P(Kk)F(k)=P(K \le k)와는 방향이 반대다: Fˉ(k)=1F(k1)\bar F(k) = 1 - F(k-1).
이상(\ge) 쪽을 쓰는가? 우리가 알고 싶은 건 꼬리, 곧 "차수가 큰 쪽에 몇 명이 있느냐"이기 때문이다.

2-2. 거듭제곱 법칙과 지수 γ\gamma (Power Laws and the Exponent γ)

차수 분포가 거듭제곱 법칙(power law)을 따른다는 것은

P(k)    kγ(kkmin) P(k) \;\propto\; k^{-\gamma} \qquad (k \ge k_{\min})

이라는 뜻이다. γ\gamma지수(exponent)라 부른다. 왜 이 모양이 특별한가? 양변에 로그를 씌우면

logP(k)=상수γlogk \log P(k) = \text{상수} - \gamma \log k

로그–로그 축에서 직선이 된다. 기울기가 γ-\gamma다. 직선이라는 것은 눈으로 판정하기 가장 쉬운 모양이고, 기울기 하나로 요약된다는 뜻이기도 하다.

"척도 없다(scale-free)"는 말의 뜻. 푸아송 분포에는 고유 척도가 있다 — 평균 λ\lambda다. 차수는 λ\lambda 근처에 몰리고, λ\lambda의 서너 배를 넘으면 사실상 아무도 없다. "평균적인 학생"이 실제로 존재한다.
거듭제곱 분포에는 그런 척도가 없다. kk를 10배 늘리면 P(k)P(k)는 항상 10γ10^{-\gamma}배가 된다 — k=2k=2에서 20으로 가든 k=20k=20에서 200으로 가든 같은 비율이다. 그래서 "이 정도가 보통"이라고 말할 지점이 없다. 그것이 척도 없다는 말의 내용이다.

3. 손 계산 ① 가라테의 CCDF — 34명 전부 세기 (The Karate CCDF, Counted by Hand)

가라테 클럽 34명의 차수를 작은 것부터 늘어놓는다.

1  2 2 2 2 2 2 2 2 2 2 2  3 3 3 3 3 3  4 4 4 4 4 4  5 5 5  6 6  9  10  12  16  17

3-1. nkn_k를 센다 (Counting n_k)

같은 값끼리 묶어 세면 이렇게 된다. 값이 없는 차수(7, 8, 11, 13, 14, 15)는 nk=0n_k=0이다 — 빠뜨리지 말고 적어 둔다.

kk1234567891011121314151617
nkn_k111663200110100011

검산 1 — 사람 수: 0인 칸도 전부 더한다.

knk=1+11+6+6+3+2+0+0+1+1+0+1+0+0+0+1+1=34   \sum_k n_k = 1+11+6+6+3+2+0+0+1+1+0+1+0+0+0+1+1 = 34 \;\checkmark

검산 2 — 악수 정리: 각 항을 전부 전개한다.

kknk=1 ⁣ ⁣1+2 ⁣ ⁣11+3 ⁣ ⁣6+4 ⁣ ⁣6+5 ⁣ ⁣3+6 ⁣ ⁣2+7 ⁣ ⁣0+8 ⁣ ⁣0+9 ⁣ ⁣1+10 ⁣ ⁣1+11 ⁣ ⁣0+12 ⁣ ⁣1+13 ⁣ ⁣0+14 ⁣ ⁣0+15 ⁣ ⁣0+16 ⁣ ⁣1+17 ⁣ ⁣1=1+22+18+24+15+12+0+0+9+10+0+12+0+0+0+16+17=156  =  2m  =  2×78   \begin{aligned} \sum_k k\,n_k &= 1\!\cdot\!1 + 2\!\cdot\!11 + 3\!\cdot\!6 + 4\!\cdot\!6 + 5\!\cdot\!3 + 6\!\cdot\!2 + 7\!\cdot\!0 + 8\!\cdot\!0 \\ &\quad + 9\!\cdot\!1 + 10\!\cdot\!1 + 11\!\cdot\!0 + 12\!\cdot\!1 + 13\!\cdot\!0 + 14\!\cdot\!0 + 15\!\cdot\!0 + 16\!\cdot\!1 + 17\!\cdot\!1 \\ &= 1 + 22 + 18 + 24 + 15 + 12 + 0 + 0 + 9 + 10 + 0 + 12 + 0 + 0 + 0 + 16 + 17 \\ &= 156 \;=\; 2m \;=\; 2 \times 78 \;\checkmark \end{aligned}

3-2. CCDF를 만든다 — 위에서부터 누적 (Building the CCDF from the Top Down)

Fˉ(k)\bar F(k)를 만드는 가장 안전한 방법은 가장 큰 차수부터 아래로 누적하는 것이다. N(k)N(\ge k)를 "차수 kk 이상인 사람 수"라 하면 N(k)=N(k+1)+nkN(\ge k) = N(\ge k{+}1) + n_k다.

kknkn_k누적 계산 N(k)=N(k+1)+nkN(\ge k) = N(\ge k{+}1) + n_kN(k)N(\ge k)Fˉ(k)\bar F(k)
1710+10 + 111/34=0.0294121/34 = 0.029412
1611+11 + 122/34=0.0588242/34 = 0.058824
1502+02 + 020.0588240.058824
1402+02 + 020.0588240.058824
1302+02 + 020.0588240.058824
1212+12 + 133/34=0.0882353/34 = 0.088235
1103+03 + 030.0882350.088235
1013+13 + 144/34=0.1176474/34 = 0.117647
914+14 + 155/34=0.1470595/34 = 0.147059
805+05 + 050.1470590.147059
705+05 + 050.1470590.147059
625+25 + 277/34=0.2058827/34 = 0.205882
537+37 + 31010/34=0.29411810/34 = 0.294118
4610+610 + 61616/34=0.47058816/34 = 0.470588
3616+616 + 62222/34=0.64705922/34 = 0.647059
21122+1122 + 113333/34=0.97058833/34 = 0.970588
1133+133 + 13434/34=1.00000034/34 = 1.000000

검산 3: 가장 아래 Fˉ(1)=1\bar F(1) = 1이어야 한다 — 모두가 차수 1 이상이니까(가라테에는 고립 정점이 없다). \checkmark

3-3. 로그를 씌운다 (Taking Logarithms)

nk0n_k \neq 0인 차수만 골라 log10\log_{10}을 취한다. 이게 로그–로그 그림에 찍히는 점들이다.

kkN(k)N(\ge k)Fˉ(k)\bar F(k)log10k\log_{10} klog10Fˉ(k)\log_{10}\bar F(k)
1341.0000000.00000.0000
2330.9705880.3010−0.0130
3220.6470590.4771−0.1891
4160.4705880.6021−0.3274
5100.2941180.6990−0.5315
670.2058820.7782−0.6864
950.1470590.9542−0.8325
1040.1176471.0000−0.9294
1230.0882351.0792−1.0544
1620.0588241.2041−1.2304
1710.0294121.2304−1.5315

점이 11개다. 34명짜리 네트워크에서 나온 점이 11개. 이 숫자를 기억해 두자 — §12에서 다시 쓴다.

4. 왜 히스토그램이 아니라 CCDF인가 (Why Not a Histogram)

§3 표에서 이미 이유가 보인다. k=7,8,11,13,14,15k=7,8,11,13,14,15에서 nk=0n_k=0이었다. P(k)=0P(k)=0이면 logP(k)=log0=\log P(k) = \log 0 = -\infty라서 그 점은 로그–로그 그림에 아예 찍히지 않는다.

가라테는 작아서 구멍이 6개뿐이었다. 큰 네트워크에서는 이게 재앙이 된다. BA 모형(다음 단원)으로 만든 n=5000n=5000 네트워크의 차수 30 이상 구간을 실제로 세어 보자.

kk303132333435363738394041424344
nkn_k (히스토그램)021010130000301
N(k)N(\ge k) (CCDF)222220191918181714141414141111

차수 30~59 구간 30칸 중 18칸이 0이다. 그 구간에는 사람이 19명이나 있는데도 그렇다. 더 위로 가면 완전히 무너진다 — 차수 60~80 구간 21칸은 전부 0인데, 차수 60 이상인 사람은 3명 있다. 어디에 있는가? 82, 82, 135에 있다.

구멍의 정체. 꼬리에서는 사람이 희소하다. k30k \ge 30인 사람 22명이 서로 다른 차수 14가지에 흩어져 있다. 평균 1.6명씩이다. 표본이 1~3명인 칸의 P(k)P(k)는 통계라기보다 잡음이다.
CCDF는 이 문제가 원리적으로 없다. Fˉ(k)\bar F(k)단조 감소이고, 자료 범위 안에서는 절대 0이 되지 않는다(적어도 최대 차수인 사람 1명은 항상 세어지니까). 그래서 모든 kk에서 점이 찍힌다.
CCDF의 대가. 공짜는 아니다. 누적을 하면 이웃한 점들이 같은 사람을 공유하므로 점끼리 강하게 상관된다. 그래서 CCDF 위의 점들에 그냥 최소제곱 회귀를 돌려 기울기를 얻는 것은 통계적으로 엄밀하지 않다(오차가 독립이 아니다). 그림을 보는 데는 CCDF가 압도적으로 낫고, 지수를 추정할 때는 최대우도법을 쓴다 — §11에서 다룬다.

5. 손 계산 ② 무작위였다면 몇 명이었을까 (What Poisson Would Have Predicted)

"허브가 있다"를 재는 가장 직접적인 방법: 같은 크기·같은 간선 수의 무작위 그래프라면 그런 사람이 몇 명 나왔을까를 계산해서 실제와 비교하는 것이다.

4-1에서 G(n,p)G(n,p)의 차수가 근사적으로 푸아송을 따른다는 걸 봤다.

PPoisson(k)=eλλkk!,λ=2mn=15634=4.588235 P_{\text{Poisson}}(k) = e^{-\lambda}\,\frac{\lambda^k}{k!}, \qquad \lambda = \frac{2m}{n} = \frac{156}{34} = 4.588235

5-1. 재귀로 손 계산한다 (Hand Calculation by Recursion)

k!k!를 매번 계산할 필요는 없다. 이웃한 항끼리 비를 보면

P(k)P(k1)=eλλk/k!eλλk1/(k1)!=λk \frac{P(k)}{P(k-1)} = \frac{e^{-\lambda}\lambda^{k}/k!}{e^{-\lambda}\lambda^{k-1}/(k-1)!} = \frac{\lambda}{k}

이므로 P(0)=eλP(0)=e^{-\lambda}에서 시작해 λ/k\lambda/k를 곱해 가면 된다.

kk계산P(k)P(k)기대 인원 34P(k)34\,P(k)실제 nkn_k실제/기대
0e4.588235e^{-4.588235}0.01017080.345800.00
10.0101708×4.58823510.0101708 \times \frac{4.588235}{1}0.04666601.586610.63
20.0466660×4.58823520.0466660 \times \frac{4.588235}{2}0.10705733.6399113.02
30.1070573×4.58823530.1070573 \times \frac{4.588235}{3}0.16373465.567061.08
40.1637346×4.58823540.1637346 \times \frac{4.588235}{4}0.18781326.385760.94
50.1878132×4.58823550.1878132 \times \frac{4.588235}{5}0.17234635.859830.51
60.1723463×4.58823560.1723463 \times \frac{4.588235}{6}0.13179424.481020.45
70.08638612.937100
80.04954501.684500
90.02525820.858811.16
100.01158910.394012.54
120.00184830.0628115.9
160.00001880.000637611568
170.00000510.000172115811

5-2. 꼬리 전체를 한 번에 (The Whole Tail at Once)

낱개보다 꼬리 전체를 묻는 게 해석이 쉽다. "차수 16 이상인 사람"의 기대 인원은

P(K16)=1P(K15)=10.99997449=2.5507×10534×P(K16)=34×2.5507×105=0.00086724 명 \begin{aligned} P(K \ge 16) &= 1 - P(K \le 15) = 1 - 0.99997449 = 2.5507\times10^{-5} \\ 34 \times P(K \ge 16) &= 34 \times 2.5507\times10^{-5} = \mathbf{0.00086724}\ \text{명} \end{aligned}

실제는 2명이다. 뒤집어 읽으면 더 선명하다.

10.000867241153 \frac{1}{0.00086724} \approx \mathbf{1153}
이 숫자의 뜻. 34명짜리 집단이 정말로 무작위였다면, 차수 16 이상인 사람 한 명을 보려면 그런 집단을 평균 1153개 봐야 한다. 가라테 클럽 하나에 이 있다.
학급으로 옮기면: 34명 학급 1153개 — 학교 30개 분량을 뒤져야 한 명 나올 사람이, 이 반에 두 명 있다는 뜻이다.
주의 — 작은 nn에서 푸아송은 꼬리를 부풀린다. 푸아송은 G(n,p)G(n,p)근사일 뿐이다. 정확한 분포는 이항분포 Bin(n1,  p)\text{Bin}(n-1,\;p)로, 차수의 상한이 n1=33n-1=33으로 막혀 있다. 그래서 분산이 더 작다: 이항 3.950 대 푸아송 4.588.
k16k \ge 16을 이항으로 다시 계산하면 기대 인원 0.00007210.0000721명 → 13,863개 학급당 한 명이다. 푸아송 계산(1153)보다 12배 더 극단적이다. 실제로 G(34,78)G(34,78)을 2000번 만들어 봤더니 최대 차수가 16 이상인 경우는 0회였다(최대치가 14).
결론의 방향은 같다 — 오히려 더 강해진다. 다만 "1153"이라는 수를 인용할 때는 그것이 보수적인(약하게 잡은) 추정임을 알고 있어야 한다.

5-3. 같은 계산을 FMH에 (The Same Calculation on FMH)

FMH(가상의 고등학교, n=1461n=1461, m=974m=974, λ=4/3=1.3333\lambda = 4/3 = 1.3333)에 똑같이 해 보면 다른 이야기가 나온다.

kk012345678
실제 nkn_k52440327112885301352
푸아송 기대385.1513.5342.3152.150.713.53.00.570.095
실제/기대1.360.780.790.841.682.224.338.7320.9

두 끝이 동시에 부풀어 있다.

  • 왼쪽 끝: 친구가 0명인 학생이 524명 — 전교생의 35.9%다. 무작위였다면 385명(26.4%)이어야 했다. 1.36배 많다.
  • 오른쪽 끝: 차수 8인 학생 2명은 무작위 기대치 0.095명의 21배다. 꼬리 전체로 보면 P(K8)×1461=0.112P(K\ge8)\times1461 = 0.112명 기대에 실제 2명.

그러나 가라테와 결정적으로 다른 점이 있다. FMH의 최대 차수는 8이다. 1461명이나 되는데 친구가 9명 이상인 학생이 단 한 명도 없다. 가라테는 34명 중에 17명과 연결된 사람이 있었는데 말이다.

교실 해석 — 두 학교는 다른 방식으로 무작위가 아니다.
가라테형: 소수의 사람에게 관계가 극단적으로 쏠린다. 문제는 중심의 과부하와 그 사람이 빠졌을 때의 붕괴다.
FMH형: 쏠림은 약한데(최대 8) 바닥이 두껍다. 문제는 허브가 아니라 친구가 하나도 없는 학생 524명이다.
같은 "무작위가 아니다"라도 개입 지점이 정반대다. 그래서 지표 하나(예: 최대 차수)만 보면 안 되고 분포 전체를 봐야 한다.

6. 손 계산 ③ 로그–로그 기울기에서 γ\gamma를 뽑는다 — 두 점으로 (Slope to Exponent)

§3-3 표에서 두 점만 골라 기울기를 내 보자. 꼬리를 대표하는 두 점으로 k=4k=4(절반 지점)와 k=17k=17(끝점)을 잡는다.

점 1: k=4k=4, Fˉ(4)=16/34=0.470588\bar F(4) = 16/34 = 0.470588

log104=0.6020600,log100.470588=0.3273589 \log_{10} 4 = 0.6020600, \qquad \log_{10} 0.470588 = -0.3273589

점 2: k=17k=17, Fˉ(17)=1/34=0.029412\bar F(17) = 1/34 = 0.029412

log1017=1.2304489,log100.029412=1.5314789 \log_{10} 17 = 1.2304489, \qquad \log_{10} 0.029412 = -1.5314789

기울기는 세로 변화 나누기 가로 변화다.

기울기=log10Fˉ(17)log10Fˉ(4)log1017log104=1.5314789(0.3273589)1.23044890.6020600=1.20412000.6283889=1.916202 \begin{aligned} \text{기울기} &= \frac{\log_{10}\bar F(17) - \log_{10}\bar F(4)}{\log_{10}17 - \log_{10}4} \\[.3em] &= \frac{-1.5314789 - (-0.3273589)}{1.2304489 - 0.6020600} \\[.3em] &= \frac{-1.2041200}{0.6283889} \\[.3em] &= -1.916202 \end{aligned}

그리고 §7에서 증명할 관계를 쓰면

γ=1기울기=1(1.916202)=2.916202 \gamma = 1 - \text{기울기} = 1 - (-1.916202) = \mathbf{2.916202}
더 예쁜 형태. 분자·분모를 비율로 보면 로그 계산이 거의 필요 없다.
CCDF는 16/341/3416/34 \to 1/34, 즉 1/161/16로 줄었다. kk4174 \to 17, 즉 4.25배로 늘었다. 그러므로 기울기=log10(1/16)log10(4.25)=log1016log104.25=1.20412000.6283889=1.916202 \text{기울기} = \frac{\log_{10}(1/16)}{\log_{10}(4.25)} = \frac{-\log_{10}16}{\log_{10}4.25} = \frac{-1.2041200}{0.6283889} = -1.916202 "kk가 4.25배 될 때 사람 수가 16분의 1로 준다" — 그것이 기울기 1.92-1.92의 내용 전부다.
2.9162.916을 아직 믿지 말 것. 하필 BA 모형의 이론값 γ=3\gamma=3에 가깝게 나왔다. 솔깃하다. 그러나 두 점을 다르게 골랐다면 다른 답이 나온다. 연습문제 2에서 직접 확인하게 될 텐데, 미리 결과만 말하면 같은 가라테 자료에서 γ\gamma2.25에서 2.92까지 움직인다. "어느 두 점을 골랐는가"가 결론을 좌우한다는 뜻이다. §10~§12가 이 문제를 정면으로 다룬다.

7. 왜 γ=1기울기\gamma = 1 - \text{기울기}인가 (Why the CCDF Slope Is One Less)

§6에서 쓴 관계를 증명한다. 이게 오늘 유일한 "유도"다.

가정: 어떤 kmink_{\min} 이상에서 P(k)=CkγP(k) = C k^{-\gamma}이고 γ>1\gamma > 1이다.

CCDF는 정의상 꼬리의 합이다.

Fˉ(k)=jkP(j)=jkCjγ \bar F(k) = \sum_{j \ge k} P(j) = \sum_{j \ge k} C\,j^{-\gamma}

kk가 충분히 크면 이 합은 적분으로 근사된다.

Fˉ(k)kCxγdx=C[xγ+1γ+1]k=C(0kγ+11γ)(γ>1 이므로 위끝은 0)=Cγ1  k(γ1) \begin{aligned} \bar F(k) &\approx \int_{k}^{\infty} C\,x^{-\gamma}\,dx \\ &= C\left[\frac{x^{-\gamma+1}}{-\gamma+1}\right]_{k}^{\infty} \\ &= C\left(0 - \frac{k^{-\gamma+1}}{1-\gamma}\right) \qquad (\gamma>1\ \text{이므로 위끝은 0})\\ &= \frac{C}{\gamma-1}\;k^{-(\gamma-1)} \end{aligned}

양변에 로그를 씌운다.

logFˉ(k)=logCγ1상수    (γ1)logk \log \bar F(k) = \underbrace{\log\frac{C}{\gamma-1}}_{\text{상수}} \;-\; (\gamma-1)\log k

즉 CCDF의 로그–로그 기울기는 (γ1)=1γ-(\gamma-1) = 1-\gamma다. 뒤집으면

  γ  =  1(CCDF 로그–로그 기울기)   \boxed{\;\gamma \;=\; 1 - \text{(CCDF 로그–로그 기울기)}\;}

7-1. 수치로 확인 (Numerical Check)

순수한 거듭제곱 P(k)kγP(k) \propto k^{-\gamma}k=1,,105k=1,\dots,10^5에서 만들어 CCDF의 기울기를 실제로 재 보면:

참값 γ\gammak=10100k=10\to100 기울기11-기울기k=1001000k=100\to1000 기울기11-기울기
2.5−1.52942.5294−1.50342.5034
3.0−2.03903.0390−2.00403.0040
3.5−2.54853.5485−2.50493.5049

세 경우 모두 1기울기1-\text{기울기}가 참값으로 돌아온다. 그리고 kk가 클수록 정확해진다 — 합을 적분으로 바꾼 근사가 큰 kk에서 더 잘 맞기 때문이다.

왜 이게 실무적으로 중요한가. 흔한 실수는 CCDF를 그려 놓고 기울기를 그대로 γ\gamma라고 부르는 것이다. 그러면 γ\gamma를 정확히 1만큼 작게 보고한다. 가라테에서 1.92-1.92γ\gamma라고 하면 1.92지만, 옳은 값은 2.92다. "직선이 얼마나 가파른가"를 보고할 때는 어느 함수의 기울기인지를 반드시 같이 밝혀야 한다.

8. R 검증 ① 같은 분포를 세 가지 눈으로 (Three Views of One Distribution)

같은 자료를 히스토그램 / 선형 CCDF / 로그–로그 CCDF로 각각 보면 결론이 얼마나 달라지는지 본다. 비교 대상은 두 개다.

set.seed(301)
gba <- sample_pa(5000, power=1, m=2, directed=FALSE)  # BA (다음 단원)
ger <- sample_gnp(5000, 4/4999)                       # ER 무작위
c(mean=mean(degree(gba)), max=max(degree(gba)), var=var(degree(gba)))
#   mean      max      var
#  3.9988 135.0000  21.1654
c(mean=mean(degree(ger)), max=max(degree(ger)), var=var(degree(ger)))
#   mean      max      var
#  4.0020  15.0000   4.1040

평균은 둘 다 4.0으로 똑같다. 간선 수도 사실상 같다. 그런데:

평균 차수최대 차수차수 분산상위 1% 가 가진 간선 비율
BA3.99913521.178.72%
ER 무작위4.002154.102.57%

최대 차수가 9배 차이 난다. 평균이 같은데.

8-1. 세 눈으로 본 CCDF (The CCDF Through Three Lenses)

kk1248163264128
BA Fˉ(k)\bar F(k)1.0000001.0000000.3344000.0944000.0204000.0040000.0006000.000200
ER Fˉ(k)\bar F(k)0.9816000.9060000.5626000.0536000000

kk가 두 배씩 커질 때 BA의 CCDF를 보라: 0.33440.09440.02040.00400.00060.3344 \to 0.0944 \to 0.0204 \to 0.0040 \to 0.0006. 매번 대략 4분의 1씩 준다. kk가 2배일 때 222^{-2}배 — 이게 로그–로그에서 기울기 2-2, 곧 γ3\gamma \approx 3이라는 뜻이다(§7).

ER은 k=16k=16에서 절벽이다. 5000명 중 차수 16 이상이 한 명도 없다. 로그–로그 그림에서는 아예 선이 끊긴다.

같은 두 분포를 히스토그램, 선형 CCDF, 로그로그 CCDF로 본 세 그림
같은 자료, 세 가지 눈. 왼쪽(히스토그램)에서는 두 분포가 똑같아 보이고 꼬리가 보이지 않는다. 가운데(선형 눈금 CCDF)에서도 꼬리가 축에 붙어 버린다. 오른쪽(로그–로그 CCDF)에서야 BA는 직선, ER은 절벽으로 갈라진다.
왼쪽 그림이 위험한 이유. 히스토그램에서 두 분포는 거의 구별되지 않는다. 둘 다 낮은 차수에 몰려 있고, 차수 135인 사람은 5000명 중 한 명이라 막대 높이가 1/5000=0.00021/5000 = 0.0002 — 화면에서 0픽셀이다.
그런데 그 한 명의 차수 135는 전체 차수 합 19,994의 0.675%다. 5000명이 똑같이 나눠 가졌다면 한 사람 몫은 1/5000=0.02%1/5000 = 0.02\%여야 하니 33.8배를 혼자 갖고 있는 셈이다(= 최대 차수 / 평균 차수).
중요한 것이 안 보이는 그림이 히스토그램이다.

9. R 검증 ② 실제 학교 두 곳 (Two Real Schools)

가라테와 FMH의 로그로그 CCDF, 같은 평균의 푸아송 곡선과 대조
실제 학교 네트워크의 로그–로그 CCDF. 점선은 같은 평균의 푸아송이 예측하는 곡선이다. 가라테(초록)는 푸아송보다 확실히 위에 있지만 꼬리를 이루는 점이 4개뿐이고, FMH(보라)는 최대 차수 8에서 뚝 끊긴다.

그림에서 읽을 것은 세 가지다.

  1. 가라테는 푸아송보다 위에 있다. k9k \ge 9 구간에서 실제 곡선이 푸아송 점선보다 한참 위다. 꼬리가 두껍다는 뜻이고, §5의 "1153개 학급"이 그림으로 보이는 것이다.
  2. 그런데 점이 너무 적다. k9k \ge 9에 있는 점은 k=9,10,12,16,17k=9,10,12,16,17 다섯 개, 사람으로는 5명이다. 직선을 긋기에 충분한가? 이 질문이 §12다.
  3. FMH는 두껍지만 짧다. 왼쪽(작은 kk)에서는 푸아송보다 위에 있는데 k=8k=8에서 그냥 끝난다. 거듭제곱의 특징인 "계속 이어지는 꼬리"가 없다.

회귀 기울기로 요약하면:

자료점 개수최대 차수CCDF 회귀 기울기γ=1\gamma = 1-기울기
가라테 (n=34n=34)1717−1.28132.281
FMH 차수>0 (n=937n=937)88−2.82173.822
BA (n=5000n=5000)135135−2.20873.209
ER (n=5000n=5000)1515−3.50304.503

BA만 이론값(γ=3\gamma=3)에 가깝게 나왔고, 나머지는 신뢰할 만한 점 개수가 아니다. 특히 ER에서도 "γ=4.503\gamma=4.503"이라는 숫자가 나오기는 한다는 데 주목하자. 푸아송 자료인데도 말이다. 이것이 §11의 주제다.

10. 함정 ① 구간을 어떻게 나누느냐가 결론을 바꾼다 (Binning Changes the Conclusion)

히스토그램을 굳이 쓰겠다면 구간(bin)을 넓게 잡아 구멍을 메우는 방법이 있다. 그런데 어떻게 넓히느냐가 그림을 완전히 바꾼다. 같은 BA 자료다.

10-1. 등간격 구간 — 폭 10씩 (Equal-Width Bins)

구간(0,10](10,20](20,30](30,40](40,50](50,60](60,70](70,80](80,90](90,100](130,140]
인원476618626883002001

첫 칸에 95.3%가 들어갔다. 정작 알고 싶은 구조(차수 1과 2와 4의 차이)가 한 칸 안에서 전부 뭉개졌다. 그리고 오른쪽은 여전히 0투성이다. 양쪽 모두 실패다.

10-2. 로그 구간 — 2배씩 (Logarithmic Bins)

구간(0,1](1,2](2,4](4,8](8,16](16,32](32,64](64,128](128,256]
인원023061550786269701621

이제 모든 칸에 사람이 있고(첫 칸 제외 — BA는 m=2m=2라 최소 차수가 2다), 인원이 칸마다 대략 일정한 비율로 준다: 230615507862697016212306 \to 1550 \to 786 \to 269 \to 70 \to 16 \to 2 \to 1. 이웃 칸의 비를 보면 0.672 → 0.507 → 0.342 → 0.260 → 0.2294분의 1을 향해 내려간다(마지막 두 칸은 사람이 2명, 1명뿐이라 요동친다). kk가 2배일 때 인원이 1/41/4이라는 건 §8에서 본 것과 같은 이야기다 — γ3\gamma \approx 3이면 폭 (a,2a](a, 2a] 칸의 인원이 a2a^{-2}에 비례하기 때문이다.

로그 구간을 쓸 때의 필수 보정. 위 표를 그대로 로그–로그에 찍으면 안 된다. 칸의 폭이 다르기 때문이다 — (1,2]는 폭 1인데 (64,128]은 폭 64다. 확률밀도로 바꾸려면 인원을 칸 폭으로 나눠야 한다.
이 보정을 빼먹으면 기울기가 정확히 1만큼 완만해진다 — §7의 실수와 같은 크기의 오차다.
그래서 CCDF를 쓰는 게 낫다. CCDF에는 구간이라는 개념 자체가 없으므로 구간 폭 보정도, 구간 선택의 자의성도 없다.
교실 해석. 이건 통계 기술 문제만이 아니다. "우리 반 교우관계 조사 결과"를 친구 수 0~2명 / 3~5명 / 6명 이상으로 묶어 보고하는 순간, 묶는 방식이 결론을 만든다. 3~5명을 한 칸으로 묶으면 그 안의 차이가 사라지고, "6명 이상"을 마지막 칸으로 두면 15명인 학생과 6명인 학생이 같은 칸에 들어간다.
쏠림을 보려면 묶지 말고 "친구 kk명 이상인 학생이 몇 %"kk마다 적어라. 그게 CCDF이고, 자의적 선택이 없다.

11. 함정 ② 무엇이든 거듭제곱으로 적합된다 (Anything Can Be Fitted)

igraph에는 최대우도로 γ\gammakmink_{\min}을 동시에 추정하는 함수가 있다. CCDF 회귀보다 통계적으로 옳은 방법이다(§4의 상관 문제가 없다).

fit_power_law(degree(gba), implementation="plfit", p.value=TRUE)
기본값 함정. p.value의 기본값은 FALSE다. 그냥 부르면 $KS.p비어서 나온다(numeric(0)). 검정이 실패한 게 아니라 애초에 계산하지 않은 것이다. p값이 필요하면 반드시 p.value=TRUE를 명시해야 한다 — 부트스트랩을 돌리므로 느려서 기본값이 꺼져 있다.

네 자료에 전부 돌린 결과다.

자료추정 α\alphakmink_{\min}꼬리에 쓰인 점전체 대비KS 통계량KS pp판정
BA3.18484729.4%0.02070.524거듭제곱 맞음 (이론 3)
ER 무작위14.73810471.0%0.04410.041숫자는 나오지만 무의미
가라테2.12623397.1%0.10000.119기각 못 함 ≠ 입증
FMH 차수>05.497413514.4%0.03760.084기각 못 함 ≠ 입증

11-1. 이 표를 읽는 법 (How to Read This Table)

ER 줄을 보라. 우리가 직접 만든 푸아송 자료인데도 α=14.738\alpha = 14.738이라는 답이 나왔다. 함수는 거절하지 않는다. 언제나 숫자를 준다.

그렇다면 그 숫자가 무의미하다는 건 어떻게 아는가? 세 가지 신호가 있다.

  1. α\alpha가 터무니없이 크다. 실제 네트워크의 γ\gamma는 보통 2~3 사이다. 14.7은 "kk가 2배 되면 확률이 214.741/270002^{-14.74} \approx 1/27000배"라는 뜻으로, 사실상 지수적으로 끊긴다는 말이다 — 거듭제곱이 아니라 절벽의 서술이다.
  2. kmink_{\min}이 너무 높아 자료의 1%만 쓴다. 5000개 중 47개. 그 47개만 보면 어떤 곡선이든 직선처럼 보인다.
  3. KS p=0.041p = 0.041로 실제로 기각된다. 유의수준 5%에서 "거듭제곱이다"라는 가설이 탈락했다.

그리고 가라테 줄을 보라. p=0.119p = 0.119로 기각되지 않았다. 그런데 이것을 "가라테는 거듭제곱이다"의 증거로 읽으면 안 된다.

검정력(power)의 문제. 점이 33개뿐인 자료에서는 어떤 가설도 기각하기 어렵다. 푸아송이라고 해도, 로그정규라고 해도, 지수분포라고 해도 아마 다 기각되지 않을 것이다. 표본이 작으면 검정은 아무것도 구별하지 못한다.
"p>0.05p > 0.05라 기각하지 못했다"는 "맞다"가 아니라 "모르겠다"이다. 자료가 적을수록 이 구별이 중요해진다.

12. 그래서 가라테는 척도 없는 네트워크인가 (Is Karate Scale-Free?)

정직하게 답하자. 그 질문에는 답할 수 없다. 이유는 셋이다.

이유근거 (§ 참조)
① 점이 없다CCDF 점 11개, 그중 k9k \ge 9인 꼬리 점은 5개(§3-3). 직선을 판정하려면 최소 두 자릿수의 kk 범위와 수십 개의 점이 필요하다
② 답이 흔들린다두 점을 어떻게 고르느냐에 따라 γ\gamma2.25~2.92로 움직인다(연습문제 2). 회귀 전체로는 2.28, 최대우도로는 2.13. 셋이 다 다르다
③ 검정이 무력하다KS p=0.119p=0.119는 "거듭제곱이다"가 아니라 "n=34n=34로는 아무것도 못 가른다"는 뜻(§11-1)

12-1. 그래도 말할 수 있는 것 (What Can Still Be Said)

"척도 없다"는 말은 못 한다. 그런데 우리가 실제로 알고 싶은 것은 그게 아니다. 알고 싶은 건 "이 반의 쏠림이 우연으로 설명되는가"이고, 그건 답할 수 있다.

같은 크기(n=34n=34, m=78m=78)의 무작위 그래프 200개를 만들어 각각에 같은 최대우도 적합을 돌린다.

set.seed(502)
er34 <- replicate(200, fit_power_law(degree(sample_gnm(34,78)),
                                     implementation="plfit")$alpha)
range(er34)          # 2.623139 13.896558
mean(er34)           # 6.550893
sum(er34 <= 2.126278)# 0    <- 가라테보다 꼬리가 두꺼운 무작위 그래프의 수
α\alpha해석
가라테 (실제)2.126작을수록 꼬리가 두껍다
무작위 200개 평균6.5513배 이상 가파르다
무작위 200개 최솟값2.623가장 극단적인 무작위조차 가라테에 못 미친다
가라테보다 두꺼운 경우0 / 200 → 경험적 p<0.005p < 0.005
정직한 결론. "가라테는 척도 없는 네트워크다" — 말할 수 없다. 자료가 부족하다.
"가라테의 차수 쏠림은 같은 크기 무작위 그래프 200개 중 단 하나도 재현하지 못했다" — 말할 수 있다. 그리고 이게 우리에게 필요한 전부다.
교실 적용 — 무엇을 보고서에 쓸 것인가.
쓰지 말 것: "우리 반은 척도 없는 네트워크다", "γ=2.9\gamma = 2.9로 나타났다". 25명 자료로 이런 문장을 쓰면 없는 정밀도를 주장하는 것이다.
쓸 것: "친구 10명 이상으로 지목된 학생이 2명 있다. 같은 인원·같은 지목 수의 무작위 배치 200회에서는 한 번도 나오지 않은 값이다."
후자가 더 약한 주장 같지만 반박할 수 없고, 개입으로 이어진다 — 그 2명이 누구인지, 그들이 빠지면 반이 어떻게 되는지로.

13. 한 줄로 줄인 지표 — 분산/평균 (The Dispersion Index)

매번 CCDF를 그릴 수는 없다. 쏠림을 수 하나로 요약해야 할 때가 있다. 가장 쓸 만한 것이 분산지수다.

D  =  Var(K)E[K] D \;=\; \frac{\operatorname{Var}(K)}{\mathbb{E}[K]}

왜 이게 좋은가? 4-1 §8에서 본 푸아송의 성질 때문이다 — 푸아송은 분산이 평균과 같다. 따라서 D=1D = 1"무작위 기준선"이 된다. 눈금이 저절로 붙는다.

네트워크평균 차수차수 분산D=D = 분산/평균최대 차수읽는 법
WS 고리 격자4.0000.0000.0004완전 균등 — 모두가 똑같다
ER 무작위 (n=5000n=5000)4.0024.1041.02515기준선. D1D \approx 1 \checkmark
FMH 전체 (n=1461n=1461)1.3332.0501.5378약한 쏠림
가라테 (n=34n=34)4.58815.0373.27717뚜렷한 쏠림
BA (n=5000n=5000)3.99921.1655.293135극단적 쏠림

0(완전 균등) → 1(무작위) → 3 → 5(극단)로 한 줄에 세워진다. 격자가 정확히 0인 것도 확인해 두자 — 모두가 차수 4이므로 분산이 0이다.

13-1. 같이 볼 지표 — 연결 점유율 (A Companion Measure: Share of Ties)

DD는 단위가 없어 좋지만 직관적이진 않다. 학부모나 동료 교사에게 설명할 때는 "상위 몇 %가 관계의 몇 %를 갖는가"가 훨씬 잘 통한다.

여기서 "관계의 몫"은 차수 합 ideg(i)=2m\sum_i \deg(i) = 2m에서 차지하는 비율로 잰다. 차수를 그냥 더하면 되므로 덧셈이 성립하고, 어떤 묶음에도 적용된다.

네트워크상위 10%의 몫상위 20%1등 한 명완전 평등이라면 1등은
WS 고리 격자 (n=1000n=1000)10.0%20.0%0.100%0.100%
ER 무작위 (n=5000n=5000)19.7%35.1%0.075%0.020%
가라테 (n=34n=34)28.8%48.7%10.897%2.941%
FMH 전체 (n=1461n=1461)33.5%54.5%0.411%0.068%
BA (n=5000n=5000)32.9%47.4%0.675%0.020%

격자에서 상위 10%가 정확히 10%를 갖는 게 완전 평등의 정의다(1등의 몫도 1/n1/n과 같다). 가라테에서는 상위 20%(7명)가 관계의 절반을 갖고, 단 한 사람이 10.9% — 평등할 때 몫(2.94%)의 3.7배 — 를 갖는다.

FMH의 33.5%를 조심해서 읽을 것. FMH의 상위 10%가 33.5%를 갖는 건 허브가 세서가 아니라 바닥에 차수 0이 524명 있어서다. 나눠 가질 사람이 애초에 937명뿐인 것이다. 그 증거가 "1등 한 명" 열이다 — FMH는 0.411%로 가라테(10.897%)의 26분의 1이다.
같은 불평등 수치가 정반대 원인에서 나올 수 있다. 상위 점유율만 보지 말고 DD와 최대 차수를 반드시 같이 볼 것.

14. 교실 적용 (Classroom Application)

① 교우관계 조사에서 실제로 계산할 것 (25명 학급 기준)
지목 자료를 모았다면 순서는 이렇다.
1단계. 차수를 세고 kknk=2m\sum_k k\,n_k = 2m으로 검산한다(§3). 입력 오류가 여기서 걸린다.
2단계. D=D = 분산/평균을 구한다(§13). D1D \approx 1이면 쏠림이 없는 반, D>2D > 2면 쏠림이 있는 반이다.
3단계. kk마다 "친구 kk명 이상인 학생 수"를 적는다 — CCDF다(§3). 학부모 상담에서 그대로 읽어 줄 수 있는 형태다.
4단계. 같은 인원·같은 지목 수로 무작위 배치를 200번 만들어 최대 차수와 DD를 비교한다(§12). 이게 "우연인가"에 대한 유일하게 정직한 답이다.
하지 말 것. γ\gamma를 추정해서 보고하기(§12). 25명으로는 의미가 없다.
② 두 끝을 다르게 다룬다
분포에는 끝이 두 개인데 개입은 완전히 다르다.
오른쪽 끝(허브) — 가라테형. 위험은 과부하단일 실패점이다. 그 학생이 결석하거나 전학 가면 반의 정보 흐름이 끊긴다. 개입: 모둠 편성에서 허브를 분산시키고, 두 번째 층(차수 5~9)에게 역할을 넘긴다.
왼쪽 끝(고립) — FMH형. 위험은 보이지 않는다는 것이다. 차수 0인 학생은 아무에게도 지목되지 않았으므로 관계도 그림에서 점 하나로 떠 있을 뿐이고, 교실에서도 조용해서 문제 학생으로 인식되지 않는다.
개입: 허브와 짝짓지 말 것. 차수 2~3인 중간층과 잇는 편이 안정적으로 붙는다 (허브는 이미 포화 상태라 새 관계에 쓸 시간이 없다).
③ 반을 비교할 때는 DD
1반 평균 친구 수 4.2, 2반 4.5 — 이 비교는 거의 무의미하다. 지목 규칙과 응답률에 좌우된다.
DD는 평균으로 나눈 값이라 규모에 덜 휘둘린다. 1반 D=1.1D=1.1, 2반 D=3.4D=3.4라면 "2반에 관계가 쏠려 있다"는 실질적 정보다.
학년 초·중·말 세 시점의 DD를 기록해 두면 모둠 편성의 효과를 볼 수 있다 — 잘 된 편성은 DD를 내리고 평균은 유지한다.
윤리적 주의. 차수 0인 학생 명단은 가장 민감한 자료다. "우리 반 고립 학생은 3명"이라는 문장이 학생에게 도달하는 순간, 측정이 낙인이 된다. 집계값(DD, CCDF, 인원 수)은 공유하되 개인 식별이 가능한 형태로는 교실에서 언급하지 않는다. 개입은 개인이 아니라 구조(모둠 편성, 역할 배정)를 바꾸는 방식으로 한다.

15. 연습문제 (Exercises)

연습문제 1 — 12명 학급의 차수 분포를 손으로 다 세기
12명 학급에서 교우관계 조사를 했더니 각자의 친구 수(차수)가 이렇게 나왔다.

1, 1, 2, 2, 2, 3, 3, 3, 4, 5, 7, 9

(a) k=0k=0부터 99까지 nkn_k, P(k)P(k), N(k)N(\ge k), Fˉ(k)\bar F(k)를 표로 전부 채워라. nk=0n_k=0인 칸도 빠뜨리지 말 것. 그리고 검산 두 개(nk=n\sum n_k = n, knk=2m\sum k\,n_k = 2m)를 반드시 하라.
(b) 같은 평균의 푸아송이 예측하는 인원 12PPoisson(k)12\,P_{\text{Poisson}}(k)k=0k=0부터 99까지 구하고 실제와 비교하라. P(0)=eλP(0)=e^{-\lambda}에서 시작해 λ/k\lambda/k를 곱해 가는 재귀를 쓸 것(§5-1).
(c) 차수 9인 학생은 무작위였다면 몇 개 학급당 한 명꼴인가?
(d) k=3k=3k=9k=9 두 점으로 CCDF 로그–로그 기울기와 γ\gamma를 구하라.
(e) 분산지수 DD를 구하고 §13 표의 어디에 놓이는지 판정하라.
먼저 풀고 §16 해설과 맞춰 볼 것
연습문제 2 — 같은 자료, 다른 답: γ\gamma는 얼마나 흔들리는가
§3-3의 가라테 CCDF 표를 그대로 쓴다.
(a) Fˉ(5)=0.294118\bar F(5) = 0.294118이다. 이 수를 "34명 중 …"으로 시작하는 문장으로 옮겨라.
(b) k=2k=2k=9k=9 두 점으로 기울기와 γ\gamma를 구하라.
(c) (b)의 답을 §6에서 k=4,k=17k=4, k=17로 구한 γ=2.916\gamma = 2.916과 비교하라. 왜 다른가? 그리고 k=5k=5k=17k=17로도 구해서 세 값을 나란히 놓아라.
(d) 위 세 값과 §9의 회귀값(2.281), §11의 최대우도값(2.126)을 모두 모으면 γ\gamma의 범위는 얼마인가? 이 범위를 근거로, 학급 보고서에 "우리 반은 γ=2.9\gamma = 2.9의 척도 없는 네트워크"라고 쓸 수 있는지 판정하고, 대신 쓸 문장을 하나 제안하라.
먼저 풀고 §16 해설과 맞춰 볼 것

16. 해설과 답 (Solutions)

16-1. 연습문제 1 (a) — 표를 전부 채운다 (Exercise 1(a): Filling In the Table)

무엇을 세는가. 12개의 값 1 1 2 2 2 3 3 3 4 5 7 9을 놓고, 각 kk마다 ① 정확히 kk인 개수(nkn_k) ② kk 이상인 개수(N(k)N(\ge k))를 센다. N(k)N(\ge k)위에서부터 누적하는 것이 안전하다.

kk해당 학생nkn_kP(k)=nk/12P(k)=n_k/12누적 N(k)=N(k+1)+nkN(\ge k)=N(\ge k{+}1)+n_kN(k)N(\ge k)Fˉ(k)\bar F(k)
9910.0833330+10+111/12=0.0833331/12=0.083333
800.0000001+01+010.0833330.083333
7710.0833331+11+122/12=0.1666672/12=0.166667
600.0000002+02+020.1666670.166667
5510.0833332+12+133/12=0.2500003/12=0.250000
4410.0833333+13+144/12=0.3333334/12=0.333333
33,3,330.2500004+34+377/12=0.5833337/12=0.583333
22,2,230.2500007+37+31010/12=0.83333310/12=0.833333
11,120.16666710+210+21212/12=1.00000012/12=1.000000
000.00000012+012+0121.0000001.000000

검산 1 — 사람 수. 0인 칸까지 전부 더한다.

0+2+3+3+1+1+0+1+0+1=12   0+2+3+3+1+1+0+1+0+1 = 12 \;\checkmark

검산 2 — 악수 정리. 0인 항도 생략하지 않는다.

kknk=0 ⁣ ⁣0+1 ⁣ ⁣2+2 ⁣ ⁣3+3 ⁣ ⁣3+4 ⁣ ⁣1+5 ⁣ ⁣1+6 ⁣ ⁣0+7 ⁣ ⁣1+8 ⁣ ⁣0+9 ⁣ ⁣1=0+2+6+9+4+5+0+7+0+9=42  =  2mm=21   \begin{aligned} \sum_k k\,n_k &= 0\!\cdot\!0 + 1\!\cdot\!2 + 2\!\cdot\!3 + 3\!\cdot\!3 + 4\!\cdot\!1 + 5\!\cdot\!1 + 6\!\cdot\!0 + 7\!\cdot\!1 + 8\!\cdot\!0 + 9\!\cdot\!1 \\ &= 0 + 2 + 6 + 9 + 4 + 5 + 0 + 7 + 0 + 9 \\ &= 42 \;=\; 2m \quad\Rightarrow\quad m = 21 \;\checkmark \end{aligned}
답 (a). 위 표. n=12n=12, m=21m=21, 평균 차수 λ=42/12=3.5\lambda = 42/12 = 3.5.
주목할 점: k=6k=6k=8k=8에서 nk=0n_k = 0이라 히스토그램에 구멍이 생긴다. 그런데 CCDF는 Fˉ(6)=Fˉ(7)=0.166667\bar F(6)=\bar F(7)=0.166667, Fˉ(8)=Fˉ(9)=0.083333\bar F(8)=\bar F(9)=0.083333끊기지 않는다 — §4에서 말한 차이가 12명짜리 자료에서도 이미 나타난다.

16-2. 연습문제 1 (b) — 푸아송이라면 (Exercise 1(b): If It Were Poisson)

무엇을 곱하는가. λ=3.5\lambda = 3.5P(0)=e3.5P(0) = e^{-3.5}를 구하고, P(k)=P(k1)×3.5kP(k) = P(k-1) \times \dfrac{3.5}{k}를 반복한다.

kk계산 (앞 값 ×  3.5/k\times\; 3.5/k)P(k)P(k)기대 12P(k)12P(k)실제 nkn_k왜 그 값인가
0e3.5e^{-3.5}0.03019740.3620고립 학생이 없다 — 조사 방식상 흔한 일
10.0301974×3.5/10.0301974\times 3.5/10.10569081.2682거의 일치
20.1056908×3.5/20.1056908\times 3.5/20.18495902.2203거의 일치
30.1849590×3.5/30.1849590\times 3.5/30.21578552.5893최빈값 위치가 맞다
40.2157855×3.5/40.2157855\times 3.5/40.18881232.2661실제가 적다
50.1888123×3.5/50.1888123\times 3.5/50.13216861.5861실제가 적다
60.1321686×3.5/60.1321686\times 3.5/60.07709840.9250가운데가 비었다
70.0770984×3.5/70.0770984\times 3.5/70.03854920.4631기대의 2.2배
80.0385492×3.5/80.0385492\times 3.5/80.01686530.2020
90.0168653×3.5/90.0168653\times 3.5/90.00655870.0791기대의 12.7배
답 (b). 위 표. 모양이 갈린 지점이 분명하다.
k3k \le 3: 실제와 푸아송이 거의 같다(2 vs 1.27, 3 vs 2.22, 3 vs 2.59).
k=4 ⁣ ⁣6k = 4\!\sim\!6: 실제가 모자란다(1 vs 2.27, 1 vs 1.59, 0 vs 0.93). 중간층이 비었다.
k7k \ge 7: 실제가 넘친다(1 vs 0.46, 1 vs 0.079).
중간이 비고 양 끝이 채워진 모양 — 이게 쏠림의 전형적 신호다.

16-3. 연습문제 1 (c) — 몇 개 학급당 한 명인가 (Exercise 1(c): One in How Many Classes)

무엇을 계산하는가. 낱개 P(9)P(9)가 아니라 꼬리 전체 P(K9)P(K \ge 9)를 쓴다. "차수가 정확히 9"보다 "9 이상"이 물음에 맞는 사건이다.

P(K9)=1P(K8)=10.9901263=0.0098737기대 인원=12×0.0098737=0.1184839 명학급 수=10.1184839=8.4 \begin{aligned} P(K \ge 9) &= 1 - P(K \le 8) = 1 - 0.9901263 = 0.0098737 \\[.3em] \text{기대 인원} &= 12 \times 0.0098737 = 0.1184839\ \text{명} \\[.3em] \text{학급 수} &= \frac{1}{0.1184839} = 8.4 \end{aligned}
답 (c). 푸아송 기준으로 약 8.4개 학급당 한 명.
가라테의 1153개(§5-2)에 비하면 훨씬 약한 신호다. 왜인가? n=12n=12로는 꼬리를 판정할 힘이 애초에 없기 때문이다. 학년에 12명 학급이 8개면 한 명은 나온다는 뜻이다.
그런데 8.4는 과소평가다 — §5-2의 경고가 여기서 훨씬 세게 작용한다.
정확한 분포인 이항 Bin(11,21/66)\text{Bin}(11,\,21/66)으로 다시 하면 P(K9)=9.378×104P(K\ge9) = 9.378\times10^{-4}, 기대 인원 0.01125명 → 88.9개 학급당 한 명이다. 푸아송보다 10.5배 극단적이다.
n=12n=12에서 차이가 큰 이유는 명확하다. 차수의 상한이 n1=11n-1=11인데 푸아송은 상한이 없어서 12, 15, 20까지 확률을 나눠 준다. 그만큼 꼬리가 부푼다. 분산으로 보면 이항 2.386 대 푸아송 3.500 — 이미 47% 차이다.
실제로 G(12,21)G(12,21)을 2000번 만들어 보면 최대 차수가 9 이상인 경우는 0.4~0.55%(약 200개 학급당 한 번)에 그친다. G(n,m)G(n,m)은 간선 수까지 고정하므로 분산이 한 번 더 줄기 때문이다(모의 분산 2.197).
세 답이 모두 다르지만(8.4 / 88.9 / ~200) 방향은 하나다 — 그리고 가장 손쉬운 푸아송 계산이 가장 보수적이다. 손 계산으로 푸아송을 쓰되, "적어도 이 정도"로 읽으면 된다.

16-4. 연습문제 1 (d) — 두 점 기울기 (Exercise 1(d): The Two-Point Slope)

무엇을 나누는가. (a) 표에서 두 점을 꺼낸다.

kkN(k)N(\ge k)Fˉ(k)\bar F(k)log10k\log_{10}klog10Fˉ(k)\log_{10}\bar F(k)
1377/12=0.5833337/12 = 0.5833330.477121−0.234083
2911/12=0.0833331/12 = 0.0833330.954243−1.079181
기울기=1.079181(0.234083)0.9542430.477121=0.8450980.477122=1.771244γ=1(1.771244)=2.771244 \begin{aligned} \text{기울기} &= \frac{-1.079181 - (-0.234083)}{0.954243 - 0.477121} = \frac{-0.845098}{0.477122} = -1.771244 \\[.3em] \gamma &= 1 - (-1.771244) = 2.771244 \end{aligned}

비율로 검산. CCDF는 7/121/127/12 \to 1/12, 즉 1/71/7배. kk393 \to 9, 즉 3배.

log107log103=0.8450980.477121=1.771244   \frac{-\log_{10}7}{\log_{10}3} = \frac{-0.845098}{0.477121} = -1.771244 \;\checkmark
답 (d). 기울기 =1.7712= -1.7712, γ=2.7712\gamma = \mathbf{2.7712}.
그런데 이 값을 믿으면 안 된다. 다른 두 점으로 해 보면: (k=2,k=9)(k{=}2,\,k{=}9)γ=2.531\gamma = 2.531, (k=1,k=9)(k{=}1,\,k{=}9)γ=2.131\gamma = 2.131. 점 12개짜리 자료에서 γ\gamma2.13~2.77로 움직인다. 연습문제 2가 같은 현상을 가라테에서 확인시켜 줄 것이다.

16-5. 연습문제 1 (e) — 분산지수 (Exercise 1(e): The Index of Dispersion)

무엇을 계산하는가. 표본분산이므로 n1=11n-1=11로 나눈다. 편차 제곱을 전부 전개한다 (kˉ=3.5\bar k = 3.5).

차수 kik_i112223334579
ki3.5k_i - 3.5−2.5−2.5−1.5−1.5−1.5−0.5−0.5−0.50.51.53.55.5
(ki3.5)2(k_i-3.5)^26.256.252.252.252.250.250.250.250.252.2512.2530.25
(kikˉ)2=6.25+6.25+2.25+2.25+2.25+0.25+0.25+0.25+0.25+2.25+12.25+30.25=65.00Var(K)=65.0011=5.909091D=5.9090913.5=1.688312 \begin{aligned} \sum (k_i - \bar k)^2 &= 6.25+6.25+2.25+2.25+2.25+0.25+0.25+0.25+0.25+2.25+12.25+30.25 \\ &= 65.00 \\[.3em] \operatorname{Var}(K) &= \frac{65.00}{11} = 5.909091 \\[.3em] D &= \frac{5.909091}{3.5} = 1.688312 \end{aligned}
답 (e). Var(K)=5.909\operatorname{Var}(K) = 5.909, D=1.688D = \mathbf{1.688}.
§13 표에서 위치: 격자 0 < 무작위 1.03 < 이 학급 1.69 ≈ FMH 1.54 < 가라테 3.28 < BA 5.29.
판정: 무작위(1)보다는 확실히 위지만 가라테(3.28)에는 한참 못 미친다. 약한 쏠림이 있는 반이다.
편차 표에서 눈여겨볼 것. 제곱합 65.00 중 30.25(46.5%)가 차수 9인 학생 한 명에게서 나왔다. 12.25(18.8%)는 차수 7인 학생 한 명이다. 두 사람이 65.3%를 만든다.
분산지수는 극단값에 매우 민감한 지표다. 이건 결함이 아니라 설계다 — 우리가 재고 싶은 게 정확히 "극단값이 있는가"이기 때문이다. 다만 그래서 한 명이 결석한 날의 자료로 계산하면 값이 크게 흔들린다는 점은 알고 있어야 한다.

16-6. 연습문제 2 (a) — CCDF를 말로 옮기기 (Exercise 2(a): Putting the CCDF into Words)

무엇을 읽는가. Fˉ(5)=0.294118=10/34\bar F(5) = 0.294118 = 10/34. 분자 10이 인원이다.

답 (a). "34명 중 10명이 친구가 5명 이상이다." (전체의 29.4%)
같은 자료를 P(5)P(5)로 읽으면 "정확히 5명인 사람이 3명(8.8%)"이 되어 전혀 다른 인상을 준다. 어느 쪽이 필요한 정보인가? "이 반에 마당발이 얼마나 되나"를 묻는다면 이상(\ge) 쪽이다.

16-7. 연습문제 2 (b)(c) — γ\gamma가 흔들린다 (Exercise 2(b)(c): γ Is Unstable)

무엇을 나누는가. §3-3 표에서 세 쌍을 꺼내 같은 계산을 반복한다.

두 점Fˉ\bar F 시작Fˉ\bar FΔlog10Fˉ\Delta\log_{10}\bar FΔlog10k\Delta\log_{10}k기울기γ\gamma
k=29k=2 \to 933/34=0.97058833/34=0.970588
log=0.012965\log=-0.012965
5/34=0.1470595/34=0.147059
log=0.832509\log=-0.832509
−0.8195440.653213−1.2546362.254636
k=517k=5 \to 1710/34=0.29411810/34=0.294118
log=0.531479\log=-0.531479
1/34=0.0294121/34=0.029412
log=1.531479\log=-1.531479
−1.0000000.531479−1.8815422.881542
k=417k=4 \to 17 (§6)16/34=0.47058816/34=0.470588
log=0.327359\log=-0.327359
1/34=0.0294121/34=0.029412
log=1.531479\log=-1.531479
−1.2041200.628389−1.9162022.916202

k=517k=5\to17 줄의 검산이 특히 쉽다. CCDF가 10/341/3410/34 \to 1/34, 정확히 1/101/10배다. 그러므로 Δlog10Fˉ=1\Delta\log_{10}\bar F = -1이 딱 떨어진다. kk17/5=3.417/5 = 3.4배이므로

기울기=1log103.4=10.531479=1.881542   \text{기울기} = \frac{-1}{\log_{10}3.4} = \frac{-1}{0.531479} = -1.881542 \;\checkmark
답 (b). k=29k=2\to9: 기울기 1.2546-1.2546, γ=2.2546\gamma = \mathbf{2.2546}.
답 (c). k=517k=5\to17: γ=2.8815\gamma = 2.8815. 세 값은 2.2546 / 2.8815 / 2.9162로 최대 0.66이나 벌어진다.
왜 다른가 — 세 가지 이유:
① 자료가 직선이 아니다. 진짜 거듭제곱이라면 어느 두 점을 골라도 같은 기울기가 나와야 한다. 값이 달라진다는 것 자체가 "직선이 아니다"의 증거다.
② 왼쪽 끝이 기울기를 눕힌다. k=2k=2에서 Fˉ=0.9706\bar F=0.9706로 거의 1이다(34명 중 33명). 로그를 씌우면 0.013-0.013, 거의 0이라 세로 변화가 거의 없는 점이다. 이 점을 끼우면 분자가 작아져 기울기가 완만해지고 γ\gamma가 줄어든다. 그래서 거듭제곱 적합에는 반드시 kmink_{\min}을 둔다(§11에서 plfit이 kmink_{\min}추정한 이유다).
③ 끝점 한 명이 지렛대다. k=17k=17Fˉ=1/34\bar F = 1/34단 한 사람이 만든 점이다. 34번이 없었다면 그 점 자체가 사라진다. 로그–로그의 오른쪽 끝은 언제나 표본 1~2개로 결정되는 자리이고, 회귀에서 가장 큰 영향력을 갖는다.

16-8. 연습문제 2 (d) — 그래서 무엇을 쓸 것인가 (Exercise 2(d): So What Should We Use)

무엇을 모으는가. 같은 34명 자료에서 나온 γ\gamma 추정치 전부를 한 줄에 세운다.

방법γ\gamma근거
최대우도 (plfit, kmin=2k_{\min}=2)2.126§11 — 통계적으로 가장 옳은 방법
두 점 k=29k=2\to92.255연습 2(b)
CCDF 전체 회귀2.281§9
두 점 k=517k=5\to172.882연습 2(c)
두 점 k=417k=4\to172.916§6
범위=2.9162.126=0.790 \text{범위} = 2.916 - 2.126 = \mathbf{0.790}
답 (d) — 쓸 수 없다.
같은 자료, 같은 34명인데 방법을 바꾸면 γ\gamma2.13에서 2.92까지 움직인다. 폭이 0.79다. 그런데 이론적으로 중요한 구분선들(BA의 3, 분산이 발산하는 3, 평균이 발산하는 2)이 전부 이 폭 안에 들어 있다. 즉 이 자료로는 어느 쪽인지 가릴 수 없다.
"γ=2.9\gamma = 2.9"라고 쓰는 것은 소수점 한 자리의 정밀도를 주장하는 것인데, 실제 불확실성은 그 열 배다.

대신 쓸 문장.
"이 학급에서 친구 10명 이상으로 지목된 학생이 2명 있었다. 같은 인원(34명)·같은 지목 수(78개)로 무작위 배치를 200회 모의한 결과, 이만큼 쏠린 경우는 한 번도 나오지 않았다."
근거는 §12다: 무작위 200회의 α\alpha 범위는 2.62~13.90인데 가라테는 2.13으로 그 범위 바깥이고, 가라테보다 꼬리가 두꺼운 경우는 0/200이었다(경험적 p<0.005p < 0.005).
이 문장은 ① 추정하지 않고 세기만 하고 ② 비교 기준을 명시하며 ③ 학부모·동료 교사가 그대로 이해할 수 있고 ④ 반박하기 어렵다.
교실 해석 — 두 연습문제가 같은 것을 가르친다.
연습 1의 12명 학급도, 연습 2의 34명 가라테도 γ\gamma를 신뢰 있게 추정할 수 없다. 그런데 둘 다 "무작위보다 쏠려 있다"는 것은 확실하게 말할 수 있다 — 연습 1은 D=1.69>1D=1.69 > 1로, 연습 2는 무작위 200회 대조로.
학급 규모(20~35명)에서 SNA를 쓸 때 이것이 현실적인 상한선이다. 모형의 이름(척도 없는, 좁은 세상)을 붙이는 일은 포기하고, "무작위와 얼마나 다른가"에 집중하면 정직하면서도 쓸모 있는 결론이 나온다. 그리고 그 비교를 제대로 하는 방법 — 무작위 기준선을 어떻게 만들 것인가 — 이 4-8의 주제다.

다음 단원 예고 — 4-6. 오늘 우리는 차수 분포를 재는 법을 익혔고, 가라테와 FMH가 무작위와 다르다는 것을 확인했다. 그런데 그런 분포가 생기는지는 묻지 않았다.
§8에서 슬쩍 꺼내 쓴 sample_pa — 이게 바라바시–알버트(BA) 모형이다. "이미 친구가 많은 사람이 새 친구를 더 얻는다"는 규칙 하나로 γ=3\gamma = 3의 거듭제곱 분포를 만든다. 4-6에서는 그 규칙을 손으로 굴려 보고, 먼저 들어온 사람이 유리한가(first-mover advantage)를 직접 확인한다 — 3월에 만들어진 관계가 1년을 지배하는지에 대한 질문이다.