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:

  1. 노트북에서 탐색
  2. 동작하는 함수를 src/로 이동
  3. 노트북에서 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.txt

Benefits:

  • 라이브러리 버전 충돌 방지
  • 팀 간 동일한 환경 구성
  • 재현성 보장

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): 프로젝트 전체 구성 및 문서화

권장 실습

  1. 공개 데이터셋 선정 및 다운로드
  2. EDA 리포트 작성 (8단계 체크리스트 활용)
  3. 특성 엔지니어링 (모듈 2-3 학습 내용)
  4. 모델 3개 비교 (모듈 3-5 학습 내용)
  5. 최종 평가 보고서 작성

참고 자료

타 소스와의 연계

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 (이상치 탐지)