ML 프로젝트시 폴더 구조화 하는 방법 관련 글

2020. 10. 8. 19:16꿀팁 분석 환경 설정/파이썬 개발 팁

실제로 프로젝트를 하다보면, 급하게 하다 보니 폴더간에 구조화가 되지 않아서 항상 찾으려면 고생을 한 기억이 있습니다.

이러한 것에 문제를 느껴서 구조화 하는 것에 대해 알아보다 좋은 글이 있어서 공유합니다

 

본 글에서는 좋은 구조적 레이아웃의 이점에 대해 자세히 설명하고 각 디렉터리를 채울 수 있는 항목에 대한 자세한 설명이 포함된 템플릿 구조 레이아웃을 제공합니다.

 

하지만 이것도 그냥 하나의 예시일 뿐이니, 장 좋은 조치는 선호도 및 프로젝트 요구 사항을 충족하는 관행을 선택하고 채택하는 것입니다.

 

왜 구조에 대해서 신경을 써야할까요?

 

어떤 시점에서 우리의 작업을 재생산을 하고 싶을 때가 있습니다.

예측 모델을 만든다고 했을 때, 강력한 예측 모델을 구축할 수 있는 통찰력을 얻는데 훨씬 더 관심이 있습니다.

우리는 일을 끝내고 싶습니다! 빠른 테스트, 시각화 및 분석은 드문 일이 아니지만이 환경은 구조에 대해 생각하는 데 적합하지 않으므로 코드로 돌아가서 당시에 도출한 특정 결론이 무엇인지 또는 그 순간에 당신의 생각 프로세스가 무엇이 었는지 이해하기가 어렵습니다..

 

과거 프로젝트로 돌아가서 작업을 완료하기 위해 make_column.py, new_make_column.py 또는 fixed_make_column.py를 실행해야 하는지 궁금하다면 이것이 제가 HDW (Highly Disorganised Work)라고 부르는 증상입니다.

결과물을 재현할 수 없는 것이 당황스러울 뿐만 때문에 프로젝트 구조를 미리 잘 배열함으로써 장기적으로 우리 자신에게 혜택이 있습니다.

 

좋은 프로젝트 구조는 과거 작업으로 돌아가는 것을 행복하게 만드는 관행을 장려합니다.

(개인적으로 나도 항상 뭔가를 끝내고 뒤를 돌아보면 엉망진창이기 때문에 이 글을 읽게 되었다...)

 

 

"다른 사람들도 좋아할 것이다!"

 

프로젝트가 잘 조직되면, 자체 문서화되는 경향이 있습니다.

다양한 이우로 누군가 당신의 작품을 방문하여 확장하거나 발표하거나 단순히 배우기를 원할 수 있습니다.

귀하의 작업을 보고 싶은 사람이 귀하의 프로젝트에 익숙하지 않은 사람 일 수 있으므로 프로젝트 좋은 구조를 유지함으로써, 당신이 수행한 작업에 대한 일반적인 이해를 도출할 수 있기 때문에 시간을 아낄 수 있습니다.

단순히 구조를 보고 그들이 찾고 있는 특정 기능을 찾기 위해 수많은 문서 나 코드를 파싱 할 필요가 없습니다. 즉, 이는 또한 협업 프로세스가 훨씬 더 쉬울 것임을 의미하며 이는 항상 유용한 특성입니다. 모든 팀 활동의 팀.

 

"재생산성"

 

대부분의 분들이 아시겠지만, ML에서 재현성을 명시적으로 언급하는 것이 필수적입니다.

프로젝트는 일반성과 확장성을 달성하기 위해 구성 요소로 분할됩니다. 좋은 프로젝트 구조는 이 목표를 달성하는 데 도움이 됩니다!

 

결함이 있음을 깨닫거나 퇴사하고 누군가가 업무를 연장하고 싶어 하는 등 다양한 이유로 작업을 복제해야 할 수 있습니다. 따라서 작업 한 내용을 다시 작성해야 할 수 있으며 잘 조직된 구조가 있다면 어디서부터 시작해야 하는지 아는 것이 훨씬 더 간단할 것입니다.

 

 


Proposed Structural Layout

 

data

 

-- external

   타사 소스(불변 데이터)에서 추출한 데이터입니다. 타사 데이터가 추출되지 않으면 폴더는 더 이상 사용되지 않습니다.

-- interim

   외부 데이터를 사용할 수 있는 경우 이 데이터는 src/data 디렉터리의 스크립트를 사용하여 기능 엔지니어링을 위해       로드하는 데이터입니다. 이 데이터셋은 external과 data를 결합하기 위하여 병합하거나 조인한 것을 생성할 수 있다.

-- Processed

   다양한 기계 학습 기술을 사용하여 변환된 데이터입니다. src 폴더에 있는 기능 폴더는 데이터를 모델링할 준비가

   되도록 다양한 변환을 수행합니다. 모델의 학습 시간을 단축하기 위해 처리된 데이터를 유지하는 것이 좋습니다.

-- raw

   데이터의 로컬 하위 집합 복사본이 있으면, 작업을 수행할 정적 데이터 집합이 있습니다. 

   또한 네트워크 대기 시간문제로 인한 워크플로 중단을 극복합니다. 이 데이터는 변경 불가능한 것으로 간주되어야

   합니다. 외부 데이터가 없으면 src/data 에 있는 스크립트에 의해 다운로드된 데이터입니다.

 

models

 

기계 학습 모델 학습을 위해 src/models의 스크립트를 사용합니다. 앙상블을 구축하거나 비교하기 위해 모델을 다른 모델과 함께 복원하거나 재사용해야 할 수 있으며 배포할 모델을 결정할 수 있습니다. 이를 위해 훈련된 모델을 파일 (보통 피클 형식)에 저장하면 해당 파일이 이 디렉터리에 저장됩니다.

 

notebooks

 

 

Jupyter 노트북은 프로토 타이핑, 탐색 및 결과 전달에 탁월하지만 장기적인 성장에는 좋지 않으며 재현성에 대해서는 덜 효과적 일 수 있습니다.  노트북은 Notebooks/explorations 나 Notebooks/PoC 와 같은 하위 폴더로 나뉠 수 있습니다. 좋은 이름 지정 규칙을 사용하면 각 노트북을 채우는 것을 구별하는 데 도움이 됩니다. 

유용한 템플릿은 단 게가 순서 지정 메커니즘으로 사용되는 것은 다음과 같습니다.

"<step>-<user>-<descriotion>.ipnyb" (01-kpy-eda.ipynb)

 

src

--data

  이 디렉터리에는 데이터가 생성되는 모든 위치에서 데이터를 수집하고 추가 기능 엔지니어링이 발생할 수 있는 상태가되도록 데이터를 변환하는 script 있습니다.
--feature

  이 디렉토리에는 데이터를 조작하고 기계 학습 모델에서 사용할 수있는 형식으로 저장하는 script있습니다.
--models

  모델을 빌드하고 훈련하는 데 사용되는 script 포함되어 있습니다.

 


 

구조화된 디렉터리 레이아웃은 ML 프로젝트에서 데이터 과학 팀의 마음을 구성하는 데 유용합니다. 프로젝트를 시작할 때 미리 작업을 레이아웃 할 방법을 생각하고 이를 표준화된 프로젝트 구조로 문서화하는 데 시간을 투자하는 것이 유용합니다 (Ericson et al 2020.) [6]. 프로젝트 진행 중에 디렉터리의 이름을 변경하거나 추가하거나 삭제해야 하는 상황에서 구조가 견고하지 않기 때문에 괜찮습니다. 하지만 나머지 팀원에게 이를 제기할 수 있는 방법이 있어야 합니다. 변경을 승인할 수 있습니다. 단독 프로젝트를 진행하거나 단독 실무자로서 작업하는 상황에서도 프로젝트를 진행하면서 사고 과정을 추적할 수 있도록 변경 사항을 메모하는 것이 좋습니다.

 

 

 

 

 

 

 

 

 

 

towardsdatascience.com/structuring-machine-learning-projects-be473775a1b6

 

Structuring Machine Learning projects

A template guide for structuring ML projects

towardsdatascience.com

Other Useful Resources:

Edward Ma - Manage your data structure in the early stage

Mateusz Bednarski - Structured and automated workflow for a Machine learning project part 1

Mateusz Bednarski - Structured and automated workflow for a Machine Learning project part 2

Semi Koen - Being a Data Scientist does not make you a software engineer

Semi Koen - Architecting a Machine Learning Pipeline

FloydHub - How to plan and Execute your ML and DL projects

References

[1] Buschmann et al. (1996). ‘Architectural Patterns’, in Buschmann, F (ed.) Pattern-Oriented Software Architecture. John Wiley & Sons. p. 32

[2] Van Rossum, G, Warsaw, B, Coghlan, N. 2001. PEP 8 — Style Guide for Python Code. viewed 25 March 2020, <https://www.python.org/dev/peps/pep-0008/>

[3] Sugimura, P. Hartl, F. 2018. ‘Building a Reproducible Machine Learning Pipeline’. arXiv.

[4] ‘First-class Citizen’ (2020) Wikipedia. Available at: https://en.wikipedia.org/wiki/First-class_citizen (Accessed: 26 March 2020)

[5] ‘Murphy’s Law’ (2020) Wikipedia. Available at: https://en.wikipedia.org/w/index.php?title=Murphy%27s_law&action=history (Accessed: 25 March 2020)

[6] Ericson et al 2020. What is the Team Data Science Process?. Microsoft. viewed 25 March 2020, <https://docs.microsoft.com/en-us/azure/machine-learning/team-data-science-process/overview#standardized-project-structure>

728x90