데이터 분석 전문가 프롬프트: AI에게 코드를 맡기기 전에 분석 판단을 맡기는 법
데이터 분석 전문가 프롬프트: AI에게 코드를 맡기기 전에 분석 판단을 맡기는 법
데이터 분석을 처음 하는 사람도 튜터처럼 단계별로 따라가며 분석 판단을 빠뜨리지 않게 돕는 프롬프트입니다.
안녕하세요 mouseco 입니다. :)
데이터 분석을 처음 시작하면 제일 막막한 순간이 있습니다. 파일은 있는데 어디서부터 봐야 할지 모르겠고, AI에게 맡기면 코드부터 쭉 나오는데 그게 맞는 분석인지 판단하기 어렵습니다.
그래서 이 프롬프트는 결과를 한 번에 뽑는 용도가 아니라, 분석을 처음 하는 사람이 튜터와 같이 한 단계씩 확인하면서 진행하도록 만든 흐름에 가깝습니다.
목차
- 데이터 분석 프롬프트의 한 문장 정의
- 공식 문서에서 가져올 기준
- 마스터 프롬프트
- 1단계: 문제 정의
- 2단계: 데이터 구조 확인
- 3단계: 데이터 품질 점검
- 4단계: EDA는 그래프가 아니라 가설 만들기다
데이터 분석 프롬프트의 한 문장 정의
데이터 분석 프롬프트는 AI가 분석 코드를 생성하기 전에 문제 정의, 데이터 품질, 방법 선택, 검증 기준을 단계별로 확인하게 만드는 작업 지시서입니다.
핵심은 코드를 빨리 받는 것이 아니라, 사용자가 결정해야 할 질문을 순서대로 확인하는 것입니다.
AI가 제안한다.
사용자가 결정한다.
AI가 실행한다.
AI가 검증한다.
사용자가 해석한다.
공식 문서에서 가져올 기준
데이터 분석 도구는 계속 바뀌지만 기본 원칙은 안정적입니다.
pandas 공식 문서는 결측값이 데이터 타입에 따라 NaN, NaT, pd.NA 등으로 표현될 수 있고, 단순 비교가 아니라 isna()나 notna() 같은 메서드로 확인해야 한다고 설명합니다. 결측치 처리는 "빈칸 몇 개 채우기"가 아니라 데이터 타입과 의미를 같이 봐야 합니다. 참고: pandas - Working with missing data
scikit-learn의 model_selection 문서는 train_test_split, KFold, StratifiedKFold, TimeSeriesSplit, cross_validate 같은 검증 도구를 제공합니다. 즉 데이터를 어떻게 나눌지부터 분석 결과의 신뢰도가 달라집니다. 참고: scikit-learn model_selection
마스터 프롬프트
너는 데이터 분석 파트너다.
너의 역할은 코드를 빨리 짜는 것이 아니라, 분석 목표와 검증 기준을 먼저 정리하고 사용자가 이해한 상태에서 다음 단계로 진행하게 돕는 것이다.
[핵심 원칙]
- 한 번에 한 단계씩 진행한다.
- 코드보다 설명을 먼저 한다.
- 사용자가 결정해야 할 선택지는 장단점과 함께 제시한다.
- 데이터 누수, 결측치, 이상치, 클래스 불균형, 지표 선택을 반드시 점검한다.
- 확인하지 않은 데이터 구조를 추측하지 않는다.
- 모델 성능 숫자는 업무 의미로 해석한다.
[입력]
- 파일명 또는 데이터 설명:
- 분석 목표:
- 목표변수:
- 예측/분석 시점:
- 결과를 사용할 사람:
- 결과를 사용할 의사결정:
- 실행 환경: Colab / Jupyter / 로컬 Python / 기타
[진행 순서]
1. 문제 정의
2. 데이터 로드 및 구조 확인
3. 데이터 품질 점검
4. EDA
5. 전처리 전략
6. 기준 모델 또는 기준 분석
7. 모델링/통계 분석
8. 평가
9. 해석
10. 보고서화
[출력 규칙]
각 단계마다 아래 형식으로 답한다.
1. 이 단계의 목적
2. 확인할 질문
3. 선택지와 장단점
4. 추천 방향
5. 실행 코드
6. 결과를 보고 판단할 기준
7. 다음 단계로 넘어가기 전 확인 질문
1단계: 문제 정의
분석은 데이터가 아니라 질문에서 시작합니다.
나쁜 시작
이 CSV 분석해줘.
좋은 시작
목표:
최근 3개월 고객 이탈 가능성을 예측해, 마케팅팀이 우선 연락할 고객 목록을 만들고 싶다.
목표변수:
churn_90d
중요한 비용:
이탈 고객을 놓치는 비용이 불필요한 연락 비용보다 크다.
제약:
예측 시점 이후에 생성되는 정보는 사용하면 안 된다.
이렇게 쓰면 Accuracy보다 Recall, Precision, PR-AUC, 비용 기반 평가가 더 중요할 수 있다는 논의가 가능합니다.
문제 정의 템플릿
아래 분석 목표를 데이터 분석 프로젝트 정의서로 바꿔줘.
[내 설명]
{{raw_goal}}
[출력]
1. 분석 목적
2. 의사결정 상황
3. 목표변수 또는 핵심 지표
4. 분석 단위
5. 시간 기준
6. 성공 기준
7. 실패하면 안 되는 위험
8. 추가로 필요한 정보
2단계: 데이터 구조 확인
AI가 파일을 받으면 바로 모델링하지 못하게 해야 합니다. 먼저 구조를 봐야 합니다.
import pandas as pd
df = pd.read_csv("customer_data.csv")
display(df.head())
print(df.shape)
df.info()
display(df.describe(include="all").T)
display(df.isna().sum().sort_values(ascending=False).head(30))
이 코드의 목적은 예쁜 결과가 아닙니다.
- 행과 열 수 확인
- 데이터 타입 확인
- 숫자/범주/날짜 컬럼 구분
- 결측치 위치 확인
- 이상하게 큰 값이나 작은 값 탐지
- 목표변수 존재 여부 확인
3단계: 데이터 품질 점검
데이터 품질은 모델 성능보다 먼저 봐야 합니다.
체크리스트
- 중복 행이 있는가
- ID 컬럼이 모델에 들어가면 안 되는가
- 날짜 컬럼이 문자열로 들어와 있는가
- 결측치가 랜덤인가, 특정 그룹에 몰려 있는가
- 목표변수와 직접 연결된 사후 정보가 있는가
- 범주형 값의 오탈자가 있는가
- 숫자형 컬럼의 단위가 섞여 있는가
- 학습 데이터와 실제 운영 데이터의 컬럼이 같은가
데이터 품질 프롬프트
아래 데이터 구조 요약을 보고 데이터 품질 리스크를 찾아줘.
코드는 아직 만들지 말고, 먼저 점검표와 우선순위를 작성해줘.
[df.info()]
{{info}}
[describe]
{{describe}}
[missing]
{{missing_summary}}
[출력]
| 우선순위 | 리스크 | 왜 문제인가 | 확인 코드 | 처리 선택지 |
4단계: EDA는 그래프가 아니라 가설 만들기다
EDA의 목표는 그래프를 많이 만드는 것이 아닙니다. 다음 분석 방향을 정하는 가설을 만드는 것입니다.
| EDA 질문 | 볼 것 | 다음 결정 |
|---|---|---|
| 타깃 분포는 어떤가 | 클래스 비율, 평균, 분산 | 지표 선택 |
| 결측은 어디에 많은가 | 컬럼/그룹별 결측률 | 삭제/대체/별도 범주 |
| 변수 간 관계는 어떤가 | 상관, 그룹별 분포 | 피처 후보 |
| 이상치는 의미가 있는가 | 박스플롯, 분위수 | 제거/윈저라이즈/유지 |
| 시간 패턴이 있는가 | 월별/주별 추세 | 시계열 분리 |
EDA 프롬프트
아래 데이터 요약을 바탕으로 EDA 계획을 세워줘.
그래프 목록만 만들지 말고, 각 그래프가 어떤 가설을 확인하는지 써줘.
[분석 목표]
{{goal}}
[컬럼 정보]
{{columns}}
[타깃 변수]
{{target}}
[출력]
| 순서 | 확인할 가설 | 필요한 시각화/집계 | 결과에 따른 다음 행동 |
5단계: 전처리 전략
전처리는 정답이 아니라 선택입니다.
| 문제 | 선택지 | 주의 |
|---|---|---|
| 결측치 | 삭제, 평균/중앙값, 모델 기반 대체, 결측 플래그 | 결측 자체가 의미일 수 있음 |
| 범주형 | One-hot, ordinal, target encoding | target encoding은 누수 주의 |
| 숫자형 | 표준화, 로그 변환, winsorize | 모델 종류에 따라 필요성 다름 |
| 날짜 | 연/월/요일/경과일 | 예측 시점 이후 정보 금지 |
| 불균형 | class weight, resampling, threshold 조정 | 테스트셋에는 resampling 금지 |
전처리 프롬프트
전처리 코드를 만들기 전에 전략을 먼저 비교해줘.
[데이터 특징]
{{data_profile}}
[모델 후보]
{{model_candidates}}
[출력]
1. 결측치 처리 전략
2. 범주형 인코딩 전략
3. 숫자형 스케일링 필요 여부
4. 날짜 컬럼 처리
5. 데이터 누수 위험
6. 선택해야 할 옵션과 이유
6단계: 기준 모델부터 만든다
처음부터 복잡한 모델로 가면 개선 여부를 알기 어렵습니다. 기준 모델이 있어야 합니다.
분류 기준 모델
from sklearn.model_selection import train_test_split
from sklearn.dummy import DummyClassifier
from sklearn.metrics import classification_report, confusion_matrix
X_train, X_test, y_train, y_test = train_test_split(
X,
y,
test_size=0.2,
random_state=42,
stratify=y
)
baseline = DummyClassifier(strategy="most_frequent")
baseline.fit(X_train, y_train)
pred = baseline.predict(X_test)
print(classification_report(y_test, pred))
print(confusion_matrix(y_test, pred))
분류 문제에서 stratify=y는 클래스 비율을 유지하는 데 도움이 됩니다. 다만 시계열 데이터라면 랜덤 분할이 부적절할 수 있으므로 시간 기준 분리가 필요합니다.
7단계: 지표를 업무와 연결한다
지표는 문제에 따라 달라집니다.
| 문제 | 지표 후보 | 주의 |
|---|---|---|
| 균형 잡힌 분류 | Accuracy | 불균형이면 착시 가능 |
| 이탈/사기 탐지 | Recall, Precision, F1, PR-AUC | 놓치는 비용과 잘못 잡는 비용 비교 |
| 순위화 | Top-k recall, lift | 마케팅/영업 리소스 제약 반영 |
| 회귀 | MAE, RMSE, R² | 큰 오차가 중요한지 평균 오차가 중요한지 구분 |
| 시계열 | MAPE, sMAPE, MAE | 0 근처 값에서 MAPE 주의 |
지표 선택 프롬프트
아래 분석 목표에 맞는 평가 지표를 골라줘.
Accuracy 같은 기본 지표를 쓰기 전에 업무 비용을 기준으로 설명해줘.
[목표]
{{goal}}
[타깃 분포]
{{target_distribution}}
[오류 비용]
- False Positive 비용:
- False Negative 비용:
[출력]
1. 추천 지표
2. 보조 지표
3. 피해야 할 지표
4. 이유
5. 해석 예시
8단계: 누수 점검
데이터 누수는 분석에서 가장 비싼 실수입니다.
흔한 누수
- 예측 시점 이후 컬럼 사용
- 타깃을 계산하는 데 쓰인 컬럼 포함
- 전체 데이터로 스케일링 후 train/test 분리
- target encoding을 전체 데이터로 계산
- 같은 고객의 데이터가 train/test에 동시에 존재
- 미래 기간 데이터를 학습에 포함
누수 점검 프롬프트
아래 피처 목록을 보고 데이터 누수 가능성을 점검해줘.
[분석 목표]
{{goal}}
[예측 시점]
{{prediction_time}}
[타깃 변수]
{{target}}
[피처 목록]
{{features}}
[출력]
| 피처 | 누수 위험 | 이유 | 처리 |
9단계: 보고서로 바꾸기
분석 결과는 코드가 아니라 의사결정 문장으로 끝나야 합니다.
분석 결과를 비개발자도 이해할 수 있는 보고서로 바꿔줘.
[모델 성능]
{{metrics}}
[중요 변수]
{{feature_importance}}
[오류 분석]
{{error_analysis}}
[출력]
1. 한 문장 결론
2. 주요 발견 3개
3. 업무적 의미
4. 모델이 잘 맞히는 경우
5. 모델이 약한 경우
6. 실제 적용 전 필요한 검증
7. 다음 액션
결과가 이상할 때 디버깅
성능이 너무 좋을 때
데이터 누수를 의심합니다.
성능이 비정상적으로 높다.
타깃과 직접 연결된 컬럼, 예측 시점 이후 정보, 중복 데이터, train/test 혼입을 우선 점검해줘.
Accuracy는 높은데 쓸모없을 때
불균형 문제를 봅니다.
클래스 분포를 확인하고, Accuracy 대신 Recall, Precision, F1, PR-AUC 관점에서 해석해줘.
그래프는 많은데 결론이 없을 때
가설과 다음 행동을 요구합니다.
각 그래프마다 "무엇을 알았는가"와 "다음 분석에 어떤 영향을 주는가"를 한 줄로 써줘.
모델이 복잡해졌는데 설명이 안 될 때
기준 모델로 돌아갑니다.
복잡한 모델을 쓰기 전에 baseline 대비 개선폭을 표로 정리해줘.
개선폭이 작으면 단순 모델을 유지하는 선택지도 검토해줘.
체크리스트
- 분석 목표가 의사결정과 연결되어 있는가
- 목표변수 정의가 명확한가
- 예측 시점 이후 정보가 제외되었는가
- 결측치와 이상치의 의미를 확인했는가
- EDA가 가설과 연결되어 있는가
- 기준 모델이 있는가
- 지표가 업무 비용과 연결되어 있는가
- train/test 분리가 문제 유형에 맞는가
- 데이터 누수 점검을 했는가
- 결과를 비개발자 언어로 설명할 수 있는가
참고 문헌
- pandas - Working with missing data
- scikit-learn - model_selection
- 로컬 spreadsheet skill:
C:\Users\mouse\.codex\skills\spreadsheet\SKILL.md