Graph- Assortative

Sylen·2025년 1월 4일

아래 내용은 M. E. J. Newman이 2003년 Physical Review E 67권에 게재한 논문, “Mixing patterns in networks” (doi: 10.1103/PhysRevE.67.026126) 일부 발췌본입니다. 이 논문은 네트워크 상에서 서로 유사한(또는 상이한) 노드들이 실제로 얼마나 선호적으로 연결되는가(동질혼배·이질혼배 경향)를 측정하고, 이러한 혼배(assortative/disassortative) 양상이 네트워크 구조와 동역학적 특성(거대성분, 전염/파급, 회복 탄력성 등)에 어떻게 영향을 주는지를 이론·실증·시뮬레이션 측면에서 다룹니다.

본 답변에서는 수식, 개념, 원리를 중심으로 최대한 자세하고 친절하게 정리하고자 합니다.


1. 서론(Introduction)

1.1 네트워크 분석에서 혼배(Assortative/Disassortative Mixing)의 중요성

현대 통계물리학은 분자·원자계뿐 아니라 경제, 생태계, 사회망, 인터넷 등 ‘복잡계 시스템’으로 확장되어 왔습니다. 이러한 복잡계는 보통 전통적 격자(lattice)가 아닌 보다 일반적이고 불규칙한 네트워크 구조를 형성합니다. 따라서 네트워크 구조와 동역학을 함께 살펴보는 일이 중요해졌는데, 그동안 많이 연구되어 온 성질로는

  • 소규모 세상(small-world) 효과
  • 클러스터링(clustering) 계수
  • 차수 분포(degree distribution)
    등이 있습니다.

이 논문에서는 노드 속성에 따른 혼배(assortative mixing, disassortative mixing) 현상에 주목합니다. 예를 들어,

  • 소셜 네트워크에서 “비슷한 인종/언어/나이”를 가진 사람들끼리 더 잘 연결되는지 여부(동질혼배)
  • 인터넷/생물학 네트워크에서 “고차수 노드가 다른 고차수 노드와 연결되는지” 여부
    등을 혼배 계수(assortativity coefficient) 로 정량화할 수 있고, 이것이 네트워크 구조에 큰 영향을 준다는 점을 보여줍니다.

1.2 논문 개요

  1. 혼배(assortativity) 측정:
    • 이산형 속성(인종, 언어) → 혼합 행렬 (\boldsymbol{e} = (e_{ij}))
    • 스칼라 속성(나이, 소득, 차수) → Pearson 상관 계수 방식
    • 이 중 특히 “차수(degree)에 따른 혼배”를 집중 분석
  2. 실제 네트워크에서의 혼배:
    다양한 실증 예시(사회·기술·생물학 네트워크)를 살펴본 결과, 사회망은 보통 양의 혼배(동질혼배), 기술·생물망은 음의 혼배(이질혼배) 경향.
  3. 모델링 & 시뮬레이션:
    • 혼배를 반영하는 확률적 그래프 생성 모델(생성함수, Monte Carlo 등)
    • 혼배 수준(r)을 바꿔가며 구조적 특성(거대성분 형성 임계점, 탄력성 등) 관찰
  4. 주요 결과:
    • 양(+)의 혼배(assortative) 네트워크는 더 적은 연결로도 거대성분(giant component)을 형성하지만, 거대성분의 최종 크기는 작을 수 있음.
    • 동시에, 양(+)의 혼배가 있으면 네트워크가 고차수 노드를 제거하는 공격(targeted attack)에 대해 더 견고(robust)함.

2. 이산형 속성에 대한 혼배(Discrete assortativity)

2.1 혼합 행렬 (e_{ij})

  • (\displaystyle e_{ij}): 그래프에서 임의의 간선을 뽑았을 때, “한쪽 끝은 속성 i, 반대쪽 끝은 속성 j”가 될 확률.
  • (\displaystyle \sum{i,j} e{ij} = 1).
  • 이때,
    [
    ai = \sum_j e{ij},
    \quad
    bj = \sum_i e{ij}
    ]
    로 정의.
    • 무방향 그래프면 (a_i = b_i).
    • 예) 인종, 언어, 컨퍼런스 분류 등.

