ML 프로젝트를 하며, 항상 github에 프로젝트 소스를 올릴 때 폴더 구조화에 대해 고민을 했던 경험이 있다.
부끄럽지만, 지금까지는 프로젝트 폴더에 대해 다른 사람 github project를 뒤져가며 프로젝트 구조화를 얼렁뚱땅 흉내냈다. 때마침, 조만간 몇몇 프로젝트도 진행해볼 예정이라 프로젝트 구조화에 대해 확실하게 정리하고 넘어가고 싶어져 간단한 글을 남긴다.
모든 프로젝트에 있어 정답인 프로젝트 구조화 방식은 없다. 때문에, 각자 프로젝트 특징에 맞춰 진행하면 될 것 같다. 여기서는 ML 초심자의 관점으로 프로젝트 구조화에 대해 설명해보고자 한다. (Pytorch 프로젝트 구조는 따로 정리해보도록 하겠다)
ML 프로젝트의 구조는 기본적으로 위와 같다.
data
1. external
타사 소스에서 추출한 데이터를 보관하는 폴더. 타사 데이터가 추출되지 않는 경우, 해당 폴더는 더 이상 사용되지 않는다고 보면 된다.
2. interim
외부 데이터를 사용할 수 있는 경우 이 데이터는 src/data 디렉터리의 스크립트를 사용하여 기능 엔지니어링을 위해 로드하는 데이터를 보관하는 폴더.
3. processed
기계 학습을 통해 사전 처리된 데이터를 보관하는 폴더.
4. raw
오리지날 데이터를 보관하는 폴더.
model
ML 모델 학습을 위해 src/models의 스크립트를 사용한다. 다른 모델과 함께 복원하거나 재사용해야 할 수 있으며 배포할 모델을 결정할 수 있다. 이를 위해 훈련된 모델을 파일(pickle)에 저장하면 해당 파일이 이 디렉터리에 저장된다.
notebooks
.py 파일로 만들기 전, 대화형 프로파일을 만들 때 사용하는 .ipynb 파일을 담아놓는 폴더.
src
1. data
데이터가 생성되는 모든 위치에서 데이터를 수집하고 추가 기능 엔지니어링이 발생할 수 있는 상태가되도록 데이터를 변환하는 script가 있는 폴더.
2. feature
데이터를 조작하고 기계 학습 모델에서 사용할 수 있는 형식으로 저장하는 script가 포함된 폴더.
3. model
ML 모델을 빌드하고 훈련하는데 사용되는 script가 포함된 폴더.