데이터 생존 로그

ChatGPT랑 같이 EDA해보기 (with. 프롬프트 엔지니어링) 본문

생존 도구🏹

ChatGPT랑 같이 EDA해보기 (with. 프롬프트 엔지니어링)

분석가 베어그릴스 2023. 6. 4. 15:09
해당 게시글에서는 프롬프트 엔지니어링을 활용한 EDA(Exploratory Data Analysis)를 시도합니다.

 

개요

저번 글을 작성하며 한 가지 아쉬웠던 점이 있었다.
pandasai는 API를 활용해야하므로 한정된 만큼만 활용할 수 있었고, 자유롭게 활용하기 위해서는 결제가 필요했다.
 
그래서 pandas-ai 코드를 까봤고, 다음과 같은 프롬프트로 ChatGPT를 활용하고 있음을 파악했다.
https://github.com/gventuri/pandas-ai/tree/main/pandasai/prompts (23년 6월 4일 기준)

GitHub - gventuri/pandas-ai: Pandas AI is a Python library that integrates generative artificial intelligence capabilities into

Pandas AI is a Python library that integrates generative artificial intelligence capabilities into Pandas, making dataframes conversational - GitHub - gventuri/pandas-ai: Pandas AI is a Python libr...

github.com

 
그리고 이런 생각을 했다.
(API 활용이 아닌) 직접 ChatGPT를 활용하면서 프롬프트 엔지니어링을 곁들이면,

  • 무료로
  • 더 자유도 높은 작업을 수행시킬 수 있지 않을까?

 
그래서 직접 ChatGPT와 함께 EDA를 시도해보았다.
EDA는 다양한 작업으로 세분화할 수 있는데, 해당 게시글에서는 아래 작업들을 시도해보았다.

  • 결측치 찾기
  • 기술통계량 집계
  • 간단한 질의응답
  • 간단한 시각화

EDA를 위한 프롬프트 짜보기

프롬프트 엔지니어링를 간단히 표현해보면,
AI가 생성하는 output의 품질을 최대화하기위해 최적의 input 조합을 찾는 것이다.
 
해당 게시글에서 활용한 prompt는 다음과 같다.
(단, 기본적인 구조일 뿐이며, 목적에 따라 조금씩 변형하여 활용했다.)

당신은 데이터 분석가로써 데이터에 대한 문의에 응답해야 합니다.

문의에 대한 응답은 다음과 같은 단계로 진행하세요.
1) 문의 파악하기
2) 데이터를 활용하여 질문에 대한 답변을 찾기
3) 주어진 답변 형식에 따라 반드시 한국어로 답변하기

아래는 데이터에 대한 문의입니다.
--------------------
{질문 내용}
--------------------

아래는 데이터입니다.
--------------------
{데이터}
--------------------

아래는 답변 형식입니다.
--------------------
주어진 문의에 대한 답변입니다.
(문의에 대한 답변)
--------------------

 
일단 익히 잘 알려진 Role Prompting으로 역할을 부여해줬다.
그 이후, Zero-Shot CoT (Chain of Thought) Prompting을 활용해서 모델이 차근차근 생각할 시간을 주었다.
전체적인 구조는 Generated Knowledge Prompting를 활용하여 질문과 지식(data)를 제시해주는 식으로 구조화했다.


결측치 찾기

data에 결측치를 넣고, 잘 찾는지 확인해보자.
 
China의 happiness_index에 결측치(NA)를 넣어, 아래 프롬프트를 활용해보았다.

당신은 데이터 분석가로써 데이터에 대한 문의에 응답해야 합니다.

문의에 대한 응답은 다음과 같은 순서로 진행하세요.
1) 문의 파악하기
2) 데이터를 활용하여 질문에 대한 답변을 찾기

아래는 데이터에 대한 문의입니다.
--------------------
주어진 데이터에 결측치가 있나요?
--------------------

아래는 데이터입니다.
--------------------
{'country': ['United States',  'United Kingdom',  'France',  'Germany',  'Italy',  'Spain',  'Canada',  'Australia',  'Japan',  'China'],
 'gdp': [19294482071552,  2891615567872,  2411255037952,  3435817336832,  1745433788416,  1181205135360,  1607402389504,  1490967855104,  4380756541440,  14631844184064],
 'happiness_index': [6.94,  7.16,  6.66,  7.07,  6.38,  6.4,  7.23,  7.22,  5.87,  NA]}
--------------------

 
[결과]

결측치가 있는 열을 잘 찾아냈다.
(+ 위와 조금 다른 프롬프트를 활용해보니, 결측치를 찾는 코드까지 제공해주었다.)


기술통계량 집계

기술통계량을 집계에 활용한 프롬프트는 다음과 같다.

당신은 데이터 분석가로써 주어진 데이터의 기술통계량을 집계해야합니다.

기술통계량 집계는 다음과 같은 단계로 진행하세요.
1) 문의에 필요한 기술통계량을 리스트업하기
2) 데이터의 기술통계량을 추론해보기
3) 추론한 지표를 한국어로 답변하기

아래는 데이터입니다.
--------------------
{'country': ['United States',  'United Kingdom',  'France',  'Germany',  'Italy',  'Spain',  'Canada',  'Australia',  'Japan',  'China'],
 'gdp': [19294482071552,  2891615567872,  2411255037952,  3435817336832,  1745433788416,  1181205135360,  1607402389504,  1490967855104,  4380756541440,  14631844184064],
 'happiness_index': [6.94,  7.16,  6.66,  7.07,  6.38,  6.4,  7.23,  7.22,  5.87,  5.12]}
--------------------

 
[결과]

질문에 대한 답변을 주어진 단계에 따라 잘 답변했다.
하지만, 실제 기술통계량을 직접 집계해보면, ChatGPT가 답변한 내용이 맞지 않음을 알 수 있다.


간단한 질의응답

pandasai에서 가장 유용하다고 느낀 부분은 간단한 질의응답이었다.
데이터에 대한 질문을 답변하려면, (까다로운 경우는) 코드가 동반되어야 하기 때문이다.
 
아래는 활용한 프롬프트 및 질문이다.

당신은 데이터 분석가로써 데이터에 대한 문의에 응답해야 합니다.

아래는 데이터에 대한 문의입니다.
--------------------
행복도가 가장 높은 다섯 나라는 어디인가요?
--------------------

아래는 데이터입니다.
--------------------
{'country': ['United States',  'United Kingdom',  'France',  'Germany',  'Italy',  'Spain',  'Canada',  'Australia',  'Japan',  'China'],
 'gdp': [19294482071552,  2891615567872,  2411255037952,  3435817336832,  1745433788416,  1181205135360,  1607402389504,  1490967855104,  4380756541440,  14631844184064],
 'happiness_index': [6.94,  7.16,  6.66,  7.07,  6.38,  6.4,  7.23,  7.22,  5.87,  5.12]}
--------------------

 
[결과]

너무 간단한 문제여서 그런지, Role Prompting만 적용해도 옳은 답변을 잘 해냈다.


간단한 시각화

시각화에 활용한 프롬프트 예제는 다음과 같다.

당신은 데이터 분석가로써 데이터에 대한 문의에 응답해야 합니다.

문의에 대한 응답은 다음과 같은 단계로 진행하세요.
1) 문의 파악하기
2) 데이터를 활용하여 질문에 대한 답변을 찾기
3) 주어진 답변 형식에 따라 반드시 한국어로 답변하기

아래는 데이터에 대한 문의입니다.
--------------------
아래 데이터에서 국가별 gdp를 시각화하는 파이썬 코드를 짜주세요.
--------------------

아래는 데이터입니다.
--------------------
{'country': ['United States',  'United Kingdom',  'France',  'Germany',  'Italy',  'Spain',  'Canada',  'Australia',  'Japan',  'China'],
 'gdp': [19294482071552,  2891615567872,  2411255037952,  3435817336832,  1745433788416,  1181205135360,  1607402389504,  1490967855104,  4380756541440,  14631844184064],
 'happiness_index': [6.94,  7.16,  6.66,  7.07,  6.38,  6.4,  7.23,  7.22,  5.87,  5.12]}
--------------------

아래는 답변 형식입니다.
--------------------
주어진 문의에 대한 코드입니다.
(문의에 대한 코드)
--------------------

 
[결과]

위에서 주어진 코드를 실행하면 다음과 같다.

'파이차트'라는 시각화 메소드를 잘 선택했고, 에러가 없는 옳은 코드를 답변해주었다.


정리

프롬프트 엔지니어링을 활용해서 ChatGPT와 EDA를 해보았다.
ChatGPT가 계산한 기술통계량은 조금씩 틀린 값을 답변했지만
ChatGPT가 짜주는 코드는 전반적으로 에러없이 잘 돌아갔다.
 
위 실험에서 가장 신기한 점은
간단한 시각화 부분이었다.
ChatGPT가 알아서 '파이차트'라는 메소드를 선택했고, 시각화까지 했기 때문이다.
 
아, 그리고 Bard에도 똑같은 프롬프트를 활용해서 실험해보았는데,
확실히 ChatGPT가 원하는 답변을 더 잘해냈다.
 
[앞으로 더 해볼 수 있는 것]

  • EDA 아이디어를 물어보기
  • 다른 LLM(Bard, Bing 등)와 비교

 
참고한 자료

반응형
Comments