예시: 샌프란시스코의 이성애 성접촉 네트워크

  • 인종(흑인, 히스패닉, 백인, 기타)별로 남/여 간 성접촉 비율 행렬을 구성하면, 특정 인종끼리의 접촉이 훨씬 잦은 양상(동질혼배)을 확인.

2.2 혼배 계수(assortativity coefficient) (r)

  • Newman의 식 (이산 속성의 경우):
    [
    r \;=\; \frac{\sum{i} e{ii} \;-\; \sum_i a_i b_i }{1 \;-\; \sum_i a_i b_i} \;=\; \frac{\mathrm{Tr}(\mathbf{e}) - |\mathbf{e}^2|}{1 - |\mathbf{e}^2|}.
    ]
    • “대각 합(동일 속성끼리 연결된 간선 비중)이 무작위 기대값((\sum_i a_i b_i))에 비해 얼마나 큰가”를 정규화한 것.
    • (r > 0)이면 동질혼배(같은 속성끼리 연결), (r < 0)이면 이질혼배(다른 속성끼리 연결), (r=0)이면 무작위.
  • Jackknife 방법으로 표준 오차(분산)도 추정 가능.

2.3 모델링

  • 이산형 속성을 가지는 노드 집합이 있고, 혼합 행렬 (\mathbf{e})가 주어졌을 때,
    • 이행확률을 충족하는 랜덤 그래프 모델(“generalized random graph with assortative mixing”)을 구성할 수 있음.
  • 생성함수(generating function) 기법으로 평균 성분 크기, 거대성분 형성 임계점 등을 계산 가능.

2.4 시뮬레이션

  • 실제로 (\mathbf{e})를 만족하는 무작위 네트워크를 만들려면,
    • (1) 간선의 양 끝이 (i, j)가 될 확률이 (e_{ij})가 되도록 표본화,
    • (2) 노드별로 정해진 차수 분포에도 맞춰야 함(이는 조금 복잡: 정합 알고리즘, Metropolis-Hastings 등).

3. 스칼라 속성에 대한 혼배(Scalar assortativity)

3.1 일반적인 스칼라 값(나이, 소득 등)

  • 노드가 “나이 (x)”를 가진다고 하면, (\displaystyle e_{xy}) = “한 간선의 양 끝 노드가 (x, y)값을 갖는 확률”.
  • 만약 연속형이면 이산화(빈)해서 사용 가능.
  • 혼배 계수는 Pearson 상관 계수 형태로:
    [
    r \;=\; \frac{\sum{xy} (x - \overline{x})(y - \overline{y})\, e{xy}}{\sigma_x \sigma_y}.
    ]
  • 예) 결혼 파트너 나이, 혼인/커플 통계에서 명확한 양의 상관(동질혼배) 확인 가능.

3.2 혼배의 특수 예시: “차수(degree)”에 따른 혼배

  • 모든 네트워크에서 노드 차수는 항상 정의되어 있음 → 데이터 부족 없이 혼배 파악 가능.
  • “고차수 노드끼리 서로 연결되는가?” → 사회망에서는 보통 고차수 노드가 고차수 노드와 연결(양의 혼배), 기술·생물망은 음의 혼배.

(1) (\mathbf{e}_{jk}) 정의

  • (\displaystyle e_{jk}): 간선 하나를 뽑았을 때, 간선이 잇는 양 끝 노드의 초과 차수(excess degree)가 (j, k).
  • 여기서 초과 차수는 “전체 차수 - 1”로서, 간선을 따라 들어간 노드에서 남은 다른 간선 수.
  • 혼배 계수 (무방향 그래프):
    [
    r \;=\; \frac{\sum{j,k} j\,k \,\bigl(e{jk} - q_j\,q_k\bigr)}{\sigma_q^2},
    ]
    (\displaystyle q_k)는 “한 간선을 무작위 뽑았을 때, 그 간선이 닿은 노드의 초과 차수가 (k)일 확률”,
    (\displaystyle \sigma_q^2)는 그 분포의 분산.
  • 계산 시, 실제 데이터에 대해서는
    [
    r \;=\; \frac{\sum{i} (j_i)(k_i) - \tfrac{1}{M}\bigl(\sum{i} ji \bigr) \bigl(\sum{i} ki \bigr)}{
    \sqrt{ \bigl[\sum
    {i} ji^2 - \tfrac{1}{M}\bigl(\sum{i} ji \bigr)^2\bigr]
    \bigl[\sum
    {i} ki^2 - \tfrac{1}{M}\bigl(\sum{i} k_i \bigr)^2\bigr]
    }
    }.
    ]
    여기서 ((j_i, k_i))는 (i)-번째 간선이 잇는 두 노드의 초과 차수, (M)은 간선 수.

