HAICon2021 산업제어시스템 보안위협 탐지 AI 경진대회

Min-Max 정규화에 의문이 들어 바꿔보았습니다.

2021.10.18 17:54 3,746 조회

분석할 대상이 하드웨어 장치이기 때문에, 입출력 신호를 굳이 프로그래밍 도구를 이용하지 않고 Excel 정도로만 봐도 어느 정도는 뚜렷한 규칙성이 보이길 기대했는데 일단 그렇진 않더군요.


TRAIN 데이터를 유심히 보던 중 Min-Max 정규화에 의문이 생겨서 바꿔보았습니다.


#WINDOW_GIVEN = 29     # 러닝용 WINDOW_GIVEN
#WINDOW_SIZE = 30        # 러닝용 WINDOW_SIZE
ROLLING_WINDOW_SIZE = 90    # 롤링(정규화)용 WINDOW_SIZE

def equalCounter(x):
    num = 0

    value = x.values[-1]

    a = abs(max(x) - min(x))
    b = a * 0.1                         # ROLLING_WINDOW_SIZE 내 최대-최소 차이의 10%로 추적
    c = [value + b, value - b]

    for i in x:
        if i >= min(c) and i <= max(c):
            num += 1

    return num


def normalize(df, filename):
    ndf = df.copy()
    ndf = ndf.rolling(window=ROLLING_WINDOW_SIZE, min_periods=1).apply(equalCounter)    # ROLLING_WINDOW_SIZE 내 현재 값 추적
    ndf.to_csv("./data/cache/" + filename, index=False)
    return ndf


def boundary_check(df):
    x = np.array(df, dtype=np.float32)
    #return np.any(x > 1.0), np.any(x < 0), np.any(np.isnan(x))
    return np.any(x > ROLLING_WINDOW_SIZE), np.any(x < 1), np.any(np.isnan(x))    #  검증: ROLLING_WINDOW_SIZE 초과, 0, NaN 


ROLLING_WINDOW_SIZE 내의 현재 값에서 90초 이내에 최소 한번 이상은 같은 값이 나온다는 것을 가정으로 진행해보았습니다.


이후 정규화된 자료의 범위를 무작위로 선정하여 그래프를 확인해보았습니다.





엑셀(Excel) 정도의 프로그램 만으로도 확인이 가능한 규칙성이 생겼습니다.


LSTM 돌려보고 있는데 결과는 기다리고 있습니다.