Bayes Spam Filtresi Nasıl Çalışır? Eğitim ve İpuçları
Bayes spam filtresi, bir e-postanın spam olup olmadığına, içindeki kelime ve ifadelerin geçmişteki spam ve temiz iletilerde ne sıklıkla göründüğüne bakarak karar veren öğrenen bir filtredir. Sabit kurallardan farklı olarak kurumunuzun gerçek posta trafiğiyle eğitilir; doğru ve dengeli eğitildiğinde kuruma özgü spamı ve meşru yazışmayı daha isabetli ayırt eder.
Bayes filtresi neye dayanır?
Yöntem adını, bir olayın olasılığını yeni kanıtlarla güncellemeyi sağlayan Bayes teoreminden alır. Spam filtrelemede sorulan soru şudur: "Bu iletide şu kelimeler geçtiğine göre, iletinin spam olma olasılığı nedir?" Filtre, her kelimenin diğerlerinden bağımsız olduğunu varsayar. Gerçekte doğru olmayan bu basitleştirme, yöntemin "naive" (saf) Bayes olarak anılmasının nedenidir; buna rağmen pratikte iyi sonuç verir.
Yaklaşım, Paul Graham'ın 2002'de yayımladığı "A Plan for Spam" makalesiyle yaygınlaştı; Gary Robinson'ın önerdiği iyileştirmeler daha sonra SpamAssassin gibi yaygın filtrelerde kullanıldı. Bu literatürde spam olmayan meşru postaya "ham" denir.
Token nedir, olasılık nasıl hesaplanır?
Filtre iletiyi önce token adı verilen parçalara ayırır: gövdedeki kelimeler, konu satırı, bazı başlık alanları ve bağlantılardaki alan adları bunlara örnektir. Ardından her token için iki sayı tutar: kaç spam iletide ve kaç ham iletide görüldüğü. Basitleştirilmiş hesap şöyledir:
spam_orani = tokenin geçtiği spam ileti sayısı / toplam spam ileti sayısı
ham_orani = tokenin geçtiği ham ileti sayısı / toplam ham ileti sayısı
p(token) = spam_orani / (spam_orani + ham_orani)
Varsayalım ki filtre 1.000 spam ve 1.000 ham iletiyle eğitildi ve "kazandınız" kelimesi spamlerin 300'ünde, ham iletilerin yalnızca 3'ünde geçiyor. Bu durumda spam oranı 0,30, ham oranı 0,003 olur ve kelimenin spam olasılığı yaklaşık 0,99 çıkar. Buna karşılık "merhaba" gibi her iki grupta da sık görülen bir kelime 0,5 civarında kalır ve karar için pek bilgi taşımaz. Yalnızca şirket içi yazışmalarda geçen bir proje adı ise sıfıra yakın bir değer alarak iletiyi temiz tarafa çeker.
Az görülen token'lar yanıltıcı olabilir; bir kelime yalnızca bir kez spamde geçti diye kesin spam işareti sayılmamalıdır. Robinson'ın önerdiği düzeltme, az veriye dayanan olasılıkları nötr 0,5 değerine doğru çeker.
Olasılıklar nasıl birleştirilir?
Bir iletide yüzlerce token bulunur. Filtre, olasılığı 0,5'ten en uzak olan, yani en ayırt edici token'ları seçer ve bunları tek bir sonuca dönüştürür. SpamAssassin bu adımda Robinson'ın önerdiği ki-kare (chi-square) birleştirme yöntemini kullanır. Bu yöntem, kanıtlar tutarlı olduğunda 0'a ya da 1'e yakın, çelişkili olduğunda ise 0,5 civarında bir sonuç üretir; böylece filtre emin olmadığı durumları da ifade edebilir.
SpamAssassin bu sonucu olasılık aralıklarına göre kurallara çevirir. BAYES_00 olasılığın yüzde 0 ile 1 arasında, BAYES_50 yüzde 40 ile 60 arasında, BAYES_99 ise yüzde 99 ile 100 arasında olduğunu gösterir. Her kuralın bir puanı vardır ve bu puan iletinin toplam spam skoruna eklenir. Yani Bayes tek başına karar vermez, diğer testlerle birlikte oylamaya katılır.
Bayes ile kural tabanlı filtre arasındaki fark nedir?
| Özellik | Kural tabanlı filtre | Bayes filtresi |
|---|---|---|
| Bilgi kaynağı | Uzmanların yazdığı kurallar | Kurumun kendi posta trafiği |
| Yeni spam türlerine uyum | Kural güncellemesini bekler | Eğitildikçe uyum sağlar |
| Kuruma özgü yazışma | Ayırt etmesi zordur | Zamanla öğrenir |
| Başlangıç | İlk günden çalışır | Yeterli örnek birikene kadar devre dışıdır |
| Bakım | Güncel kural setleri | Düzenli ve dengeli eğitim |
İki yaklaşım birbirinin eksiğini kapatır: kurallar bilinen kalıpları ilk günden yakalar, Bayes ise zamanla kurumunuza özgü spamı ve meşru yazışmayı tanır. SpamAssassin'in ikisini aynı skorda birleştirmesinin nedeni budur.
Eğitim neden dengeli olmalı?
Bayes filtresinde sık yapılan bir hata, filtrenin yalnızca spamle eğitilmesidir. Filtre ham örneği görmezse kurumunuzda sık kullanılan "teklif", "fatura" ya da "ödeme" gibi kelimelerin meşru yazışmada da geçtiğini öğrenemez ve bunları spam işareti sayar. Sonuç, yanlış pozitiflerin artmasıdır.
SpamAssassin bu riski azaltmak için Bayes'i ancak yeterli veri biriktiğinde devreye sokar: varsayılan ayarlarda en az 200 spam (bayes_min_spam_num) ve 200 ham (bayes_min_ham_num) ileti öğrenilmeden Bayes kuralları çalışmaz. Dengeli eğitim için şu ilkeler işe yarar:
- Her iki sınıftan da güncel ve kurumunuzu temsil eden örnekler kullanın.
- Yalnızca emin olduğunuz iletileri öğretin; yanlış etiket filtreyi bozar.
- Kullanıcıların abone oldukları bültenleri "spam" olarak işaretlemek yerine abonelikten çıkmasını teşvik edin.
- Eğitimi tek seferlik değil, sürekli bir süreç olarak görün; spam kalıpları değişir.
Otomatik öğrenme (autolearn) ne yapar?
SpamAssassin'de otomatik öğrenme varsayılan olarak açıktır. Diğer testlerden çok yüksek puan alan iletiler (varsayılan eşik 12 puandır ve başlık ile gövdeden en az üçer puan gerekir) spam olarak, 0,1 puanın altında kalanlar ise ham olarak kendiliğinden öğrenilir. Bu, filtrenin sürekli beslenmesini sağlar; ancak yalnızca "kolay" örneklerden öğrenir ve kendi hatalarını pekiştirebilir. Asıl değerli olan, filtrenin yanıldığı iletilerin elle düzeltilmesidir.
Ayrıca her ürün Bayes'i varsayılan olarak etkinleştirmez. Örneğin Proxmox Mail Gateway üzerinde Bayes sınıflandırıcısı varsayılan ayarlarda kapalı gelir ve yöneticinin açması gerekir.
Karantinadan yeniden eğitim nasıl yapılır?
En verimli eğitim kaynağı, filtrenin yanıldığı iletilerdir:
- Karantinaya düşen meşru bir iletiyi teslim ederken "temiz" olarak işaretleyin.
- Gelen kutusuna ulaşan spamı "spam" olarak bildirin.
- Karantinadaki açık spamleri de zaman zaman "spam" olarak onaylayın.
- Filtrenin kaç spam ve ham örnekten öğrendiğini düzenli kontrol edin; iki sayı arasındaki büyük dengesizlik bir uyarı işaretidir.
Komut satırında SpamAssassin kullanıyorsanız aynı işlem sa-learn aracıyla yapılır:
sa-learn --spam /yol/spam-ornekleri/
sa-learn --ham /yol/temiz-ornekler/
sa-learn --dump magic
Son komut, veritabanındaki spam (nspam), ham (nham) ve token (ntokens) sayılarını gösterir.
MXZilla'de yöneticiler karantinadaki iletileri spam ya da temiz olarak işaretleyerek filtreyi doğrudan panelden eğitebilir; panel, filtrenin şimdiye kadar ne kadar öğrendiğini de gösterir. Karantinanın nasıl yönetileceğini e-posta karantinası yazısında ayrıntılı anlattık.
Sık yapılan hatalar
- Filtreyi yalnızca spamle eğitmek ya da iki sınıf arasında büyük dengesizlik bırakmak.
- Aynı iletiyi önce spam, sonra ham olarak öğretip tutarsız etiket üretmek.
- Yıllar önceki bir arşivle bir kez eğitip filtreyi kendi haline bırakmak.
- Bayes'i tek başına karar verici sanıp kurumsal spam filtresinin diğer katmanlarını zayıflatmak.
- Toplu bülten ve bildirimleri spam olarak işaretlemek.
Sonuç
Bayes filtresi, kurumunuzun diline ve yazışma alışkanlıklarına uyum sağlayan ender katmanlardan biridir; ama bu avantajı ancak düzenli ve dengeli beslendiğinde korur. Katmanlı filtrelemeyi ve karantinadan eğitimi kendi trafiğinizde denemek için paketler bölümüne göz atabilir ya da ücretsiz hesap oluşturabilirsiniz.
Sık sorulan sorular
Bayes filtresi ne kadar sürede öğrenir?
Süre, posta hacminize ve eğitim düzeninize bağlıdır. SpamAssassin varsayılan olarak en az 200 spam ve 200 temiz ileti öğrenilmeden Bayes sonuçlarını kullanmaz. Yoğun posta alan bir kurum bu sayılara birkaç günde ulaşabilirken küçük bir ofiste bu süre daha uzun olabilir.
Bayes filtresi Türkçe e-postalarda işe yarar mı?
Evet, çünkü filtre dile özgü kurallarla değil, kendi postanızdan öğrendiği istatistiklerle çalışır. Türkçede aynı kelimenin farklı ekli biçimleri ayrı token olarak sayılabildiğinden filtrenin olgunlaşması biraz daha fazla örnek gerektirebilir. Bu yüzden Türkçe postayla düzenli eğitim özellikle önemlidir.
Bir iletiyi spam olarak işaretlemek göndericiyi engeller mi?
Hayır. Spam olarak işaretlemek filtreye iletinin içeriği hakkında bilgi verir ve benzer iletilerin skorunu yükseltir, ancak göndericiyi engelli listeye eklemez. Belirli bir göndericiden hiç posta almak istemiyorsanız engelli listeyi ayrıca kullanmanız gerekir.
Bayes filtresi yanlış öğrenirse ne yapılmalı?
Hatalı sınıflandırılan iletileri doğru etiketle yeniden öğretmek çoğu durumda yeterlidir; SpamAssassin bir iletiyi ters sınıfta yeniden öğrendiğinde önceki kaydı düzeltir. Veritabanı ağır biçimde bozulduysa sıfırlanıp güncel ve dengeli bir örnek setiyle yeniden eğitilmesi daha hızlı sonuç verebilir.
Bayes, SpamAssassin kurallarının yerini alır mı?
Almaz, onları tamamlar. Bayes, SpamAssassin'in kullandığı testlerden yalnızca biridir ve sonucu diğer kuralların puanlarıyla birlikte toplam skora eklenir. Kimlik doğrulama, kara liste ve içerik kuralları Bayes'in göremediği sinyalleri yakalamaya devam eder.