(2) 실증 결과

  • 논문 표(“Table II”)에 보면,
    • 사회망(과학자 협업, 배우 협업, 기업 이사 등)은 보통 (r>0).
    • 기술/생물망(인터넷, 웹, 전력망, 대사·단백질 상호작용, 식물-동물 먹이그물)은 (r<0).
  • 해석:
    • 사회망: 고차수(사교성이 높은) 사람끼리 연결되는 경향.
    • 인터넷 등: 반대로, 고차수 라우터는 저차수 노드(소비자)와 연결되는 경향 → 음의 혼배.

4. 혼배가 네트워크 구조에 미치는 영향

4.1 거대성분 형성(Percolation)

  • 네트워크를 점진적으로 밀도 높여갈 때, “거대성분(giant component)”이 나타나는 임계점을 혼배가 어떻게 바꾸는지 분석.
  • 양(+) 혼배(assortative)인 경우:
    • 고차수 노드끼리 모여 “코어 그룹” 형성 → 부분적으로만 연결이 치밀해도 빠르게(더 낮은 밀도에서) 거대성분 생성.
    • 대신 거대성분의 최종 크기는 작을 수 있음(코어에만 국한).
  • 음(−) 혼배(disassortative)인 경우:
    • 네트워크 전반이 균등하게 연결 → 임계점이 더 높음(더 많은 간선 필요)
    • 하지만 충분히 간선이 많아지면 더 큰 거대성분이 형성될 수 있음.

4.2 노드 제거(공격, 면역) 시의 탄력성(Robustness)

  • Targeted attack: “차수가 가장 큰 노드부터” 순차 제거할 경우, 거대성분 붕괴 시점을 혼배에 따라 비교.
    • 양(+) 혼배면 고차수 노드가 한 덩어리에 집중되어 있어, 그들만 제거해도 다른 부위(저차수 영역)는 아직 어느 정도 연결 유지 → 네트워크가 쉽게 붕괴되지 않는다(= 더 견고함).
    • 음(−) 혼배면 고차수 노드가 네트워크 도처에 분산 → 동시에 전 영역에 큰 타격. 따라서 비교적 취약.
  • 결과적으로, 사회망(+)은 전염병 방지(고차수 노드 백신) 시에도 쉽사리 거대성분이 붕괴되지 않아, 역설적으로 전염병 제어가 어렵다는 가능성을 시사.
  • 반면 기술망(−)(예: 인터넷)은 공격(주요 허브 노드 제거)에 매우 취약 → 공격이나 장애 대비가 어렵다.

5. 결론(Conclusions)

  1. 혼배(assortative mixing)의 일반성
    • 사람들은 보통 자신과 유사한 특성을 가진 사람들과 연결(언어, 인종, 연령 등). → 이산형 속성의 혼합 행렬 (e_{ij}).
    • 노드가 갖는 스칼라 값(나이, 차수)에 대해서도 양/음의 상관 관계가 나타남.
    • 사회망은 대부분 양(+) 혼배, 기술/생물망은 음(−) 혼배가 주로 발견됨.
  2. 혼배가 구조에 미치는 영향
    • 양(+) 혼배: 코어 그룹 형성 → 거대성분 임계점 낮음, 하지만 그 외 구역과 분리될 가능성.
    • 탄력성 증가: 고차수 노드만 빼내도 붕괴가 쉽게 일어나지 않음 → 전염병 제어가 오히려 어려움.
  3. 모델과 시뮬레이션
    • 혼배를 반영한 확률적 그래프 모델을 생성(생성함수 접근, Monte Carlo).
    • 시뮬레이션으로 거대성분 형성 시점, 공격 시 탄력성, 전염병 확산 등을 정량적으로 살핌.
  4. 시사점
    • 실제로 전염병 네트워크(성접촉망, 소셜 미디어망 등)가 강한 양의 혼배를 가진다면, 허브 중심 방어(백신)도 생각만큼 효과가 크지 않을 수 있음.
    • 반면, 인터넷(음의 혼배)은 고차수 노드(허브)만 공격당해도 전체 붕괴 위험이 큼.

6. 핵심 공식·개념 정리

  1. 이산 속성 혼배 계수
    [
    r \;=\; \frac{\sumi e{ii} - \sumi a_i b_i}{1 - \sum_i a_i b_i},
    \quad
    e
    {ij} = \text{“간선이 (i,j) 속성을 잇는 확률”}.
    ]
  2. 스칼라 속성 혼배 계수 (Pearson 상관 계수 형태)
    [
    r \;=\; \frac{\sum{x,y} (x - \overline{x})(y - \overline{y})\, e{xy}}{\sigma_x \sigma_y}.
    ]
  3. 차수 기반 혼배 계수
    • 무방향일 때
      [
      r \;=\; \frac{\sum{jk} j k \bigl(e{jk} - qj q_k\bigr)}{\sigma_q^2},
      ]
      (\displaystyle e
      {jk}) = 간선이 잇는 초과 차수((j,k)) 분포,
      (\displaystyle q_j) = 한 간선을 무작위 골랐을 때 한쪽 끝 노드가 초과 차수 (j)일 확률.
  4. 잭나이프(jackknife) 추정으로 통계적 오차(분산) 가능.

7. 마무리

Newman의 “Mixing patterns in networks” 논문에서 제시된 바와 같이, 네트워크에서의 혼배는 다음을 보여주는 중요한 개념임을 강조합니다.

  • ‘서로 유사한 노드’끼리의 연결 선호(동질혼배) vs ‘서로 다른 노드’끼리의 연결 선호(이질혼배)
  • 이는 단순 통계적 흥미에 그치지 않고, 거대성분 형성 임계점, 전염병 확산 가능성, 네트워크 공격에 대한 탄력성 등 핵심 구조/동역학적 특성에 직결.
  • 사회망(사람들의 선택, 사교)과 기술망(인터넷, 전력망)에서 정반대의 경향(r>0 vs r<0)이 나타남 → 이론/실증 모두 검증.

이 논문은 소셜 네트워크, 통신/컴퓨터 네트워크, 생물학 네트워크 분석에서 혼배 계수를 실제 데이터에 적용하고, 확률적 모델링을 통해 혼배가 가져오는 구조적 결과를 정교하게 보여준 대표적 연구로 꼽힙니다. 특히 사회에서 흔히 쓰이는 허브 중심 방역/공격 등과 관련해 실제 혼배의 방향성이 중요한 역할을 한다는 점을 부각함으로써, 네트워크 이론이 가지는 실질적 함의를 잘 보여줍니다.

아래 튜토리얼은 graph-tool 라이브러리에서 제공하는 assortativity 함수를 사용해 네트워크의 어소러티비티(assortativity) 계수를 구하는 방법을 예시 코드를 통해 자세하게 설명합니다. 초보자도 이해하기 쉽게 파이썬 코드 및 주석을 포함했으며, 이어서 결과 해석과 확장 아이디어까지 함께 다룹니다.


