CyberFlow Logo CyberFlow BLOG
Soc L3 Cloud Security

Model Doğrulama — False Positive / False Negative Dengesi

✍️ Ahmet BİRKAN 📂 Soc L3 Cloud Security

Model Doğrulama — False Positive / False Negative Dengesi konusunu SOC L3 - İleri Tehdit Avcılığı - Veri Madenciliği ve Modelleme baglaminda blog formatinda ogrenin. Temel akis, kavram eslestirmeleri ve analiz mantigi tek bir yapida birlestirildi.

Model Doğrulama — False Positive / False Negative Dengesi

Model doğrulamada confusion matrix dört temel metriği ortaya koyar. SOC bağlamında FP analist yorgunluğuna, FN ise gözden kaçan tehdide yol açar: import numpy as np from sklearn.metrics import confusion_matrix, classification_report y_true = np.array([0,0,1,1,0,1,0,1,1,0]) y_pred = np.array([0,1,1,0,0,1,0,1,0,0]) print(f'TP: {TP}, FP: {FP}, TN: {TN}, FN: {FN}') print(classification_report(y_true, y_pred, target_names=['benign','malicious']))

Giris ve Temel Akis

Model doğrulamada confusion matrix dört temel metriği ortaya koyar. SOC bağlamında FP analist yorgunluğuna, FN ise gözden kaçan tehdide yol açar: import numpy as np from sklearn.metrics import confusion_matrix, classification_report y_true = np.array([0,0,1,1,0,1,0,1,1,0]) y_pred = np.array([0,1,1,0,0,1,0,1,0,0]) print(f'TP: {TP}, FP: {FP}, TN: {TN}, FN: {FN}') print(classification_report(y_true, y_pred, target_names=['benign','malicious']))

Bu bölümün pratik akışı şu sırayla ilerler:

  • cm = confusion_matrix(y_true, y_pred)
  • TN, FP, FN, TP = cm.ravel()
  • print(f'Precision: {TP/(TP+FP):.3f}')
  • print(f'Recall: {TP/(TP+FN):.3f}')
  • print(f'F1: {2TP/(2TP+FP+FN):.3f}')
  • print(classification_report(y_true, y_pred))

Temel Kavram Eslesmeleri

Confusion matrix dört hücresinin SOC bağlamındaki anlamı model tasarımını doğrudan etkiler. Her hücre farklı bir operasyonel riski temsil eder. Örnek senaryo: - IDS 1000 olay analiz etti - 50 gerçek saldırı vardı - Model 45 saldırıyı tespit etti - Model 80 normal olayı saldırı olarak işaretledi - 5 saldırı gözden kaçtı

  • True Positive: Gerçek saldırı doğru tespit edildi
  • False Positive: Normal olay yanlışlıkla alarm üretiyor
  • False Negative: Gerçek saldırı gözden kaçtı
  • True Negative: Normal olay doğru şekilde temiz olarak geçti

Ilk Cekirdek Kavram

Bu bölümde öne çıkan çekirdek kavram tpr - fpr olarak verilir. ROC eğrisi ve AUC skoru modelin tüm eşik değerlerindeki performansını gösterir. AUC 0.5 rastgele tahmin, 1.0 mükemmel model anlamına gelir: from sklearn.metrics import roc_curve, auc, RocCurveDisplay from sklearn.ensemble import RandomForestClassifier import numpy as np model = RandomForestClassifier(n_estimators=100, random_state=42) model.fit(X_train, y_train) y_prob = model.predict_proba(X_test)[:, 1] fpr, tpr, thresholds = roc_curve(y_test, y_prob) roc_auc = auc(fpr, tpr) print(f'AUC: {roc_auc:.3f}') optimal_idx = np.argmax(tpr - fpr) optimal_threshold = thresholds[optimal_idx] print(f'Optimal eşik: {optimal_threshold:.3f}')

Arac, Komut veya Inceleme Akisi

Precision-Recall eğrisi dengesiz veri setlerinde ROC'tan daha bilgilendiricidir. SOC modellerinde saldırı sınıfı azınlıkta olduğundan PR eğrisi tercih edilir: from sklearn.metrics import precision_recall_curve, average_precision_score import numpy as np print(f'Average Precision: {ap_score:.3f}') best_f1 = np.max(f1_scores) print(f'Best threshold: {best_threshold:.3f}, Best F1: {best_f1:.3f}')

Bu bölümün pratik akışı şu sırayla ilerler:

  • y_prob = model.predict_proba(X_test)[:, 1]
  • precision, recall, thresholds = precision_recall_curve(y_test, y_prob)
  • ap_score = average_precision_score(y_test, y_prob)
  • f1_scores = 2 * (precision * recall) / (precision + recall + 1e-8)
  • best_threshold = thresholds[np.argmax(f1_scores[:-1])]
  • print(f'Best threshold: {best_threshold:.3f}')

Kanit ve Bilesen Iliskileri

