End-to-End Data Science Project Structure
학습 목표 매핑
SKALA 3기 Module 7 — 데이터 분석 Mini-project (Learning Objective 7-1)
- Objective: 실제 공개 데이터셋(Kaggle 또는 정부 공공데이터)을 선정하고 / 모듈 2-3 학습 내용 적용 / EDA→모델 선택·최적화→평가를 문서화 (Bloom L6-Create)
- Evaluation: 프로젝트 리포트 (문서화 완성도)
프로젝트 전체 파이프라인
1단계: 문제 정의 & 데이터 수집
- Business 목표 수립
- 성공 기준 정의
- 데이터 소스 확인
2단계: 탐색적 데이터 분석 (EDA)
- 데이터 특성 파악 (shape, info, describe)
- 결측치·이상치·중복 검토
- 패턴·상관관계·이상 발견
- 가설 형성
3단계: 데이터 준비 & 특성 공학
- 데이터 정제
- 결측치 처리
- 특성 엔지니어링
- 표준화·정규화
4단계: 모델 개발
- 간단한 모델부터 고급 모델까지 비교
- Train-test split
- 교차검증
5단계: 평가 & 최적화
- 성능 지표 계산
- 하이퍼파라미터 튜닝
- 최종 모델 선택
6단계: 배포 & 모니터링
- 모델 저장
- API로 서빙
- 성능 모니터링
4가지 업계 표준 워크플로우 프레임워크
CRISP-DM (Cross-Industry Standard Process)
가장 널리 사용되는 6단계 순환 모델
| 단계 | 설명 | 산출물 |
|---|---|---|
| Business Understanding | 비즈니스 목표 파악 | 목표 정의서 |
| Data Understanding | 데이터 탐색 및 프로파일링 | EDA 리포트 |
| Data Preparation | 데이터 정제 및 변환 | 정제된 데이터셋 |
| Modeling | 모델 훈련 | 훈련된 모델 |
| Evaluation | 모델 성능 평가 | 성능 메트릭 |
| Deployment | 프로덕션 배포 | 운영 모델 |
→ Module 7 권장: CRISP-DM 따라 프로젝트 구조화
OSEMN (Obtain, Scrub, Explore, Model, Interpret)
- 간단하고 직관적
- 해석성 강조
KDD (Knowledge Discovery in Databases)
- 4단계: Selection → Pre-processing → Transformation → Interpretation
SEMMA (Sample, Explore, Modify, Model, Assess)
- 모델 개발 중심
핵심 Best Practices
1. 상대경로 사용 (Path Management)
❌ 문제: 절대경로는 타인 환경에서 작동 불가
# 절대경로 - 다른 사용자 컴퓨터에서 실패!
data = pd.read_csv("C:/Users/MyName/Downloads/data.csv")✅ 해결: 상대경로 사용
from pathlib import Path
# 프로젝트 루트 기준
data_dir = Path(__file__).parent / "data"
data = pd.read_csv(data_dir / "dataset.csv")2. 노트북 vs 스크립트 분리 (Code Organization)
Jupyter Notebook: 탐색·시각화·가설 검증
notebooks/
├── 01-eda.ipynb
├── 02-feature-engineering.ipynb
└── 03-modeling.ipynb
Python Scripts: 자동화·프로덕션 코드
src/
├── data_processing.py
├── feature_engineering.py
└── model.py
Best practice workflow:
- 노트북에서 탐색
- 동작하는 함수를 src/로 이동
- 노트북에서 src/ 함수 import하여 재사용
3. 데이터 버전 관리 (DVC)
❌ 문제: Git은 대용량 데이터 파일에 부적합
- 파일 크기 제한 (GitHub max 100MB)
- 빌드 성능 저하
- 협업 어려움
✅ 해결: Data Version Control (DVC) 사용
dvc init # DVC 초기화
dvc add data/dataset.csv # 데이터 추적
dvc push # 원격 저장소에 업로드4. 가상환경 (Virtual Environment)
# 프로젝트마다 독립적 환경 구성
python -m venv venv
source venv/bin/activate # Mac/Linux
venv\Scripts\activate # Windows
pip install -r requirements.txtBenefits:
- 라이브러리 버전 충돌 방지
- 팀 간 동일한 환경 구성
- 재현성 보장
5. 종합 문서화 (Documentation)
README.md 필수 포함 항목:
- 프로젝트 설명 및 목표
- 데이터셋 설명 (출처, 크기, 특성)
- 환경 설정 방법
- 실행 지침
- 모델 성능 메트릭
- 새로운 데이터에 대한 예측 방법
권장 프로젝트 디렉토리 구조
iris-classification-project/
├── data/
│ ├── raw/ # 원본 데이터 (수정 금지)
│ └── processed/ # 정제된 데이터
├── notebooks/
│ ├── 01-eda.ipynb # 탐색적 분석
│ ├── 02-feature-engineering.ipynb
│ └── 03-modeling.ipynb
├── src/
│ ├── __init__.py
│ ├── data_processing.py # 데이터 변환
│ ├── feature_engineering.py # 특성 생성
│ ├── model.py # 모델 훈련
│ └── evaluate.py # 평가 메트릭
├── models/
│ └── iris_classifier.pkl # 훈련된 모델
├── reports/
│ ├── eda_report.html # EDA 리포트
│ └── model_evaluation.pdf # 평가 보고서
├── tests/
│ ├── test_data.py
│ └── test_model.py
├── requirements.txt # 의존성 (버전 고정)
├── README.md # 프로젝트 문서
├── Dockerfile # 컨테이너 정의
├── .gitignore
└── .env # 환경 변수 (커밋 금지)
재현성 (Reproducibility)
정의: 동일한 데이터, 코드, 설정으로 동일한 결과 도출 가능
구현 방법:
# Random seed 고정
import numpy as np
import random
from sklearn.utils import shuffle
seed = 42
np.random.seed(seed)
random.seed(seed)
# 모델 생성 시 random_state 지정
model = RandomForestClassifier(random_state=seed)재현성 정책:
- 라이브러리 버전 명시 (requirements.txt)
- 모든 난수 생성에 seed 설정
- 데이터 전처리 과정 문서화
- 모델 하이퍼파라미터 저장
Module 7 실전 체크리스트
데이터셋 선정 (7-1)
- Kaggle 또는 정부 공공데이터 선정
- 데이터셋 크기 및 특성 파악 (행 수, 컬럼 수, 자료형)
- 수치형·범주형 특성 비율 확인
EDA 단계 (7-1)
- 기본 통계 (mean, std, min, max)
- 결측치 분석 및 처리
- 이상치 탐지 및 처리
- 상관관계 분석
- 시각화 (히스토그램, 박스플롯, 산점도)
모델 개발 (7-1)
- 3개 이상 모델 비교 (Logistic Regression, Random Forest, SVM 등)
- Train-test split (70:30)
- 5-fold 교차검증
- 하이퍼파라미터 튜닝 (GridSearchCV 또는 RandomSearchCV)
평가 & 문서화 (7-1)
- 최종 모델 선택 및 정당화
- 성능 메트릭 계산 (Accuracy, Precision, Recall, F1, AUC)
- 혼동행렬(Confusion Matrix) 시각화
- ROC 곡선 그리기
- 프로젝트 리포트 작성 (PDF 또는 마크다운)
학습 설계 포인트
Cognitive Level (Bloom)
- L2 (Understand): CRISP-DM 워크플로우 이해
- L3 (Apply): 실제 데이터에 적용
- L5 (Evaluate): 모델 선택 기준 판단
- L6 (Create): 프로젝트 전체 구성 및 문서화
권장 실습
- 공개 데이터셋 선정 및 다운로드
- EDA 리포트 작성 (8단계 체크리스트 활용)
- 특성 엔지니어링 (모듈 2-3 학습 내용)
- 모델 3개 비교 (모듈 3-5 학습 내용)
- 최종 평가 보고서 작성
참고 자료
- CRISP-DM: https://en.wikipedia.org/wiki/Cross-industry_standard_process_for_data_mining
- pathlib: https://docs.python.org/3/library/pathlib.html
- DVC: https://dvc.org/doc
- Kaggle Datasets: https://www.kaggle.com/datasets
- 정부공공데이터: https://data.go.kr/
타 소스와의 연계
fastapi-ml-serving (REST API 배포 - 7-2) docker-ml-containerization (Docker 컨테이너화 - 7-3) github-documentation-standards (GitHub 문서화 - 7-4) eda-exploratory-data-analysis-geeksforgeeks (EDA 8단계) eda-python-tds-prabhu (실제 데이터 정제 사례) outlier-detection-iqr-zscore-medium (이상치 탐지)