로그 분석을 통한 보안 위험도 예측 AI 경진대회

알고리즘 | NLP | 분류 | 제어 | Macro f1 score

  • moneyIcon Prize : 총 300만원
  • 739명 마감

 

Private 8위 | 그암 | LGBM

2021.05.19 21:01 3,163 Views language

머신러닝 모델인 LightGBM을 적용하는 대신 전처리에 집중했습니다.
전처리는 머릿속으로 하고 싶었던 방식을 적용하지 못해 노가다로 작업했습니다. 
공유해주신 코드들을 보니 하고 싶었던 방식들이 보이네요. 이제라도 보면서 공부를 좀 해야겠습니다 ㅜㅜ.
아마 전처리부분을 공유한 다른 코드로 변경하면 성능이 더 오를 것 같습니다.

# 고민한 방법
1. 문장 부분만을 추출한 것이 다양한 의미 없는 로그들과 함께 처리한것보다 성능이 좋았습니다.
2. 카운트벡터 대신 TF-IDF를 사용했었는데 성능 향상이 보이지는 않아 카운트벡터로 작업했습니다.
3. SMOTE를 활용하여 오버샘플링을 진행해봤지만 성능 향상이 없어 제외했습니다.
4. LEVEL 7에 대해 모델로 예측한 후 해당 값을 활용하여 컷오프를 지정했고, 유의미하게 성능이 올랐습니다.
5. 원핫인코딩을 하지 않고 cat_features로 그대로 넣는 것이 효과가 좋았습니다.(Lightgbm 기준)

# 가정
로그를 봤는데, 의미 없는 문자 조합 (1edai3)이나 데이터 경로, 단순한 문자 등이 섞여 있었습니다.
해당 데이터들이 의미 없는 데이터라고 가정해 그 사이에 있는 문장만을 뽑아 모델링하고자 했습니다.

# 전처리
path나 명령어 등을 제거하고 싶었지만 정규표현식을 잘 몰라 최대한 로그 속 문장을 찾는 방식으로 변경했습니다. 그 과정에서 첫 단어들 기준으로 로그의 타입이 나누어지는걸 확인하여 첫 단어들 기준으로 전처리를 따로 적용하는 방식으로 작업했습니다.
- 참고 : 10duck님의 간단한 EDA

# 결과
막판에 몇 가지 튜닝 계수등을 조정했었는데 그 때 자료가 남아있지 않아 약간 다른 결과가 나올 수 있습니다.

# 문제점
제 전처리는 Train Set만 확인하고 작업했기 때문에 Test Set에만 존재하는 유형의 데이터는 전처리가 되지 않습니다. 여기서 Test Set의 데이터를 목표로 조건문을 추가한다면 Data Leakage라고 판단되어 성능 하락을 감수하고 그대로 진행했습니다.

Code
로그인이 필요합니다
0 / 1000
당쇠
2021.05.30 09:04

👏