데이터 분석 전문가 프롬프트: AI에게 코드를 맡기기 전에 분석 판단을 맡기는 법
데이터 분석 전문가 프롬프트: AI에게 코드를 맡기기 전에 분석 판단을 맡기는 법
먼저 결론
데이터 분석에서 AI를 잘 쓰는 핵심은 "코드를 빨리 짜게 하는 것"이 아닙니다. 분석 목표, 데이터 품질, 검증 방식, 지표 해석을 먼저 고정하게 만드는 것입니다.
AI는 pandas 코드도 잘 짜고, 그래프도 빠르게 만들고, 모델링 코드도 금방 생성합니다. 하지만 질문이 부실하면 잘못된 목표변수, 데이터 누수, 부적절한 평가지표, 의미 없는 시각화도 아주 빠르게 만들어냅니다.
그래서 데이터 분석 프롬프트는 아래 순서로 설계해야 합니다.
- 문제를 정의한다.
- 데이터 구조를 확인한다.
- 결측치와 이상치를 해석한다.
- 기준 모델을 먼저 만든다.
- 지표를 목표와 연결한다.
- 누수와 편향을 점검한다.
- 결과를 의사결정 문장으로 바꾼다.
좋은 데이터 분석 프롬프트는 AI가 "코드부터" 쓰지 못하게 합니다. 먼저 왜 이 분석을 하는지, 어떤 선택지가 있는지, 어떤 기준으로 판단할지 설명하게 만듭니다.
왜 이 글을 저장해야 하는가
데이터 분석 초보가 AI를 쓸 때 가장 흔한 실패는 코드 오류가 아닙니다. 코드는 돌아갑니다. 문제는 돌아간 코드가 잘못된 질문에 답한다는 것입니다.
예를 들어 고객 이탈 데이터를 분석한다고 해봅니다.
customer_data.csv 분석해서 이탈 예측 모델 만들어줘.
이렇게만 묻으면 AI는 바로 코드를 만들 수 있습니다. 하지만 중요한 질문은 빠져 있습니다.
- 이탈의 정의는 무엇인가
- 예측 시점은 언제인가
- 예측에 쓰면 안 되는 사후 정보가 있는가
- 클래스 불균형은 있는가
- Accuracy가 의미 있는 문제인가
- 모델 결과를 어떤 업무에 쓸 것인가
- 거짓 양성과 거짓 음성 중 무엇이 더 비싼가
이 질문이 없으면 0.95 Accuracy도 쓸모없는 모델일 수 있습니다.
데이터 분석 프롬프트의 한 문장 정의
데이터 분석 프롬프트는 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