R을 통한 중심성 지수(degree, closeness, betweenness)를 활용한 Network Analysis와 Link Prediction

2023. 5. 29. 18:04DATA PROGRAMMING/R

실제 네트워크 데이터를 통하여 중심성 지수를 계산해 Network Analysis를 수행하고, Link Prediction 또한 수행해 보고자 한다.

 

R을 통한 Network Analysis와 Link Prediction

 

(1) 자료 선정 이유

 

내가 선정한 네트워크 데이터는 ‘karate’ 파일이다. 이 데이터는 ‘social network of friendships between 34 members of a karate club at a US university in the 1970s’이란 내용을 가지고 있는데, 평소 SNS 플랫폼에서 알 수도 있는 사람들등의 추천 친구를 어떤 형식으로 뽑아내는지에 대한 내용에 관심이 많았던 터라 이 데이터를 선정하게 되었다. 34 명의 사람들이 어떤 관계를 형성하고 있는지에 대해 분석 함으로써 얻은 인사이트를 더 나아가 수 많은 사람들의 데이터에 적용할 수 있는 능력을 기를 수 있을 것이라 판단하여 ‘karate’ 데이터를 분석하기로 하였다.

 

 

(2) 분석 과정 (Network Analysis와 Link Prediction)

 

1. R을 통한 데이터 Load

 

우선 활용한 working directory를 설정하기 위해 RStudio에서 Session 탭에 들어가 ‘set working directory’를 통해 네트워크 데이터가 저장되어 있는 폴더를 설정한다.

내가 선정한 ‘karate’ 파일은 gml 확장자를 가지고 있다.

g <- read.graph("karate.gml",format ="gml")
plot(g)

위 코드를 통해 네트워크 데이터를 불러와 시각화할 수 있다.

 

위 자료는 ‘karate’ 데이터를 시각화한 자료로 단순히 34명의 사람의 연결 관계 정도만 나타나 있기에 큰 인사이트를 확인하긴 어렵다.

 

 

2. 중심성 지수 계산 및 시각화

시각화 자료에 더 큰 의미를 부여하기 위해 중심성 지수 (degree, closeness, betweenness) 등을 사용할 수 있다.

 

(1) Degree

# Centrality measure - degree
degree = igraph::degree(g,mode ="out")
degree_centralization = centralization.degree(g)
V(g)$size = igraph::degree(g)*4
plot(g)

위 코드를 통해 중심성 지수중 degree를 계산해 그 결과를 시각화 자료에 투영할 수 있다. degree는 연결된 tie들의 수이다. 즉 연결된 tie가 많을수록 degree가 큰 것이다. 이를 시각화 자료에서는 노드의 크기로 나타내도록 설정했다.

degree가 큰 값은 커다란 노드를 갖는다. 34, 1 노드는 큰 degree를 갖고 17, 12, 25 등의 노드는 작은 degree를 갖는 걸 쉽게 확인할 수 있다.

 

 

(2) Closeness

# Centrality measure - closeness
clo = igraph::closeness(g)
clo.score = round((clo -min(clo))*length(clo)/max(clo))+1
clo.colors = rev(heat.colors(max(clo.score)))
V(g)$color = clo.colors[clo.score]
plot(g)

위 코드를 통해 closeness 값을 계산해 그 결과를 시각화 자료에 투영할 수 있다. closenessdistance와 반대되는 개념이다 즉 노드들끼리의 거리가 멀수록 낮은 값을 갖고 가까울수록 큰 값을 갖는다. closeness 값이 클수록 빨간색에 가깝게, 작을수록 흰색에 가깝도록 설정하였다.

 

degree 코드와 함께 사용함으로써 크기는 degree, 색은 closeness를 표현하는 시각화 자료를 생성할 수 있다.

 

 

(3) Betweenness

# Centrality measure - betweenness
btw = igraph::betweenness(g)
btw.score = round(btw)+1
btw.colors = rev(heat.colors(max(btw.score)))
V(g)$color = btw.colors[btw.score]
plot(g)

위 코드를 통해 betweeness 값을 계산해 그 결과를 시각화 자료에 투영할 수 있다. betweeness는 매개 중심성으로서 노드 사이의 지름길을 많이 연결해 줄수록 큰 값을 갖는다. betweeness 또한 색으로써 표현하였다.

 

