brunch

You can make anything
by writing

C.S.Lewis

by HRKIM Nov 30. 2024

Cursor AI로 EDA 실시하기2

EDA 및 데이터분석 예측 방법 결정하기

들어가며


 데이터 분석은 현대 사회에서 의사 결정과 문제 해결에 필수적인 역할을 하고 있습니다. 특히, 생성형 AI의 발전은 데이터 처리와 분석 방법에 혁신을 가져왔습니다. 이번 'Cursor AI와 HRA' 매거진에서는 Cursor AI를 활용하여 이상석(2023)의 『데이터 드리븐 리포트』 책(pp.191~203)에 소개된 분석 내용을 재현해보았습니다. 생성형 AI를 사용하여 데이터를 분석할 때 발생할 수 있는 할루시네이션 리스크를 최소화하기 위해 교재의 내용을 충실히 따라 진행하였습니다. 이 실습을 통해 프롬프트만으로 데이터 처리와 예측 작업을 얼마나 효율적으로 수행할 수 있는지 확인하고자 합니다. 또한, 기존에 Python 코딩을 통해 진행되던 복잡한 작업들이 생성형 AI를 통해 어떻게 간소화될 수 있는지 경험해보고, 이를 통해 데이터 분석 분야에서의 새로운 가능성을 탐색하고자 합니다.


1. EDA 수행하기


 1) 데이터 준비 및 소개


 Cursor AI로 EDA 실시하기 1과 마찬가지로, 이상석님(2023)의 『데이터 드리븐 리포트』 책 pp.191~203에 있는 분석 내용을 Cursor AI를 활용하여 재현해보았습니다. 생성형 AI를 통해 데이터를 분석할 때 발생할 수 있는 할루시네이션 리스크를 최소화하기 위해 Cursor AI로 교재 내용을 재현해보았습니다. 분석에 사용된 데이터는 가상의 인사 데이터셋으로, 직원들의 입사 연도, 퇴사 연도, 성별, 출생 연도 등의 정보를 포함하고 있습니다.


https://github.com/sangsucki/DataDrivenReport/blob/main/population.xlsx


 2) 결측치 처리


 먼저, 'Cursor AI로 EDA 실시하기 1'에서 수행했던 시각화를 통해 결측치(Missing Values)를 확인하였습니다. 결측치가 포함된 변수들을 시각화한 이미지를 Cursor AI의 생성형 AI에 입력하고, 결측치 처리를 어떻게 할지에 대해 토론을 진행하였습니다.


[프롬프팅]
(Missing Values 이미지 탑재)
위 내용 결측치 처리 어떻게 하는게 좋을까?


 이 단계에서는 도메인 지식이 중요합니다. 생성형 AI의 의견을 무조건 따르기보다는, 자신의 배경 지식을 바탕으로 결측치 처리 방법에 대해 논의하였습니다. 저는 다음과 같이 추가로 프롬프트를 입력했습니다:


[프롬프팅]
y_retire 빈칸은 현재 재직자로 가정하고 y_birth 결측치는 제거해야 할 것 같은데?


 이러한 의견을 제시하자, 생성형 AI는 이에 대한 피드백을 주었고, 이 과정에서 더 나은 방법에 대한 추천도 받았습니다. 최종적으로, y_birth의 결측치는 제거하고, y_retire의 결측치는 현재 재직자로 간주하여 그대로 두기로 결정하였습니다.



 3) 이상치 처리


 데이터의 이상치를 확인하기 위해 df.describe()를 실행하여 각 변수에 대한 기술통계 값을 확인하였습니다. 이 결과를 생성형 AI에 전달하여 이상치가 있는지 검토했습니다. 생성형 AI는 다음과 같은 의견을 제시했습니다.


1900년생이 있는데, 이는 현실적으로 불가능한 값입니다 1900년생이라면 입사 시점에 40~80세였다는 의미가 됩니다.


이에 대해 저는 아래와 같이 반박하였습니다:


[프롬프팅]

아니 1900년도생이 입사해서 1965년에 퇴사할수도 있지


 제 의견을 반영하여, 생성형 AI는 별도의 이상치는 없으며 그대로 분석을 진행해도 될 것 같다는 수정 의견을 주었습니다.



 4) 2010년 말 기준 직원 수 계산


 먼저, 2010년 말 기준 직원 수를 계산해보겠습니다. Cursor AI에서 Ctrl + L을 누르고 다음과 같이 프롬프트를 입력하여 생성형 AI로부터 코드를 제공받았습니다.


[프롬프트]

2010년말 기준 직원수 세우기.
입사연도 2010년을 포함한 이전 연도 모두 포함.
퇴직연도는 2011년 이후 년도, 비어있는 칸은 모두 포함.


 프롬프트를 통해 제공받은 코드를 실행하여, 『데이터 드리븐 리포트』에 나와 있는 2010년 인원인 19,914명을 동일하게 도출할 수 있었습니다.



 5) 연령 파생 변수 추가


 다음으로 책과 동일하게 '연령' 파생 변수를 추가하고자 합니다. 연령은 현재 시점에서 태어난 해를 빼는 방식으로 계산되므로, 2010년 기준 연령을 구하기 위해 아래와 같이 프롬프트를 입력했습니다.


[프롬프트]

2010년에서 태어난 년도를 빼서 age열을 새로 만들어줘.



 프롬프트를 통해 받은 Python 코드를 실행하면 age 열이 생성된 것을 확인할 수 있습니다. 이러한 작업은 코딩을 통해 진행해야 하는 영역이었지만, 이제는 채팅으로 의도만 전달하면 데이터 처리가 가능해졌습니다.



 6) 성별 및 연령별 인원수 계산


 다음으로 성별을 분리하여 연령별 인원수 정보를 담은 데이터프레임으로 변환하고자 합니다. 두 번에 걸친 프롬프트를 통해 남성별, 여성별 연령에 따른 인원수를 계산한 테이블을 만들 수 있었습니다.


[프롬프트]

남자와 여자로 분리한 데이터프레임을 df2010_m, df2010_f로 저장해줘.
[프롬프트]

남자 연령별 인원수는 df2010_mp에, 여자 연령별 인원수는 df2010_fp로 저장해줘.



 두번의 프롬프트를 통해 남자 연령별 인원수는 df2010_mp에, 여자 연령별 인원수는 df2010_fp에 저장하였습니다. 이 두개의 테이블을 합쳐야 합니다. 이를 위해 아래와 같이 추가 프롬프팅을 하였습니다.


[프롬프트]

남성별, 여성별 연령에 따른 인원수를 계산한 테이블을 합쳐줘



 위 『데이터 드리븐 리포트』그림3-65와 분석결과를 비교하면 정확하게 일치하는 것을 확인할 수 있습니다. 2010년 연령별, 성별 인원수 정리는 끝났습니다. 그러면 이 동일한 작업을 2020년도 진행해 보겠습니다. 다음 프롬프팅은 좀 더 간단합니다. 아래와 같이 프롬프팅합니다.


[프롬프트]

동일한 방법으로 2020년 데이터도 만들어줘.



 『데이터 드리븐 리포트』의 그림 3-67과 분석 결과를 비교하면 역시 정확히 일치하는 것을 확인할 수 있습니다. 2020년 연령별 성별 인원수 정리도 완료되었습니다.


2. 예측 방법 결정하여 실시하기


 1) 추가 연도 데이터 생성


 2010년과 2020년 외에 2016년부터 2019년까지의 데이터도 분석하고자 합니다. 다음과 같이 프롬프트를 입력했습니다.


[프롬프트]

2010, 2020과 동일한 방법으로 2016, 2017, 2018, 2019, 2020 테이블을 성별로 나눠서 저장하고 데이터프레임명은 숫자만 다르게 해줘.



2) 이동평균법을 통한 미래 데이터 예측


『데이터 드리븐 리포트』에서도 언급되어 있는 바와 같이, 2010년과 2020년은 현재 데이터로 추출할 수 있지만 2030년의 데이터는 존재하지 않는 미래의 데이터 입니다(이상석, 2023). 해당 책에서 사용했던 이동평균법(예측치를 현시점에서 가까운 n개 데이터를 평균하여 구하는 방식)으로 동일하게 예측해 보겠습니다.



 우선, 전에 만들었던 age, 2016, 2017, 2018, 2019, 2020 데이터를 합치는 작업을 위해 아래와 같이 프롬프팅을 합니다.

 

[프롬프트]

이제 age, 2016, 2017, 2018, 2019, 2020 열을 합쳐서 남자, 여자를 각각 df_year_mt, df_year_pt에 넣어줘


 age, 2016, 2017, 2018, 2019, 2020 데이터 합친후에 이동평균법을 통해 2021년 예측데이터를 추가로 구해달라고 요청합니다. '예측데이터니까 이전년도 보다 한칸씩 아래로 이동해야돼'라고 언급한 이유는 2020년 20살인 인원이 2021년에는 21살이 되기 때문입니다. 따라서 아래와 같이 프롬프팅을 합니다.


[프롬프트]

2021년 데이터 이동평균법으로 구해줘. 대신 2021년 부터는 예측데이터니까 이전 년도 보다 한칸씩 아래로 이동해야돼



 데이터 중간에 NaN과 0이 섞여 있어, 해당 데이터는 제외하고 평균을 계산해달라고 추가로 요청했습니다. 『데이터 드리븐 리포트』에서도 NaN과 0은 제외하고 평균을 구했기 때문에 동일한 기준으로 맞추기 위해 추가로 해당 내용을 요청하였습니다.



3) 2022년부터 2030년까지 예측 데이터 생성


 2021년 예측 직원수가 구해졌다면, 나머지 2022년~2030년은 상대적으로 간단하게 구할 수 있습니다. 아래와 같이 추가 프롬프팅 합니다.


[프롬프팅]

동일한 방식으로 2030년까지 구해줘.



 위 프롬프팅을 통해 2022년 ~ 2030년 값을 추가로 구했는데,  『데이터 드리븐 리포트』에서 도출한 값과 약간 상이하여, 그 이유에 대해서 생성형 AI와 대화를 하였더니, 반올림 하는 소수점 값에서 차이가 있다는 것을 확인하였습니다. 『데이터 드리븐 리포트』와 동일한 기준으로 반올림해달라고 추가 요청하였습니다. 그 결과 동일한 결과값을 도출하는 것을 확인하였습니다.



 위 『데이터 드리븐 리포트』그림3-76과 분석결과를 비교하면 이 역시 정확하게 일치하는 것을 확인할 수 있습니다. 데이터를 가공하고 예측하는 작업까지 프롬프팅을 통해서 정확하게 수행할 수 있다는 것을 이번 콘텐츠를 통해서 확인할 수 있었습니다.



나가며

 

 이번 'Cursor AI와 HRA' 매거진을 통해 생성형 AI와 프롬프트를 활용하여 복잡한 데이터 가공과 예측 작업을 정확하고 효율적으로 수행할 수 있음을 확인하였습니다. 자연어로 의도를 전달하는 것만으로도 원하는 결과를 얻을 수 있었으며, 이는 데이터 분석 작업의 효율성을 크게 향상시킬 수 있는 잠재력을 보여줍니다. 그러나 생성형 AI를 활용할 때에는 데이터의 정확성과 일관성을 유지하기 위해 주의가 필요하며, 할루시네이션 리스크를 최소화하기 위한 노력이 함께 요구됩니다. 따라서 생성형 AI는 데이터 분석가에게 강력한 도구이지만, 전문적인 지식과 경험이 함께 뒷받침되어야 합니다. 이러한 균형 잡힌 시각을 통해 데이터 중심 시대에 통찰력 있는 분석과 의사 결정을 지원할 수 있을 것입니다.





Reference

이상석. (2023). 데이터 드리븐 리포트. 한빛미디어

브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari