사회과학 실증 연구를 위한 생존분석과 네트워크 분석

생존분석과 사회연결망 분석의 데이터 구조, 모형 선택, 검증 절차를 사회과학 실증 연구 관점에서 정리한다.

2026-08-14 · 최초 발행 2024-04-29

시간에 따른 사건과 관계 구조를 함께 읽는 방법

복지 프로그램 이탈, 사회운동의 정보 확산, 재범, 노동시장 이동성처럼 사회 현상을 분석할 때는 사건이 발생하는 시점과 사람·집단 사이의 관계 구조를 함께 다뤄야 한다. 생존분석과 사회연결망 분석을 결합하면 시간-사건 메커니즘과 상호작용 구조를 정량적으로 살필 수 있다.

생존분석은 사건이 일어날 때까지의 시간 분포와 위험도(hazard)를 추정하는 기법군이다. 우측 검열(right-censoring)뿐 아니라 좌측 검열과 구간 검열이 포함된 불완전 관측도 처리할 수 있다. Kaplan-Meier 비모수 추정, Cox 비례위험(Cox PH) 준모수 모형, 가속수명모형(Parametric AFT)이 대표적이다.

네트워크 분석은 노드(개인·집단)와 엣지(관계·상호작용)로 구성된 사회연결망을 지표와 모형으로 분석한다. 중심성(정도·매개·근접), 커뮤니티 탐지(Modularity), 블록모형/ERGM/TERGM, 확산·감염 모델(SIR/IC)이 주요 방법이다.

분석 전에 데이터의 의미를 고정한다

생존분석에서는 사건시간(duration), 사건여부(event), 공변량(covariates)을 정렬해야 한다. 시간 단위를 정규화하고, 결측을 대체하며, 동시발생(ties)을 처리하는 절차가 필요하다.

네트워크 데이터는 노드·엣지 목록을 바탕으로 방향성, 가중치, 다중엣지 여부를 먼저 정의한다. 중복과 자기루프를 제거하고 컴포넌트를 분해하며 속성을 정규화한다. 이 규칙이 불명확하면 중심성이나 커뮤니티 결과도 해석 근거를 잃는다.

가정과 분석 규모에 맞춰 모형을 고른다

비례위험 가정이 성립하면 생존분석에는 Cox PH를 우선 적용할 수 있다. 가정이 맞지 않으면 층화(strata), 시간가변 계수, AFT를 대안으로 검토한다.

네트워크 분석은 목적에 따라 접근이 달라진다. 구조를 탐색할 때는 중심성과 커뮤니티 탐지를 사용하고, 생성모형 적합에는 ERGM/TERGM을 적용한다. 대규모 그래프에서는 근사 알고리즘이나 분산 프레임워크가 필요하다.

Schoenfeld 잔차로 PH 가정을 검정하고, 영향점과 다중공선성을 점검하며, 부트스트랩 신뢰구간을 검토한다. 네트워크에서는 연결성·밀도·샘플링 바이어스(응답자 구출편향 등)를 확인하고, 랜덤라이즈드 그래프와 비교해 유의성을 검증한다.

결과는 효과와 구조를 함께 보여준다

생존분석 결과는 생존곡선과 누적위험곡선, 위험비(HR), 효과크기, 시간대별 위험 프로파일로 제시할 수 있다. 네트워크 분석에서는 레이아웃 기반 시각화, 중심성 분포, 커뮤니티별 속성 차이, 브리지 노드를 함께 확인한다.

재현 가능성을 위해 데이터 버전·코드·모형 아티팩트를 관리하는 파이프라인이 필요하다. 민감정보는 최소한으로 수집하고, 비식별화와 차등프라이버시를 고려한다. 모형 복잡도↑ ↔ 해석 가능성↓, 대규모 그래프 정확도↑ ↔ 계산비용↑, 검열 처리 정교화↔데이터 요구량↑의 관계도 운영 판단에 포함해야 한다.

Network Analysis양호문제입력: 노드·엣지, 속성전처리: 중복/자기루프 제거,컴포넌트 분해지표/모형: 중심성, 커뮤니티,ERGM/TERGM품질 점검: 연결성, 바이어스출력: 중심성 랭킹, 군집 구조,모형 적합도대안: 재샘플링,가중/가명처리, 서브그래프Survival Analysis통과불통과입력: 사건-시간 데이터, 검열표시전처리: 시간 단위 정규화,결측/동시발생 처리모형 적합: Kaplan-Meier /Cox PH / AFT가정 점검: PH 테스트, 잔차진단출력: 생존곡선, HR, 신뢰구간대안: 층화, 시간가변 계수,AFT

분석 특성과 운영상 차이

항목 생존분석 네트워크 분석
성능 시간-사건 예측정확도 우수, 검열 견고성 보유 구조적 패턴·핵심노드 탐지 강점
확장성 수십~수백만 관측까지 선형 확장 가능(Cox 분산 학습 가능) 수백만 노드·엣지에서 메모리·시간 병목, 분산 프레임워크 권장
일관성 가정 충족 시 추정량 일관성 확보 샘플링 바이어스·의존성 모델링 적절성에 좌우
안정성 이상치·비정규성에 비교적 강건(준모수) 측정오류·누락 엣지에 민감, 견고한 전처리 필요
운영 편의 해석 가능성 높음(HR) 해석 복잡성 존재, 시각화·요약 지표 병행 필요

복지 이탈부터 교정시설 관계망까지

