EDA, 모델링, 결과 확인 과정의 ipynb 파일 (2022.10 ~ 2022.10)
AI 분야 중 스마트그리드·스마트팩토리 4차 산업혁명의 핵심인 개별 설비·장비별 에너지 효율화·에너지 사용 패턴 분석·설비별 이상 감지 등 AI 핵심 알고리즘 개발이 필요합니다.
그 중 설비별 이상 감지를 위한 분류모델을 만들면 전력설비의 효율성 유지가 용이해지고 점검 시점을 파악하기 쉬워질 것이라 생각했습니다.
train, test 데이터셋이 존재
Input : 일정 시간동안 관측한 20 여개의 에너지 사용 패턴 관련 feature
Output : '역률', '전류고조파', '전압고조파' 3 가지 도메인에 대한 SOH 분류 정상 :0, 주의 :1, 경고 :2
(test 데이터셋은 output이 없음)
1)데이터에 대한 정보 파악
- 데이터 크기

- 데이터모양

- 데이터 컬럼별 데이터 타입

- 데이터 컬럼별 NaN 개수 확인

2)전력 데이터에 대한 도메인 지식 활용
- Y결선임을 확인

- 부하들의 주파수 확인

- 주파수가 0일 때 부하가 정지 상태이지만 역률이 경고로 뜸을 확인

3)NaN 케이스 확인
- Case1 : '누적전력량', '유효전력평균', '무효전력평균', '주파수', '전류평균', '상전압평균', '선간전압평균', '온도'
- Case2 : 'R상유효전력', 'R상무효전력', 'R상전류', 'R상전압', 'R상선간전압', 'S상유효전력', 'S상무효전력', 'S상전류', 'S상전압', 'S상선간전압', 'T상유효전력', 'T상무효전력', 'T상전류', 'T상전압', 'T상선간전압'
- Case3 : 'S상유효전력', 'S상무효전력', 'S상전류', 'S상전압', 'S상선간전압', 'T상유효전력', 'T상무효전력', 'T상전류', 'T상전압', 'T상선간전압'
- Case4 : 'T상유효전력', 'T상무효전력', 'T상전류', 'T상전압', 'T상선간전압'
- Case5 : ALL NaN
- 도메인 지식을 활용하여 결측치를 처리했습니다.
- 먼저 Case5에 해당하는 row들은 삭제하고 Case 별로 주파수, 온도는 바로 앞과 뒤의 평균값으로 처리하고 나머지는 다른 feature을 이용하여 구한 값으로 처리했습니다.
- 처리 후 결측치 확인

- 도메인 지식을 활용하여 각 label마다 통합 or 선택하여 df를 만들었습니다.
- 역률

- 전류고조파

- 전압고조파

- train셋과 validation셋을 8:2로 나눈 후 standard scaler를 사용했습니다.
- 최빈값으로 베이스라인을 잡고 Random Search로 하이퍼 파라미터를 튜닝하여 RandomForest 모델을 학습시켰습니다.
- 튜닝한 하이퍼 파라미터는 max_depth, n_estimators 입니다.
- 평가지표는 타켓 불균형이 있기에 각 타겟을 골고루 잘 예측했는지 확인하기 위해 macro_f1_score를 사용했습니다.
- 이 후, 지속적인 feature engineering을 하여 성능 개선을 했습니다.

베이스모델 - 최빈값
macro_f1_score: 0.23
랜덤포레스트
macro_f1_score: 0.94
베이스모델 - 최빈값
macro_f1_score: 0.30
랜덤포레스트
macro_f1_score: 0.95
베이스모델 - 최빈값
macro_f1_score: 0.19
랜덤포레스트
macro_f1_score: 0.92
여러 시도의 feature engineering으로 성능 개선을 했습니다.
최종결과가 기대한 만큼 결과가 나오지 않았습니다.
더 좋은 feature 엔지니어링 방법이 있다면 결과가 더 좋아질 것 같습니다.
랜덤포레스트 분류보다 좋은 모델을 만들면 결과가 더 좋아질 것 같습니다.
label이 경고이지만 고장 상태인지 사용을 안하고 있는 상태인지 구분할 필요가 있어보입니다.