SNA 이론 · 단계별 학습 차례

단원 1-5Density: Directed vs Undirected

밀도 — 방향과 무방향

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

1. 오늘의 질문 (Today's Question)

단원 1-4에서 지명 7건, 평균 연결정도 1.4를 구했다. 그런데 7건은 많은 걸까 적은 걸까? 5명 학급의 7건과 30명 학급의 7건은 전혀 다른 의미다. 그래서 비율이 필요하다.

밀도(density)=실제로 존재하는 관계 수가능한 관계의 최대 수 \text{밀도(density)} = \frac{\text{실제로 존재하는 관계 수}}{\text{가능한 관계의 최대 수}}

분자는 이미 안다 — i,jA[i,j]=7\sum_{i,j} A[i,j] = 7이다(단원 1-4 §5). 오늘의 전부는 분모를 정확히 세는 것이고, 방향을 따지느냐 마느냐에 따라 분모가 2배 차이난다. 이 하나를 틀리면 밀도가 두 배로 잘못 보고된다.

5명 방향 네트워크
지명 7건. 이 그림에서 "가능한 최대"는 몇 개인가?

2. 분모를 세는 법 — 가능한 관계의 수 (Counting the Denominator)

학생이 n=5n=5명이면 인접행렬은 5×5=255\times 5 = 25칸이다. 하지만 25가 분모는 아니다. 대각선을 뺀다 — 단원 1-1의 약속대로 자기 자신은 지명하지 않으므로(A[i,i]=0A[i,i]=0) 대각선 5칸은 애초에 1이 될 수 없다. 채워질 수 있는 칸을 손으로 세어 보자:

j=1j=1j=2j=2j=3j=3j=4j=4j=5j=5이 행에서 가능한 칸
i=1i=1×4
i=2i=2×4
i=3i=3×4
i=4i=4×4
i=5i=5×4
합계20

한 학생은 자기 자신을 뺀 n1=4n-1 = 4명을 지명할 수 있고, 학생이 n=5n=5명이므로 가능한 지명(방향) 수=n(n1)=5×4=20 \text{가능한 지명(방향) 수} = n(n-1) = 5\times 4 = \mathbf{20} 이것이 255=2025 - 5 = 20(전체 칸에서 대각선을 뺀 것)과 같다는 것도 확인해 두자.

3. 방향 네트워크의 밀도 (Directed Density)

densitydirected=i=1nj=1nA[i,j]n(n1) \text{density}_{\text{directed}} = \frac{\displaystyle\sum_{i=1}^{n}\sum_{j=1}^{n} A[i,j]}{n(n-1)}

분자를 다시 손으로 확인한다. 단원 1-4의 행합 5개를 더하면:

i,jA[i,j]=3M1+1M2+2M3+0M4+1M5=7 \sum_{i,j}A[i,j] = \underbrace{3}_{M_1} + \underbrace{1}_{M_2} + \underbrace{2}_{M_3} + \underbrace{0}_{M_4} + \underbrace{1}_{M_5} = 7 densitydirected=720=0.35 \text{density}_{\text{directed}} = \frac{7}{20} = \mathbf{0.35}

읽는 법. "가능한 지명 20건 중 7건이 실제로 있다 = 35%". 바꿔 말하면 학생 두 명을 순서까지 정해 아무렇게나 뽑았을 때 그 지명이 존재할 확률이 0.35다. 밀도는 항상 0density10 \le \text{density} \le 1이고, 1이면 모두가 모두를 지명한 완전 네트워크다.

4. 무방향 네트워크의 밀도 (Undirected Density)

"누가 누구를 지명했는지"를 버리고 "둘이 연결되어 있는가"만 보면 분모가 절반으로 준다. M1–M2 관계와 M2–M1 관계가 같은 하나가 되기 때문이다:

가능한 관계(무방향) 수=n(n1)2=5×42=10 \text{가능한 관계(무방향) 수} = \frac{n(n-1)}{2} = \frac{5\times4}{2} = \mathbf{10}

손으로 다 적어 보면 정확히 10쌍이다 — {1,2},{1,3},{1,4},{1,5},{2,3},{2,4},{2,5},{3,4},{3,5},{4,5}\{1,2\},\{1,3\},\{1,4\},\{1,5\},\{2,3\},\{2,4\},\{2,5\},\{3,4\},\{3,5\},\{4,5\}.

분자: 대칭화 (Symmetrizing the Matrix)

방향 데이터를 무방향으로 바꿀 때 가장 흔한 규칙은 "둘 중 한 명이라도 지명했으면 연결"이다 (느슨한 규칙, OR). S[i,j]=max(A[i,j],A[j,i])S[i,j] = \max(A[i,j],\,A[j,i])로 쓴다:

S=M1M2M3M4M5M101101M210100M311010M400100M510000 S=\begin{array}{c|ccccc} & M_1 & M_2 & M_3 & M_4 & M_5\\ \hline M_1 & 0 & 1 & 1 & 0 & 1\\ M_2 & 1 & 0 & 1 & 0 & 0\\ M_3 & 1 & 1 & 0 & 1 & 0\\ M_4 & 0 & 0 & 1 & 0 & 0\\ M_5 & 1 & 0 & 0 & 0 & 0 \end{array}

실제 관계 쌍을 손으로 센다. SS는 대칭이므로 1의 개수를 2로 나눈다:

AA에서의 지명SS에서
M1–M2M1→M2 (일방)연결 1
M1–M3M1→M3 M3→M1 (상호)연결 1
M1–M5M1→M5 M5→M1 (상호)연결 1
M2–M3M2→M3 (일방)연결 1
M3–M4M3→M4 (일방)연결 1
나머지 5쌍지명 없음0
엣지 수5
densityundirected=엣지 수n(n1)/2=510=0.5 \text{density}_{\text{undirected}} = \frac{\text{엣지 수}}{n(n-1)/2} = \frac{5}{10} = \mathbf{0.5}

5. 같은 데이터, 두 개의 밀도 (One Dataset, Two Densities)

분자분모밀도답하는 질문
방향지명 7건n(n1)=20n(n-1)=200.35"가능한 지명 중 몇 %가 이루어졌나"
무방향엣지 5개n(n1)/2=10n(n-1)/2=100.50"가능한 관계 중 몇 %가 있나"

둘 다 맞다. 다른 질문에 답한 것이다. 밀도를 보고할 때는 방향을 살렸는지를 반드시 함께 적어야 한다. 0.35와 0.50은 다른 학급의 값이 아니라 같은 학급을 다르게 본 값이다.

왜 정확히 2배가 아닌지 주의: 분모는 정확히 2배지만 분자도 줄었다 (지명 7건 → 엣지 5개, 상호 지명 2쌍이 각각 하나로 합쳐졌다). 그래서 0.35×2=0.70.50.35 \times 2 = 0.7 \neq 0.5이다. 상호 지명이 많을수록 무방향 밀도가 상대적으로 작아진다.

6. 밀도 = 평균 연결정도 ÷ (n−1) (Density as Normalized Mean Degree)

단원 1-4에서 평균 외향 연결정도가 1.4였다. 밀도와의 관계를 식으로 확인한다:

densitydirected=i,jA[i,j]n(n1)=1n1i,jA[i,j]ndˉout=dˉoutn1=1.44=0.35 \text{density}_{\text{directed}} = \frac{\sum_{i,j}A[i,j]}{n(n-1)} = \frac{1}{n-1}\cdot\underbrace{\frac{\sum_{i,j}A[i,j]}{n}}_{\bar{d}_{\text{out}}} = \frac{\bar{d}_{\text{out}}}{n-1} = \frac{1.4}{4} = \mathbf{0.35}

밀도는 "평균 연결정도를 최대 가능치로 나눈 것"이다. 한 학생이 최대 n1=4n-1=4명을 지명할 수 있는데 평균 1.4명을 지명했으니 35%. 즉 밀도와 평균 연결정도는 같은 정보의 두 표현이며, 학급 크기가 다른 두 반을 비교할 때만 밀도가 필요하다.

무방향에서도 같다. SS의 연결정도는 (3,2,3,1,1)(3,2,3,1,1), 합 10, 평균 2이므로 2/(51)=0.52/(5-1) = 0.5 ✓.

7. 밀도는 학급 규모에 끌려간다 (Density Depends on Class Size)

여기가 교실 데이터에서 가장 중요한 주의점이다. "친구 3명을 적어라"는 설문을 학급 규모만 바꿔 실시했다고 하자. 모든 학생이 성실히 3명을 적으면 dˉout=3\bar{d}_{\text{out}} = 3으로 고정인데, 밀도는:

학급 인원 nndˉout\bar{d}_{\text{out}}분모 n(n1)n(n-1)밀도 3/(n1)3/(n-1)
53200.750
103900.333
2033800.158
2536000.125
3038700.103

학생들의 응답이 완전히 똑같아도 밀도는 0.75에서 0.10으로 떨어진다. 분자는 nn에 비례해 늘지만(3n) 분모는 n2n^2에 비례해 늘기 때문이다. 따라서 "우리 반 밀도가 0.1이라 관계가 희박하다"는 해석은 성립하지 않는다 — 지명 개수를 제한한 설문에서 밀도는 주로 학급 규모를 반영한다. 반 크기가 다른 두 학급의 밀도를 직접 비교하는 것도 부적절하다.

그럼 밀도는 언제 쓰는가.같은 학급의 시간 변화(3월 vs 7월, nn 고정) ② 지명 수를 제한하지 않은 설문 ("친구라고 생각하는 사람 모두 적기" — 이때는 dˉ\bar{d}가 자유롭게 변하므로 밀도가 정보를 담는다) ③ 규모가 비슷한 학급끼리의 비교. 그 밖에는 밀도보다 평균 연결정도상호 지명 비율이 해석하기 안전하다.

8. R 검증 (Verification in R)

A <- matrix(c(0,1,1,0,1,
              0,0,1,0,0,
              1,0,0,1,0,
              0,0,0,0,0,
              1,0,0,0,0), 5, 5, byrow = TRUE)
n <- nrow(A)

# 방향 밀도 — 직접 계산
sum(A) / (n * (n - 1))          # 0.35   = 7/20

# 무방향 밀도 — 대칭화 후
S <- pmax(A, t(A))
sum(S) / 2                      # 5      ← 엣지 수
(sum(S)/2) / (n*(n-1)/2)        # 0.5

library(sna)
gden(A, mode = "digraph")       # 0.35  ← 방향
gden(S, mode = "graph")         # 0.5   ← 무방향

# 평균 연결정도와의 관계 (§6)
mean(rowSums(A)) / (n - 1)      # 0.35  ✓
mean(rowSums(S)) / (n - 1)      # 0.5   ✓

mode 인자를 반드시 확인. sna::gden()mode는 분모를 정하는 스위치다 — "digraph"n(n1)n(n-1), "graph"n(n1)/2n(n-1)/2. 대칭 행렬에 mode="digraph"를 쓰면 밀도가 절반으로 나온다. igraph에서는 edge_density(g)가 그래프 객체의 방향성(directed=TRUE/FALSE)을 보고 알아서 분모를 고른다 — 그래서 graph_from_adjacency_matrix()mode가 중요하다.

9. 교실 해석 (Classroom Interpretation)

① 밀도는 학급의 지표, 개인의 지표가 아니다. 연결정도는 학생 한 명마다 나오지만 밀도는 학급에 하나뿐이다. "이 반은 관계가 촘촘한가"라는 질문에만 답할 수 있고, "누가 소외되었나"에는 답하지 못한다. 밀도가 높아도 특정 학생만 고립될 수 있다.

② 낮은 밀도를 문제로 읽지 말 것. §7에서 본 대로 30명 학급에서 3명 지명 설문의 밀도는 구조적으로 0.1 근처다. 이는 정상이다. 낮은 밀도가 문제인 것은 같은 반에서 시간이 갈수록 떨어질 때다.

③ 방향/무방향 선택이 해석을 바꾼다. 우리 예제에서 방향 밀도 0.35는 "지명 행위가 얼마나 활발한가"를, 무방향 밀도 0.5는 "서로 아는 사이가 얼마나 퍼져 있는가"를 말한다. 소문·정보 확산을 보려면 방향(누가 누구에게 말하나)이 중요하고, 모둠 편성처럼 "같이 지낼 수 있는 사이"를 보려면 무방향이 적절하다.

④ 대칭화 규칙도 선택이다. 우리는 OR 규칙(한 명이라도 지명하면 연결)을 썼다. AND 규칙(둘 다 지명해야 연결, S[i,j]=A[i,j]A[j,i]S[i,j] = A[i,j]\cdot A[j,i])을 쓰면 엣지가 2개(M1–M3, M1–M5)로 줄고 밀도는 2/10=0.22/10 = 0.2가 된다. 같은 데이터로 0.2, 0.35, 0.5 세 값이 다 나올 수 있다 — 그래서 어떤 규칙을 썼는지 밝히는 것이 수치보다 중요하다.

⑤ 밀도보다 유용한 짝 지표. 학급 진단에는 밀도와 함께 상호 지명 비율(단원 1-2: tr(A2)/2\operatorname{tr}(A^2)/2 ÷ 엣지 수)을 보는 것이 좋다. 우리 예제는 상호 2쌍 / 관계 5쌍 = 0.4다. 밀도가 같아도 상호성이 높은 학급은 관계가 더 안정적이다.

10. 연습문제 (Exercises)

문제 1. 학생 7명의 무방향 친구관계에 엣지가 8개 있다(단원 1-8에서 쓸 예제다). ① 가능한 관계의 최대 수를 n(n1)/2n(n-1)/2로 구하고 ② 밀도를 소수 네 자리까지 구하고 ③ 평균 연결정도를 구한 뒤 dˉ/(n1)\bar{d}/(n-1)이 ②와 같은지 확인하시오.

문제 2. 우리 5명 네트워크에서 M4가 M1과 M3을 지명했다고 하자 (A[4,1]=A[4,3]=1A[4,1]=A[4,3]=1 추가, 지명 총 9건). ① 새 방향 밀도를 구하시오. ② 대칭화(OR)했을 때 엣지 수와 무방향 밀도는 어떻게 되는가? ③ 방향 밀도는 797 \to 9로 늘었는데 무방향 밀도는 얼마나 늘었는가? 왜 증가 폭이 다른지 설명하시오.

먼저 스스로 풀고 §11 해설과 맞춰 볼 것.

11. 연습문제 해설과 답 (Solutions)

11-1. 문제 1 — 7명·엣지 8개 (Undirected Density, n=7)

① 분모. n=7n=7이므로 한 학생은 6명과 관계를 맺을 수 있고, 쌍을 중복 없이 세면:

n(n1)2=7×62=422=21 \frac{n(n-1)}{2} = \frac{7 \times 6}{2} = \frac{42}{2} = \mathbf{21}

② 밀도.

density=821=0.3809520.3810 \text{density} = \frac{8}{21} = 0.380952\ldots \approx \mathbf{0.3810}

③ 평균 연결정도로 검산. 무방향에서 연결정도의 합은 엣지 수의 2배다 (악수 정리, 단원 1-4 §5) — 엣지 하나가 양쪽 학생에게 각각 1씩 기여하므로:

id(i)=2×8=16dˉ=167=2.2857dˉn1=2.28576=0.3810   \sum_i d(i) = 2 \times 8 = 16 \qquad \bar{d} = \frac{16}{7} = 2.2857\ldots \qquad \frac{\bar{d}}{n-1} = \frac{2.2857}{6} = \mathbf{0.3810} \;\checkmark

① 21쌍 ② 밀도 8/210.38108/21 \approx 0.3810dˉ=16/72.29\bar{d} = 16/7 \approx 2.29, dˉ/60.3810\bar{d}/6 \approx 0.3810 — ②와 일치 ✓

실수하기 쉬운 곳: ③에서 d=8\sum d = 8로 놓으면 밀도가 절반으로 나온다. 무방향에서는 d=2E\sum d = 2E임을 기억할 것. 방향 네트워크에서는 dout=E\sum d_{\text{out}} = E(2배 아님)라는 점과 헷갈리지 않도록, "엣지 하나에 화살촉이 몇 개 붙는가"로 생각하면 된다 — 무방향은 양쪽 2개, 방향은 나가는 쪽 1개.

11-2. 문제 2 — 지명 2건 추가 (Adding Two Ties)

새 행렬(추가된 칸을 빨강으로):

A=M1M2M3M4M5M101101M200100M310010M410100M510000 A''=\begin{array}{c|ccccc} & M_1 & M_2 & M_3 & M_4 & M_5\\ \hline M_1 & 0 & 1 & 1 & 0 & 1\\ M_2 & 0 & 0 & 1 & 0 & 0\\ M_3 & 1 & 0 & 0 & 1 & 0\\ M_4 & \color{#dc2626}{1} & 0 & \color{#dc2626}{1} & 0 & 0\\ M_5 & 1 & 0 & 0 & 0 & 0 \end{array}

① 방향 밀도. 분자만 바뀐다(nn이 그대로이므로 분모 20 고정):

densitydirected=920=0.45 \text{density}_{\text{directed}} = \frac{9}{20} = \mathbf{0.45}

② 대칭화. 추가된 두 지명이 기존 쌍에 겹치는지를 하나씩 확인해야 한다:

추가 지명그 쌍이 이미 있었나새 엣지인가
M4→M1M1–M4 쌍: A[1,4]=0A[1,4]=0, A[4,1]A[4,1]이 새로 1 → 없었다새 엣지 ✓
M4→M3M3–M4 쌍: 이미 M3→M4가 있었다이미 있음 — 상호 지명이 될 뿐
엣지 수=5+1=6densityundirected=610=0.6 \text{엣지 수} = 5 + 1 = 6 \qquad \text{density}_{\text{undirected}} = \frac{6}{10} = \mathbf{0.6}

① 방향 밀도 9/20=0.459/20 = 0.45 ② 엣지 6개, 무방향 밀도 6/10=0.66/10 = 0.6 ③ 방향은 0.350.450.35 \to 0.45 (+0.10+0.10), 무방향은 0.50.60.5 \to 0.6 (+0.10+0.10) — 증가 폭은 우연히 같지만, 늘어난 개수는 다르다(지명 2건 vs 엣지 1개).

왜 그런가: M4→M3이미 존재하던 M3–M4 쌍에 반대 방향을 채운 것이다. 방향 밀도에서는 새 칸 하나로 계산되지만, 무방향에서는 이미 연결된 쌍이라 아무것도 늘지 않는다. 즉 상호 지명은 방향 밀도만 올리고 무방향 밀도는 올리지 않는다. (증가 폭 0.10이 같아진 것은 분모 비가 2:1이고 늘어난 개수 비가 2:1이어서 상쇄된 결과다.)

교실 해석. M4가 이름 두 개를 적었을 때 학급에 실제로 새로 생긴 관계는 하나(M1–M4)뿐이다. 나머지 하나(M3–M4)는 이미 있던 관계가 상호 확인된 것이다. 관계의 "개수"가 늘었는지 "질"이 좋아졌는지를 구별하려면 방향 밀도만 보면 안 되고 상호 지명 수(단원 1-2)를 함께 봐야 한다. 이 경우 상호 지명은 2쌍에서 3쌍으로 늘었다.
# 문제 1
n <- 7; E <- 8
E / (n*(n-1)/2)           # 0.3809524
(2*E/n) / (n-1)           # 0.3809524  ✓

# 문제 2
A2 <- A; A2[4,1] <- 1; A2[4,3] <- 1
sum(A2) / (5*4)                       # 0.45
S2 <- pmax(A2, t(A2)); sum(S2)/2      # 6
(sum(S2)/2) / (5*4/2)                 # 0.6
sum(diag(A2 %*% A2)) / 2              # 3   ← 상호 지명 2쌍 → 3쌍

다음 단원 — 1-6: 측지거리(geodesic distance) — AkA^k에서 최단거리를 읽어내기. 단원 1-3에서 AkA^k가 걷기를 센다고 했는데, "처음 1이 등장하는 kk"는 최단거리라는 정확한 정보를 준다. · 이 문서: notes/05_단원1-5_밀도_방향과_무방향.html