1. 어소러티비티(Assortativity)란?

  • 정의
    네트워크에서 유사한(혹은 동일한) 속성을 가진 노드들끼리 서로 더 많이 연결되는 경향이 있는지(또는 반대인지)를 나타내는 지표입니다.

    • 예를 들어, “고차수(degree가 큰) 노드들끼리 연결이 많이 되어 있다면?” 혹은 “비슷한 성격의 노드들끼리 주로 연결되어 있다면?” 등을 측정하는 값으로, 일반적으로 (-1)에서 (+1) 사이 값을 가집니다.
    • 양의 값이면 ‘같은 종류의 노드들끼리 연결되려는 성향이 있다’(동질혼배),
      음의 값이면 ‘서로 다른 종류의 노드끼리 연결되려는 성향이 있다’(이질혼배),
      0에 가까우면 ‘무작위 수준’ 정도를 의미.
  • 공식
    [
    r = \frac{\sum{i} e{ii} - \sum{i} a_i b_i}{1 - \sum{i} ai b_i}
    ]
    여기서 (e
    {ij})는 유형(혹은 속성) (i)에서 (j)로 가는 (또는 연결되는) 간선 비율,
    (ai = \sum_j e{ij}), (bj = \sum_i e{ij}).

    • 자세한 설명은 Newman (2003) 논문[^newman2003]에 잘 나와 있습니다.
    • graph-tool에서는 이 계산 과정을 내부적으로 처리해주며, 결과로 “어소러티비티 계수 (r)”와 “그 계수의 추정 분산(variance)”을 반환합니다.

[^newman2003]: M. E. J. Newman, “Mixing patterns in networks”, Phys. Rev. E 67, 026126 (2003).


2. graph_tool의 assortativity 함수 개요

graph_tool.correlations.assortativity(g, deg, eweight=None)
  • 매개변수

    1. g: Graph 객체(분석 대상 그래프).
    2. deg:
      • 문자열 "in", "out", "total" 중 하나를 주어 노드의 차수(degree) 기반 어소러티비티를 계산할 수도 있고,
      • 혹은 VertexPropertyMap(노드별 어떤 속성)을 직접 전달해서 그 속성 기반의 어소러티비티를 계산할 수도 있음.
        • 예: 노드의 “인구”, “카테고리”, “그룹 ID” 등.
    3. eweight: EdgePropertyMap(간선 가중치)이 있을 경우 지정, 없으면 간선 가중치는 1로 간주.
  • 반환값

    • (r, var):
      • (r): 계산된 어소러티비티 계수(단일 실수)
      • var: 잭나이프(jackknife) 방식으로 추정한 분산값.

3. 간단 예제: 차수 기반 어소러티비티

아래 예제는 graph-tool에 내장된 예시 그래프 중 하나인 "pgp-strong-2009"를 불러와서 무방향 그래프(undirected)로 만든 뒤, 차수 기반 어소러티비티 계수를 계산합니다.

# assortativity_tutorial.py

import graph_tool.all as gt
import numpy as np

def main():
    # 예시 그래프 로드 (PGP strong giant component, 2009)
    g = gt.collection.data["pgp-strong-2009"]
    # 무방향 버전으로 보기 위해 GraphView 사용
    g_undirected = gt.GraphView(g, directed=False)
    
    # 1) 차수 "out"을 사용해 어소러티비티 계산 (단방향 그래프라도 out-degree 사용 가능)
    r_out, var_out = gt.assortativity(g_undirected, "out")
    print("[차수 기반 어소러티비티: out-degree]")
    print(f"- r_out = {r_out:.6f}")
    print(f"- var_out = {var_out:.6f}")
    
    # 2) total-degree (in + out) 사용
    #    무방향 그래프에서는 사실상 in/out/total이 큰 차이 없음
    r_total, var_total = gt.assortativity(g_undirected, "total")
    print("\n[차수 기반 어소러티비티: total-degree]")
    print(f"- r_total = {r_total:.6f}")
    print(f"- var_total = {var_total:.6f}")
    
    # 예: 결과 해석
    # r이 0.02 정도면, 차수가 비슷한 노드들끼리 조금 더 연결되는 경향이 (아주 약하게) 있을 수도 있다.
    # var가 매우 작다면, 통계적으로 유의미할 수 있음. (정밀도 확인 필요)
    
if __name__ == "__main__":
    main()

