오토인코더 기반 네트워크 침입 탐지 방법 연구(2)
지난번 개선점 및 추가사항을 찾아보고 실습해본 내용입니다.
1. UNSW-NB15 데이터 셋에 대한 분석
UNSW-NB15 | 정상 샘플 | 비정상 샘플 | 총 샘플 |
훈련 데이터 | 56,000 | 119,341 | 175,341 |
테스트 데이터 | 37,000 | 45,332 | 82,332 |
위와 같이 데이터 셋이 구성되어 있는데 총 샘플의 훈련 데이터와 테스트 데이터의 차이를 보면 알 수 있듯이 데이터의 불균형이 엄청 크다는 점을 알 수 있습니다.
따라서 Undersampling 기법, Upsampling 기법을 이용하여 데이터의 불균형을 해결해야 합니다.
저희는 Upsampling을 이용하게 되면 데이터가 가지는 장점인 '실제 네트워크 상황에 더욱 알맞은 데이터 셋'이라는 점을 잃게 될 것이라고 생각했습니다. 그 이유는 Upsampling을 하게 되면 실제하지 않는 데이터들이 만들어져서 실제로는 존재할 수 없는 네트워크 상황이 생길 것으로 우려되었기 때문입니다.
따라서 저희는 Undersampling을 이용해서 데이터의 전처리를 수행하려고 했는데 아쉽게도 데이터 불균형이 잘 해결 되지않아서 일단 차선책으로 NSL-KDD 데이터 셋을 사용하게 되었습니다. NSL-KDD 데이터 셋은 아래 표의 내용과 같이 UNSW-NB15 데이터 셋 보다는 데이터의 불균형 성이 적다는 점을 알 수 있습니다.
NSL-KDD | 정상 샘플 | 비정상 샘플 | 총 샘플 |
훈련 데이터 | 67,343 | 58,630 | 125,973 |
테스트 데이터 | 9,711 | 12,833 | 22,544 |
2. 중요 특성 알고리즘 원리 및 적용
저희는 특성을 선택하는 알고리즘에서도 PI알고리즘을 통해 특성들의 중요도를 파악했습니다.
원리를 간단하게 살펴보면 변수2 랜덤하게 선택된 특성이라면 해당 특성의 값들을 shuffle하게 됩니다. 그리고 random forest 모델에 학습을 시켜서 모든 변수를 사용했을 때보다 성능이 떨어지게 된다면 해당 특성이 중요하다는 점을 시사하기 때문에 중요도를 상승시킵니다. 반대로 성능이 상승하게 된다면 특성이 중요하지 않다는 점을 시사하기 때문에 중요도를 하강시키는 원리로 작동하게 됩니다. 해당 원리를 이용하여 NSL-KDD 데이터 셋에 적용시켜본 결과는 다음과 같았습니다.
위의 사진은 permutation의 값, 즉 랜덤하게 특성을 뽑는 과정을 50번 반복해서 특성의 중요도를 ranking 했을 때의 결과입니다.
좌측의 소수점 값들은 weight를 의미하고(중요도), 오른쪽의 값들은 모두 feature(특성)을 의미하고 있습니다.
위의 사진은 permutation이 100인 경우의 결과값입니다. permutation을 50으로 했을때와는 크게 특성들이 바뀌지 않았다는 점을 알 수 있습니다. 몇가지 실험을 더 거쳐본 결과 상위 중요 특성의 경우는 permutation을 얼마로 하든지 비슷한 분포를 가지고 있다는 점을 알 수 있었습니다. 더하여 저희는 43개의 feature들 중 0.001 weight를 넘는 값들이 가장 중요한 feature들이라고 분석하여서 기준을 weight=0.001로 하였습니다.
3. NSL-KDD 전처리 방식
NSL-KDD 데이터 셋은 범주형 속성 값, 숫자형 속성 값, 바이너리 속성 값으로 크게 나누어 집니다. 번주형 속성 값의 경우는 정수값으로 변환 후 원핫 인코딩을 통해서 바이너리 형식으로 바꾸어야 하고 숫자형 속성 값의 경우는 minMaxScaler를 통해서 0-1 값으로 정규화해야합니다. 왜냐하면 10000과 1이라는 값이 같은 특성안에 존재하게 되면 10000은 너무 튀는 값이기 때문에 값들의 비율을 정확하게 측정할 수 없기 때문입니다.
마지막으로 저희는 전처리가 완료된 데이터 셋은 hdf5형식의 파일로 저장하였습니다.
4. autoencoder 모델 선택
basic autoencoder, stacked autoencoder, sparse autoencoder를 사용하여 성능을 비교해볼 예정입니다.
5. 성능 평가 기준
저희의 목표가 기존보다 더 빠르게 탐색해본다는 점이기 때문에 정확도가 조금 내려가더라도 빠른 탐지를 할 수 있느냐를 중점으로 보고 있습니다. 그래서 해당 성능 지표는 CPU사용량, parameter 개수, CPU 시간 등과 같은 여러 지표들을 통합적으로 판단하여 성능을 평가해볼 생각입니다. 단 여기서 주의해야 할 점은 같은 성능의 GPU 혹은 환경을 통해서 돌린 모델끼리 성능을 평가해야 한다는 점입니다.
글을 마치겠습니다. 감사합니다.