DACON 기계 고장 진단 AI 경진대회 (Link)
- 음향 데이터으로부터 비지도 학습을 통해 기계 고장을 진단하는 AI 알고리즘 개발
- 2022.12.05 ~ 2023.01.16
- 권남우
- Python
- Pandas / Scikit - Learn / time / datetime / librosa / matplotlib / seaborn
- Colab
- PUBLIC SCORE : 0.98224 (4등/219팀)
- PRIVATE SCORE : 0.93957 (18등/219팀)
- EDA 좋아요 28개
- Feature Extraction in Audio (Sound) 좋아요 15개
- 총 1279 개 팬(FAN) 소리 샘플
- FAN_TYPE : 팬(FAN)의 모델 종류 (0, 2 존재)
- LABEL (전부 0 : 정상 데이터만 존재)
- 총 1514 개 팬(FAN) 소리 샘플
- FAN_TYPE : 팬(FAN)의 모델 종류 (0, 2 존재)
Understading Domain (Audio) Link
- 효과적인 Feature Extraction을 수행하기 위해서는 음향 데이터에 대한 충분한 이해가 필요했다.
- 아날로그 신호, 진폭, 주파수, 위상, 대역폭, 스팩트럼 등과 같은 기본적인 개념과 wav 파일로 부터 추출하는 있는 Feature들의 개념을 공부하였다.
EDA Link
- 모든 파일이 동일한 Sampling Rate를 가지는 것을 확인하였다.
- Fan Type 별로 3개의 샘플을 선택하여 다양한 Feature들을 시각화하였다.
- 특히 MFCC로 Feature Extraction를 수행한 결과를 히스토그램과 박스 플랏을 표현해보았을 때, Fan Type 별로 분포가 다르다는 것을 확인할 수 있었다.
Preprocessing Link
- MFCC를 기반으로 전진선택법을 통해 다양한 Feature들을 추가하였다. (Zero Crossing Rate, RMS, Poly Feature, Spectral Flatness)
- 추출된 Feature들로 부터 좀 더 다양한 정보를 얻기 위해 Zero Crossing Rate과 RMS를 각각 차분한 값을 추가로 사용하였다.
- Fan Type별로 데이터 분포가 크게 차이나였기에 Fan Type 구분하여 Scaling를 적용하였다.
- 이상치가 존재함을 시각화를 통해 확인하였으며 Robust Scaler를 적용하였다.
- Robust Scaler의 하이퍼 파리미터 'quantile_range'를 (15.0, 85.0)로 설정하였을 때, Public Score가 상승하였다.
- 차원 축소를 통해 고차원 데이터를 저차원 공간에 투영해 중복 정보를 제거하면서 가능한 핵심 정보 유지하고자 하였다.
- SparsePCA를 사용하여 희소성을 유지함으로써 PCA보다 더 좋은 성능을 얻을 수 있었다.
- Local Outlier Factor 모델을 사용하였다.
- 모델 특성상 Novelty Score가 정규화 되어있지 않기에 해당 모델을 다른 Data Set에 적용하는 것은 좋지 못할 수 있다.
- 그래서 그래서 FAN TYPE 별로 각기 다른 Data Set이라고 가정하여 FAN TYPE 별로 각각 모델을 학습하였다.
- 하이퍼 파라미터는 경험적으로 설정하였다.
과대 적합 문제 발생 Link
- Public Score로는 순위가 4등에 해당하였지만 Private Score로는 18등에 불과하였다.
- 일반화에 문제가 있다고 판단하여 모델링 부분에서 개선하고자 하였다.
- LOF의 하이퍼 파라미터 중 'p'를 1로 설정하여 데이터 간의 거리를 멘하탄 거리를 사용함으로써 각 차원 간의 거리가 더 반영되도록 하였다.
- 이를 통해 고차원으로 인한 모델 성능 하락을 방지할 수 있었다고 생각한다.
- 그리고 FAN TYPE 별로 각각 모델을 학습하는 것이 아니라 하나의 훈련 데이터셋만 사용하여 모델이 더 많은 훈련 데이터를 학습할 수 있도록 하였다.
- 이러한 개선을 통해 Private Score가 상승하였음을 확인할 수 있었다.
- 수상할 수 있었지만 그러지 못하여 속상한 대회였다.
- 그럼에도 이상치 탐지 및 음향 데이터와 같은 평소 접하지 못한 분야를 공부하게 되어 많은 것을 배울 수 있었다.
- 일반화의 중요성을 깨닳을 수 있는 시간이었으며 다음에는 더 잘 할 수 있을 것이라는 자신감을 가지게 되었다.
- Private Score를 확인하고 문제점을 진단하여 개선할 수 있었던 점에서 성장하고 있음을 느꼈다.
- 마지막으로 이상치 탐지 분야에 큰 흥미가 생겨 다음에도 비슷한 경험을 하게 된다면 딥러닝을 사용하고자 한다.