코드 상세 설명

  1. 그래프 불러오기
    g = gt.collection.data["pgp-strong-2009"]
    • graph-tool에 내장된 PGP 웹오브트러스트(WoT) 그래프의 강결합(giant component) 부분을 로딩.
  2. 무방향으로 변환
    g_undirected = gt.GraphView(g, directed=False)
    • GraphView를 통해 그래프를 무방향 취급(undirected)으로 본다고 선언.
    • 차수 기반 어소러티비티는 보통 무방향 맥락에서 많이 계산되므로 이렇게 설정.
  3. assortativity(g_undirected, "out")
    • 차수 정보를 "out"으로 취급하여 어소러티비티를 계산.
    • 무방향 그래프면 실제론 in/out 차이가 없지만, 편의상 "out"으로 표기.
  4. (r_out, var_out) = 결과 해석
    • r_out: 어소러티비티 계수,
    • var_out: 그 계수의 분산(variance).
    • 분산이 낮으면 계수 추정이 비교적 안정적이라는 의미.

4. 속성(PropertyMap) 기반 예제

만약 노드별로 특정 범주나 실수값 속성이 있는 경우, 그 속성을 바탕으로 어소러티비티를 계산할 수도 있습니다.

4.1 노드별 “무작위 그룹” 속성 부여 예시

import graph_tool.all as gt
import numpy as np

def create_node_property_map(g, num_groups=5):
    """
    그래프 g의 각 노드에 0 ~ (num_groups-1) 범위의 그룹 ID를 무작위로 부여하는 예시.
    """
    group_prop = g.new_vertex_property("int")  # int형 property
    for v in g.vertices():
        group_prop[v] = np.random.randint(num_groups)
    return group_prop

def main():
    g = gt.collection.data["pgp-strong-2009"]
    g_undirected = gt.GraphView(g, directed=False)
    
    # 노드별로 그룹 속성 부여
    group_prop = create_node_property_map(g_undirected, num_groups=5)
    
    # assortativity 계산 (deg 대신 group_prop 사용)
    r_group, var_group = gt.assortativity(g_undirected, group_prop)
    
    print("[노드 그룹 속성 기반 어소러티비티]")
    print(f"- r_group = {r_group:.6f}")
    print(f"- var_group = {var_group:.6f}")

if __name__ == "__main__":
    main()

코드 상세 설명

  1. group_prop = g.new_vertex_property("int"): 정수형 VertexPropertyMap 생성.
  2. group_prop[v] = np.random.randint(num_groups): 노드마다 0~4 사이 임의 그룹 부여.
  3. gt.assortativity(g_undirected, group_prop): 노드 속성(group_prop)을 바탕으로, 두 노드가 동일 그룹인지 아닌지를 조사해 어소러티비티 계산.
    • 결과가 양의 값이면, 같은 그룹끼리 연결되는 경향이 (무작위 대비) 더 높다는 것을 의미할 수 있음.
    • 음수면 반대로, 다른 그룹끼리 연결 경향이 더 높다는 뜻.

5. 가중치(Edge Weight) 고려

  • eweight 파라미터EdgePropertyMap을 주면, 간선별 가중치가 있을 때 이를 반영한 어소러티비티를 계산할 수 있음.
  • 예: “두 노드를 잇는 간선에 ‘교통량’, ‘상호작용 강도’, ‘통행 빈도’ 등의 가중치가 있을 경우” 그 영향력을 고려한 계수를 얻을 수 있음.
def assign_random_edge_weights(g):
    """
    간단 예시: 1~10 범위 랜덤 가중치 할당
    """
    w_prop = g.new_edge_property("double")
    for e in g.edges():
        w_prop[e] = np.random.uniform(1, 10)
    return w_prop

def main():
    g = gt.collection.data["pgp-strong-2009"]
    g_undirected = gt.GraphView(g, directed=False)
    
    # 노드별 그룹 속성 (예시)
    group_prop = create_node_property_map(g_undirected, num_groups=5)
    # 간선별 가중치
    weight_prop = assign_random_edge_weights(g_undirected)
    
    # 가중치 고려한 어소러티비티
    r_w, var_w = gt.assortativity(g_undirected, group_prop, eweight=weight_prop)
    print("[가중치 고려된 어소러티비티]")
    print(f"- r_w = {r_w:.6f}, var_w = {var_w:.6f}")

