한계와 다음 단계 - youneedpython/melting-tank-lstm-baseline GitHub Wiki
이 쪽은 Baseline 실험에서 드러난 한계와 다음에 고칠 것을 정리합니다. 한계는 Notebook의 코드와 출력에서 확인한 것만 적었습니다.
알려진 한계
결과
모델이 정상과 불량을 거의 구분하지 못합니다. 전체 데이터의 ROC AUC가 0.433(뒤집어도 0.567)입니다. 자세한 수치는 실험 결과에 있습니다.
Test의 지표가 Class 비율에 가려져 있습니다. Test의 98.8%가 OK라서 Accuracy와 OK 기준 Precision이 모델과 무관하게 높게 나옵니다.
설계
SMOTE를 Window로 묶기 전에 적용했습니다. SMOTE가 만든 NG 행 236,392개는 시간 순서 없이 데이터 끝에 붙습니다. 그 구간에서 만든 Window는 실제로 이어진 10개 시점이 아닙니다.
Validation이 학습과 겹칩니다. Window를 한 칸씩 밀어 만든 뒤 무작위로 나눴습니다. Validation의 Window는 학습에 들어간 이웃 Window와 10개 시점 중 9개를 공유합니다. Validation 지표로는 과적합을 알 수 없습니다.
학습 기간과 Test 기간의 구성이 다릅니다. NG 비율이 학습 30%, Test 1.2%입니다. 시간순으로만 나눠 생긴 차이입니다.
Label이 Window의 다음 시점입니다. 10개 시점으로 그 다음 시점의 판정을 맞히는 문제로 정의했습니다. 데이터의 행이 한 제품의 연속 측정인지, 여러 설비의 값이 번갈아 기록된 것인지는 Notebook에서 확인하지 않았습니다.
입력이 2개뿐이고 서로 상관이 높습니다. 온도와 교반 속도의 상관계수가 0.94입니다.
재현
TensorFlow Seed를 고정하지 않았습니다. 다시 학습하면 수치가 달라집니다.
모델 파일과 데이터가 저장소에 없습니다. .gitignore로 제외했습니다. 모델 파일은 melting-tank-mlops에 들어 있습니다.
requirements.txt가 실행에 충분하지 않습니다. seaborn과 Jupyter Notebook이 빠져 있습니다.
Notebook에 적어 둔 개선 방향
Notebook의 결과 해석에 적혀 있던 내용입니다. 실행하지는 않았습니다.
| 방향 | 내용 |
|---|---|
| Threshold 조정 | Precision-Recall Curve로 운영 기준에 맞는 값 선택 |
| 불균형 처리 | SMOTE 재적용 또는 Class 가중치 |
| 입력 값 | 온도와 교반 속도 외의 값 추가 |
| 모델 구조 | Bidirectional LSTM, Attention, CNN-LSTM |
다음에 한다면
- 데이터의 행이 어떤 단위로 기록됐는지부터 확인하고, 그에 맞게 Window와 Label을 다시 정의합니다.
- Window를 먼저 만든 뒤 학습 묶음에서만 불균형을 처리합니다.
- Validation을 시간순으로 나누거나 구간 단위로 나눠 학습과 겹치지 않게 합니다.
- 평가 지표를 NG 기준 Precision, Recall, PR AUC로 바꾸고, "전부 OK로 예측" 같은 단순한 기준과 먼저 비교합니다.
- Seed를 고정하고, 모델 구조를 바꾸기 전에 위 항목부터 다시 측정합니다.