레이블, 약한 레이블, 그리고 진실

Python으로 설계하는 Machine Learning 워크플로

Dr. Chris Anagnostopoulos

Honorary Associate Professor

레이블은 항상 완벽하지 않습니다

진실의 단계:

  • 정답(Ground truth)
    • 컴퓨터가 먹통이 되고 몸값을 요구하는 메시지가 표시됩니다
  • 전문가 레이블링
    • 분석가가 로그를 점검하여 무단 행위를 식별합니다
  • 휴리스틱 레이블링
    • 매우 짧은 시간에 너무 많은 포트가 트래픽을 받았습니다
Python으로 설계하는 Machine Learning 워크플로

레이블은 항상 완벽하지 않습니다

무잡음 또는 강한 레이블:

  • 정답
  • 전문가 레이블링

잡음 또는 약한 레이블:

  • 휴리스틱 레이블링

피처 엔지니어링:

  • 휴리스틱에 사용된 피처
Python으로 설계하는 Machine Learning 워크플로

피처와 휴리스틱

감염 호스트별 방문 고유 포트 평균:

np.mean(X[y]['unique_ports'])
15.11

레이블 무시 시 호스트별 고유 포트 평균:

np.mean(X['unique_ports'])
11.23
Python으로 설계하는 Machine Learning 워크플로

피처에서 레이블로

피처를 레이블링 휴리스틱으로 변환:

X_train, X_test, y_train, y_test = train_test_split(X, y)
y_weak_train = X_train['unique_ports'] > 15

hist_cropped.png

Python으로 설계하는 Machine Learning 워크플로

피처에서 레이블로

특징 행렬의 두 사본이 위아래로 쌓여 있습니다. 하나는 도메인 전문가가 부여한 레이블, 다른 하나는 휴리스틱으로 레이블링되었습니다.

X_train_aug = pd.concat([X_train, X_train])
y_train_aug = pd.concat([pd.Series(y_train), pd.Series(y_weak_train)])
Python으로 설계하는 Machine Learning 워크플로

데이터는 이전 슬라이드와 같이 쌓여 있으며, 원래 레이블에는 가중치 1.0, 휴리스틱으로 만든 레이블에는 가중치 0.5가 부여됩니다.

weights = [1.0]*len(y_train) + [0.1]*len(y_weak_train)
Python으로 설계하는 Machine Learning 워크플로

정답 레이블만 사용한 정확도:

0.91

가중치 없는 정답+약한 레이블:

accuracy_score(y_test, clf.fit(X_train_aug, y_train_aug).predict(X_test))
0.93

가중치 추가:

accuracy_score(y_test, clf.fit(X_train_aug, y_train_aug, sample_weight=weights).predict(X_test))
0.95
Python으로 설계하는 Machine Learning 워크플로

레이블은 완벽할 필요가 없습니다!

Python으로 설계하는 Machine Learning 워크플로

Preparing Video For Download...