Veri birleştirme

Python'da Machine Learning İş Akışları Tasarlama

Dr. Chris Anagnostopoulos

Honorary Associate Professor

Bilgisayarlar, portlar ve protokoller

Bilgisayar trafiği, kaynak bilgisayarın bir portundan hedef bilgisayarın başka bir portuna, belirli bir protokole uyarak paketler halinde gönderilir.

Python'da Machine Learning İş Akışları Tasarlama

LANL siber veri kümesi

flows: Akışlar, bir kaynak bilgisayardaki bir port ile bir hedef bilgisayardaki bir port arasında, belirli bir protokole uyarak gerçekleşen kesintisiz veri aktarımı oturumlarıdır.

flows.iloc[1]
time                    471692
duration                     0
source_computer          C5808
source_port              N2414
destination_computer    C26871
destination_port        N19148
protocol                     6
packet_count                 1
byte_count                  60
1 https://csr.lanl.gov/data/cyber1/
Python'da Machine Learning İş Akışları Tasarlama

LANL siber veri kümesi

attack: güvenlik ekibinin bir test sırasında bizzat gerçekleştirdiği bazı saldırılar hakkında bilgi.

attacks.head()
     time user@domain source_computer destination_computer
0  151036   U748@DOM1          C17693                 C305
1  151648   U748@DOM1          C17693                 C728
2  151993  U6115@DOM1          C17693                C1173
3  153792   U636@DOM1          C17693                 C294
4  155219   U748@DOM1          C17693                C5693

Bu veriden nasıl etiketli örnekler oluşturabiliriz?

1 https://csr.lanl.gov/data/cyber1/
Python'da Machine Learning İş Akışları Tasarlama

Olayları etiketleme vs. bilgisayarları etiketleme

Tek bir olayı etiketlemek kolay değildir. Bulaşmış bir kaynaktan hedef bilgisayara tek bir işlem.

Ancak bir bilgisayar bütünüyle ya bulaşıktır ya değildir. Bulaşmış bir kaynak, iki farklı bilgisayardaki tüm olası portlarla iletişim kurmayı dener.

Python'da Machine Learning İş Akışları Tasarlama

Grupla ve özellik çıkar

Analiz birimi = destination_computer

flows_grouped = flows.groupby('destination_computer')

list(flows_grouped)[0]
('C10047',         
        time  duration    ...     packet_count byte_count
2791  471694         0    ...               12       6988
2792  471694         0    ...                1        193
...
2846  471694        38    ...              157      84120
Python'da Machine Learning İş Akışları Tasarlama

Grupla ve özellik çıkar

Bilgisayar başına bir DataFrame'den, bilgisayar başına tek bir özellik vektörüne.

def featurize(df):
    return {
        'unique_ports': len(set(df['destination_port'])),
        'average_packet': np.mean(df['packet_count']),
        'average_duration': np.mean(df['duration'])
    }
Python'da Machine Learning İş Akışları Tasarlama

Grupla ve özellik çıkar

out = flows.groupby('destination_computer').apply(featurize)
X = pd.DataFrame(list(out), index=out.index)

X.head()
                      average_duration      ...       unique_ports
destination_computer                        ...                   
C10047                        7.538462      ...                 13
C10054                        0.000000      ...                  1
C10131                       55.000000      ...                  1
...
[5 rows x 3 columns]
Python'da Machine Learning İş Akışları Tasarlama

Etiketli veri kümesi

bads = set(attacks['source_computer'].append(attacks['destination_computer']))
y = [x in bads for x in X.index]

Artık (X, y) çifti standart, etiketli bir sınıflandırma veri kümesidir.

X_train, X_test, y_train, y_test = train_test_split(X, y)
clf = AdaBoostClassifier()
accuracy_score(y_test, clf.fit(X_train, y_train).predict(X_test))
0.92
Python'da Machine Learning İş Akışları Tasarlama

Bir bilgisayar korsanını yakalamaya hazır mısınız?

Python'da Machine Learning İş Akışları Tasarlama

Preparing Video For Download...