About me
home
Portfolio
home
📊

DATA EDA

산업 공기압축기 시스템에서 시계열 이상치 탐지를 위한 데이터셋에 대한 탐색적 데이터 분석(EDA)를 수행한다. 먼저, 데이터의 기본 통계량을 확인하여 센서 값들의 경향성, 변동성 및 분포를 이해하고, 시계열 데이터의 결측치와 이상치 여부를 파악한다. 이후 시계열 패턴과 주기성을 분석하기 위해 시각화 도구를 활용하며, 센서 간의 상관관계를 조사하여 변수들 사이의 연관성을 파악한다. 이 과정은 공기압축기 시스템의 정상 작동과 이상 작동 간의 차이를 이해하는 데 도움이 되며, 이러한 탐색적 데이터 분석을 통해 얻은 인사이트를 활용하여 모델 구현 전 준비 과정을 철저히 수행하여, 모델의 성능 향상에 기여하도록 한다.

데이터 확인

1.
데이터 분포 확인
type별 데이터양, 데이터 분포와 이상치를 시각화했다. train의 시각화 결과와 test의 시각화 결과가 거의 비슷하게 나오는 것을 파악했다.
[ train 시각화 ]
[ test 시각화 ]
2.
feature 연관성 확인
독립 변수들 사이에 강한 상관관계가 존재하는 경우 회귀 분석 결과의 정확성이 떨어질 수 있으며, 변수들 간의 실제 영향력을 구분하기 어려워진다(다중 공선성). 따라서 feature 간의 상관관계를 파악하기 위해 correlation heatmap을 그려보았다.
위 heatmap을 통해 ‘air_inflow’&’motor_current’ / ‘air_end_temp’&’motor_rpm’&’motor_temp’ / ‘type’&’time’ feature 사이에 높은 상관관계가 있다고 파악했다. 이를 기반으로 불필요한 feature를 제거하려고 했다.
3.
시계열 데이터 패턴 확인
모든 feature의 시계열 패턴을 확인하기 위해 다음과 같은 그래프를 그려보았다. 모든 feature에서 비슷한 패턴을 보인다는 것을 파악했다. 이를 통해 위에서 진행했던 correlation이 부정확하다고 판단하였고 feature를 제거하지 않기로 했다.

데이터 전처리

1.
데이터 범위 조절
데이터 분포 확인 결과 ‘motor_vibe’ feature의 type별 분포 그래프에서 type1의 특정 시간의 특이값에 대해 확인했다.
학습용 데이터는 모두 정상 데이터이므로 type1의 특이값의 데이터를 type1의 ‘motor_vibe’ 최댓값과 최솟값 사이의 랜덤한 값으로 변경했다.
데이터 범위 처리 결과 데이터는 ‘motor_vibe’ feature에서 다음과 같은 분포를 나타내게 되었다.
import numpy as np # motor_vibe의 최댓값과 최솟값 구하기 (17.0 미만) min_vibe = type_1_df[type_1_df['motor_vibe'] < 17.0]['motor_vibe'].min() max_vibe = type_1_df[type_1_df['motor_vibe'] < 17.0]['motor_vibe'].max() print('max_vibe : ',max_vibe) print('min_vibe : ',min_vibe) # motor_vibe 값이 17.0 이상인 행의 인덱스 구하기 high_vibe_indices = type_1_df[type_1_df['motor_vibe'] >= 17.0].index # 각 인덱스에 대해 무작위 값으로 대체하기 np.random.seed(1004) for index in high_vibe_indices: change = np.random.uniform(min_vibe, max_vibe) print('change to ' ,change) type_1_df.loc[index, 'motor_vibe'] = change train_data.update(type_1_df) # 변경된 결과 확인 print('#@#',type_1_df[type_1_df['motor_vibe'] <= 17.0])
Python
복사
2.
feature 범위 scaling
각 feature의 데이터 범위를 확인하기 위해 boxplot을 그려보았다. 이를 통해 ‘motor_rpm’ feature의 값만 데이터의 분포가 다르다는 것을 확인했다.
이는 학습 시 ‘motor_rpm’ feature에 가중치를 크게 주어 모델이 다른 feature에 비해 ‘motor_rpm’ feature 값에 영향을 많이 받게 된다는 것을 의미한다. 이를 방지하기 위해 데이터의 범위를 비슷하게 변경해주는 data scaling 과정을 진행했다.
3.
feature 제거/추가
설비에 따라 마력에 대해 다음의 특성을 나타낸다.
설비 번호 [0, 4, 5, 6, 7]: 30HP(마력)
설비 번호 1: 20HP
설비 번호 2: 10HP
설비 번호 3: 50HP
초반에 진행할 때는 마력이 같은 설비번호(type)별로 학습을 진행하여 마력에 대한 feature를 추가하지 않았다. 하지만 데이터의 부족으로 전체 데이터를 학습하는 것이 더 좋다고 판단하여 ‘type’ feature를 제거하고 ‘hp’(마력) feature를 추가하여 전체 데이터로 학습을 진행했다.