Makine Öğrenmesiyle Ağ Saldırısı Nasıl Tespit Edilir?
Tarih: 2026-06-24 | Kategori: Python & Veri Bilimi
Etiketler: Python, Data
Bir ağda saniyede binlerce paket akar. Bunların büyük çoğunluğu
zararsız — ama küçük bir kesim gerçek tehdit. Geleneksel kural
tabanlı sistemler bu tehditleri ya tamamen atlıyor ya da çok fazla
yanlış alarm üretiyor. Bu projede her ikisini de azaltmaya çalıştım.
Veriyi Nasıl Topladım?
Wireshark ile kendi ağ trafiğimi kaydettim: 61.256 normal paket
ve Nmap port tarama aracıyla üretilmiş 3.654 saldırı paketi.
Toplamda 64.910 paket.
Buraya kadar klasik. Asıl fark, IANA'nın resmi port veritabanını
da işin içine katmam oldu. Her porta NLP ile tehdit risk skoru
atadım — SSH (22) kritik, HTTP (80) orta, bilinmeyen portlar düşük.
Bu iki kaynağı birleştirince veri çok daha anlamlı hale geldi.
Özellik Mühendisliği
Tek bir paketin özelliklerine bakarak saldırı tespit etmek zor.
Asıl ipucu, kaynağın davranış kalıbında gizli.
Bunun için 5 yeni özellik türettim:
Model
XGBoost ve Random Forest'ı karşılaştırdım. İkisi de birbirine çok
yakın çıktı (F1: 0.3026 vs 0.3034) ama XGBoost daha tutarlıydı.
Sonuçlar:
| Metrik | Değer |
|--------|-------|
| Accuracy | %86.9 |
| Recall | %50.6 |
| AUC-ROC | 0.825 |
Asıl Fark: Finansal Eşik Optimizasyonu
Standart veri bilimi %50 karar eşiği kullanır. Ama bu maliyet
açısından optimal değil.
İki hata türünün maliyeti farklı:
Bu maliyetleri modelleyerek eşiği %50'den %34'e düşürdüm.
Sonuç: 698.046 TL yerine 609.081 TL — yani 88.965 TL tasarruf.
SHAP ile Modeli Açıkladım
Model kararlarını kara kutu olarak bırakmak istemedim. SHAP analizi
ile hangi özelliğin ne kadar etkili olduğunu gösterdim:
1. Dst_Port (0.780) — Düşük port numarası en güçlü sinyal
2. Length (0.741) — Küçük paket = SYN flood imzası
3. Protocol_Enc (0.236) — Protokol çeşitliliği keşfi ele veriyor
Is_High_Risk ve Port_Category ise modelde neredeyse hiç etkili
olmadı. Gelecek versiyonda bu ikisini yeniden tasarlayacağım.
Sonuç
Bu proje bana şunu öğretti: iyi bir model sadece yüksek accuracy
demek değil. Hataların maliyetini anlayıp eşiği ona göre ayarlamak,
bazen algoritmadan daha fazla fark yaratıyor.
Kod ve veri: GitHub