🔗 모집요강
- 물 관련 데이터 활용 확대 및 물 분야 현안해결을 위한 창의적 아이디어·신규 비즈니스 모델 발굴
- 데이터 융합 분야
- 사회 현안 해결을 위한 데이터 분석 아이디어 및 분석 결과
| 팀장 | 팀원 1 | 팀원 2 |
|---|---|---|
![]() |
![]() |
![]() |
| 차수빈 | 배주원 | 박신영 |
- 기간: 2023.07.08(토) ~ 2023.08.22(화)
- 세부 일정
- 역할
| 이름 | 역할 |
|---|---|
| 차수빈 | 데이터 수집 전처리/병합 EDA 군집분석(그룹 2,4) 모델링(AutoML, 그룹 2,4) 대시보드 제작(tableau) |
| 배주원 | 데이터 수집 전처리/병합 EDA 군집분석(그룹 1) 모델링(그룹 1) 보고서 작성 |
| 박신영 | 데이터 수집 전처리/병합 EDA 군집분석(그룹 3) 모델링(그룹 3) 보고서 작성 발표 ppt 제작 |
- 개발 프로세스
- 다목적 댐의 상태 점검과 기능 확인을 위한 머신러닝 기반 모델 개발
- 댐에 대한 여러 정보를 통해 댐의 (현재) 저수량을 예측 -> 댐의 활용 능력 계산
- 댐의 활용능력과 수질 상태를 종합적으로 고려하여 각 댐의 현황을 파악
=> 댐 상태에 대한 신속한 평가 + 이상 상황 모니터링
├── Kwater
| ├── 원본 데이터(private)
│ ├── data_merge.ipynb(데이터 가공, 병합)
│ ├── final.csv(수문정보/제원정보/기상자료 가공 이후 데이터셋)
│ ├── quality.csv(수질정보 가공 이후 데이터셋)
│ ├── EDA_Clustering.ipynb(EDA, 군집분석)
│ ├── data(각 그룹별로 모델링을 하기 위한 train/test 데이터셋)
│ │ ├── train_group1.csv
│ │ ├── train_group2.csv
│ │ ├── train_group3.csv
│ │ ├── train_group4.csv
│ │ ├── test_group1.csv
│ │ ├── test_group2.csv
│ │ ├── test_group3.csv
│ │ └── test_group4.csv
| ├── AutoML.ipynb(최적화 모델 선정을 위한 모델링 자동화)
| ├── Modeling.ipynb(그룹별 최종 모델링 및 저수량 예측)
│ └── README.md
- 데이터 시점: 2019.01.01 ~ 2022.12.31
- 데이터는 주로 일 단위(수질 데이터는 월 단위)
- 데이터 수집/가공 후 하나의
csv파일로 가공 - 성격과 목적에 맞게 4가지로 분류
강우량,유입량,방류량,(현재)저수량,저수율(%)을 수집- 결측치 처리
- 강우량: 해당 연도 -> 해당 월의 최빈값으로 대체
- 다목적댐 21곳의
총저수량,유효저수량,홍수조절용량,비활용용량을 수집 - 저수지 용량 배분에 따라
이수용량을 계산(파생 변수)
- 다목적댐이 위치한 지역 혹은 인근 지역의
평균습도,평균기온,평균풍속,합계일사량을 수집
- 월별로 10가지 검사항목을 수집 -> 호소의 생활 환경기준에 따라 7개 등급으로 분류
- 등급 산정이 어려운 경우
총유기탄소량(TOC)만을 사용하여 등급을 결정
- 등급 산정이 어려운 경우
- 특정 월의 데이터가 모두 결측치인 경우 해당 댐의 등급 최빈값으로 대체
- 학습용 데이터에 대해 수행
- 각 댐 내에서는 저수량이 대부분 일정하게 유지되는 것을 확인
- 기술통계량, 왜도 -> 낮은 비대칭성
- 댐별로는 평균 저수량에 큰 차이가 있음을 확인(스케일 차이)
- 연도별/계절별로 특징적인 모습을 보임 -> 연도(
year)와 계절(season)을 파생 변수로 생성
- 연도별/계절별로 특징적인 모습을 보임 -> 연도(
- 댐별로 각 변수의 분포, 계절별 분포, 연도별 분포를 분석
- 기술통계량, 왜도 파악
- 왜도가 큰 변수들: 강우량(
rain_qy), 유입량(inflow_qy), 방류량(outflow_qy)
- 왜도가 큰 변수들: 강우량(
➕ 태블로 시각화
-
EDA 결과 다목적 댐 21개소를 유사한 특징을 가지는 그룹으로 군집화
KMeans알고리즘 활용- KMeans 알고리즘은 이상치에 민감하게 반응하기에 이상치 제거 후 진행
-
최적 군집 개수 설정을 위해
Elbow Method를 활용하여 2 ~ 5개 군집화 결과를 비교- 4개를 최적 군집 개수로 선택
-
군집분석 결과
- group 1: 군위, 김천부항, 남강, 밀양 등 12개소 - group 2: 소양강, 충주 - group 3: 섬진강, 용담, 임하, 주암(본댐), 합천 - group 4: 대청, 안동 -
군집마다 고유한 데이터 특징을 확인할 수 있음
- 각 그룹의 차이를 최대한 유지하기 위해 군집별로 전처리를 다르게 진행
- 로그 변환: 변수들이 왜곡된 경우(= 왜도가 1 이상인 경우) 수행
- 스케일링: 이상치에 영향을 덜 받는
RobustScaler를 적용 - 범주형 변수:
One-hot Encoding적용
- 각 그룹의 차이를 최대한 유지하기 위해 군집별로 전처리를 다르게 진행
- AutoML 기법 중 하나인
PyCaret을 통해 다양한 회귀 알고리즘의 성능을 개략적으로 평가
=> 평균 제곱근 오차(RMSE)를 기준으로RandomForestRegressor,CatBoostRegressor,XGBRegressor,ExtraTreesRegressor,LGBMRegressor을 최종 알고리즘으로 선택
- 위에서 선택된 5개의 알고리즘을 활용해 각 그룹에 대해 모델링을 진행
- 평가 지표: RMSE, Adjusted R-Square
- 기본 모델 생성 후 하이퍼 파라미터 튜닝을 통해 모델 성능 최적화 시도
- 최적 모델 1개를 예측을 위한 모델로 선택
-
최적 모델 선택
=> 공통적으로ExtraTreesRegressor의 성능이 가장 좋음을 확인할 수 있음- group 1:
ExtraTreesRegressor기본 모델 - group 2: 하이퍼 파라미터 튜닝된
ExtraTreesRegressor모델 - group 3:
ExtraTreesRegressor기본 모델 - group 4:
ExtraTreesRegressor기본 모델
- group 1:
-
최적 모델로 테스트 데이터에 대한 예측 수행
- 각 댐의 (현재) 저수량을 예측
- 예측된 저수량을 통해 각 댐의 활용 능력 계산
- (최대) 이수 용량에 대한 활용 가능 용량의 비율을 계산
- 각 댐마다 (최대) 이수용량에 비해 실제로 물을 얼마나 활용할 수 있는지를 산정
- tot_qy: 총저수량
- valid_qy: 유효저수용량
- flood_qy: 홍수조절용량
- unused_qy: 비활용용량
- usable_qy: 활용 가능 용량
- maximum_use_qy: 이수용량
- efficiency: 활용 능력
- 예측된 (현재) 저수량 + 수질 등급 + 활용 능력을 복합적으로 평가한 후 21개의 다목적 댐을 다시 5개의 그룹으로 분류
- 각 그룹의 현 상황을 분석하고, 각각에 맞는 솔루션 제시
※ 자세한 내용은 결과보고서를 참고 바람
- 그룹 별로 처한 상황은 다르지만, 모델링 결과를 바탕으로 추후 댐의 관리 방향을 설정하는 데 중요한 지침을 얻을 수 있음
- 지속적인 발전과 효율적인 자원 활용 가능
- 데이터 수집 단계부터 전처리, 모델링까지 모두 다 다뤄볼 수 있어서 좋았던 것 같습니다.
- 또한, 평소에 잘 고민해보지 않았던 수자원 관리 및 활용 분야에 대해 고민해보고, 이를 또 구체적인 프로젝트의 주제로써 아이디어화 시키는 것이 어려웠지만 또한 좋은 경험으로 남은 것 같습니다.
- 마지막으로, 본선 발표 때 많은 사람들 앞에서 전달하고자 하는 바를 명확하게 발표하는 것이 어려웠지만, 그러한 경험이 이후에 많은 도움이 될 것 같습니다.
- 공모전 발표 준비와 진행이 힘들긴 했다만, 살면서 처음으로 그렇게 많은 사람들 앞에서 공적인 발표를 해볼 수 있는 기회를 얻었다는 것 자체가 큰 경험으로 남을 것 같습니다.
- 다시 한 번 2달 반 동안이라는 다소 긴 기간동안 같이 고민해주고 함께해 준 팀원분들께 감사드립니다 😊
- 지난 3개월 동안 캐글 필사, 교재 공부와 같은 데이터 분석 이론 공부에 열중했었습니다. 하지만 이미 가공된 데이터를 가지고 결과가 정해져있는 실습을 하면서, 제 자신이 배운 내용을 잘 적용하고 있는 것이 맞는지 의심이 들었습니다. 이러한 이유로 여름방학 동안 같은 동아리원 분들과 함께 시간을 투자하여 공공데이터를 활용하는 공모전에 참가하게 되었습니다. 비록 정제되어있지 않은 공공데이터를 직접 처리해야하고 모델링 결과가 어떻게 나올지 예측할 수 없다는 점에서 불안함도 있었지만, 이렇게 도전적으로 데이터 분석 실습을 직접 해볼 수 있었가는 점에서 공모전 참가는 상당히 유의미하다고 생각했습니다. 또한 단순히 모델의 성능을 높이는 것 뿐만 아니라, 성능이 낮게 나타난 이유가 무엇인지, 이를 해결하기 위해선 어느 부분을 수정해야 하는지 등 실무에서 데이터분석을 할 때 마주할 수 있는 여러 문제 상황들을 직접 부딪혀보고 해결하기 위해 노력했기 때문에 더욱 값진 경험이라고 생각합니다. 무엇보다도 저 혼자 공모전을 준비했다면 부족한 점이 많았을텐데, 너무 좋은 팀원분들과 함께 공모전에 참가했기에 이렇게 훌륭한 결과가 나올 수 있지 않을까 싶습니다. 팀원 분들과 함께 프로젝트를 진행하며 협업과 소통의 태도에 대해 터득할 수 있었습니다. 제가 대학에 들어온 본격적으로 프로젝트에 참여한 것은 이 공모전이 처음이었기 때문에 미숙했던 부분이 많았을텐데, 그럼에도 불구하고 많이 도와주시고 북돋아주신 덕분에 프로젝트를 무사히 마칠 수 있었던 것 같습니다. 약 3달의 기간 동안 함께 열심히 달려주신 저희 팀원 분들께 다시 한 번 감사드립니다!
- 주제를 직접 정하는 것부터 데이터도 전부 수집을 해야하고 아직 정제되어있지도 않아 예측할 수 없어, 결과가 어떻게 나올지 걱정을 많이 했지만 그만큼 더 값진 경험이었습니다. 팀원 분들과 이론 위주의 공부와 스터디만 하다가 한번 부딪혀보자 해서 시작한 공모전이었는데 모두 너무 열심히 서로서로 도와주면서 해낸 것 같아 매우 뿌듯했습니다. 이론과 실제는 다를 수 밖에 없고 오차가 나는 것, 그리고 성능을 높이기 위해 어떤 부분을 해결해야 할지 등등을 함께 고민하며 많이 배우고 성장한 것 같습니다. 이론으로만 접했던 내용을 직접 활용해보면서 실무를 슬쩍 경험한 것 같아 좋았습니다. 항상 이론만 배우며 부족하다고 느끼고 어려움이 앞섰는데 이 공모전으로 인해 정말 많은 것을 배우게 되었습니다. 이 모든 것을 함께 해주신 팀원 분들께 너무너무 감사드립니다 ! :)



