brunch

You can make anything
by writing

C.S.Lewis

by HRKIM May 21. 2023

R과 Chat GPT를 활용하여 조직 내 관계 분석하기

Social Network Analysis를 활용한 조직 내 관계 분석

들어가며


 조직 내 개인 간의 상호작용은 팀 협업의 효율성, 정보 공유, 그리고 조직 문화 형성에 영향을 미치기 때문에 조직관리 시에 고려해야 하는 중요한 요소입니다. 따라서 조직관리를 수행할 시 조직 내 구성원 간 관계를 분석하는 것은 중요하며, 이를 분석하기 위해 사회연결망 분석(Social Network Analysis, SNA)을 활용하는 방법이 있습니다. SNA는 개인 간의 상호작용 패턴을 그래프로 표현하고 분석하는 방법입니다.


 따라서, 이번 'HR Analytics 끄적끄적'에서는 R과 Chat GPT를 활용하여 사회연결망 분석(Social Network Analysis, SNA)을 수행하는 방법에 대해 살펴보려고 합니다. SNA는 인간의 사회적 연결망을 이해하는 데 중요한 도구로, R과 함께 사용하면 강력한 조합을 이룹니다. R을 이용하면 데이터를 체계적으로 정리하고, 분석하고, 시각화하는 데 필요한 모든 도구를 사용할 수 있습니다. 그러나, R 코드에 대한 기본적인 이해가 없으면 분석을 수행하기가 쉽지 않았습니다.


 그러나 이제는 Chat GPT의 등장으로 상황이 달라졌습니다. R 프로그램을 사용할 수 있는 진입 장벽의 높이가 많이 낮아졌으며 Chat GPT는 사용자의 프롬프팅에 따라 R에 사용할 수 있는 코드를 쉽게 작성할 수 있게 되었습니다. 이를 통해 더 많은 사람들이 사회연결망 분석(SNA)과 같은 고급 분석 기법에 접근하고 활용할 수 있게 되었습니다.


 이번 'HR Analytics 끄적끄적'에서도 역시 이전 챕터와 마찬가지로 SNA 분석을 실시하는 코드 작성 자체에 초점을 맞추는 것보다는, Chat GPT를 활용하여 R 분석을 어렵지 않게 수행할 수 있다는 점을 보여드리는 것에 중심을 두고자 합니다. 이를 통해 독자 분들께서는 데이터 분석에 대한 두려움을 극복하고, 실질적인 분석 작업을 진행하는데 필요한 자신감을 불러일으키는 것이 이번 논의의 주요 목표입니다.



1. 사회연결망 분석(Social Network Analysis)의 정의


 Mitchell(1969)는 사회연결망 분석이란 개인들 간의 특별한 관계망의 특징을 통해 그들의 사회적 행동을 이해하고 설명하는 방법론이라고 정의하였습니다. 사회의 연결망은 개인들 사이의 미세한 상호작용을 통해 형성되며, 이들의 행위 패턴, 인식, 그리고 이익에 주요한 영향을 주는 것으로 간주됩니다(김용학, 2014).


 조직 내 사람들 간의 커뮤니케이션, 협업, 상호작용 등을 사회연결망 분석(Social Network Analysis)을 활용하여 분석할 수 있습니다. 이러한 관계는 그래프로 표현되며, 그래프의 노드는 개체를, 엣지는 개체들 간의 관계를 나타냅니다. SNA 분석은 R, UCINET, NetMiner, Pajek 등의 프로그램을 활용하여 수행할 수 있습니다. 이번 글에서는 그중에서도 가장 최근 많이 쓰이고 있는 R 프로그램을 통해서 사회연결망분석(Social Network Analysis)을 시행해 보도록 하겠습니다.



