단원 4-5Reading the Degree Distribution
차수 분포를 읽는 법 — '허브가 있다'를 숫자로
4-3과 4-4가 똑같은 자리에서 끝났다. 도 WS도 차수 축을 못 맞힌다 — 가라테의 차수 분산은 15.04인데 두 모형은 3.45와 0을 내놓았다.
그런데 "허브가 있다"는 말은 아직 느낌이다. 오늘 그것을 측정 가능한 진술로 바꾼다.
도구는 세 가지다: ① CCDF — 히스토그램이 꼬리에서 구멍투성이가 될 때도 매끄럽다 ② 로그–로그 기울기 — 기울기 을 뒤집으면 지수 가 나온다 ③ 같은 평균의 푸아송과의 대조 — "무작위였다면 몇 명이었을까".
그리고 오늘의 가장 중요한 교훈은 부정적인 것이다: 어떤 자료든 거듭제곱으로 적합은 된다. 적합됐다는 사실 자체는 증거가 아니다.
- 오늘의 질문: 느낌을 숫자로 (From a Feeling to a Number)
- 정의 — 차수 분포와 CCDF (Degree Distribution and the CCDF)
- 손 계산 ① 가라테의 CCDF — 34명 전부 세기 (The Karate CCDF, Counted by Hand)
- 왜 히스토그램이 아니라 CCDF인가 (Why Not a Histogram)
- 손 계산 ② 무작위였다면 몇 명이었을까 (What Poisson Would Have Predicted)
- 손 계산 ③ 로그–로그 기울기에서 를 뽑는다 — 두 점으로 (Slope to Exponent)
- 왜 인가 (Why the CCDF Slope Is One Less)
- R 검증 ① 같은 분포를 세 가지 눈으로 (Three Views of One Distribution)
- R 검증 ② 실제 학교 두 곳 (Two Real Schools)
- 함정 ① 구간을 어떻게 나누느냐가 결론을 바꾼다 (Binning Changes the Conclusion)
- 함정 ② 무엇이든 거듭제곱으로 적합된다 (Anything Can Be Fitted)
- 그래서 가라테는 척도 없는 네트워크인가 (Is Karate Scale-Free?)
- 한 줄로 줄인 지표 — 분산/평균 (The Dispersion Index)
- 교실 적용 (Classroom Application)
- 연습문제 (Exercises)
- 해설과 답 (Solutions)
1. 오늘의 질문: 느낌을 숫자로 (From a Feeling to a Number)
지난 두 단원의 성적표를 한 장으로 합치면 이렇게 된다.
| 모형 | 거리 | 군집 | 차수 분산 | 최대 차수 |
|---|---|---|---|---|
| 가라테 (실제, ) | 2.408 | 0.2557 | 15.04 | 17 |
| 무작위 4-3 | 맞힘 | 틀림 | 3.92 | ≈ 9.2 |
| WS 고리 격자 4-4 | 틀림 | 맞힘 | 0 | 4 |
| WS 4-4 | 맞힘 | 맞힘 | 0.73 | ≈ 5.9 |
| WS (끝까지 재배선) 4-4 | 맞힘 | 틀림 | 3.41 | ≈ 8.2 |
WS는 손잡이 하나로 거리와 군집을 동시에 맞혔다. 그런데 오른쪽 두 열은 그대로다. 격자는 모두가 차수 4라 분산이 정확히 0이고, 거리·군집을 맞히는 에서도 분산은 겨우 0.73이다. 손잡이를 끝까지 돌려 로 만들어도 3.41에서 멈춘다. 실제는 15.04다. 네 배 넘게 모자란다.
이 차이가 뭘 뜻하는지는 이미 안다. 가라테에는 차수 17인 사람(34번, 사범)과 차수 16인 사람(1번, 관장)이 있다. 학급으로 치면 반 전체의 절반과 이름을 트고 지내는 학생이다. 그런 사람이 있는 반과 없는 반은 다른 반이다.
"이 반에는 허브가 있다"는 말을 어떻게 재는가?
최대 차수 하나만 보면 될까? (안 된다 — 반 크기에 따라 최대 차수는 저절로 커진다)
평균 차수는? (안 된다 — 평균은 간선 수만 말해 줄 뿐 쏠림은 말하지 않는다)
필요한 건 분포 전체의 모양이다. 그 모양을 보는 법이 오늘의 주제다.
2. 정의 — 차수 분포와 CCDF (Degree Distribution and the CCDF)
2-1. 세 가지를 구별한다 (Distinguishing Three Things)
정점이 개인 그래프에서 를 번의 차수라 하자. 세 가지 함수를 정의한다.
| 기호 | 정의 | 읽는 법 | 쓰임새 |
|---|---|---|---|
| 차수가 정확히 인 사람 수 | 원자료 | ||
| 차수가 정확히 일 확률 = 차수 분포 | 히스토그램. 이론 공식은 대개 이 모양 | ||
| 차수가 이상일 확률 = 상보누적분포(CCDF) | 그림으로 볼 때는 거의 항상 이것 |
셋은 서로에게서 복원된다.
검산은 두 개를 늘 같이 쓴다.
왜 이상() 쪽을 쓰는가? 우리가 알고 싶은 건 꼬리, 곧 "차수가 큰 쪽에 몇 명이 있느냐"이기 때문이다.
2-2. 거듭제곱 법칙과 지수 (Power Laws and the Exponent γ)
차수 분포가 거듭제곱 법칙(power law)을 따른다는 것은
이라는 뜻이다. 를 지수(exponent)라 부른다. 왜 이 모양이 특별한가? 양변에 로그를 씌우면
즉 로그–로그 축에서 직선이 된다. 기울기가 다. 직선이라는 것은 눈으로 판정하기 가장 쉬운 모양이고, 기울기 하나로 요약된다는 뜻이기도 하다.
거듭제곱 분포에는 그런 척도가 없다. 를 10배 늘리면 는 항상 배가 된다 — 에서 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. 를 센다 (Counting n_k)
같은 값끼리 묶어 세면 이렇게 된다. 값이 없는 차수(7, 8, 11, 13, 14, 15)는 이다 — 빠뜨리지 말고 적어 둔다.
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 11 | 6 | 6 | 3 | 2 | 0 | 0 | 1 | 1 | 0 | 1 | 0 | 0 | 0 | 1 | 1 |
검산 1 — 사람 수: 0인 칸도 전부 더한다.
검산 2 — 악수 정리: 각 항을 전부 전개한다.
3-2. CCDF를 만든다 — 위에서부터 누적 (Building the CCDF from the Top Down)
를 만드는 가장 안전한 방법은 가장 큰 차수부터 아래로 누적하는 것이다. 를 "차수 이상인 사람 수"라 하면 다.
| 누적 계산 | ||||
|---|---|---|---|---|
| 17 | 1 | 1 | ||
| 16 | 1 | 2 | ||
| 15 | 0 | 2 | ||
| 14 | 0 | 2 | ||
| 13 | 0 | 2 | ||
| 12 | 1 | 3 | ||
| 11 | 0 | 3 | ||
| 10 | 1 | 4 | ||
| 9 | 1 | 5 | ||
| 8 | 0 | 5 | ||
| 7 | 0 | 5 | ||
| 6 | 2 | 7 | ||
| 5 | 3 | 10 | ||
| 4 | 6 | 16 | ||
| 3 | 6 | 22 | ||
| 2 | 11 | 33 | ||
| 1 | 1 | 34 |
검산 3: 가장 아래 이어야 한다 — 모두가 차수 1 이상이니까(가라테에는 고립 정점이 없다).
3-3. 로그를 씌운다 (Taking Logarithms)
인 차수만 골라 을 취한다. 이게 로그–로그 그림에 찍히는 점들이다.
| 1 | 34 | 1.000000 | 0.0000 | 0.0000 |
| 2 | 33 | 0.970588 | 0.3010 | −0.0130 |
| 3 | 22 | 0.647059 | 0.4771 | −0.1891 |
| 4 | 16 | 0.470588 | 0.6021 | −0.3274 |
| 5 | 10 | 0.294118 | 0.6990 | −0.5315 |
| 6 | 7 | 0.205882 | 0.7782 | −0.6864 |
| 9 | 5 | 0.147059 | 0.9542 | −0.8325 |
| 10 | 4 | 0.117647 | 1.0000 | −0.9294 |
| 12 | 3 | 0.088235 | 1.0792 | −1.0544 |
| 16 | 2 | 0.058824 | 1.2041 | −1.2304 |
| 17 | 1 | 0.029412 | 1.2304 | −1.5315 |
점이 11개다. 34명짜리 네트워크에서 나온 점이 11개. 이 숫자를 기억해 두자 — §12에서 다시 쓴다.
4. 왜 히스토그램이 아니라 CCDF인가 (Why Not a Histogram)
§3 표에서 이미 이유가 보인다. 에서 이었다. 이면 라서 그 점은 로그–로그 그림에 아예 찍히지 않는다.
가라테는 작아서 구멍이 6개뿐이었다. 큰 네트워크에서는 이게 재앙이 된다. BA 모형(다음 단원)으로 만든 네트워크의 차수 30 이상 구간을 실제로 세어 보자.
| 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| (히스토그램) | 0 | 2 | 1 | 0 | 1 | 0 | 1 | 3 | 0 | 0 | 0 | 0 | 3 | 0 | 1 |
| (CCDF) | 22 | 22 | 20 | 19 | 19 | 18 | 18 | 17 | 14 | 14 | 14 | 14 | 14 | 11 | 11 |
차수 30~59 구간 30칸 중 18칸이 0이다. 그 구간에는 사람이 19명이나 있는데도 그렇다. 더 위로 가면 완전히 무너진다 — 차수 60~80 구간 21칸은 전부 0인데, 차수 60 이상인 사람은 3명 있다. 어디에 있는가? 82, 82, 135에 있다.
CCDF는 이 문제가 원리적으로 없다. 는 단조 감소이고, 자료 범위 안에서는 절대 0이 되지 않는다(적어도 최대 차수인 사람 1명은 항상 세어지니까). 그래서 모든 에서 점이 찍힌다.
5. 손 계산 ② 무작위였다면 몇 명이었을까 (What Poisson Would Have Predicted)
"허브가 있다"를 재는 가장 직접적인 방법: 같은 크기·같은 간선 수의 무작위 그래프라면 그런 사람이 몇 명 나왔을까를 계산해서 실제와 비교하는 것이다.
4-1에서 의 차수가 근사적으로 푸아송을 따른다는 걸 봤다.
5-1. 재귀로 손 계산한다 (Hand Calculation by Recursion)
를 매번 계산할 필요는 없다. 이웃한 항끼리 비를 보면
이므로 에서 시작해 를 곱해 가면 된다.
| 계산 | 기대 인원 | 실제 | 실제/기대 | ||
|---|---|---|---|---|---|
| 0 | 0.0101708 | 0.3458 | 0 | 0.00 | |
| 1 | 0.0466660 | 1.5866 | 1 | 0.63 | |
| 2 | 0.1070573 | 3.6399 | 11 | 3.02 | |
| 3 | 0.1637346 | 5.5670 | 6 | 1.08 | |
| 4 | 0.1878132 | 6.3857 | 6 | 0.94 | |
| 5 | 0.1723463 | 5.8598 | 3 | 0.51 | |
| 6 | 0.1317942 | 4.4810 | 2 | 0.45 | |
| 7 | … | 0.0863861 | 2.9371 | 0 | 0 |
| 8 | … | 0.0495450 | 1.6845 | 0 | 0 |
| 9 | … | 0.0252582 | 0.8588 | 1 | 1.16 |
| 10 | … | 0.0115891 | 0.3940 | 1 | 2.54 |
| 12 | … | 0.0018483 | 0.0628 | 1 | 15.9 |
| 16 | … | 0.0000188 | 0.0006376 | 1 | 1568 |
| 17 | … | 0.0000051 | 0.0001721 | 1 | 5811 |
5-2. 꼬리 전체를 한 번에 (The Whole Tail at Once)
낱개보다 꼬리 전체를 묻는 게 해석이 쉽다. "차수 16 이상인 사람"의 기대 인원은
실제는 2명이다. 뒤집어 읽으면 더 선명하다.
학급으로 옮기면: 34명 학급 1153개 — 학교 30개 분량을 뒤져야 한 명 나올 사람이, 이 반에 두 명 있다는 뜻이다.
을 이항으로 다시 계산하면 기대 인원 명 → 13,863개 학급당 한 명이다. 푸아송 계산(1153)보다 12배 더 극단적이다. 실제로 을 2000번 만들어 봤더니 최대 차수가 16 이상인 경우는 0회였다(최대치가 14).
결론의 방향은 같다 — 오히려 더 강해진다. 다만 "1153"이라는 수를 인용할 때는 그것이 보수적인(약하게 잡은) 추정임을 알고 있어야 한다.
5-3. 같은 계산을 FMH에 (The Same Calculation on FMH)
FMH(가상의 고등학교, , , )에 똑같이 해 보면 다른 이야기가 나온다.
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | |
|---|---|---|---|---|---|---|---|---|---|
| 실제 | 524 | 403 | 271 | 128 | 85 | 30 | 13 | 5 | 2 |
| 푸아송 기대 | 385.1 | 513.5 | 342.3 | 152.1 | 50.7 | 13.5 | 3.0 | 0.57 | 0.095 |
| 실제/기대 | 1.36 | 0.78 | 0.79 | 0.84 | 1.68 | 2.22 | 4.33 | 8.73 | 20.9 |
두 끝이 동시에 부풀어 있다.
- 왼쪽 끝: 친구가 0명인 학생이 524명 — 전교생의 35.9%다. 무작위였다면 385명(26.4%)이어야 했다. 1.36배 많다.
- 오른쪽 끝: 차수 8인 학생 2명은 무작위 기대치 0.095명의 21배다. 꼬리 전체로 보면 명 기대에 실제 2명.
그러나 가라테와 결정적으로 다른 점이 있다. FMH의 최대 차수는 8이다. 1461명이나 되는데 친구가 9명 이상인 학생이 단 한 명도 없다. 가라테는 34명 중에 17명과 연결된 사람이 있었는데 말이다.
가라테형: 소수의 사람에게 관계가 극단적으로 쏠린다. 문제는 중심의 과부하와 그 사람이 빠졌을 때의 붕괴다.
FMH형: 쏠림은 약한데(최대 8) 바닥이 두껍다. 문제는 허브가 아니라 친구가 하나도 없는 학생 524명이다.
같은 "무작위가 아니다"라도 개입 지점이 정반대다. 그래서 지표 하나(예: 최대 차수)만 보면 안 되고 분포 전체를 봐야 한다.
6. 손 계산 ③ 로그–로그 기울기에서 를 뽑는다 — 두 점으로 (Slope to Exponent)
§3-3 표에서 두 점만 골라 기울기를 내 보자. 꼬리를 대표하는 두 점으로 (절반 지점)와 (끝점)을 잡는다.
점 1: ,
점 2: ,
기울기는 세로 변화 나누기 가로 변화다.
그리고 §7에서 증명할 관계를 쓰면
CCDF는 , 즉 배로 줄었다. 는 , 즉 4.25배로 늘었다. 그러므로 "가 4.25배 될 때 사람 수가 16분의 1로 준다" — 그것이 기울기 의 내용 전부다.
7. 왜 인가 (Why the CCDF Slope Is One Less)
§6에서 쓴 관계를 증명한다. 이게 오늘 유일한 "유도"다.
가정: 어떤 이상에서 이고 이다.
CCDF는 정의상 꼬리의 합이다.
가 충분히 크면 이 합은 적분으로 근사된다.
양변에 로그를 씌운다.
즉 CCDF의 로그–로그 기울기는 다. 뒤집으면
7-1. 수치로 확인 (Numerical Check)
순수한 거듭제곱 를 에서 만들어 CCDF의 기울기를 실제로 재 보면:
| 참값 | 기울기 | 기울기 | 기울기 | 기울기 |
|---|---|---|---|---|
| 2.5 | −1.5294 | 2.5294 | −1.5034 | 2.5034 |
| 3.0 | −2.0390 | 3.0390 | −2.0040 | 3.0040 |
| 3.5 | −2.5485 | 3.5485 | −2.5049 | 3.5049 |
세 경우 모두 가 참값으로 돌아온다. 그리고 가 클수록 정확해진다 — 합을 적분으로 바꾼 근사가 큰 에서 더 잘 맞기 때문이다.
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% 가 가진 간선 비율 | |
|---|---|---|---|---|
| BA | 3.999 | 135 | 21.17 | 8.72% |
| ER 무작위 | 4.002 | 15 | 4.10 | 2.57% |
최대 차수가 9배 차이 난다. 평균이 같은데.
8-1. 세 눈으로 본 CCDF (The CCDF Through Three Lenses)
| 1 | 2 | 4 | 8 | 16 | 32 | 64 | 128 | |
|---|---|---|---|---|---|---|---|---|
| BA | 1.000000 | 1.000000 | 0.334400 | 0.094400 | 0.020400 | 0.004000 | 0.000600 | 0.000200 |
| ER | 0.981600 | 0.906000 | 0.562600 | 0.053600 | 0 | 0 | 0 | 0 |
가 두 배씩 커질 때 BA의 CCDF를 보라: . 매번 대략 4분의 1씩 준다. 가 2배일 때 배 — 이게 로그–로그에서 기울기 , 곧 이라는 뜻이다(§7).
ER은 에서 절벽이다. 5000명 중 차수 16 이상이 한 명도 없다. 로그–로그 그림에서는 아예 선이 끊긴다.
그런데 그 한 명의 차수 135는 전체 차수 합 19,994의 0.675%다. 5000명이 똑같이 나눠 가졌다면 한 사람 몫은 여야 하니 33.8배를 혼자 갖고 있는 셈이다(= 최대 차수 / 평균 차수).
중요한 것이 안 보이는 그림이 히스토그램이다.
9. R 검증 ② 실제 학교 두 곳 (Two Real Schools)
그림에서 읽을 것은 세 가지다.
- 가라테는 푸아송보다 위에 있다. 구간에서 실제 곡선이 푸아송 점선보다 한참 위다. 꼬리가 두껍다는 뜻이고, §5의 "1153개 학급"이 그림으로 보이는 것이다.
- 그런데 점이 너무 적다. 에 있는 점은 다섯 개, 사람으로는 5명이다. 직선을 긋기에 충분한가? 이 질문이 §12다.
- FMH는 두껍지만 짧다. 왼쪽(작은 )에서는 푸아송보다 위에 있는데 에서 그냥 끝난다. 거듭제곱의 특징인 "계속 이어지는 꼬리"가 없다.
회귀 기울기로 요약하면:
| 자료 | 점 개수 | 최대 차수 | CCDF 회귀 기울기 | 기울기 |
|---|---|---|---|---|
| 가라테 () | 17 | 17 | −1.2813 | 2.281 |
| FMH 차수>0 () | 8 | 8 | −2.8217 | 3.822 |
| BA () | 135 | 135 | −2.2087 | 3.209 |
| ER () | 15 | 15 | −3.5030 | 4.503 |
BA만 이론값()에 가깝게 나왔고, 나머지는 신뢰할 만한 점 개수가 아니다. 특히 ER에서도 ""이라는 숫자가 나오기는 한다는 데 주목하자. 푸아송 자료인데도 말이다. 이것이 §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] |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 인원 | 4766 | 186 | 26 | 8 | 8 | 3 | 0 | 0 | 2 | 0 | 0 | 1 |
첫 칸에 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] |
|---|---|---|---|---|---|---|---|---|---|
| 인원 | 0 | 2306 | 1550 | 786 | 269 | 70 | 16 | 2 | 1 |
이제 모든 칸에 사람이 있고(첫 칸 제외 — BA는 라 최소 차수가 2다), 인원이 칸마다 대략 일정한 비율로 준다: . 이웃 칸의 비를 보면 0.672 → 0.507 → 0.342 → 0.260 → 0.229로 4분의 1을 향해 내려간다(마지막 두 칸은 사람이 2명, 1명뿐이라 요동친다). 가 2배일 때 인원이 이라는 건 §8에서 본 것과 같은 이야기다 — 이면 폭 칸의 인원이 에 비례하기 때문이다.
이 보정을 빼먹으면 기울기가 정확히 1만큼 완만해진다 — §7의 실수와 같은 크기의 오차다.
그래서 CCDF를 쓰는 게 낫다. CCDF에는 구간이라는 개념 자체가 없으므로 구간 폭 보정도, 구간 선택의 자의성도 없다.
쏠림을 보려면 묶지 말고 "친구 명 이상인 학생이 몇 %"를 마다 적어라. 그게 CCDF이고, 자의적 선택이 없다.
11. 함정 ② 무엇이든 거듭제곱으로 적합된다 (Anything Can Be Fitted)
igraph에는 최대우도로 와 을 동시에 추정하는 함수가 있다. CCDF 회귀보다 통계적으로 옳은 방법이다(§4의 상관 문제가 없다).
fit_power_law(degree(gba), implementation="plfit", p.value=TRUE)
p.value의 기본값은 FALSE다.
그냥 부르면 $KS.p가 비어서 나온다(numeric(0)).
검정이 실패한 게 아니라 애초에 계산하지 않은 것이다.
p값이 필요하면 반드시 p.value=TRUE를 명시해야 한다 —
부트스트랩을 돌리므로 느려서 기본값이 꺼져 있다.
네 자료에 전부 돌린 결과다.
| 자료 | 추정 | 꼬리에 쓰인 점 | 전체 대비 | KS 통계량 | KS | 판정 | |
|---|---|---|---|---|---|---|---|
| BA | 3.184 | 8 | 472 | 9.4% | 0.0207 | 0.524 | 거듭제곱 맞음 (이론 3) |
| ER 무작위 | 14.738 | 10 | 47 | 1.0% | 0.0441 | 0.041 | 숫자는 나오지만 무의미 |
| 가라테 | 2.126 | 2 | 33 | 97.1% | 0.1000 | 0.119 | 기각 못 함 ≠ 입증 |
| FMH 차수>0 | 5.497 | 4 | 135 | 14.4% | 0.0376 | 0.084 | 기각 못 함 ≠ 입증 |
11-1. 이 표를 읽는 법 (How to Read This Table)
ER 줄을 보라. 우리가 직접 만든 푸아송 자료인데도 이라는 답이 나왔다. 함수는 거절하지 않는다. 언제나 숫자를 준다.
그렇다면 그 숫자가 무의미하다는 건 어떻게 아는가? 세 가지 신호가 있다.
- 가 터무니없이 크다. 실제 네트워크의 는 보통 2~3 사이다. 14.7은 "가 2배 되면 확률이 배"라는 뜻으로, 사실상 지수적으로 끊긴다는 말이다 — 거듭제곱이 아니라 절벽의 서술이다.
- 이 너무 높아 자료의 1%만 쓴다. 5000개 중 47개. 그 47개만 보면 어떤 곡선이든 직선처럼 보인다.
- KS 로 실제로 기각된다. 유의수준 5%에서 "거듭제곱이다"라는 가설이 탈락했다.
그리고 가라테 줄을 보라. 로 기각되지 않았다. 그런데 이것을 "가라테는 거듭제곱이다"의 증거로 읽으면 안 된다.
"라 기각하지 못했다"는 "맞다"가 아니라 "모르겠다"이다. 자료가 적을수록 이 구별이 중요해진다.
12. 그래서 가라테는 척도 없는 네트워크인가 (Is Karate Scale-Free?)
정직하게 답하자. 그 질문에는 답할 수 없다. 이유는 셋이다.
12-1. 그래도 말할 수 있는 것 (What Can Still Be Said)
"척도 없다"는 말은 못 한다. 그런데 우리가 실제로 알고 싶은 것은 그게 아니다. 알고 싶은 건 "이 반의 쏠림이 우연으로 설명되는가"이고, 그건 답할 수 있다.
같은 크기(, )의 무작위 그래프 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 <- 가라테보다 꼬리가 두꺼운 무작위 그래프의 수
| 해석 | ||
|---|---|---|
| 가라테 (실제) | 2.126 | 작을수록 꼬리가 두껍다 |
| 무작위 200개 평균 | 6.551 | 3배 이상 가파르다 |
| 무작위 200개 최솟값 | 2.623 | 가장 극단적인 무작위조차 가라테에 못 미친다 |
| 가라테보다 두꺼운 경우 | 0 / 200 → 경험적 | |
"가라테의 차수 쏠림은 같은 크기 무작위 그래프 200개 중 단 하나도 재현하지 못했다" — 말할 수 있다. 그리고 이게 우리에게 필요한 전부다.
쓰지 말 것: "우리 반은 척도 없는 네트워크다", "로 나타났다". 25명 자료로 이런 문장을 쓰면 없는 정밀도를 주장하는 것이다.
쓸 것: "친구 10명 이상으로 지목된 학생이 2명 있다. 같은 인원·같은 지목 수의 무작위 배치 200회에서는 한 번도 나오지 않은 값이다."
후자가 더 약한 주장 같지만 반박할 수 없고, 개입으로 이어진다 — 그 2명이 누구인지, 그들이 빠지면 반이 어떻게 되는지로.
13. 한 줄로 줄인 지표 — 분산/평균 (The Dispersion Index)
매번 CCDF를 그릴 수는 없다. 쏠림을 수 하나로 요약해야 할 때가 있다. 가장 쓸 만한 것이 분산지수다.
왜 이게 좋은가? 4-1 §8에서 본 푸아송의 성질 때문이다 — 푸아송은 분산이 평균과 같다. 따라서 이 "무작위 기준선"이 된다. 눈금이 저절로 붙는다.
| 네트워크 | 평균 차수 | 차수 분산 | 분산/평균 | 최대 차수 | 읽는 법 |
|---|---|---|---|---|---|
| WS 고리 격자 | 4.000 | 0.000 | 0.000 | 4 | 완전 균등 — 모두가 똑같다 |
| ER 무작위 () | 4.002 | 4.104 | 1.025 | 15 | 기준선. |
| FMH 전체 () | 1.333 | 2.050 | 1.537 | 8 | 약한 쏠림 |
| 가라테 () | 4.588 | 15.037 | 3.277 | 17 | 뚜렷한 쏠림 |
| BA () | 3.999 | 21.165 | 5.293 | 135 | 극단적 쏠림 |
0(완전 균등) → 1(무작위) → 3 → 5(극단)로 한 줄에 세워진다. 격자가 정확히 0인 것도 확인해 두자 — 모두가 차수 4이므로 분산이 0이다.
13-1. 같이 볼 지표 — 연결 점유율 (A Companion Measure: Share of Ties)
는 단위가 없어 좋지만 직관적이진 않다. 학부모나 동료 교사에게 설명할 때는 "상위 몇 %가 관계의 몇 %를 갖는가"가 훨씬 잘 통한다.
여기서 "관계의 몫"은 차수 합 에서 차지하는 비율로 잰다. 차수를 그냥 더하면 되므로 덧셈이 성립하고, 어떤 묶음에도 적용된다.
| 네트워크 | 상위 10%의 몫 | 상위 20% | 1등 한 명 | 완전 평등이라면 1등은 |
|---|---|---|---|---|
| WS 고리 격자 () | 10.0% | 20.0% | 0.100% | 0.100% |
| ER 무작위 () | 19.7% | 35.1% | 0.075% | 0.020% |
| 가라테 () | 28.8% | 48.7% | 10.897% | 2.941% |
| FMH 전체 () | 33.5% | 54.5% | 0.411% | 0.068% |
| BA () | 32.9% | 47.4% | 0.675% | 0.020% |
격자에서 상위 10%가 정확히 10%를 갖는 게 완전 평등의 정의다(1등의 몫도 과 같다). 가라테에서는 상위 20%(7명)가 관계의 절반을 갖고, 단 한 사람이 10.9% — 평등할 때 몫(2.94%)의 3.7배 — 를 갖는다.
같은 불평등 수치가 정반대 원인에서 나올 수 있다. 상위 점유율만 보지 말고 와 최대 차수를 반드시 같이 볼 것.
14. 교실 적용 (Classroom Application)
지목 자료를 모았다면 순서는 이렇다.
1단계. 차수를 세고 으로 검산한다(§3). 입력 오류가 여기서 걸린다.
2단계. 분산/평균을 구한다(§13). 이면 쏠림이 없는 반, 면 쏠림이 있는 반이다.
3단계. 마다 "친구 명 이상인 학생 수"를 적는다 — CCDF다(§3). 학부모 상담에서 그대로 읽어 줄 수 있는 형태다.
4단계. 같은 인원·같은 지목 수로 무작위 배치를 200번 만들어 최대 차수와 를 비교한다(§12). 이게 "우연인가"에 대한 유일하게 정직한 답이다.
하지 말 것. 를 추정해서 보고하기(§12). 25명으로는 의미가 없다.
분포에는 끝이 두 개인데 개입은 완전히 다르다.
오른쪽 끝(허브) — 가라테형. 위험은 과부하와 단일 실패점이다. 그 학생이 결석하거나 전학 가면 반의 정보 흐름이 끊긴다. 개입: 모둠 편성에서 허브를 분산시키고, 두 번째 층(차수 5~9)에게 역할을 넘긴다.
왼쪽 끝(고립) — FMH형. 위험은 보이지 않는다는 것이다. 차수 0인 학생은 아무에게도 지목되지 않았으므로 관계도 그림에서 점 하나로 떠 있을 뿐이고, 교실에서도 조용해서 문제 학생으로 인식되지 않는다.
개입: 허브와 짝짓지 말 것. 차수 2~3인 중간층과 잇는 편이 안정적으로 붙는다 (허브는 이미 포화 상태라 새 관계에 쓸 시간이 없다).
1반 평균 친구 수 4.2, 2반 4.5 — 이 비교는 거의 무의미하다. 지목 규칙과 응답률에 좌우된다.
는 평균으로 나눈 값이라 규모에 덜 휘둘린다. 1반 , 2반 라면 "2반에 관계가 쏠려 있다"는 실질적 정보다.
학년 초·중·말 세 시점의 를 기록해 두면 모둠 편성의 효과를 볼 수 있다 — 잘 된 편성은 를 내리고 평균은 유지한다.
15. 연습문제 (Exercises)
12명 학급에서 교우관계 조사를 했더니 각자의 친구 수(차수)가 이렇게 나왔다.
1, 1, 2, 2, 2, 3, 3, 3, 4, 5, 7, 9
(a) 부터 까지 , , , 를 표로 전부 채워라. 인 칸도 빠뜨리지 말 것. 그리고 검산 두 개(, )를 반드시 하라.(b) 같은 평균의 푸아송이 예측하는 인원 를 부터 까지 구하고 실제와 비교하라. 에서 시작해 를 곱해 가는 재귀를 쓸 것(§5-1).
(c) 차수 9인 학생은 무작위였다면 몇 개 학급당 한 명꼴인가?
(d) 과 두 점으로 CCDF 로그–로그 기울기와 를 구하라.
(e) 분산지수 를 구하고 §13 표의 어디에 놓이는지 판정하라.
먼저 풀고 §16 해설과 맞춰 볼 것
§3-3의 가라테 CCDF 표를 그대로 쓴다.
(a) 이다. 이 수를 "34명 중 …"으로 시작하는 문장으로 옮겨라.
(b) 와 두 점으로 기울기와 를 구하라.
(c) (b)의 답을 §6에서 로 구한 과 비교하라. 왜 다른가? 그리고 와 로도 구해서 세 값을 나란히 놓아라.
(d) 위 세 값과 §9의 회귀값(2.281), §11의 최대우도값(2.126)을 모두 모으면 의 범위는 얼마인가? 이 범위를 근거로, 학급 보고서에 "우리 반은 의 척도 없는 네트워크"라고 쓸 수 있는지 판정하고, 대신 쓸 문장을 하나 제안하라.
먼저 풀고 §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을 놓고, 각 마다 ① 정확히 인 개수() ② 이상인 개수()를 센다. 는 위에서부터 누적하는 것이 안전하다.
| 해당 학생 | 누적 | |||||
|---|---|---|---|---|---|---|
| 9 | 9 | 1 | 0.083333 | 1 | ||
| 8 | — | 0 | 0.000000 | 1 | ||
| 7 | 7 | 1 | 0.083333 | 2 | ||
| 6 | — | 0 | 0.000000 | 2 | ||
| 5 | 5 | 1 | 0.083333 | 3 | ||
| 4 | 4 | 1 | 0.083333 | 4 | ||
| 3 | 3,3,3 | 3 | 0.250000 | 7 | ||
| 2 | 2,2,2 | 3 | 0.250000 | 10 | ||
| 1 | 1,1 | 2 | 0.166667 | 12 | ||
| 0 | — | 0 | 0.000000 | 12 |
검산 1 — 사람 수. 0인 칸까지 전부 더한다.
검산 2 — 악수 정리. 0인 항도 생략하지 않는다.
주목할 점: 과 에서 이라 히스토그램에 구멍이 생긴다. 그런데 CCDF는 , 로 끊기지 않는다 — §4에서 말한 차이가 12명짜리 자료에서도 이미 나타난다.
16-2. 연습문제 1 (b) — 푸아송이라면 (Exercise 1(b): If It Were Poisson)
무엇을 곱하는가. 로 를 구하고, 를 반복한다.
| 계산 (앞 값 ) | 기대 | 실제 | 왜 그 값인가 | ||
|---|---|---|---|---|---|
| 0 | 0.0301974 | 0.362 | 0 | 고립 학생이 없다 — 조사 방식상 흔한 일 | |
| 1 | 0.1056908 | 1.268 | 2 | 거의 일치 | |
| 2 | 0.1849590 | 2.220 | 3 | 거의 일치 | |
| 3 | 0.2157855 | 2.589 | 3 | 최빈값 위치가 맞다 | |
| 4 | 0.1888123 | 2.266 | 1 | 실제가 적다 | |
| 5 | 0.1321686 | 1.586 | 1 | 실제가 적다 | |
| 6 | 0.0770984 | 0.925 | 0 | 가운데가 비었다 | |
| 7 | 0.0385492 | 0.463 | 1 | 기대의 2.2배 | |
| 8 | 0.0168653 | 0.202 | 0 | — | |
| 9 | 0.0065587 | 0.079 | 1 | 기대의 12.7배 |
: 실제와 푸아송이 거의 같다(2 vs 1.27, 3 vs 2.22, 3 vs 2.59).
: 실제가 모자란다(1 vs 2.27, 1 vs 1.59, 0 vs 0.93). 중간층이 비었다.
: 실제가 넘친다(1 vs 0.46, 1 vs 0.079).
중간이 비고 양 끝이 채워진 모양 — 이게 쏠림의 전형적 신호다.
16-3. 연습문제 1 (c) — 몇 개 학급당 한 명인가 (Exercise 1(c): One in How Many Classes)
무엇을 계산하는가. 낱개 가 아니라 꼬리 전체 를 쓴다. "차수가 정확히 9"보다 "9 이상"이 물음에 맞는 사건이다.
가라테의 1153개(§5-2)에 비하면 훨씬 약한 신호다. 왜인가? 로는 꼬리를 판정할 힘이 애초에 없기 때문이다. 학년에 12명 학급이 8개면 한 명은 나온다는 뜻이다.
정확한 분포인 이항 으로 다시 하면 , 기대 인원 0.01125명 → 88.9개 학급당 한 명이다. 푸아송보다 10.5배 극단적이다.
에서 차이가 큰 이유는 명확하다. 차수의 상한이 인데 푸아송은 상한이 없어서 12, 15, 20까지 확률을 나눠 준다. 그만큼 꼬리가 부푼다. 분산으로 보면 이항 2.386 대 푸아송 3.500 — 이미 47% 차이다.
실제로 을 2000번 만들어 보면 최대 차수가 9 이상인 경우는 0.4~0.55%(약 200개 학급당 한 번)에 그친다. 은 간선 수까지 고정하므로 분산이 한 번 더 줄기 때문이다(모의 분산 2.197).
세 답이 모두 다르지만(8.4 / 88.9 / ~200) 방향은 하나다 — 그리고 가장 손쉬운 푸아송 계산이 가장 보수적이다. 손 계산으로 푸아송을 쓰되, "적어도 이 정도"로 읽으면 된다.
16-4. 연습문제 1 (d) — 두 점 기울기 (Exercise 1(d): The Two-Point Slope)
무엇을 나누는가. (a) 표에서 두 점을 꺼낸다.
| 점 | |||||
|---|---|---|---|---|---|
| 1 | 3 | 7 | 0.477121 | −0.234083 | |
| 2 | 9 | 1 | 0.954243 | −1.079181 |
비율로 검산. CCDF는 , 즉 배. 는 , 즉 3배.
그런데 이 값을 믿으면 안 된다. 다른 두 점으로 해 보면: → , → . 점 12개짜리 자료에서 가 2.13~2.77로 움직인다. 연습문제 2가 같은 현상을 가라테에서 확인시켜 줄 것이다.
16-5. 연습문제 1 (e) — 분산지수 (Exercise 1(e): The Index of Dispersion)
무엇을 계산하는가. 표본분산이므로 로 나눈다. 편차 제곱을 전부 전개한다 ().
| 차수 | 1 | 1 | 2 | 2 | 2 | 3 | 3 | 3 | 4 | 5 | 7 | 9 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| −2.5 | −2.5 | −1.5 | −1.5 | −1.5 | −0.5 | −0.5 | −0.5 | 0.5 | 1.5 | 3.5 | 5.5 | |
| 6.25 | 6.25 | 2.25 | 2.25 | 2.25 | 0.25 | 0.25 | 0.25 | 0.25 | 2.25 | 12.25 | 30.25 |
§13 표에서 위치: 격자 0 < 무작위 1.03 < 이 학급 1.69 ≈ FMH 1.54 < 가라테 3.28 < BA 5.29.
판정: 무작위(1)보다는 확실히 위지만 가라테(3.28)에는 한참 못 미친다. 약한 쏠림이 있는 반이다.
분산지수는 극단값에 매우 민감한 지표다. 이건 결함이 아니라 설계다 — 우리가 재고 싶은 게 정확히 "극단값이 있는가"이기 때문이다. 다만 그래서 한 명이 결석한 날의 자료로 계산하면 값이 크게 흔들린다는 점은 알고 있어야 한다.
16-6. 연습문제 2 (a) — CCDF를 말로 옮기기 (Exercise 2(a): Putting the CCDF into Words)
무엇을 읽는가. . 분자 10이 인원이다.
같은 자료를 로 읽으면 "정확히 5명인 사람이 3명(8.8%)"이 되어 전혀 다른 인상을 준다. 어느 쪽이 필요한 정보인가? "이 반에 마당발이 얼마나 되나"를 묻는다면 이상() 쪽이다.
16-7. 연습문제 2 (b)(c) — 가 흔들린다 (Exercise 2(b)(c): γ Is Unstable)
무엇을 나누는가. §3-3 표에서 세 쌍을 꺼내 같은 계산을 반복한다.
| 두 점 | 시작 | 끝 | 기울기 | |||
|---|---|---|---|---|---|---|
| −0.819544 | 0.653213 | −1.254636 | 2.254636 | |||
| −1.000000 | 0.531479 | −1.881542 | 2.881542 | |||
| (§6) | −1.204120 | 0.628389 | −1.916202 | 2.916202 |
줄의 검산이 특히 쉽다. CCDF가 , 정확히 배다. 그러므로 이 딱 떨어진다. 는 배이므로
답 (c). : . 세 값은 2.2546 / 2.8815 / 2.9162로 최대 0.66이나 벌어진다.
왜 다른가 — 세 가지 이유:
① 자료가 직선이 아니다. 진짜 거듭제곱이라면 어느 두 점을 골라도 같은 기울기가 나와야 한다. 값이 달라진다는 것 자체가 "직선이 아니다"의 증거다.
② 왼쪽 끝이 기울기를 눕힌다. 에서 로 거의 1이다(34명 중 33명). 로그를 씌우면 , 거의 0이라 세로 변화가 거의 없는 점이다. 이 점을 끼우면 분자가 작아져 기울기가 완만해지고 가 줄어든다. 그래서 거듭제곱 적합에는 반드시 을 둔다(§11에서 plfit이 을 추정한 이유다).
③ 끝점 한 명이 지렛대다. 의 는 단 한 사람이 만든 점이다. 34번이 없었다면 그 점 자체가 사라진다. 로그–로그의 오른쪽 끝은 언제나 표본 1~2개로 결정되는 자리이고, 회귀에서 가장 큰 영향력을 갖는다.
16-8. 연습문제 2 (d) — 그래서 무엇을 쓸 것인가 (Exercise 2(d): So What Should We Use)
무엇을 모으는가. 같은 34명 자료에서 나온 추정치 전부를 한 줄에 세운다.
| 방법 | 근거 | |
|---|---|---|
| 최대우도 (plfit, ) | 2.126 | §11 — 통계적으로 가장 옳은 방법 |
| 두 점 | 2.255 | 연습 2(b) |
| CCDF 전체 회귀 | 2.281 | §9 |
| 두 점 | 2.882 | 연습 2(c) |
| 두 점 | 2.916 | §6 |
같은 자료, 같은 34명인데 방법을 바꾸면 가 2.13에서 2.92까지 움직인다. 폭이 0.79다. 그런데 이론적으로 중요한 구분선들(BA의 3, 분산이 발산하는 3, 평균이 발산하는 2)이 전부 이 폭 안에 들어 있다. 즉 이 자료로는 어느 쪽인지 가릴 수 없다.
""라고 쓰는 것은 소수점 한 자리의 정밀도를 주장하는 것인데, 실제 불확실성은 그 열 배다.
대신 쓸 문장.
"이 학급에서 친구 10명 이상으로 지목된 학생이 2명 있었다. 같은 인원(34명)·같은 지목 수(78개)로 무작위 배치를 200회 모의한 결과, 이만큼 쏠린 경우는 한 번도 나오지 않았다."
근거는 §12다: 무작위 200회의 범위는 2.62~13.90인데 가라테는 2.13으로 그 범위 바깥이고, 가라테보다 꼬리가 두꺼운 경우는 0/200이었다(경험적 ).
이 문장은 ① 추정하지 않고 세기만 하고 ② 비교 기준을 명시하며 ③ 학부모·동료 교사가 그대로 이해할 수 있고 ④ 반박하기 어렵다.
연습 1의 12명 학급도, 연습 2의 34명 가라테도 를 신뢰 있게 추정할 수 없다. 그런데 둘 다 "무작위보다 쏠려 있다"는 것은 확실하게 말할 수 있다 — 연습 1은 로, 연습 2는 무작위 200회 대조로.
학급 규모(20~35명)에서 SNA를 쓸 때 이것이 현실적인 상한선이다. 모형의 이름(척도 없는, 좁은 세상)을 붙이는 일은 포기하고, "무작위와 얼마나 다른가"에 집중하면 정직하면서도 쓸모 있는 결론이 나온다. 그리고 그 비교를 제대로 하는 방법 — 무작위 기준선을 어떻게 만들 것인가 — 이 4-8의 주제다.
다음 단원 예고 — 4-6. 오늘 우리는 차수 분포를 재는 법을 익혔고,
가라테와 FMH가 무작위와 다르다는 것을 확인했다. 그런데 왜 그런 분포가 생기는지는 묻지 않았다.
§8에서 슬쩍 꺼내 쓴 sample_pa — 이게 바라바시–알버트(BA) 모형이다.
"이미 친구가 많은 사람이 새 친구를 더 얻는다"는 규칙 하나로 의 거듭제곱 분포를 만든다.
4-6에서는 그 규칙을 손으로 굴려 보고, 먼저 들어온 사람이 유리한가(first-mover advantage)를
직접 확인한다 — 3월에 만들어진 관계가 1년을 지배하는지에 대한 질문이다.