6. 계산 결과 해석 팁

  1. (r > 0): 비슷한 속성(혹은 차수)이거나 같은 범주의 노드들이 연결되는 경향(동질혼배, assortative mixing).
  2. (r < 0): 이질혼배(disassortative mixing), 즉 서로 다른 속성을 가진 노드끼리 연결 선호.
  3. (r \approx 0): 무작위에 가까운 연결 패턴.

예: 차수-어소러티비티가 양수

  • ‘고차수 노드’가 ‘고차수 노드’와 연결, ‘저차수 노드’끼리 연결되려는 경향이 있다는 의미.
    소셜 네트워크(유명인(고차수)끼리 친한 경우) 등에 흔히 나타남.

예: 차수-어소러티비티가 음수

  • ‘고차수 노드’가 ‘저차수 노드’와 연결되는 경향이 강한 경우.
    기술·생물학 네트워크 등에서 흔히 발견(허브-리프 구조).

7. 튜토리얼 요약 & 추가 아이디어

  • assortativity 함수를 이용해 간단히 네트워크가 같은 유형/범주의 노드들끼리 뭉쳐있는지 측정할 수 있음.
  • 차수 기반 뿐 아니라, 노드 임의 속성(숫자, 범주형 등)으로도 혼배 성향을 평가 가능.
  • 가중치 매개변수를 통해 간선의 중요도(트래픽, 상호작용 강도 등)를 반영할 수 있음.
  • 잭나이프(jackknife) 기반 분산 값도 함께 제공되어, 추정의 신뢰도를 가늠할 수 있음.

추가 아이디어

  1. 속성 전처리: 노드 속성이 연속형(예: 인구, 소득)일 때, 범주화(binning)하여 어소러티비티 계산하면 정성적 판단 가능.
  2. 부분 그래프(subgraph): GraphView 등을 사용해 특정 노드들만 필터링한 뒤, 부분 그래프의 어소러티비티 변화를 비교해볼 수도 있음.
  3. 시간에 따른 변화: 동적인 네트워크(시계열 데이터)가 있으면, 각 시점별 어소러티비티를 계산해 “동질혼배 성향이 강화/약화”되는 추이를 살펴볼 수 있음.
  4. 교통망 해석:
    • 노드 차수 → 교차로(노드)의 연결도로 수,
    • 혹은 노드 속성 → ‘유동인구 규모’나 ‘상업지구/주거지구’ 등.
    • 어소러티비티가 높다면, 비슷한 교차로끼리 연결되는 경향(예: 복잡한 큰 교차로들끼리 고속도로로 직결).
    • 음수라면 상이한 특성(대형 교차로 - 소형 교차로)이 더 짝지어짐을 의미할 수도 있음.

8. 마무리

이상으로 graph-tool 라이브러리의 assortativity 함수를 활용하여, 네트워크 어소러티비티 계수를 구하는 방법과 예시 코드를 살펴보았습니다.

  • 핵심 포인트:
    1. deg 인자로 "out", "in", "total"을 주면 ‘차수’ 기반 계산이 간단히 가능.
    2. 임의의 VertexPropertyMap을 제공하면, 해당 속성 기반의 혼배 성향을 수치화 가능.
    3. 반환되는 분산(variance)을 함께 봄으로써 결과 신뢰도를 가늠.
    4. 가중치(eweight)가 있는 네트워크라면, 그 중요도를 반영한 척도를 구할 수 있음.

네트워크에서 “비슷한 노드들끼리 연결될까, 다르면 연결될까?”라는 질문은 여러 응용(사회망, 교통망, 생물망, 기술망 등)에서 중요한 통찰을 줍니다. 이 튜토리얼이 차수 혼배 수준, 속성 혼배 경향 등을 파악하는 데 도움이 되길 바라며, 보다 정교한 분석이나 시각화(예: 히스토그램, scatter plot)와 결합하면 더욱 풍부한 인사이트를 얻을 수 있을 것입니다. 즐거운 네트워크 분석 되세요!

profile
AI가 재밌는 걸

0개의 댓글