Rótulos, rótulos fracos e verdade

Projetando Workflows de Machine Learning em Python

Dr. Chris Anagnostopoulos

Honorary Associate Professor

Rótulos nem sempre são perfeitos

Graus de verdade:

  • Verdade de base
    • o computador trava e uma mensagem pede resgate
  • Rotulagem por especialista
    • o analista inspeciona os logs e identifica comportamentos não autorizados
  • Rotulagem heurística
    • portas demais receberam tráfego em um período muito curto
Projetando Workflows de Machine Learning em Python

Rótulos nem sempre são perfeitos

Rótulos sem ruído ou "fortes":

  • Verdade de base
  • Rotulagem por especialista

Rótulos ruidosos ou "fracos":

  • Rotulagem heurística

Engenharia de atributos:

  • Atributos usados em heurísticas
Projetando Workflows de Machine Learning em Python

Atributos e heurísticas

Média de portas únicas visitadas por cada host infectado:

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

Média de portas únicas visitadas por host, sem considerar rótulos:

np.mean(X['unique_ports'])
11.23
Projetando Workflows de Machine Learning em Python

De atributos para rótulos

Converter um atributo em uma heurística de rotulagem:

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

hist_cropped.png

Projetando Workflows de Machine Learning em Python

De atributos para rótulos

Duas cópias da matriz de atributos empilhadas. Uma já tem rótulos de especialistas; a outra usa rótulos heurísticos.

X_train_aug = pd.concat([X_train, X_train])
y_train_aug = pd.concat([pd.Series(y_train), pd.Series(y_weak_train)])
Projetando Workflows de Machine Learning em Python

Os dados são empilhados como no slide anterior, mas o peso 1.0 é dado aos rótulos originais e 0.5 aos gerados pela heurística.

weights = [1.0]*len(y_train) + [0.1]*len(y_weak_train)
Projetando Workflows de Machine Learning em Python

Acurácia usando só a verdade de base:

0.91

Verdade de base e rótulos fracos sem pesos:

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

Adicionar pesos:

accuracy_score(y_test, clf.fit(X_train_aug, y_train_aug, sample_weight=weights).predict(X_test))
0.95
Projetando Workflows de Machine Learning em Python

Rótulos não precisam ser perfeitos!

Projetando Workflows de Machine Learning em Python

Preparing Video For Download...