시계열의 일정한 패턴에서 이상치를 감지하는 여러가지 방법중 Isolation forest와 LSTM을 사용한 예제 입니다.
전체 소스
1. Isolation Forest
해당 데이터는 해가 떠있는것을 기준으로 하는 값이다. (정확히는 태양광 발전량이다.)
즉 해가 뜨지 않은 시간(저녁~새벽)에 데이터가 있다면 이상치가 된다.
데이터에 라벨링을 해 놓았다. 1은 정상 -1은 이상치를 나타낸다.
그래프로 표현한 값들
이상치는 저녁에 발생하며, 월에 따라 시간대가 달라진다.
모델 트레인, 해당 값들은 직접 for 문을 돌려서 가장 높은 값이 나올떄까지 연산한 값이다.
(사실 너무 오버피팅 되었지만, 오히려 오버피팅된 값이 더 좋은 성능을 보였다. 아마도 새벽에 데이터가 있는 것을 확실하게 잡는것으로 보인다. )
트레인된 모델로 이상치를 검색해보면 하나의 이상치만을 잡지 못한것을 볼수 있다.
2. LSTM
LSTM은 과거의 데이터를 보기 위해서 윈도우를 만들어줘야 한다. (시간에 대한 축적데이터)
여기서는 10시간에 대한 데이터를 윈도우로 설정하여 만들었다.
모델의 경우 LSTM 128 -> dropout -> 결과로 짧게 만들었다
(모델이 커져도 그다지 효과가 크지 않았다.)
epoch은 30, 배치사이즈는 32로 설정하엿다.
실제 값과 예측값 비교
'ML > 인공지능' 카테고리의 다른 글
NLP 기초 (0) | 2023.02.19 |
---|---|
openapi chatGPT 사용기 (0) | 2022.12.12 |
이상감지 (정리) (0) | 2021.05.25 |
random forest // isolation forest 공부한한 내용 정리 (0) | 2021.05.21 |
RNN // LSTM 공부한 내용 (0) | 2021.05.17 |