Yüksek lisans tezi: AI ile yazılmış phishing'in açıklanabilir tespiti
Teslim edildi, sonuç bekleniyorLiverpool John Moores University'deki yüksek lisans tezim: AI ile yazılmış phishing e-postalarını tespit etmek ve her dedektörün açıklamalarının, modelin gerçekte yaptığı şeye sadık olup olmadığını ölçmek.
- Rolüm
- Yazar: deney tasarımı, kod, değerlendirme ve yazım
- Yıl
- 2026
- Teknolojiler
- Python · scikit-learn · XGBoost · LightGBM · PyTorch · Transformers · SHAP · LIME · Integrated Gradients
Problem
Dil modelleriyle yazılmış phishing, eski şablonlardan farklı okunuyor ve kimsenin açıklayamadığı bir dedektöre güvenmek ya da onu denetlemek zor. İki soru sordum: AI ile yazılmış e-postada hangi tür model ayakta kalıyor ve açıklamalar, modelin gerçekte yaptığı şeye sadık mı?
Nasıl yapıldı
Aynı split'ler üzerinde karşılaştırılan üç model ailesi: klasik modeller (logistic regression, naive Bayes, SVM, decision tree, random forest), gradient-boosted ensemble'lar (XGBoost, LightGBM) ve transformer'lar (BERT, DistilBERT, RoBERTa); eski ve AI ile üretilmiş e-postalar arasında cross-corpus testlerle. SHAP, LIME ve Integrated Gradients açıklamaları, rastgele attribution baseline'ına karşı sadakat, kararlılık ve makullük açısından puanlandı. Protokol deneyler çalışmadan önce kayda geçirildi, ipucu sözlüğü hiçbir sonuç yokken commit'lendi, bir positive-control test suite'i açıklayıcıları koruyor ve makullük ölçütü insan değerlendiricilere ve bir LLM hakeme karşı doğrulandı. Hepsi lokal bir RTX 3090'da çalıştı.
Önemli kararlar
Çalıştırmadan önce kayda geçirildi
Protokoller, sözlük ve hipotezler hiçbir sonuç yokken commit'lendi; böylece sonradan hiçbir şey seçilemezdi.
Açıklamalar ölçüldü
Rastgele attribution gibi puan alan bir yöntem öyle raporlanıyor. LIME rastgele gibi puan aldığında sebep, LIME adaptörümdeki bir bug'dı: ters verilmiş bir tokenizer argümanı. Bunu açıkladım, düzelttim ve yeniden çalıştırdım. Düzeltilmiş LIME sadıktı ama en az kararlı yöntemdi.
Basit model kazandı
AI ile üretilmiş e-postada ayarlanmış lineer bir TF-IDF modeli ROC-AUC'de RoBERTa'yı geçti (0,9993'e karşı 0,9976) ve SHAP onu sadık bir şekilde, düzeltilmiş LIME'dan 64,5 kat hızlı açıkladı.
Repodan kod
def faithfulness(champ, texts, attrs, preds, seed: int = 42) -> dict:
rng = np.random.default_rng(seed)
preds = np.asarray(preds)
p_orig = _p_pred(champ.proba(texts), preds)1
variants: list[str] = []
meta: list[tuple] = [] # (doc_i, kind, k, is_random)
for i, (text, attr, pred) in enumerate(zip(texts, attrs, preds)):
nw = len(textops.word_spans(text))
top = textops.top_k_positions(attr, int(pred), min(20, nw))
randperm = rng.permutation(nw).tolist()2
for k in K_AOPC:
variants.append(textops.remove_words(text, top[:k])); meta.append((i, "comp", k, False))3
variants.append(textops.remove_words(text, randperm[:k])); meta.append((i, "comp", k, True))
for k in K_REPORT:
variants.append(textops.keep_only_words(text, top[:k])); meta.append((i, "suff", k, False))
variants.append(textops.keep_only_words(text, randperm[:k])); meta.append((i, "suff", k, True))
P = _p_pred(champ.proba(variants), preds[[m[0] for m in meta]])4
4. satır. Orijinal dokümanda tahmin edilen sınıfın olasılığı; her karşılaştırmanın referansı.
11. satır. Rastgele baseline: aynı silmeler, rastgele bir kelime sırasıyla, birebir aynı pipeline'dan.
13. satır. Comprehensiveness: açıklamanın işaret ettiği top-k kelimeyi çıkar. Olasılık ne kadar düşerse açıklama o kadar sadık.
19. satır. Her dokümanın her varyantı GPU'dan tek bir batch'te geçiyor.
Şu an ne durumda
Ağustos 2026'da teslim edildi; sonuç bekleniyor. Her tablo ve grafik, commit'lenmiş script'ler ve sabit seed'lerle yeniden üretilebiliyor. Şimdi danışmanımla birlikte bunu bir konferans makalesine dönüştürüyorum.