brunch

You can make anything
by writing

C.S.Lewis

by Mobiinside Jun 13. 2023

R과 Chat GPT를 활용한 HR Data 시각화







들어가며 





이번 ‘HR analytics 끄적끄적’에서는 ChatGPT와 R을 활용하여 IBM HR Analytics Employee Attrition & Performance Data를 시각화하는 작업을 수행하고자 합니다.


통계적으로 유의성을 찾기 위해서는 Data 시각화 이외에 추가적인 통계분석이 필요하지만 시각화는 인사관리 실무에 있어서 중요한 요인들을 더 직관적으로 파악하고, 조직에 대한 통찰력을 높이는데 도움이 될 수 있을 것입니다. 시각화를 통해 데이터를 이해하는 것은 분석의 첫걸음이며, 조직 내 의사결정권자들에게 중요한 정보를 명확하게 전달하는 데 있어 매우 중요한 역할을 합니다.


 매번 언급드리는 내용이지만 ChatGPT의 등장은 데이터 분석 진입장벽을 크게 낮췄습니다. 이전에는 R를 활용하여 통계분석을 수행하기 위해서는 R 코딩과 통계학에 대한 심도 있는 이해가 필요했지만, 지금은 Chat GPT을 통해 통계 지식을 이해하는데 도움을 받을 수도 있으며, 코드를 짜는데도 큰 도움을 받을 수 있습니다. 이번 분석에서는 ChatGPT의 도움을 받아 R을 활용하여 IBM의 HR 데이터를 시각화하고 이를 해석하는 과정을 살펴보겠습니다.


 시각화를 통해 우리는 데이터에서 숨겨진 패턴을 찾아낼 수 있습니다. 이를 통해 우리는 데이터에서 복잡한 관계를 파악하고, 더 깊은 통찰력을 얻을 수 있습니다.


이번 ‘HR analytics 끄적끄적’에서는 이러한 데이터 시각화의 중요성을 살펴보고, 실제로 어떻게 데이터를 시각화하고 이해하는지에 대해 알아보겠습니다.   









1. IBM HR Analytics Employee Attrition & Performance Data 입력 방법 

 




이전 ‘R과 Chat GPT를 활용한 직원 퇴직 요인 분석하기’ 챕터에서는 Chat GPT에게 직접 사용하고자 하는 Data가 Kaggle IBM HR Data임을 언급했습니다. 또한 Kaggle IBM HR Data가 유명한 Data이기에 Chat GPT도 IBM HR Data에 대한 사전정보를 가지고 있어 Chat GPT에게 별도로 데이터 형태를 설명하는 작업을 시행하지 않았습니다.


 그러나, IBM HR Data와 같이 유명한 데이터가 아닌 일반적 데이터를 사용할 시에는 Chat GPT에게 Data에 대한 설명을 자세하게 해줘야 합니다. 따라서 이번 시각화 챕터에서는 Chat GPT에게 IBM HR Data라는 정보를 제시하지 않고 해당 Data의 형태를 Chat GPT에게 직접 설명하여 분석을 진행해 보도록 하겠습니다.


 Data 형태를 Chat GPT에게 전달할 때 인사정보는 매우 예민한 정보이기에 Chat GPT에게 직접 넣기에는 매우 부담스럽습니다. 따라서 인사정보 데이터를 CSV 확장자 파일로 저장하고 해당 데이터의 형식을 Chat GPT가 인지할 수 있도록 열제목과 첫 번째 행 정보만 제공(첫 번째 행 정보 제공도 부담스러우면 정보를 랜덤 하게 넣고 Chat GPT가 해당 정보를 인지할 수 있게만 해주면 됩니다.)하고 데이터 형식에 대한 정보를 추가로 제공하였습니다.  






아래 프롬프트는 CHAT GPT로부터 R코드를 받기 위해 분석하고자 하는
DATA의 형식 정보를 제공한 프롬프트입니다.





Age Attrition BusinessTravel DailyRate Department DistanceFromHome Education EducationField EmployeeCount EmployeeNumber EnvironmentSatisfaction Gender HourlyRate JobInvolvement JobLevel JobRole JobSatisfaction MaritalStatus MonthlyIncome MonthlyRate NumCompaniesWorked Over18 OverTime PercentSalaryHike PerformanceRating RelationshipSatisfaction StandardHours StockOptionLevel TotalWorkingYears TrainingTimesLastYear WorkLifeBalance YearsAtCompany YearsInCurrentRole YearsSinceLastPromotion YearsWithCurrManager 41 Yes Travel_Rarely 1102 Sales 1 2 Life Sciences 1 1 2 Female 94 3 2 Sales Executive 4 Single 5993 19479 8 Y Yes 11 3 1 80 0 8 0 1 6 4 0 5