위 자료의 노드 크기는 degree를 나타내고 노드 색깔은 betweeness를 나타낸다. 이를 통해 가장 중심성이 높다고 할 수 있는 노드는 ‘1’ 노드로 판단할 수 있다.

 

3. Link Prediction

Link Prediction은 아직 연결되지 않은 노드들 중 연결될 확률이 높은 노드들을 파악하고 그 확률도 계산할 수 있는 분석 방법이다.

Link Prediction을 수행할 때, distance 값을 사용하는데 이 값은 노드 사이의 최단 거리를 뜻한다. 예를 들어 두 노드의 최단 거리가 두 개의 tie를 거쳐야 한다면 두 노드의 distance2가 된다. 또한 Common Neighbors 값도 사용 하는데 이는 두 노드 사이의 공통된 이웃의 수이다. 이를 활용한 대표적인 방법으로 ‘Jaccard’s coefficient’가 있는데, 이는 두 노드의 이웃의 교집합 수를 두 노드의 이웃의 합집합으로 나눈 값이고, 이 값이 1에 가까울수록 이웃이 될 확률이 높다고 판단한다. 위 이론을 통해 ‘karate’ 데이터에서 Link Prediction을 수행해 보았다.

 

-Link Prediction Code-

#Link Prediction
predicted = predict_edges(g)
V(g)$name
a1 = predicted$edges
a2 = predicted$prob
a3 = cbind(a1,a2)
colnames(a3) = c("from", "to", "prob")
write.csv(a3, "link_prediction.csv")

Link Prediction을 수행한 결과를 csv파일로 저장한다.

 

Link Prediction 결과

4. 결론

 

사람은 누구나 관계 속에서 살아간다. ‘karate’ 데이터는 이 관계의 한 예시이며, 그 관계를 알고리즘에 이용할 수 있게 세팅해 놓은 데이터이다. 사람은 관계 속에서 내가 어느 위치에 있는지 또, 내가 그 관계 안의 또 다른 사람과 이어질 수 있을지 궁금해한다. 이는 지금까지는 특정하기 매우 모호하여 감에 의존하여 파악할 수밖에 없는 내용이었다. 하지만 네트워크 분석과 링크 예측을 통해 이 내용을 조금 더 명확하게 파악할 수 있었다. 언제나 관계 속에서 살아가는 사람들은 그 관계에서 발생하는 막연함에 두려움을 느끼기도 하고, 스트레스를 느끼기도 한다. 조금 더 명확한 기준이나 지표가 있다면 이 부분이 해소될 수도 있을 것이다.

직접 실습을 해보며, 위 방법은 인간관계 등의 여러 네트워크 문제에서 큰 역할을 할 것임에는 분명하다고 느꼈다. 다만 의문이 드는 점도 있었다. 네트워크 문제, 특히 내가 분석한 인간관계에 대한 문제를 수학적으로 정의하는 것이 애초에 가능한지에 대한 것이다. 이는 네트워크 분석과 링크 예측의 신뢰성 문제에도 직결할 수 있을 거로 생각한다. 네트워크 분석을 통해 가장 큰 중심성을 가진 node 1이 정말 그 관계 속에서 가장 중심에 위치한 사람이라고 확정할 수는 없을 것이다. 또한, 링크 예측을 통해 나온 node 1node 17이 실제로 가장 연결될 가능성이 크다고 확정하기도 힘들 것이다. 인간은 관계를 맺기 전에 많은 가치 판단을 하고, 인간 개개인의 성격, 현재 상황, 환경 등에 따라 굉장히 복잡한 상호작용을 맺는다. 이 모든 내용을 완벽하게 담은 데이터는 존재하지 않을 것이다. 그렇기에 이 데이터를 통해 수리적으로 분석한 결과 또한 신뢰성에 의문이 들 수밖에 없다. 하지만, 모호성이 강한 네트워크에 대해 명확한 기준과 목적을 통해 도출해낸 결과는 관계에 대한 하나의 평가 기준으로서는 그 역할을 충분히 할 수 있다고 생각한다. 위 실습으로 판단기준이 애매한 사회의 한 현상을 조금 더 확실한 내용으로 바꾸는 경험을 할 수 있었다.