5주차는 미니프로젝트와 딥러닝이 있었다.
미니프로젝트에서 조장을 맡았었는데 실수를 2번이나 했다...
2️⃣ 미니프로젝트 2차
🌬️ 공공데이터를 활용한 미세먼지 농도 예측
1일차에는 공공데이터를 활용한 미세먼지 농도 예측을 주제로 미세먼지 데이터와 날씨 데이터를 이용해 1시간 후 미세먼지 농도를 예측하기 위한 미니프로젝트가 진행되었다. 1차 미니프로젝트 때 아쉽다고 생각했던 부분이 있기도 했고, 조장 역할을 해보면서 많이 배워보고 싶어서 이번에는 조장을 맡았다.
조장을 하면서 추구하고자 했던 바는 바로 '커뮤니케이션'이었다.
미션 수행 시에 모르는 건 조원들에게 적극적으로 묻고 전처리 진행 시 선택해야 할 상황들이 나오면 낱낱이 다 공유했다. 그래야 나중에 모델링 시에도 조원들끼리 일관된 결과가 나올 것 같았고, 같은 전처리 과정을 거쳐야 두 번째 모델링 미션 때 한 사람당 하나의 모델을 맡아 작업을 나눠서 할 수 있을 것 같았기 때문이었다.
하지만... 전처리 과정 하나 하나 거칠 때마다 조원들마다 나름의 아이디어들이 있고, 생각이 달라서 점점 전처리 과정이 서로 달라지게 되었다.
결국에는 조원들 각각의 아이디어대로 살릴 데이터는 살리고, 뺄 데이터는 빼는 식으로 미션 1을 완료하게 되었다.
혹시 시간이 모자를까봐 각자 모델을 나눠서 진행해보자고 했는데, 데이터 전처리한 과정이 다르니 결국 개인 한 명 한 명이 본인이 처리한 데이터로 모든 모델링을 해보는 수 밖에 없었다.
그런데 데이터 양도 그렇고 훈련에 시간이 오래 걸리는 경우가 아니라면 오히려 다양한 전처리를 거친 데이터를 이용한 모델링 결과들을 보는게 다양한 결과를 볼 수 있으니 더 효율적인 것 같다. (일종의 '보팅' 기법이랄까...?)
우리 조는 몇몇 분들이 피팅이 너무 오래 걸려서 그나마 시간 내에 완성할 수 있었던 내 파일을 제출했다.
🫠 바보짓 1
Random Forest를 하고 나면 변수 중요도를 볼 수 있는데, 현재 PM_10의 feature importance 수치가 압도적으로 높게 나왔다. 나중에 조별 발표 때 보니 이걸 그대로 쓰는 조도 있었는데, (이렇게 하면 R2 0.9 이상은 보장된다.) 내 생각에 모델이 다양한 변수를 쓰지 못하고 있는 생각이 들기도 했고, 저 변수 하나가 y값의 90% 이상을 설명하는 거니까 다중공선성 (음?!)이 있다고 판단하여 빼자고 했다.
그런데 나중에 와서 생각해보니까 다중공선성은 독립변수들 간 강한 상관관계가 나타나는 문제이지, 독립변수와 종속변수 간 상관관계가 강하게 나타나는 문제가 아니라는 게 생각났다.
모델의 목표가 어쨋거나 1시간 뒤 미세먼지 농도를 정확하게 예측하는 것이라면 현재 미세먼지 농도가 굉장히 중요한 것일텐데, 연구실에서 성능보다 성능에 기여하는 각 변수의 영향을 보려고 했었던 버릇 때문에 여기서도 그렇게 생각해버려 가장 중요한 변수를 버리고 성능이 낮게 나온 꼴이 되어버렸다...
하...다시 상관관계를 보니 다중공선성 문제를 따지려면 PM25나 PM10 중 하나를 빼면 됐었다.
제출한 후에는 몰랐는데, 우리 조원분 한 분이 전체 발표 시간에 발표하고 나서 다른 분이 채팅으로 '왜 저 변수를 뺐나요?' 질문이 들어왔을 때 뭔가 잘못됐다는 걸 깨달은 것 같다.
♿ 장애인 이동권 개선을 위한 장애인 콜택시 대기시간 예측
2 ~ 3일차는 장애인 이동권 개선을 위한 장애인 콜택시 대기시간 예측을 주제로 서울 장애인 콜택시 운행 데이터를 가지고 평균대기 시간을 예측하는 미니프로젝트를 진행하였다.
어제도 그렇고 시계열 데이터가 자꾸 나오는데, 이번에는 배웠던 머신러닝 모델 외에도 시계열을 위한 머신러닝 모델을 이용해볼 수 있었다.
시계열 데이터는 잘 접해본 적이 없어서 두 번 봐도 좀 어리벙벙했던 것 같다.
특히 전처리 부분에서 헷갈리는 부분이 있어 조원분들에게도 물어보고, 튜터님께도 적극적으로 여쭤봤다.
여러 파생변수를 만드는 과정 중에 y값인 평균 대기 시간을 가지고 평균 대기시간의 7일 평균 이동을 만드는 작업을 했어야 했는데, 이게 미래의 y값도 들어가다 보니 data leakage라고 할 수 있는지 표까지 만들어 질문을 드렸다.
아하... 모델이 7일 평균 이동 값을 가지고 y값을 역으로 알 수는 없기 때문에 data leakage로 성립이 안된다는 걸 튜터님의 친절한 설명 덕에 새로 배울 수 있었다. 후에 전체 발표 때 너무 좋은 질문이었다고, 정말 칭찬한다고 해주셔서 기분이 좋았다... (이때까지는....)
그리고 구글링을 통해서 ARIMA, SARIMAX, 지수 평활법도 배워 사용해봤다. 자세한 원리는 모르지만, 코드를 따라쳐보니 성능이 SARIMAX가 가장 높게 나온 것을 볼 수 있었다. ARIMA는 다른 외부 변수는 사용 못하고 y값만 사용할 수 있어서 만들어 놓은 파생변수가 아까워 사용하지 않았지만, ARIMA의 예측결과를 다른 모델에 들어가는 변수로 썼다면 어땠을까 싶다... (시간만 있었더라면...!)
Pred-actual 그래프를 그려봤을 때 예측값이 실제값의 추세를 어느 정도 따라가는 듯 싶은데도 R2값이 그리 높게 나오지 않는 모습을 확인할 수 있었다. 강사님께서는 MAPE와 MAE를 성능지표로 사용하라고 하시긴 했지만... MAE와 MAPE의 높고 낮음의 기준을 잘 모르겠어서 조원들이 R2값과 함께 비교했었다.
다른 조들 보니 3 정도대면 잘 나온 축에 속하는 것 같긴 하다.
🫠 바보짓 2
시간이 촉박할 것 같아서 제출 마감 5분 전에 미리 제출하고 계속 작업하고 있었다.
그런데 분명 파일 올리고 업로드 로딩 바 올라가는 것도 봤는데 제출 완료라고만 되어있고 파일이 안 올라가 있는 것이다....
오엠지쟈스...
천만다행으로 강사님께서 갑자기 이번 미프 점수는 셀프테스트 점수로 반영하겠다고 말씀하셔서 한시름 놓을 수 있었다... (이게 구사일생 같으면서도 한 편으로는 너무 신기하면서... 강사님이 자애롭게 느껴졌다.)
항상 뭔가를 제출할 때는 두 번씩 확인하자!
딥러닝 후기는 다음 주 후기 때 함께 적겠다....
'Bootcamp > 2024 KT Aivle School' 카테고리의 다른 글
[KT AIVLE School 5기] AI 개발자 트랙 7주차 후기 (0) | 2024.06.08 |
---|---|
[KT AIVLE School 5기] AI 개발자 트랙 6주차 후기 (1) | 2024.06.02 |
[KT AIVLE School 5기] AI 개발자 트랙 4주차 후기 (0) | 2024.05.24 |
[KT AIVLE School 5기] AI 개발자 트랙 3주차 후기 (0) | 2024.05.22 |
[KT AIVLE School 5기] AI 개발자 트랙 2주차 후기 (0) | 2024.05.19 |