1행의 제목과 2행의 내용이 위와 같은 csv 파일이 있음. 해당 csv 파일은 총 1470행으로 구성되어 있음. 파일명은 C:\Rdata\WA_Fn-UseC_-HR-Employee-Attrition.csv임.







(좌) CSV 파일에서 Chat GPT에게 주고자 하는 정보를 드래그 한후 복사, (우) 드래그한 정보를 붙여넣기 하고 형식을 추가적으로 설명






데이터 정보를 제공하고 바로 이에 대한 시각화를 요청하니 이에 대한 R코드를 잘 작성해 줍니다. 한번 데이터를 Chat GPT에 입력한 후에는 추가적으로 원하는 방향성 만을 지시해 주시면 됩니다. Chat GPT 동일한 채팅창 내에서는 이전에 입력된 정보가 계속 유지됩니다.


이 글은 Python을 활용한 IBM HR Data 퇴사자 예측 분석에 대한 내용을 담고 있습니다. 저는 해당 글을 참고하여서 해당 글에서 Python을 통해 IBM HR Data를 시각화한 내용을 Chat GPT와 R를 활용하여 동일하게 구현해 보도록 하겠습니다. 이와 같은 Data의 시각화는 본격적으로 Data를 분석하기 전에 Data의 전체적인 특성을 파악하는 데 있어 큰 도움이 됩니다.   






2. IBM HR Data를 활용한 시각화 사례 




IBM의 HR 데이터를 분석하고 시각화할 때, 가장 먼저 고려해야 할 것은 ‘R과 Chat GPT를 활용한 직원 퇴직 요인 분석하기’에서 종속 변수로 사용되었던 ‘Attrition(이직 여부)’입니다. 직원들의 이직 비율을 통해 인력 흐름과 직원 만족도를 간접적으로 파악할 수 있습니다. Chat GPT의 도움으로, 이직한 직원과 그렇지 않은 직원의 수를 간단하게 막대그래프로 시각화하였습니다.   







(좌) 퇴직자수 시각화 막대그래프 Chat GPT 프롬프팅, (우) 퇴직자 수 시각화 결과








 1) 범주형 변수 – 퇴사자 분포 시각화   



           

범주형 변수 (Categorical Variables) : 범주형 변수는 한정된 수의 카테고리나 분류로 나눌 수 있는 변수를 말합니다. 예를 들어, 성별(남성, 여성), 피부색(흰색, 검은색, 갈색 등), 결혼 여부(기혼, 미혼, 이혼 등) 등은 모두 범주형 변수에 속합니다. 범주형 변수는 ‘명목 변수’와 ‘순서 변수’로 더 세분화될 수 있습니다. 명목 변수는 순서나 순위가 없는 범주형 변수를 말하며, 순서 변수는 순서나 순위가 있는 범주형 변수를 말합니다.  




 IBM HR 데이터에는 여러 범주형 변수가 있습니다. 예를 들어 출장빈도(BusinessTravel), 부서(Department), 교육 분야(EducationField), 성별(Gender), 직무(JobRole), 결혼 상태(MaritalStatus) 등이 있습니다. Chat GPT에게 데이터 구성을 인지시켜준 다음 Data 내 범주형 변수에 대해서 질문을 하니 데이터에 있는 범주형 변수에 대해서 자세히 설명해 줍니다.  







Data 내 범주형 변수 여부 질문에 따른 Chat GPT 응답







이러한 범주형 변수들을 기반으로 퇴직한 직원과 잔류한 직원의 분포를 시각화해 보겠습니다. 특히 이러한 카테고리형 변수들과 퇴직률 간의 연관성을 파악하는 것은 중요합니다. R을 활용하여 각 카테고리별 퇴직률을 막대그래프로 나타내 보겠습니다.  먼저, 출장빈도(Travel Frequency)와 퇴직률을 막대그래프로 산출하는 R코드를 Chat GPT로부터 받고 이를 R에 입력하여 그래프를 생성해 보았습니다. 더 나아가, 프롬프팅을 조금씩 바꿔서 다양한 형태의 그래프 시각화를 수행할 수 있습니다.   







