팀명 : EOC-VCP

벌써 패스트캠퍼스 AI 부트캠프 과정의 마지막 프로젝트 회고 시간이 왔다. 이 많은 프로젝트를 어떻게 쳐냈는지, 어떻게 여기까지 버텨왔는지 생각만해도 꿈만 같다. 마지막 프로젝트에서는 팀원도 한 명 더 늘었고 마지막이기도 해서 2개의 프로젝트에 참여하기로 하였다.(인간의 욕심은 끝이 없고 같은 실수를 반복하지..ㅋ) 그래도 프로젝트 기간이 4주 정도 되어서 프로젝트를 2개 참여하여도 무리 없을 거라고 생각하였다.

1. 프로젝트 개요

A. 개요

24시간 내내 운영되는 화학 공정은 이상이 발생하면 막대한 금전적 피해를 입을 수 있다. 공정 상태를 예측하고 대비책을 마련하는 것이 중요한 과제인데, 이를 위해서는 공정 데이터를 이해하고 이상 징후를 파악하는 것이 필수적이다.

본 대회는 화학 공정 데이터를 이용한 이상 탐지(anomaly detection)를 수행하여, 공정 데이터에서 비정상적인 동작을 탐지하는 것을 목표로 한다. 이를 통해 공정에서 발생할 수 있는 문제를 예측하고 대비할 수 있다.

본 대회에서 사용되는 입력 데이터와 출력 데이터는 모두 CSV 파일 형태로 제공된다. 입력 데이터로는 약 25만 개의 화학 공정 데이터가 제공되며, 이에 대응하는 약 7만 2천 개의 출력 데이터가 제공된다.

이상 탐지를 위한 알고리즘 개발은 화학 공정 분야에서 매우 중요한 과제이며, 이를 통해 공정의 안정성을 높이고 예기치 않은 문제를 예방할 수 있다는 점에서 큰 의미가 있다.

제공된 데이터셋

  1. train data 250,000
  2. test data 72,000

데이터셋 설명

학습 데이터는 csv 파일 형태로 제공된다. 학습 데이터에는 모두 정상 가동인 상태의 화학 공정 데이터만 포함 되어있다.

학습 데이터는 250000 개의 row와 55개의 column 으로 구성되어 있고, column 의 데이터 타입은 float 형태이다.

각 column의 의미는 다음과 같다.

  • faultNumber :
    정상인지, 비정상인지 나타내는 Label.
    정상일 경우 '0', 비정상일 경우 '1'

  • simulationRun :
    시뮬레이션이 실행된 Run 의 번호
    동일한 하나의 simulationRun 이 정상일 경우 faultNumber 가 모두 '0'.
    반대로 하나의 simulationRun 이 비정상일 경우 faultNumber 가 모두 '1'.
    학습 데이터에는 정상 데이터만 존재. 따라서 faultNumber 가 모두 '0'.
    테스트 데이터에는 정상/비정상 데이터가 모두 존재. 따라서 faultNumber 가 모두 '0'인 simulationRun도 있고, faultNumber 모두 '1'인 simulationRun도 있다.

  • sample :
    하나의 Run 안의 sample 번호를 의미한다. 학습 데이터는 한 Run 당 500 sample 이 있다.

  • xmeas_* : measurement 의 약자로, 화학 공정에서 측정된 센서 값.

  • xmv_* : manipulated variable 의 약자로, 화학 공정에서 제어되는 값.

  • summary : 해당 대화를 바탕으로 작성된 요약문.

B. 환경

  • 팀 구성 및 컴퓨팅 환경

    	7인 1팀, 인당 RTX 3090ti 서버를 VSCode와 SSH로 연결하여 사용
  • 협업 환경

    	Notion, GitHub
  • 의사 소통

    	KakaoTalk, Zoom, Slack, Discord

