4 AI 활용한 데이터 분석과 글쓰기 그리고 재활용과 재현이 가능한 결과물
최근 거대 언어 모델(LLM)과 인공지능(AI)이 발달하면서 데이터 분석과 글쓰기(논문 작성 등)에서 AI를 잘 활용하는 것이 중요해졌다.
이 장에서는 적어도 이 글을 쓰는 시점을 기준으로, AI를 잘 활용할 수 있는 방법을 설명하고, 또 그렇게 만들어진 결론이나 결과물을 재활용하고 재현가능하게 만들려면 어떤 방법을 써야하는지 설명하고자 한다.
4.1 데이터 분석과 글/논문을 쓸 때 데이터 과학 노트북을 사용해야 하는 이유
4.1.1 재현 가능성을 제고
재현 가능 연구법(reproducible research)은 연구 결과를 다른 사람이 동일한 방법으로 다시 수행하여 동일한 결과를 얻을 수 있도록 하는 것을 목표로 한다. 이는 과학적 방법의 핵심 원칙 중 하나로, 연구의 신뢰성과 투명성을 높이는 데 기여한다. 과학 연구의 재현 가능성은 과학의 핵심 원칙 중 하나이지만 재현성 위기(reproducibility crisis)는 상당히 심각하다고 보고 되고 있다. 재현성 위기에 관한 내용은 연구윤리 측면에서 연구재현성에 대한 논란과 대응라는 글을 읽어 보길 바란다.
여기서 말하고자 하는 재현가능성은 실험이나 임상 연구를 다시 수행하는 것을 의미하지는 않는다. 다룰 내용은 데이터 분석 관련 재현가능성(computational reproducibility)이다. 이는 연구 결과를 다른 사람이 동일한 데이터와 분석 방법을 사용하여 동일한 결과를 얻을 수 있도록 하는 것을 의미한다.
3장에서 설명한 주피터 노트북(Jupyter Notebook)과 같은 도구는 재현 가능 연구를 뒷받침하는 데 아주 유용한 도구이다. 주피터 노트북은 코드, 데이터, 시각화 및 설명을 하나의 문서로 통합하여 데이터 분석이나 연구 결과를 쉽게 공유하고 재현할 수 있게 해 주기 때문이다. 저자는 (마크다운) 텍스트를 자신의 글을 쓰고, 코드 셀로 데이터를 분석하고, 그 결과가 주피터 노트북 .ipynb
파일로 저장되니까, 이 파일을 다른 사람에게 공유하면 받은 사람은 이 노트북 파일을 열어서 분석 결과를 재현할 수 있는 것이다. 실제로 그렇게 주피터 노트북을 활용한다.
주변을 보면 여전히 통계 프로그램을 사용하여 데이터를 분석하고, 그 결과를 워드프로세서로 옮겨서 결과물을 만드는 경우가 많다. 이 방법 작업 방식은 재현 가능성을 현저하게 떨어뜨린다. 데이터의 누락이나 변경, 분석 방법 변경 등이 달라질 수 있기 때문이다. 따라서 데이터 분석과 글쓰기가 통합된 형태로 작업하는 것이 재현 가능성을 높이는 데 도움이 된다. 이제는 주피터 노트북과 같은 데이터 과학 노트북(data science notebook)을 사용하자. 과거를 의도적으로 잊을 필요가 있다.
4.1.2 다양한 AI 인터페이스를 제공
데이터 과학 노트북으로 작업해야 하는 이유는 인공지능(AI)과 거대 언어 모델(LLM)을 활용하는 데에도 있다.
ChatGPT가 2022년 11월에 출시되었고 많은 사람들이 생성형 인공지능(Generative AI)을 활용하기 시작했다. 이런 생성형 인공지능은 코드 작성, 디버깅, 데이터 분석에서도 인공지능 코딩 어시스턴트 형태로 날이 갈수록 발전하고 있다. 심지어 최근에는 Vibe Coding이라는 말이 유행할 정도이다. 여기서 인공지능 코딩 어시스턴스의 이모저모에 대해서 이야기할 생각은 없다. 아마 요즘 추세라면 수주 내에 달라질 수도 있을 것이기 때문이다.
말하고 싶은 것은 인공지능을 가장 잘 활용할 수 있는 도구를 사용하자는 것이다. 주피터 노트북, VS Code, RStudio, Cursor, Marimo Notebook 등 데이터 과학 노트북(data science notebook) 형태의 도구는 인공지능과 상호작용하기에 아주 적합하다. 이들 데이터 과학 노트북은 기존 텍스트와 코드를 하나의 파일에서 통합하여 작업할 수 있게 해 줄 뿐만 아니라, 인공지능과 상호 작용할 수 있는 인터페이스를 거의 모두 제공하기 때문이다. 심지어 Cursor 같은 코드 편집기는 그 자체로 인공지능 코딩 어시스턴트를 제공하기도 한다.
그림 4.1은 VS Code에서 GitHub Copilot을 사용하는 화면이다. 데이터를 읽고 일부 정돈한 다음과 같은 프롬프트를 입력했다.
You’re a professional data scientist. I’m a researcher.
이런 프롬프트를 입력하자마자 인공지능은 코드를 작성하기 시작한다. 요즘은 맥락 창(context window)가 커져서 폴더에 있는 내용들을 인공지능이 읽고 이 맥락을 고려하여 답을 제공한다. 사용자는 이것을 받아들을지를 결정하고, 필요하면 프롬프트로 추가하여 자신이 원하는 답을 얻을 수 있게 되었다.
4.1.3 AI 친화 콘텐츠 작성: 마크다운(Markdown)
VS Code, RStudio, Positron, Cursor, Marimo 노트북과 같은 데이터 과학 노트북을 사용할 때 텍스트는 마크다운(Markdown) 문법으로 작성한다. 마크다운은 간단한 문법으로 서식을 지정할 수 있는 마크업 언어로, 인공지능과 상호작용하기에 매우 적합하다.
이 글 뿐만 아니라 이 사이트도 Quarto 오프소스 과학기술 출판 시스템을 사용하여 만들었다. Quarto는 Pandoc 마크다운(Pandoc Markdown) 문법을 사용하여 글을 작성한다.
나는 이 사이트를 지식 베이스(knowledge base)로 발전시킬 의도를 가지고 있다. RAG(Retrieval-Augmented Generation) 시스템을 구축하고, 이 사이트에 있는 글을 인공지능이 읽고 요약하거나 질문에 답할 수 있도록 만들고 싶은 것이다.
이런 목적을 가지고 글을 쓸 때, 마크다운 문법을 사용하는 것은 아주 큰 장점을 가진다. 어느 전문가는 “마크다운은 AI 친화적인 콘텐츠 작성의 표준”이라고 말하기도 했다. 마크다운 문법은 AI가 쉽게 이해할 수 있는 구조화된 텍스트를 제공하므로, AI가 콘텐츠를 처리하고 요약하는 데 유리하다. 그림 4.2에 소개한 글을 읽어 보길 바란다.
습관은 버리기 어렵지만, 마크다운은 30분이면 기본 문법은 족히 배워 글을 쓸 수 있다. 이제 마크다운으로 글을 쓰자! 이를 기반으로 자신의 콘텐츠를 재활용하여 더 가치있는 뭔가로 만들 수 있다.
4.1.4 일반 텍스트(plain text)의 중요성
데이터 과학 노트북/코드 편집기에서는 우리가 입력한 내용을 일반 텍스트(plain text)로 저장한다. 일반 텍스트(plain text)는 컴퓨터 파일의 가장 기본적인 형태로, 서식이 없는 단순한 문자 데이터만 포함한다.
사람들은 컴퓨터하면 0과 1로 이루어진 이진수(binary)로 모든 것을 처리한다고 생각한다. 맞는 말이지만, 중요한 것은 이진수가 아니라 일반 텍스트이다. 사람들은 일반 텍스트를 사용하여 컴퓨터와 상호 작용한다(코드는 일반 텍스트로 작성한다). 마크다운도 일반 텍스트를 사용한다. 주피터 노트북도 JSON이라는 형식의 일반 텍스트 파일로 저장된다.
일반 텍스트를 사용하면 다음과 같은 장점이 있다. 다음은 깃허브 코파일럿이 제공하는 일반 텍스트의 장점이다.
- 호환성: 일반 텍스트 파일은 거의 모든 운영 체제와 소프트웨어에서 읽고 쓸 수 있다. 이는 데이터의 이동성과 호환성을 높인다.
- 가벼움: 일반 텍스트 파일은 크기가 작아 저장 공간을 절약할 수 있다. 이는 특히 대용량 데이터 작업에서 중요하다.
- 버전 관리: 일반 텍스트 파일은 Git과 같은 버전 관리 시스템에서 쉽게 추적할 수 있다. 이는 코드 변경 사항을 관리하고 협업을 용이하게 한다.
- 인간 가독성: 일반 텍스트는 사람이 쉽게 읽고 이해할 수 있다. 이는 코드 리뷰와 디버깅을 용이하게 한다.
- 자동화: 일반 텍스트 파일은 스크립트와 자동화 도구에서 쉽게 처리할 수 있다. 이는 반복 작업을 자동화하고 효율성을 높인다.
이 가운데 버전 관리 에 대해 조금만 더 설명하고자 한다. 일반 텍스트 파일은 Git과 같은 버전 관리 시스템에서 쉽게 추적할 수 있다. 이는 코드 변경 사항을 관리하고 협업을 용이하게 한다. 버전 관리는 소스 코드의 변경 사항을 추적하고 관리하는 시스템이다. 버전 1.5에서 작성한 것을 필요한 경우 버전 1.0으로 바로 되돌릴 수 있다. 이것은 소스가 일반 텍스트로 작성되어 있기 때문에 가능한 일이다.
깃(Git)의 기능을 웹으로 확장한 것이 깃허브(GitHub)이다. 깃허브는 소스 코드 관리와 여러 사람들이 함께 일할 수 있는 협업을 위한 플랫폼으로, 일반 텍스트 파일을 저장하고 버전 관리를 할 수 있게 해주는 멋진 도구이다. 웬만한 코드 편집기에는 깃허브와 연동할 수 있는 기능이 내장되어 있다.
그리고 이 사이트에 대한 원고도 깃허브에 올려져 있다.
4.1.5 이미 도구는 다 마련되어 있다.
아카데미아에서 속해서 연구를 하는 사람들은 “그럼 논문을 어떻게 작성하지?”라고 물을 수 있다. 저널 출판사에서는 A라는 스타일로 워드 파일 등으로 제출하라고 요구할 것이고, 참고 문헌도 넣어야 할 것 아닌가라고 말이다.
이런 질문에 대한 답은 간단하다. Quarto를 사용하면 된다. Quarto는 Pandoc 마크다운을 사용하여 글을 작성하고, 이를 PDF, HTML, MS Word 등 다양한 형식으로 변환할 수 있다. 참고 문헌도 자동으로 처리할 수 있다(그림 4.5).
그리고 VS Code, RStudio, Positron, Cursor, Marimo 노트북 등은 일종의 개발 플랫폼이기 때문에, 사용자들이 쉽게 코드를 작성하거나 필요한 내용을 쉽게 작성할 수 있게 도와주는 다양한 확장 기능을 제공한다. 예를 들어 VS Code에서는 Quarto 확장을 설치하면, Quarto 문서를 작성하고, 빌드하고, 미리 볼 수 있는 기능을 제공한다.
4.2 데이터 과학을 위한 프롬프트 엔지니어링
프롬프트 엔지니어링(prompt engineering)은 인공지능 모델, 특히 거대 언어 모델(LLM)과 상호작용할 때 효과적인 프롬프트를 설계하는 기술이다. 데이터 과학에서도 역시 중요하다. 따라서 인공지능 보조 도구를 잘 사용하려면 데이터 분석, 전처리, 시각화, 모델링 등을 수행할 때 효과적인 프롬프트를 작성하는 것이 무엇보다 중요하다. 프롬프트 엔지니어링은 인공지능 모델이 주어진 작업을 더 잘 이해하고 수행할 수 있도록 돕는 역할을 한다. 이를 통해 데이터 분석, 전처리, 시각화, 모델링 등 다양한 작업에서 인공지능의 성능을 극대화할 수 있다.
다음은 ChatGPT가 데이이터 분석을 위한 프롬프트 예시를 만들어 달라고 한 예시이다. 한번 읽어 보면 효과적인 질문을 어떻게 만드는지 감을 잡을 수 있을 것이다. 더 나아가, 인터넷이나 서점에는 관련 내용들이 많이 나와 있으니 한번 짬을 내서 공부하는 것을 권한다. 이제는 통계 분석 하나 제대로 이해하는 것과 마찬가지로 프롬프트 엔지니어링을 잘 하는 것도 데이터 과학을 하는 데 기본 소양이 되었다.
EDA(탐색적 데이터 분석)
- 프롬프트
- 당신은 숙련된 데이터 과학자로서, 다음 Pandas 데이터프레임에 대해 주요 통계 요약, 결측치 비율, 이상치 탐지 결과를 알려주세요. 필요하면 시각화를 제안하고, 주요 패턴을 요약해주세요.
[여기에 CSV 형태 또는 샘플 데이터 붙여넣기]
데이터 전처리
- 프롬프트
- 당신은 숙련된 데이터 과학자로서, 다음 데이터에 대해 Pandas 기반 전처리 코드를 작성해주세요. 목표는 [결측치 처리 / 범주형 인코딩 / 이상치 제거 등]입니다.
[데이터 설명 또는 헤드(컬럼명 포함)]
- 결측치는 평균값으로 대체해주세요.
- age 컬럼은 0보다 작거나 120보다 큰 값을 이상치로 간주해 제거해주세요.
데이터 시각화
- 프롬프트
- 당신은 숙련된 데이터 과학자로서, 이 데이터로 어떤 시각화를 하는 것이 인사이트 도출에 유리한지 제안해주세요. 가능하다면 seaborn/matplotlib 코드도 함께 작성해주세요.
[데이터 컬럼명과 변수 요약 또는 일부 샘플]
- 변수: age (숫자), gender (카테고리), income (숫자)
- 분석 목표: 연령대별 소득 차이 시각화
통계 분석
- 프롬프트
- 당신은 통계 전문가이자 데이터 과학자로서, 이 두 그룹 간 [평균 차이 / 분산 차이 / 비율 차이]를 검정하는 통계 분석을 해주세요. 어떤 테스트를 쓰는지 이유도 설명하고, Python 코드도 작성해주세요.
[데이터 또는 요약 통계]
- 그룹 A: [23, 25, 22, 24, 27]
- 그룹 B: [30, 28, 35, 32, 31]
모델링 보조
- 프롬프트
- 당신은 머신러닝 엔지니어이자 데이터 과학자로서, 다음 데이터로 분류 모델을 만들어주세요. 전처리 → 학습 → 예측 → 성능 평가까지 포함된 scikit-learn 코드를 작성해주세요.
[데이터 컬럼 구조 및 목적변수 명시]
- 컬럼: age, income, job_type, default
- 목적변수: default (0 또는 1)
- 요청사항: RandomForestClassifier 사용, ROC-AUC 기준으로 평가
데이터 분석 보고서 생성
- 프롬프트
- 당신은 전문 데이터 분석가이자 작가로서, 아래 데이터와 분석 결과를 기반으로 1~2페이지 분량의 분석 보고서를 작성해주세요. 데이터 개요, 주요 인사이트, 시각화 요약, 결론을 포함해주세요.
[분석 결과 요약 / 코드 출력 / 그래프 설명 등]
4.3 정리
이 글에서는 데이터 과학 노트북을 사용하여 데이터 분석과 글쓰기를 통합하는 방법에 대해 설명했다. 데이터 과학 노트북은 재현 가능성을 높이고, AI와 상호작용하기에 적합한 도구이다. 또한 마크다운 문법을 사용하여 AI 친화적인 콘텐츠를 작성할 수 있다.
https://developer.webex.com/blog/boosting-ai-performance-the-power-of-llm-friendly-content-in-markdown↩︎