복지 프로그램 이탈 위험을 분석할 때는 등록부터 이탈까지를 사건시간으로 정의하고, 우측 검열과 소득·가구구성·서비스접촉 공변량을 구성한다. KM으로 집단별 생존곡선을 비교한 뒤 Cox PH로 HR을 추정하고, PH 가정 검정과 시간가변 효과를 적용해 고위험군과 개입 우선순위를 찾는다.

사회운동의 정보 확산에서는 소셜미디어 멘션·리트윗을 바탕으로 방향·가중 네트워크를 만들고 봇·스패머를 제거한다. 매개 중심성과 브리지 계수로 중계자를 식별하고, 커뮤니티 탐지로 타깃 세그먼트를 도출한다. 이후 브로커 우선과 커뮤니티 경계 교차 최소화를 기준으로 메시지 라우팅 전략을 설계한다.

재범 위험과 교정시설 내 관계망을 결합할 때는 동거·활동 네트워크에서 중심성과 구성원 속성을 추출해 개인 공변량으로 사용한다. Cox PH에 매개 중심성과 동류성 지수를 넣고 상호작용 항을 평가하며, 멘토링 배치와 그룹 편성 정책 시뮬레이션으로 생존함수 변화를 추정한다.

실행 가능한 분석 코드

환경은 Python 3.11, pandas 2.2+, lifelines 0.27+, networkx 3.2+를 기준으로 한다. 표준 CPU 환경에서 메모리 8GB 이상을 권장한다.

Kaplan-Meier와 Cox PH

# pip install lifelines pandas
import numpy as np, pandas as pd
from lifelines import KaplanMeierFitter, CoxPHFitter

# 1) 가상 데이터 생성
np.random.seed(42)
n = 1000
age = np.random.normal(40, 10, n).clip(18, 80)
treated = np.random.binomial(1, 0.4, n)
baseline = np.random.exponential(scale=12, size=n)
hazard_multiplier = np.exp(0.02*(age-40) - 0.5*treated)
duration = np.minimum(np.random.exponential(baseline*hazard_multiplier), 24)
event = (duration < 24).astype(int)
df = pd.DataFrame({"duration": duration, "event": event, "age": age, "treated": treated})

# 2) Kaplan-Meier
km = KaplanMeierFitter()
km.fit(durations=df["duration"], event_observed=df["event"], label="All")
print(km.survival_function_.head())

# 3) Cox PH
cph = CoxPHFitter()
cph.fit(df, duration_col="duration", event_col="event", formula="age + treated")
cph.print_summary()  # HR, CI, p-values
# 가정 점검(텍스트 리포트 출력)
cph.check_assumptions(df, p_value_threshold=0.05, show_plots=False)

duration 단위는 월로 정규화한다고 가정하며, 우측 검열을 포함한다. PH 가정을 위반하면 strata(age_bin) 또는 age*time 상호작용 도입을 권장한다.

중심성과 커뮤니티 탐지

# pip install networkx
import networkx as nx

# 1) 소규모 예시 네트워크
edges = [("A","B"),("B","C"),("C","D"),("D","E"),("B","E"),
         ("E","F"),("F","G"),("C","G"),("H","I"),("I","J"),("E","H")]
G = nx.Graph()
G.add_edges_from(edges)

# 2) 중심성 계산
deg = nx.degree_centrality(G)
bet = nx.betweenness_centrality(G, normalized=True)
# 3) 커뮤니티 탐지
from networkx.algorithms.community import greedy_modularity_communities
communities = list(greedy_modularity_communities(G))

# 4) 결과 요약
top_deg = sorted(deg.items(), key=lambda x: x[1], reverse=True)[:3]
top_bet = sorted(bet.items(), key=lambda x: x[1], reverse=True)[:3]
print("Top degree:", top_deg)
print("Top betweenness:", top_bet)
print("Communities:", [sorted(list(c)) for c in communities])

연결성을 확인한 뒤 단절 컴포넌트를 분리해 분석하는 방식을 권장한다. 대규모 그래프는 근사 알고리즘·샘플링·분산 그래프 처리(Spark GraphFrames, graph-tool)를 고려한다.

분석 결과를 정책 개입으로 연결할 때

사건 발생 예측정확도와 위험군 분류 성능은 베이스라인 대비 10~20%p 향상될 수 있으며 데이터 품질에 의존한다. 고위험 상위 20%를 타깃으로 삼아 개입 우선순위를 최적화하면 자원 배분 효율을 개선하고 사건 감소율의 유의한 증가를 기대할 수 있다. 네트워크 개입에서는 브로커 강화·차단을 통해 확산 속도를 제어하고 평균 최단거리 변화를 정량화한다.

시간과 구조를 함께 보는 방식은 인과적 추론 설계의 품질을 높이고, 생존곡선과 네트워크 맵을 통해 이해관계자와 소통하기 쉽게 만든다. 데이터 거버넌스 체계 안에서 재현 가능한 연구문화를 정착시키는 기반도 된다.

사건 정의는 사전에 합의하고 검열 코드북을 관리하며, 네트워크 구성 규칙을 명세해야 한다. PH 테스트·잔차 리포트와 연결성·바이어스 체커는 CI 파이프라인에 통합할 수 있다. 네트워크 가명처리, 민감 속성 최소화, 차등프라이버시 적용 검토도 병행한다.

복잡모형(ERGM/비선형 Cox)을 채택하면 해석 난이도가 높아질 수 있다. 대규모 그래프의 전수 처리와 샘플링·근사 기법 사이에는 편향 리스크가 존재하며, 최근 데이터에 가중치를 둘수록 단기 성능↑, 장기 일반화↓ 가능성이 있다.

사회과학 통계생존분석네트워크 분석사회연결망Cox PH