2. 프로젝트 팀 구성 및 역할

  • 팀 구성
    이번 프로젝트 팀원으로 배정된 인원은 7명 이었다. 매니저님 말씀으로는 우리 팀이 안정된 팀이고 잘 운영되고 있는 팀이라 계속 팀원을 한 명씩 추가하는 것이라고 하셨다. 나는 팀원이 좀 더 늘면 할 수 있는 Task 가 많아질 것이라 생각하였고 좋은 방향이라는 생각을 하였다.

  • 역할

    Task 목록은 다음과 같다.

    데이터 이해 및 시각화(Data understanding and visualization)
    통계기반 이상탐지(Statistical-based anomaly detection)
    1인 1모델링 및 파라미터 튜닝(Individualized modeling and hyperparameter tuning)
    결과 정리 및 보고서 작성(Summarization of Results and Report Writing)

    이번 프로젝트에서는 간트차트를 적극 활용하였다. 팀원 중 한 분과 나는 간트차트 제작을 담당하기로 하였다. 처음 만들어보는 간트차트에 막막하기도 하고 구성이 잘 되지 않았었는데 우여곡절 끝에 하루를 통째로 투자한 결과 아주 만족스러운 결과가 나왔다. 막상 만들어놓으니 프로젝트 진행상황을 파악하기도 편했고 그 때, 그 때 회의록 작성하기도 좋았다. 회의에 참여하지 못한 사람이 이 간트차트의 내용만 파악해도 이해가 될 수 있도록 구성하려고 노력했던 것 같다.

3. 프로젝트 수행 절차 및 방법

A. 팀 목표 설정

1주차 : 주어진 Upstage 강의 다 듣기, train 데이터 및 test 데이터 패턴 파악하기, base line code 이해하기
2주차 : 통계 기반 이상탐지, Model 탐색 및 baseline code 작성
3주차 : 모델링, 모델 튜닝, 최종 모델 완성, 모델 고도화
4주차 : Dash Board 작성, Report 작성, PPT 제작, GitHub 관리

B. 프로젝트 사전 기획

(1) 협업 문화

  1. 특별한 일을 제외하고는 항상 모여서 의논하면서 Task 진행할 것(Zoom, Discord)
  2. 오프라인 모임이 가능할 경우 오프라인 만남을 적극 활용할 것(소통 Skill Up)
  3. 논의 사항 및 오류 사항이 있을 경우 즉각 팀원들과 상의할 것
  4. New 아이디어 발생 시 Team Notion에 작성 후 팀원 호출하여 해당 아이디어에 대해 공유할 것
  5. 말하지 않아도 각자 중간 진행 상황에 대해 틈틈이 보고할 것

우리팀의 좋았던 점은 별 일 없으면 항상 온라인 소통 플랫폼에 항상 접속해 있는 것이었다. 문제가 생기면 언제든 소통이 가능했고 좋은 아이디어가 생겨도 실시간으로 바로바로 소통이 가능했다. 이 점이 팀 프로젝트 결과물을 뽑아내는 데 중요한 요소였던 것 같다. 이번에 새로 합류한 팀원께도 플랫폼 초대 링크를 보내어 참석할 수 있도록 하였다. 우리 팀은 기존의 Zoom 플랫폼 보다 Discord 활용을 더 많이 한 것 같다.
팀원이 많았기 때문에 다양한 시도를 해볼 수 있었다. 항상 매일 Meeting을 통해 그 날 그 날 할 일에 대해 계획을 수립하였고 수립한 계획을 Notion에 작성하였다. 그리고 다 진행된 내용에 대해서는 check 표시를 하여 모두가 진행 상황을 알 수 있도록 기록으로 남겨두었다. 우리 팀은 1인 1모델링을 하기로 했었으므로 7가지의 모델 중 1가지의 모델을 심도있게 공부하여 팀원들과 공유하는 시간을 가지기도 하였다.

4. 프로젝트 수행 결과