2. Chat GPT와 R를 활용한 사회연결망 분석(Social Network Analysis)


 Chat GPT는 R를 활용한 사회연결망 분석(Social Network Analysis) 작업을 수행하는 데 큰 도움을 줄 수 있습니다. 예를 들어, 사용자가 R 프로그램 상에서 CSV 파일에서 데이터를 불러오는 방법을 모르거나, SNA 그래프를 만드는 방법에 어려움을 겪는다면, Chat GPT는 이에 대한 코드 예시를 제공하거나, 질문에 대한 답변을 제공함으로써 도움을 줄 수 있습니다. 또한, 그 코드가 에러가 생기는 경우에도 Chat GPT와 대화하며 문제를 해결할 수 있으며, R에서 나타나는 분석결과를 Chat GPT에게 알려주면 해당 분석결과가 어떠한 의미를 가지고 있는지도 쉽게 설명해 줍니다.


 1) SNA 분석을 위한 Data 확보하기


 Kaggle 등의 플랫폼에서 HR과 관련한 SNA 분석을 위한 Data를 찾아보았으나 찾기가 어려웠습니다. 따라서 임의로 Data를 만들어 보기로 하였습니다. 엣지 리스트(가중치 있음), 인접행렬(가중치 있음) 2가지 Data에 대해 각각 Social Network Analysis 분석을 시행할 예정이므로 엑셀 vba 코드 작성을 통해 두 가지 Data를 생성해 보도록 하겠습니다. 아래는 엣지리스트와 인접행렬에 대해서 설명하는 Chat GPT의 답변입니다. 아래 Chat GPT 답변을 통해 엣지리스트와 인접행력의 개념을 확인해 주시기 바랍니다.



 이번 챕터에서는 엑셀에서 VBA 코드를 활용하여 생성한 Data를 활용하여 엣지 리스트(가중치 있음), 인접행렬(가중치 있음) Social Network Analysis 분석을 시행하도록 하겠습니다.


2) Chat GPT와 R을 활용하여 SNA 분석 실시하기


   2-1) 엣지리스트(가중치 있음)로 SNA로 분석하기


 가중치가 있는 엣지 리스트는 각 엣지에 가중치를 부여해 연결의 강도를 나타냅니다. 먼저 Chat GPT에게  '장그래', '오과장', '김대리', '안영이', '장백기', '한석율', '선차장', '천과장', '강대리', '하대리', '박대리', '유대리', '문상필', '정과장', '최전무', '박과장', '고과장'이 포함된 Excel에서 VBA 코드를 작성해 달라고 하여 DATA를 생성합니다.



 정확한 VBA 코드를 받기 위해서는 무엇보다 Chat GPT에게 명령할 시 프롬프팅이 중요합니다. 위 캡처화면에서도 볼 수 있는 바와 같이, 전체적인 지시내용을 작성하고 아래 부수적인 조건들을 넘버링하여 추가적으로 명령하였습니다. 이와 같은 VBA 코드 입력을 통해 아래와 같이 A열 Sender, B열 Receiver, C열 Weight 정보가 포함된 CSV 데이터를 생성하였습니다.



 엑셀 VBA를 통해 Data를 생성하고 난 후에는 SNA 분석을 위해 엑셀 파일을 CSV UTF-8(쉼표로 분리) 형식으로 기본 폴더에 저장합니다. (제가 설정한 기본폴더는 c:/Rdata입니다. 해당 디렉토리를 기본폴더를 설정하려면 다음과 같이 setwd("c:/Rdata")으로 설정합니다.)



[엣지리스트(가중치 있음)로 SNA로 분석: R 코드]

# 필요한 패키지 설치
if(!require(igraph)) {
  install.packages("igraph")
}

# 패키지 로드
library(igraph)
# "SNA1.csv"라는 파일명 가정.
edges <- read.csv("SNA1.csv")  

# 이 데이터프레임은 A열이 발신자(Sender), B열이 수신자(Receiver), C열이 가중치(Weight)라고 가정합니다.
# 그래프 객체 생성
g <- graph_from_data_frame(edges, directed=TRUE, vertices=NULL)

