[카테고리:] 미분류

  • 머신러닝 모델 학습 시 진행 상황을 알 수 있도록 로깅 개선하기

    이번 글에서는 머신러닝 모델 학습, 특히 랜덤 포레스트와 그라디언트 부스팅 모델의 그리드 서치 진행 상황을 상세하게 모니터링할 수 있도록 로깅(logging)을 개선한 코드를 소개합니다. 이 글을 통해 여러분도 모델 학습 과정에서 어느 단계에 시간이 많이 소요되는지, 어떤 부분이 병목이 발생하는지 파악할 수 있도록 도움을 받을 수 있습니다.

    배경 및 문제 상황

    랜덤 포레스트 모델의 그리드 서치는 다양한 하이퍼파라미터 조합을 테스트하기 때문에, 시간이 오래 걸리는 것이 일반적입니다. 이 경우 전체 학습 진행 상황을 파악하는 것이 중요한데, 기존 코드에서는 진행 상황을 확인하기 어려운 단점이 있었습니다. 이에 따라 로그를 통해 데이터 로드, 전처리, 그리드 서치, 예측, 제출 파일 생성 등 각 단계의 진행 상황과 소요 시간을 기록하도록 개선했습니다.

    개선된 로깅 전략

    1. 로깅 설정과 로그 파일 관리

    • 로그 디렉토리 생성 및 파일 네이밍
      model_logs라는 디렉토리에 실행 시마다 날짜와 시간이 포함된 고유 로그 파일을 생성합니다. 이를 통해 실행 결과를 기록하고 추후 분석할 때 유용하게 활용할 수 있습니다.
    • 콘솔과 파일 동시 출력
      logging 모듈을 사용하여 로그 메시지가 콘솔과 파일에 동시에 기록되도록 설정했습니다. 중요한 단계마다 INFO 로그를 남겨 실행 상태를 실시간으로 확인할 수 있습니다.

    2. 데이터 전처리와 각 단계별 타이밍 기록

    • 데이터 전처리 단계
      데이터를 로드하고, 전처리 과정을 거쳐 특성(feature) 생성, 결측치 처리, 인코딩 등 전반적인 작업을 수행합니다. 전처리 시작과 완료 시점을 로그로 기록하여 어느 정도 시간이 소요되는지 측정했습니다.
    • 결측치 처리
      SimpleImputer를 사용하여 최종 결측치를 처리하는 과정에서도 타이밍을 측정했습니다. 이 과정은 모델의 안정적인 학습에 필수적인 단계이므로, 실행 시간을 기록하여 문제가 발생할 가능성을 사전에 파악할 수 있습니다.

    3. 그리드 서치 진행 상황 모니터링

    • 그리드 서치 파라미터 설정
      랜덤 포레스트와 그라디언트 부스팅 모델의 하이퍼파라미터 조합을 설정하는 과정을 로그로 남겨, 어떤 파라미터 값들이 사용되는지 명확하게 확인할 수 있습니다.
    • verbose 옵션 활용
      GridSearchCV의 verbose 매개변수를 3으로 설정하여, 각 폴드와 파라미터 조합별 진행 상황을 상세하게 출력합니다. 이 덕분에 어느 단계에서 시간이 많이 소요되는지, 진행률은 어떤지 실시간으로 확인할 수 있습니다.

    4. 모델 학습, 예측 및 제출 파일 생성

    • 모델 학습 및 예측
      최적의 하이퍼파라미터를 찾은 후, 최적화된 모델로 테스트 데이터를 예측하는 과정을 로그로 남깁니다. 예측 결과를 바탕으로 앙상블 예측을 수행하고, 이를 제출 파일로 생성하는 과정도 모두 기록합니다.
    • 특성 중요도 출력
      학습이 완료된 후, 특성 중요도를 데이터프레임으로 정리하여 로그에 출력합니다. 이 정보는 모델의 결정 요인을 이해하고 향후 모델 개선에 도움을 주는 중요한 자료입니다.

    제 개인적인 의견

    저는 로깅을 개선하는 작업이 모델 개발과 디버깅 과정에서 매우 중요하다고 생각합니다. 특히 복잡한 그리드 서치 과정에서는 진행 상황을 모니터링하지 않으면 어느 부분에서 병목이 발생하는지, 학습 시간이 과도하게 늘어나는지 파악하기 어려운데, 이번 코드 개선은 이를 해결하는 데 큰 도움이 됩니다.
    저는 항상 코드 실행 시간과 자원 사용량을 꼼꼼하게 기록하여, 필요 시 빠르게 최적화 작업을 진행할 수 있도록 하는 습관을 추천합니다. 또한, 로그 파일을 체계적으로 관리하면 여러 번의 실행 결과를 비교 분석하기 쉬워지므로, 팀 내 협업이나 모델 개선 과정에서도 큰 이점을 얻을 수 있습니다.

    전체 코드가 깔끔하게 정리되어 있어, 여러분도 이 구조를 그대로 적용하거나 필요에 따라 확장하여 사용하면 좋을 것 같습니다. 데이터 전처리, 모델 학습, 그리드 서치 및 예측 과정의 모든 주요 단계를 로그로 기록함으로써, 나중에 문제가 발생했을 때 원인을 빠르게 추적하고, 모델의 성능 개선에 집중할 수 있습니다.

    결론

    이번 포스트에서는 머신러닝 모델 학습 시 진행 상황을 보다 명확하게 파악할 수 있도록 로깅을 개선한 코드를 소개했습니다. 실행 단계별로 소요 시간을 기록하고, 각 과정을 상세히 로깅함으로써 디버깅과 최적화에 큰 도움을 줄 수 있습니다. 여러분도 이 코드를 참고하여, 모델 학습 과정을 체계적으로 관리해 보시길 바랍니다.

    이상으로 진행 상황을 모니터링할 수 있는 로깅 개선에 관한 제 개인적인 의견과 함께 전체 코드를 소개했습니다. 도움이 되셨길 바랍니다.