Public - Final Result(F1 score : 0.9204)

Private -Final Result(F1 score : 0.9091)

결론적으로 K-Means 모델링 결과가 가장 좋게 나왔다. 나는 DBSCAN을 담당하였는데, 모델을 공부할 당시 DBSCAN은 K-Means 모델의 단점을 개선한 모델이라 더 명확한 구분이 가능하다는 장점을 소개한 내용을 확인했었다. 하지만 막상 모델링을 해보니 그렇지 않았다. DBSCAN은 밀도 기반 클러스터링이므로 애초에 화학공정 이상 탐지 데이터와는 특성이 맞지 않은 모델이었던 것 같다.

5. 자체 평가 의견

A. 잘했던 점

  • 각자 하나의 모델을 심도있게 파보는 시간을 가졌다. 모델 고도화에 초점을 맞췄던 점이 좋았다.
  • 각자의 다양한 관점을 실시간으로 공유하여 함께 진행하는 프로젝트 분위기를 만들고자 하였다.
  • 간트차트를 활용하여 프로젝트 진행 상황을 보기 좋게 정리하고자 하였다.

B. 시도 했으나 잘 되지 않았던 것들

  • DBSCAN 모델을 고도화 시키기 위해 정말 많은 방법을 시도해보았다. DBSCAN의 Hyperparameter는 epsilon과 Minpts 로 2가지가 있다. 나는 elbow point를 고려하여 epsilon 값을 설정하고 강의에서 MinPts는 주로 4이하의 값으로 쓴다는 이야기를 반영하여 Hyperparameter 설정을 해보았지만 결과는 크게 달라지지 않았다. Hyperparameter 값을 수정하면서 Clustering 수를 늘려보아도 이상치들이 너무 많이 검출되었고, 완벽하게 clustering 되지 않는 결과를 보였다.

C. 아쉬웠던 점들

  • 1인 1모델을 담당했던 점이 좋기도 하면서 아쉬운 점이기도 했다. 우리는 대회를 2개를 참여하는 팀이었기에 한 대회에만 목을 맬 수 없는 상황이었다. 하지만 각자의 모델을 지정하고 해당 모델을 고도화 시키는 방법을 선택하니 그 모델 이외에 다른 모델을 도전해볼 시간이 부족하였다. 데이터를 먼저 확인하고 데이터에 맞는 모델을 선택하여 고도화 시키는 방법을 선택했으면 더 좋은 결과를 산출할 수 있지 않았을까 하는 아쉬움이 남는다.

D. 프로젝트를 통해 배운 점 또는 시사점

  • 멘토링 해주신 멘토님의 말씀이 기억에 남는다. "아무 근거 없이 모델을 선택하여 그 모델을 바탕으로 데이터를 분석하기 보다는 먼저 데이터 분석을 완벽히한 후 해당 데이터에 맞는 모델을 선택하는 과정이 필요하며, 그 과정이 굉장히 중요하다"는 말씀을 하셨다. 이번 대회를 통해서 모델을 세부적으로 공부하는 시간을 가졌으니 다음 대회에서는 데이터 파악에 좀 더 힘을 실어야겠다는 생각을 하게 되었다.

마무리

드디어 길고 길었던 AI 부트캠프 과정이 끝이 났다. 마지막 대회여서 시원 섭섭하기도 하고 뿌듯하기도 하고 그렇지만 아쉬운 부분이 굉장히 많이 남는다. 여기서 배웠던 모든 과정들 그리고 훌륭하신 멘토님과 강사님께서 해주신 말씀들을 잘 새겨 담아 실무에서 유능하게 써먹을 수 있는 사람이 되도록 노력할 것이다.

#패스트캠퍼스 #UpstageAILab #Upstage #부트캠프 #AI #데이터분석 #데이터사이언스 #인공지능개발자 #ML #머신러닝 #경진대회 #딥러닝 #NLP

0개의 댓글