Karar eşiği (decision threshold) FP/FN dengesini doğrudan kontrol eder. SOC kullanım senaryosuna göre eşik bilinçli olarak ayarlanmalıdır. Örnek: Otomatik IP bloklama sisteminde eşik 0.95 olarak ayarlanır çünkü yanlış bloklama iş sürekliliğini etkiler. Threat hunting modelinde ise eşik 0.3'e düşürülerek hiçbir saldırı kaçırılmaz.

  • Otomatik IP bloklama: Yüksek eşik (0.90+), FP toleransı düşük
  • Threat hunting triage: Düşük eşik (0.30-), FN toleransı düşük
  • SOC L1 alarm filtresi: Orta eşik (0.60-0.75), FP/FN dengeli
  • APT erken uyarı: Çok düşük eşik, hiçbir sinyal kaçırılmaz

Ikincil Odak Noktasi

Bu bölümde öne çıkan çekirdek kavram TimeSeriesSplit olarak verilir. Cross-validation ile model doğrulama overfitting riskini azaltır. Güvenlik verisinde zaman bazlı bölümleme (TimeSeriesSplit) rastgele bölümlemeden daha gerçekçidir çünkü gelecekteki veri eğitimde kullanılmaz: from sklearn.model_selection import TimeSeriesSplit, cross_val_score from sklearn.ensemble import RandomForestClassifier import numpy as np tscv = TimeSeriesSplit(n_splits=5) model = RandomForestClassifier(n_estimators=100, random_state=42) scores = cross_val_score(model, X, y, cv=tscv, scoring='f1') print(f'F1 scores: {scores.round(3)}') print(f'Mean: {scores.mean():.3f} +/- {scores.std():.3f}')

Operasyonel Dogrulama ve Raporlama

Beta-F skoru precision ve recall arasındaki ağırlığı ayarlamaya yarar. SOC'ta FN'nin FP'den daha maliyetli olduğu senaryolarda F2 skoru kullanılır: from sklearn.model_selection import cross_val_score from sklearn.ensemble import RandomForestClassifier import numpy as np

F2: recall ağırlıklı (beta=2)

F0.5: precision ağırlıklı (beta=0.5)

print(f'F0.5 (precision ağırlıklı): {f05:.3f}')

Bu bölümün pratik akışı şu sırayla ilerler:

  • from sklearn.metrics import fbeta_score, make_scorer
  • f2 = fbeta_score(y_test, y_pred, beta=2)
  • f05 = fbeta_score(y_test, y_pred, beta=0.5)
  • print(f'F2 (recall ağırlıklı): {f2:.3f}')
  • f2_scorer = make_scorer(fbeta_score, beta=2)
  • scores = cross_val_score(model, X, y, cv=5, scoring=f2_scorer)
  • print(f'CV F2: {scores.mean():.3f}')

Cikti ve Kullanım Amaci

Model doğrulamada karşılaşılan yaygın hatalar SOC modellerinin güvenilirliğini ciddi biçimde düşürür. Bu hataları tanımak ve önlemek L3 analistin temel yetkinliğidir. Örnek data leakage senaryosu: Normalizasyon tüm veri seti üzerinde yapılıp sonra train/test bölümlemesi yapılırsa test verisi eğitim sürecine sızmış olur.

  • Data leakage: Test verisi bilgisi eğitime sızar, gerçekçi olmayan performans
  • Overfitting: Model eğitim verisini ezberler, genelleme yapamaz
  • Train-test contamination: Aynı kullanıcı hem eğitim hem test setinde
  • Label noise: Yanlış etiketlenmiş veri modeli yanıltır

Son Kavram ve Cikis

Bu bölümde öne çıkan çekirdek kavram against olarak verilir. Splunk MLTK'da model doğrulama score komutu ile yapılır. Confusion matrix ve temel metrikler doğrudan SPL içinde hesaplanabilir: | inputlookup network_traffic_test.csv | apply attack_classifier | score accuracy_score predicted_label against actual_label | append [ | inputlookup network_traffic_test.csv | apply attack_classifier | score precision_score predicted_label against actual_label average=binary ] | append [ | inputlookup network_traffic_test.csv | apply attack_classifier | score recall_score predicted_label against actual_label average=binary ] | score f1_score predicted_label against actual_label average=binary Splunk MLTK'da gerçek etiketle karşılaştırma için against anahtar kelimesi kullanılır.

Bu Egitimden Ne Kazanirsiniz?

Bu icerik, Model Doğrulama — False Positive / False Negative Dengesi konusunu SOC L3 - İleri Tehdit Avcılığı - Veri Madenciliği ve Modelleme baglaminda parcali degil, butunlu bir ogrenme akisina donusturur. Yalnizca kavramlari ezberlemek yerine surec sirasini, bilesenler arasi iliskiyi ve hangi kanitin neden onemli oldugunu kavramayi hedefler.

Ozet

Bu ders kapsaminda one cikan basliklar: True Positive, False Positive, False Negative, True Negative, Otomatik IP bloklama, Threat hunting triage, SOC L1 alarm filtresi, APT erken uyarı, Data leakage, Overfitting. Egitimin mantigi; once temel akis kurmak, sonra eslestirme ve kavram netlestirme yapmak, en sonda ise bulguyu operasyonel bir sonuca baglamaktir.