# 그래프의 정보 출력
print(g)

# 그래프 가중치에 따른 시각화
E(g)$color <- ifelse(E(g)$Weight > median(E(g)$Weight), "red", "gray")
plot(g, edge.width=E(g)$Weight, edge.arrow.size=0.5)

# 중심성 계산
degree(g)
closeness(g)
betweenness(g)
eigen_centrality(g)

# 커뮤니티 탐지 - walktrap.community 함수 사용
wtc <- walktrap.community(g)
plot(wtc, g)


 Chat GPT와 대화를 통해 얻은 R 코드를 R 프로그램에 입력하고 실행합니다. 이를 통해 Social Network Analysis 그래프를 그리고, 중심성을 계산할 수 있습니다.


엣지리스트(가중치 있음)로 SNA로 분석: R 코드 입력화면



 # 그래프 가중치에 따른 시각화

E(g)$color <- ifelse(E(g)$Weight > median(E(g)$Weight), "red", "gray")

plot(g, edge.width=E(g)$Weight, edge.arrow.size=0.5)


 Chat GPT는 R 코드에 대해서 친절히 설명해 줍니다. 예를 들어, SNA 시행 코드 중 위 부분에 대한 의미가 궁금하다면 코드를 긁어서 다시 Chat GPT에게 물어보면 됩니다. 위 사진처럼 정말 친절하게 설명해 줍니다.


 SNA 그래프의 간선(edge) 색깔을 지정되도록 R 코드가 작성되었습니다. 위 R 코드 중 E(g)$Weight는 그래프 g 간선의 가중치를 의미합니다. 이 코드는 간선의 가중치가 가중치들의 중앙값보다 크면 "red", 그렇지 않으면 "gray"로 색깔을 설정하라는 의미입니다. 즉, 가중치가 높은(즉, 중앙값 이상인) 간선은 빨간색으로, 가중치가 낮은(즉, 중앙값 이하인) 간선은 회색으로 표시하라는 것을 뜻합니다.


 아래 우측 그림은 Walktrap 알고리즘을 사용하여 그래프 내의 커뮤니티를 찾아낸 후 같은 커뮤니티에 속한 노드들은 같은 색으로 그려 표현한 Social Network Analysis 그래프입니다. 해당 시각화를 통해 그래프 상에서 어떤 노드들이 같은 커뮤니티에 속해 있는지 한눈에 확인할 수 있습니다.


(좌) 그래프 가중치에 따른 시각화 SNA, (우) 커뮤니티 탐지 시각화 SNA
(좌) 연결중심성 표, (중) 근접중심성 표, (우) 매개중심성 표


중심성 척도는 노드의 중요성을 평가하는 방법입니다.  구체적인 내용을 아래와 같습니다.


연결중심성:  '연결중심성'이란 해당 노드와 직접 연결된 다른 노드의 수를 의미합니다. '유대리'의 연결중심성이 10으로 가장 크며, 이는 '유대리'와 직접적으로 연결된 다른 노드가 10개라는 것을 의미합니다.


근접중심성: '근접중심성'이란 해당 노드에서 다른 모든 노드까지의 평균 최단 경로의 역수를 의미합니다. 근접중심성이 높은 노드는 다른 노드들과의 거리가 상대적으로 짧으며, 정보나 자원이 빠르게 전달될 수 있습니다. 위 표에서는 장백기가 0.03703704로 가장 큰 근접중심성을 가지고 있습니다.


매개중심성: '매개중심성'이란 해당 노드가 다른 모든 노드 간의 최단 경로에 포함되는 정도를 의미합니다. 매개 중심성이 높은 노드는 네트워크 내에서 중요한 '다리' 역할을 하며, 정보나 자원의 흐름을 통제할 수 있는 위치에 있습니다. 매개중심성 역시 장백기가 60.526190으로 가장 큰 값을 가지고 있습니다.


2-2) 인접행렬(가중치 있음)로 SNA로 분석하기


 인접 행렬은 행렬의 각 항목이 노드 간의 연결 상태를 나타냅니다. 칸 안에 들어가 있는 숫자는 노드 간 연결의 가중치입니다.


(좌) Chat GPT를 통해 인접행렬을 만들기 위한 엑셀 vba 코드 산출, (우) 산출된 19*19 인접행렬


 엑셀 VBA를 통해 Data를 생성하고 난 후에는 SNA 분석을 위해 엑셀 파일을 CSV UTF-8(쉼표로 분리) 형식으로 기본 폴더에 저장합니다. (제가 설정한 기본폴더는 c:/Rdata입니다. 해당 디렉토리를 기본폴더를 설정하려면 다음과 같이 setwd("c:/Rdata")으로 설정합니다.)



[인접행렬(가중치 있음)로 SNA로 분석: R코드]

# 필요한 라이브러리 로드
library(igraph)

# 인접행렬을 가지고 있는 파일 읽기
# "SNA2.csv" 파일명을 가정
adj_matrix <- read.csv("SNA2.csv", row.names = 1, check.names = FALSE)

# 행렬을 그래프로 변환
g <- graph_from_adjacency_matrix(as.matrix(adj_matrix), mode = "undirected", weighted = TRUE)

# 그래프의 기본적인 정보 출력
summary(g)

# 그래프의 기본적인 시각화
plot(g, vertex.label = V(g)$name, vertex.size = 10, edge.width = E(g)$weight)

# 그래프의 다양한 속성 분석
# Betweenness centrality
betweenness(g, v = V(g), directed = FALSE, weights = NULL)

# Degree centrality
degree(g, v = V(g), mode = "all", loops = TRUE)

# Closeness centrality
closeness(g, vids = V(g), mode = "all", weights = NULL, normalized = TRUE)

# Betweenness centrality
betweenness(g, v = V(g), directed = FALSE, weights = NULL)

# 커뮤니티 감지
community <- walktrap.community(g)

# 커뮤니티 감지 결과 출력
print(community)

# 커뮤니티 감지 결과를 기반으로 그래프 시각화
plot(community, g, vertex.size = 10, vertex.label = V(g)$name)


인접행렬(가중치 있음)로 SNA로 분석: R 코드 입력화면


 아래 좌측 그림의 간선(edge) 너비는 노드 간 연결 강도를 나타냅니다. 이와 같은 간선의 너비는 노드 간 관계에서 주어진 가중치에 따라 설정됩니다. 해당 그래프를 통해 그래프의 구조와 노드 간의 연결 강도를 한눈에 파악할 수 있습니다.


 아래 우측 그림은 Walktrap 알고리즘을 사용하여 그래프 내의 커뮤니티를 찾아낸 후 같은 커뮤니티에 속한 노드들은 같은 색으로 그려 표현한 Social Network Analysis 그래프입니다. 해당 시각화를 통해 그래프 상에서 어떤 노드들이 같은 커뮤니티에 속해 있는지 한눈에 확인할 수 있습니다.


(좌) 그래프 가중치에 따른 시각화 SNA, (우) 커뮤니티 탐지 시각화 SNA
(좌) 연결중심성 표, (중) 근접중심성 표, (우) 매개중심성 표


중심성 척도는 노드의 중요성을 평가하는 방법입니다.  구체적인 내용을 아래와 같습니다.


연결중심성:  '연결중심성'이란 해당 노드와 직접 연결된 다른 노드의 수를 의미합니다. '박대리'와 '유대리'의 연결중심성이 16으로 가장 크며, 이는 '박대리', '유대리'와 직접적으로 연결된 다른 노드가 각각 16개라는 것을 의미합니다.


근접중심성: '근접중심성'이란 해당 노드에서 다른 모든 노드까지의 평균 최단 경로의 역수를 의미합니다. 근접중심성이 높은 노드는 다른 노드들과의 거리가 상대적으로 짧으며, 정보나 자원이 빠르게 전달될 수 있습니다. 위 표에서는 장백기가 0.3809524로 가장 큰 근접중심성을 가지고 있습니다.


매개중심성: '매개중심성'이란 해당 노드가 다른 모든 노드 간의 최단 경로에 포함되는 정도를 의미합니다. 매개 중심성이 높은 노드는 네트워크 내에서 중요한 '다리' 역할을 하며, 정보나 자원의 흐름을 통제할 수 있는 위치에 있습니다. 매개중심성 역시 장백기가 23.6166667으로 가장 큰 값을 가지고 있습니다.


나가며


 조직 내부의 구성원 간 상호작용은 조직의 효율성과 혁신성에 결정적인 역할을 합니다. 이러한 상호작용을 체계적으로 분석하고 이해하는 것은 조직의 성과를 끌어올리고 혁신성을 극대화하는데 필수적인 과정입니다. 그래서 사회연결망 분석(Social Network Analysis, SNA)이라는 도구를 활용한 조직 내 상호작용 관계 분석은 중요한 근거 자료가 될 수 있습니다. 이를 통해 조직의 혁신력과 성과 향상에 대한 이해를 더욱 깊게 할 수 있습니다


 SNA는 사회, 조직, 집단 등 다양한 수준에서의 인간 간 상호작용을 분석하고 이해하는 데 활용되는 방법론입니다. R과 사회연결망 분석(SNA)을 결합하면, 복잡한 네트워크 구조를 효과적으로 시각화하고 분석할 수 있습니다. 이를 통해 조직 내 다양한 패턴을 살펴볼 수 있습니다. 이와 같은 R를 활용한 사회연결망 분석(SNA)의 장점에도 불구하고 R 활용에 진입 장벽이 있었기 때문에 R를 활용한 사회연결망 분석(SNA)은 한계가 있었습니다.


 하지만, Chat GPT가 등장하면서 이와 같은 R 활용한 SNA 분석의 진입장벽이 낮아지고 있습니다. Chat GPT는 사용자가 프롬프팅만 정확하게 해 준다면 사용자가 요청한 사항에 대한 R 코드를 잘 작성해 줍니다. 또한 R 코드에서 에러가 발생할 경우에도 에러 해결 방법 또한 잘 알려줍니다. 더 나아가, Chat GPT에게 SNA 통계분석 결과를 알려주면 SNA에 대한 전문적 지식이 따로 없더라도 해당 분석결과를 이해할 수 있도록 안내해 줍니다. 이러한 기능은 R를 활용한 SNA 분석 작업을 더욱 간편하게 만들어 주며, 이를 통해 시간과 노력을 절약하면서도 더욱 정교한 SNA 분석을 실시할 수 있도록 도와줍니다.


 R과 Chat GPT, 그리고 사회연결망 분석(SNA)을 활용하여 조직 내 관계를 체계적으로 분석하고 이해하는 것은 매우 중요한 과정입니다. 이를 통해 과학적으로 조직 내 구성원들의 상호작용을 분석하면, 조직혁신과 조직문화 개선에 깊이 있는 인사이트를 제공할 수 있습니다. 이렇게 조직의 실질적 상황을 정확히 진단하고 개선책을 마련함으로써, 조직은 더욱 효과적인 커뮤니케이션 패턴을 식별하고, 정보 흐름을 최적화하며, 협업을 강화하는데 도움이 될 수 있습니다. 이런 심층적인 분석을 통해, 조직은 성과를 높이고, 조직원들의 만족도를 증가시키며, 조직의 장기적인 성장과 발전을 뒷받침할 수 있을 것입니다.




Reference

김용학, 2014, [제3판] 사회 연결망 분석, 박영사

Mitchell, J. C. (Ed.). (1969). Social networks in urban situations: analyses of personal relationships in Central African towns. Manchester University Press.

이전 08화 Chat GPT와 R을 활용한 HR 텍스트 마이닝
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari