2023년 5월 기준 GPT4의 데이터 분석 역량 알아보기
이전 글에서 생성형 AI가 데이터 과학의 본질을 어떻게 변화시킬지, 그리고 그 방식은 어떻게 이루어질지에 대해 썼습니다. 이제 가설을 테스트하기 위해 제가 가장 좋아하는 몇 가지 데이터 집합을 분석하기 위해 최신 LLM 기술(GPT4)을 사용했습니다. 처음에는 코드 인터프리터 플러그인을 사용하고 싶었지만, 제 OpenAI 계정에서 사용할 수 없어서 대신 ChatGPT용 Notable 플러그인을 사용했습니다. Notable 플러그인은 다음과 같이 작동합니다:
GPT4가 사용자 명령을 해석하여 Notable 서버로 요청을 보냅니다.
파일 로딩 및 라이브러리 설치, 파이썬 명령 실행이 포함됩니다.
Notable 서버는 결과를 ChatGPT로 다시 보냅니다.
출력에는 테이블, 플롯 및 분석 요약이 포함됩니다.
사용자는 필요에 따라 Notable 노트북에서 코드와 출력(표 및 그림)을 확인할 수 있습니다.
Notable을 사용하면 ChatGPT 세션과 노트북 모두 향후 사용 사용을 위해 남길 수 있습니다. 본 코드 인터프리터 플러그인의 경우와 비교해보면, ChatGPT 프롬프트에 의존하지 않고 주피터 노트북을 나란히 검토하고 작업할 수 있어 실제 업무에 더 나은 솔루션으로 판명되었습니다.
이제 재미있는 부분으로 넘어갑니다. 제가 사용한 데이터에는 레고 세트, 테마 및 부품에 대한 다음 정보가 포함되어 있습니다. 예를 들어, 레고 세계에 익숙하지 않은 분들을 위해 ‘스타워즈’ 테마에는 여러 레고 부품(브릭, 플레이트 등)이 포함된 ‘엑스윙 스타 파이터’ 세트가 포함되어 있습니다. 아래는 전체 스키마입니다:
레고는 장난감이고 데이터 집합의 크기가 그리 크지는 않지만, 크기(결합된 데이터 집합에 1백만 행이 포함됨)와 스키마의 복잡성(세트에서 부품으로 이동하는 데만 3방향 조인이 필요함)을 고려할 때 이것은 결코 장난감의 예가 아닙니다(말장난 의도). 데이터 집합에 액세스할 수 있게 해준 Rebrickable에 감사드립니다.
이제 분석을 시작하겠습니다(압축 파일을 Notable 서버의 폴더에 업로드한 후). 아래에서는 ‘GPT 프롬프트’(또는 여러 줄 프롬프트의 경우 따옴표로 묶음)와 제 느낌/해석을 결합했음을 참고하세요.
다음 프롬프트를 사용하여 데이터 준비를 시작합시다.
세트, 부품, 테마로 구성된 레고 데이터셋을 분석하겠습니다. 먼저 프로젝트의 LegoData 폴더에 있는 압축된 csv 파일에서 데이터를 불러와 스키마를 정리해 보겠습니다. (필드명/데이터 유형/샘플 값의 각 파일 출력 테이블)
GPT가 데이터 집합을 읽고 요약하는 코드를 생성하는 방법은 그 자체로도 매우 인상적이지만, 앞으로 놀랄 일이 많으므로 계속 진행하겠습니다.
자, 테마(이름) / 세트(이름, 연도) / 부품(번호/이름/색상)의 마스터 테이블을 만들어 봅시다. 인벤토리/인벤토리_부품 테이블을 사용하여 세트와 부품 테이블을 조인합니다. 열 이름을 사용하여 사람의 이름을 반영합니다.
GPT가 조인 키를 알아내는 데 약간의 어려움을 겪었지만, 부품, 세트 및 테마의 7방향 조인을 아름답게 완료하는 방법에 주목하세요. 직접 했다면 이 단계까지 웹 검색, 입력, 확인까지 최소 30분 이상 걸렸을 것입니다. 마침내 데이터 준비에 소요되는 시간을 80% 이하로 낮출 수 있을 것 같습니다.
결과적으로 생성된 마스터 테이블에는 1백만 개의 레코드가 포함되어 있으며 EDA에 사용할 준비가 되었습니다. (간결성을 위해 실제 병합 코드는 여기에 표시되지 않았습니다). 저는 여기서 체크포인트를 만들고 아래 프롬프트에 따라 다음 단계(그리고 다음 노트북)로 넘어가기로 결정했고, GPT+Notable은 이를 충실히 따랐습니다.
이제 마스터 테이블을 다른 데이터 집합과 같은 위치에 압축 파일로 저장한 다음 탐색적 분석을 위해 새 노트북에 로드해 보겠습니다.
이제 EDA로 넘어갑니다. 간단한 프롬프트로 다음과 같은 요약을 얻었습니다. 다시 말하지만, GPT는 문자열 연결을 적용하는 방법을 알아내어 요약 테이블에 샘플 값을 첨부하려는 초기 시도에서 복구했습니다. 또한 시각화를 위해 열 값을 그룹화하는 방법도 제안했는데, 대부분 동의합니다.
이제 위에서 배운 내용을 아래의 간단한 프롬프트를 통해 적용할 수 있습니다:
다음과 같은 데이터 준비 단계를 수행해 보겠습니다.
중복 행 제거(모든 열에 걸쳐 동일하다고 가정)
1980년 이전의 연도를 가진 행 제거(제거된 행의 % 인쇄)
테마 및 색상에 대한 추천 카테고리 추가(적절한 이름 지정)
그리고 짜잔, 마스터 테이블이 위의 제안 사항을 반영하도록 수정되었습니다.
이 시점에서 다양한 종류의 집계 열을 포함하는 집합 수준에서 다른 테이블을 만들기로 결정했습니다. 이제 집계가 올바르게 수행되었는지 확인하기 위해 데이터를 시각화해 보겠습니다.
흥미롭게도 GPT는 ‘wordcloud’ 패키지를 사용할 수 없다는 것을 알고 이를 설치했는데, 이는 복구의 또 다른 예입니다. 아래에서 워드 클라우드와 다양한 세트의 분포를 확인할 수 있습니다.
“Technic 부품의 %” 열에 값이 없는 것을 발견하고 GPT에 이유를 파악하고 수정해 달라고 요청했습니다. 놀랍게도 GPT는 조인 프로세스를 역추적하여 부품 카테고리에 ‘Technic’이라는 이름 자체는 없지만, 문자열 일치를 사용하여 부품 카테고리 이름에 ‘Technic’이라는 용어가 포함된 부품을 찾을 수 있다는 사실을 알아냈습니다. 아래는 수정 전/후의 분포도입니다. 이제 GPT가 해낼 수 없는 것에 대한 두려움이 생기기 시작했습니다.
이제 마스터 테이블이 제대로 설정되었으므로 GPT에 다음과 같은 분석을 요청했습니다. (아래 프롬프트는 플롯을 다듬기 위해 몇 번의 반복을 거쳤습니다. 아마도 멀티모달 GPT4가 스스로 알아낼 것입니다.)
코드 및 GPT로 생성된 분석에 대한 자세한 내용은 포함하지 않겠지만, 결과 플롯을 통해 다양한 레고 세트를 엿볼 수 있습니다.
Duplo는 가장 적은 수의 부품과 독특한 부품을 모두 가지고 있습니다(물론!).
테크닉은 적은 수의 기본 요소(차축, 기어, 핀 등)로 구성되어 있어 부품당 평균 수량이 가장 높았습니다.
테크닉을 제외하고 스타워즈에서 테크닉 부품의 비중이 가장 높습니다 (아마도 복잡성 때문일 것입니다).
마지막으로 지배적인 색상의 분포(GPT가 어떤 정의로 계산했는지는 모르겠지만)를 보면 테크닉과 스타워즈는 검은색과 회색이 지배적인 반면 클래식과 듀플로는 색 구성이 더 다양하다는 직관과 일치하는 플롯을 제공합니다. (완벽한 분류가 아니라는 것을 알지만 시간이 부족해서요:)
ChatGPT가 처음 발표되었을 때, 저는 우리 데이터 과학자들이 적응하는 데 길어야 몇 년이 걸릴지도 모른다고 생각했습니다. 하지만 지금이 바로 행동해야 할 때라고 생각합니다. 아주 초보적인 애드온(Notable 플러그인)을 통해 GPT4는 일상적인 분석 워크플로우에 매우 강력한 자동화를 제공합니다.
아직 ChatGPT와 Notable 모두 세션 컨텍스트가 자주 손실되어 처음부터 다시 시작해야 하는 등 상당히 다듬어지지 않은 상황입니다. 또한, GPT4(ChatGPT 인터페이스 내)에 3시간당 25개의 메시지라는 엄격한 제한이 있다는 점도 도움이 되지 않습니다. 좀더 자세한 내용은 제가 작성한 영문판 글의 Practical Guide 섹션을 참고하세요.
그럼에도 불구하고, 자신의 직업에 진지하게 임하는 데이터 과학자라면 제너레이티브 AI가 제공하는 새로운 분석 경험을 경험하고 업무의 본질을 어떻게 변화시킬지 생각해 보아야 한다고 생각합니다. 여러분이 어디에 있든, 지금이 바로 질문할 때입니다: 데이터 분석의 노코드 시대가 마침내, 아니 거의 도래했다는 것은 무엇을 의미할까요?
p.s. 본 글의 원문은 프롬프트를 포함하여 영문으로 작성되었습니다. (영문판에 좀더 추가적인 분석도 포함되어 있습니다.)