(좌) 출장빈도(Business Travel Frequency)와 퇴직률 관계를 시각화하기 위한 프롬프팅 (우) 출장빈도-퇴직률 시각화 방법1 결과


(좌) 출장빈도(Business Travel Frequency)와 퇴직률 관계를 시각화하기 위한 프롬프팅 (우) 출장빈도-퇴직률 시각화 방법2 결과


(좌) 출장빈도(Business Travel Frequency)와 퇴직률 관계를 시각화하기 위한 프롬프팅 (우) 출장빈도-퇴직률 시각화 방법3 결과






2) 연속형 변수 – 퇴사자 분포 시각화



             

연속형 변수 (Continuous Variables) : 연속형 변수는 무한한 수의 값을 가질 수 있는 변수를 말합니다. 예를 들어, 키, 무게, 온도, 거리 등은 모두 연속형 변수에 속합니다. 이러한 변수는 측정이 가능하며, 그 결과는 연속적인 수치형 값을 가지게 됩니다. 연속형 변수는 보통 실수형 값을 갖습니다.  




 IBM HR 데이터에는 또한 연속형 변수들이 존재합니다. 이들은 나이(Age), 월급(Rate), 근무 연수(YearsAtCompany) 등이 있습니다. Chat GPT에게 Data 내 연속형 변수에 대해서 질문을 하니 데이터에 있는 연수형 변수에 대해서 자세히 설명해 줍니다.  






Data 내 연속형 변수 여부 질문에 따른 Chat GPT 응답






이런 연속형 변수들이 퇴직에 어떤 영향을 미치는지 파악하기 위해서는 KDE(Kernel Density Estimate) 그래프, 박스플롯, 히스토그램 등을 사용하여 시각화하는 것이 효과적입니다. 집-직장 간 거리와 이직여부(또는 이직률) 간의 관계를 시각화해보겠습니다.  






(좌) KDE 그래프를 위한 Chat GPT 프롬프팅 (우) ‘DistanceFromHome’과 이직여부 간 KDE 그래프







 오른쪽 KDE(Kernel Density Estimate) 그래프에서 확인할 수 있는 바와 같이 퇴직 여부(Attrition) 중 NO의 비율이 집 – 직장 간 거리가 가까운 곳에서는 비율이 매우 높다가 거리가 멀어질수록 급격히 낮아지는 패턴을 볼 수 있습니다.  






(좌) 박스플롯을 위한 Chat GPT 프롬프팅 (우) ‘DistanceFromHome’과 이직 여부 간 박스플롯






 박스플롯을 통해 살펴봐도 이직여부가 Yes인 인원의 집-직장 간 평균 거리가 상대적으로 더 먼 것으로 나타납니다. 아래는 집-직장 간 평균 거리별 이직률을 구한 후 이를 히스토그램으로 나타낸 시각화 자료입니다. 해당 시각화자료에서는 거리가 먼 구간에서 이직률이 갑자기 높아지는 모습을 시각화 자료를 통해 확인할 수 있습니다.


 시각화 자료에서 이와 같이 나타나는 특징들은 집-직장 간 거리가 퇴직여부에 유의한 영향을 미칠 가능성이 있다는 것을 의미합니다. 그러나, 이렇게 관찰된 경향이 실제로 “집에서 직장까지의 거리가 퇴사에 유의한 영향을 미친다”라는 결론을 내리기 위해서는 로지스틱 회귀분석 등 추가적인 통계 분석이 필요합니다.  






(좌) 히스토그램을 위한 Chat GPT 프롬프팅 (우) ‘DistanceFromHome’과 이직률 간 히스토그램







 3) 변수 간 상관관계 히트맵 시각화 




데이터의 모든 변수들 간에는 상관관계가 존재합니다. 이 상관관계를 파악하는 것은 변수 간의 관계를 이해하고, 불필요한 변수를 제거하는 데 도움이 됩니다. 상관계수(correlation coefficient)는 -1부터 1까지의 값을 가지며, 절댓값이 클수록 두 변수 간의 관계가 강하다는 것을 의미합니다. 이 상관관계를 시각적으로 표현하기 위해, 히트맵(heatmap)을 사용하였습니다. R에서 제공하는 corrplot 패키지를 활용하여 데이터 내 변수들 간 상관계수를 히트맵으로 나타내 보았습니다.  






(좌) 변수 간 상관관계 히트맵을 나타내기 위한 Chat GPT 프롬프팅 (우) 변수 간 상관관계 히트맵





이와 같은 상관관계 히트맵을 통해 변수 간의 관계에 대해 대략적으로 파악할 수 있습니다. 특히, 다중회귀분석이나 로지스틱 회귀분석을 진행할 때, 이러한 상관관계는 매우 중요한 역할을 합니다. 왜냐하면 변수들 간에 높은 상관관계가 존재하면 다중공선성 문제가 발생할 수 있기 때문입니다. 다중공선성은 독립변수들 간에 강한 상관관계가 있을 때 발생하며, 이로 인해 회귀분석의 신뢰성과 정확도가 떨어질 수 있습니다. 따라서, 회귀분석을 진행하기 전에 상관관계를 체크하고 필요한 경우 변수 선택, 차원 축소 등의 방법을 통해 다중공선성 문제를 해결해야 합니다.   






 4) 종속변수와의 상관관계 시각화 




 퇴직률(Attrition)이라는 종속변수와 다른 변수들 간의 상관관계를 시각화하는 것은 해당 데이터를 분석하는데 중요한 단계입니다. 이를 통해 어떤 변수가 직원의 퇴직률에 가장 큰 영향을 미치는지 파악할 수 있습니다. 이를 위해, 각 변수와 퇴직률간의 상관관계를 계산하고, 이를 바차트로 시각화해 보겠습니다. 이 역시도 Chat GPT의 도움을 받아 어렵지 않게 코딩을 실시할 수 있었습니다.  







 





위 왼쪽 화면 중 프롬프팅 내용을 살펴보시면 ‘먼저 cor() 함수의 결과를 데이터 프레임으로 변환해줘.’, ‘퇴직률(Attrition) – 퇴직률 (Attrition)  상관관계는 제외해줘.’ 등의 프롬프팅을 추가적으로 명시했습니다. 이는 제가 깊은 R 코딩 지식이 있어서 보단 Chat GPT가 처음 알려준 프롬프트를 통해 R 코드를 실행했을 시에 에러가 생겼습니다. 발생한 에러 메시지를 다시 Chat GPT에 전해주고 해결책을 전달받은 내용을 한꺼번에 프롬프팅 한 내용입니다. 실제로 Chat GPT의 도움을 받아 코딩을 수행하실 시에는 위와 같이 프롬프팅을 한꺼번에 넣어줄 필요는 없습니다. 에러가 나서 에러 메시지를 Chat GPT에 넣어주면 Chat GPT는 바로 코드를 수정해 줍니다.     







3. HR Data 시각화와 통계분석을 활용한 가설 검정하기 

 



1) 소속 부서에 따라 퇴사율에 차이가 있는가? 



 데이터 시각화를 활용하여 부서 간 퇴직률에 차이가 있는지에 대해 시각화와 통계분석을 통해 고민해 보는 과정을 공유해 보도록 하겠습니다. 먼저 Chat GPT에게 부서에 따른 퇴직여부를 시각화하는 R 코드를 작성해 달라고 요청하겠습니다.  










 위 그림은 부서에 따른 퇴직자 수를 나타내는 그래프입니다. 하지만 보시면 알겠지만 어느 부서가 퇴직률이 가장 높은지 직관적으로 파악하기 어렵습니다. 따라서 다시 Chat GPT에게 부서에 따른 퇴직률 그래프를 산출하는 R코드를 요청하였습니다.  










 각 부서별로 퇴직률을 구하고 이를 막대그래프로 도출한 결과 Sales 부서가 퇴직률이 가장 높은 것으로 파악이 되었습니다. 그다음으로는 Human Resources 부서가 퇴직률이 높은 것으로 어렵지 않게 파악할 수 있게 되었습니다. 시각적으로는 부서별 퇴직률이 차이가 있어 보입니다. 그렇다면 통계적으로도 차이가 유의한 지 ANOVA(일원배치 분산분석) 실시하여 확인해 보겠습니다.  









 일원배치 분산분석을 통해 부서에 따른 퇴직률의 차이가 통계적으로 유의미함을 확인하였습니다. 이는 부서에 따라 퇴직률이 다르게 나타난다는 것을 의미합니다. 따라서, 조직의 부서에 따라 퇴직률을 분석하고 개선하는 것은 중요한 과제가 될 수 있습니다.   







 2) 소속 부서에 따라 워라밸(Work and Life Balance) 차이가 있는가?



  

소속 부서에 따라 워라벨(Work and Life Balance)에 차이가 있을까?라는 질문을 가지고 부서별 워라밸에 대해서 시각화해 보았습니다. Data Set에서 워라벨(Work and Life Balance)은 1. Bad, 2. Good, 3. Better, 4. Best로 측정되어 있습니다. 따라서 1. Bad, 2. Good은 상대적으로 부정적으로 3. Better, 4. Best는 긍정적으로 나누어 아래와 같이 시각화해 보았습니다.  






(좌) 부서에 따른 워라벨 시각화 R코드를 받기 위한 Chat GPT 프롬프팅, (우) 부서에 따른 워라벨 시각화





 부서에 따른 워라밸을 시각화한 결과 부서 간에는 워라밸 차이가 있는 것으로 추측됩니다. 또한 워라밸은 Human Resources 부서가 상대적으로 가장 좋은 것으로 파악됩니다. 그다음으로는 Sales 부서, Research & Development 순이었습니다. 추가적으로 통계적으로 유의미한 차이를 가지고 있는지 ANOVA(일원배치 분산분석) 실시하여 확인해 보겠습니다.  





(좌) 통계분석 실시 R코드를 받기 위한 Chat GPT 프롬프팅, (우) ANOVA 분석결과 Chat GPT 해석





 위 ANOVA 분석 결과 부서에 따른 워라밸의 차이는 통계적으로 유의미한 것으로 나타났습니다. 이를 통해 시각화를 통해 추측한 부서 간 워라밸 차이가 통계적으로도 유의미하다는 것을 확인할 수 있습니다. 이처럼 변수 간의 관계를 시각화하고 통계적으로 유의미한지를 확인하는 방식으로 데이터 분석을 진행할 수 있습니다. 이러한 접근법을 통해 변수 간의 관계를 더 자세히 이해하고 조직 내에서 문제를 파악하고 개선하는 데에 도움이 될 수 있습니다.   







나가며  




이번 ‘HR analytics 끄적끄적’ 챕터에서는 IBM HR Analytics Employee Attrition & Performance 데이터를 R과 ChatGPT를 활용해 시각화하는 방법을 살펴봤습니다. ChatGPT의 지원을 받아 데이터 분석에 필요한 R코드를 더욱 간편하게 작성할 수 있었고, 복잡한 통계 지식도 ChatGPT를 통해 쉽게 이해할 수 있었습니다. HR에서 복잡한 통계를 통한 현상 분석도 중요하지만, 실무에서 더 자주 필요한 것은 바로 HR 데이터시각화를 통한 인사이트 도출입니다.


 인사관리에서는 HR 데이터를 시각화하여 해당 상황을 넓은 시각으로 이해하는 것이 굉장히 중요합니다. 인사 담당자의 직감과 데이터를 바탕으로 한 시각화 결과 사이에는 분명한 차이가 있을 수 있습니다. 그래서, 데이터 기반의 인사관리를 실현하기 위해서는 HR 데이터의 시각화가 필수적이며, 이를 통해 의사결정에 도움이 되는 통찰력을 얻을 수 있습니다.


 또한, 데이터 분석과 시각화에서 중요한 것은 데이터 내에 보이는 다양한 패턴에 대해 ‘왜?’라는 질문을 끊임없이 던지는 자세입니다. 왜 이 데이터가 이런 분포를 보이는지, 왜 이 변수가 결과에 영향을 주는지, 왜 이 시각화 방법이 적절한지 등을 계속 고민하면서, 데이터에 대한 깊은 이해와 더 효과적인 시각화 방법을 찾아내기 위한 고민이 필요합니다. 정확하게 수집된 데이터는 절대로 거짓말을 하지 않습니다. HR 업무에서 데이터시각화를 효과적으로 활용하면, HR에 관한 현상을 더욱 객관적으로 이해하고, 문제를 효과적으로 해결하는데 큰 도움이 될 것입니다.  






Reference


HyunMin Kim 홈페이지   









   

김창일 님이 브런치에 게재한 글을 편집한 뒤 모비인사이드에서 한 번 더 소개합니다.   









매거진의 이전글 유튜브 알고리즘 잘 타는 콘텐츠의 비밀
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari