Creative Commons License
Excepto donde se indique otra cosa, todo el contenido de este lugar está bajo una licencia de Creative Commons.
Taquiones > sysadmin > dspam envenenado

dspam envenenado

Introducción

Tras un periodo de uso de uno de mis programas (no suficientemente probado) he llegado a envenenar por completo mi base de datos de Spam, de tal manera que a día de hoy ya no reconoce prácticamente nada como spam y tengo un buzón de entrada que da gusto verlo ;-)

La solución propuesta en la documentación de dspam es bastante clara; el filtro se debe educar de manera equilibrada entre spam y ham porque en caso contrario los resultados son tendenciosos. Como última instancia sugieren que se borre la base de datos y se reeduque el filtro con material fresco, y eso es lo que me temo que voy a tener que hacer, puesto que un vistazo a mis estadísticas muestran

# dspam_stats -H victor 
victor:
    TP True Positives:              0
    TN True Negatives:           3880
    FP False Positives:         15046
    FN False Negatives:          1769
    SC Spam Corpusfed:            192
    NC Nonspam Corpusfed:           0
    TL Training Left:               0
    SHR Spam Hit Rate           0.00%
    HSR Ham Strike Rate:       79.50%
    OCA Overall Accuracy:      18.75%

que ahora mismo el filtro tiene muy poca fiabilidad. Por cierto, para entender mejor la salida del programa dspam_stats he escrito algunas notas sobre ello.

Preparando un corpus

Existe una utilidad llamada dspam_train que utiliza un par de buzones de tipo maildir para entrenar el filtro. Como a primera vista me parece cómodo voy a crear dos carpetas en mi buzón llamadas CorpusHam y CorpusSpam, y voy a copiar en ellas un buen número de mensajes en español e inglés, intentando ser lo más ecuánime posible.

Eliminando la base de datos

Ahora, por las bravas, voy a eliminar mi base de datos de spam para empezar de nuevo:

# cd /var/spool/dspam
# cd data/local
# rm -rf victor

Eso sí, el servicio de correo ha sido detenido para no chocar con él en el siguiente paso.

Educando al filtro

# cd /home/victor
# dspam_train victor Maildir/.Spam.CorpusSpam/cur Maildir/.Spam.CorpusHam/cur
Taking Snapshot...
victor            TP:    39 TN:    47 FP:     0 FN:     8 SC:     0 NC:     0
Training Maildir/.Spam.CorpusHam/cur/ / Maildir/.Spam.CorpusSpam/cur corpora...
[test: nonspam] 1184314160.P22358Q22M860661.daga result: PASS
[test: spam   ] 1184314064.P19928Q33.daga.taquio result: PASS
...
...
...
[test: nonspam] 1184314160.P22358Q3M402099.daga. result: PASS
[test: spam   ] 1184314064.P19928Q31.daga.taquio result: PASS
TRAINING COMPLETE

Training Snapshot:
victor            TP:   695 TN:   513 FP:     0 FN:     4 SC:     0 NC:     0
                SHR:   99.43%       HSR:    0.00%       OCA:   99.67%

Overall Statistics:
victor            TP:   734 TN:   560 FP:     0 FN:    12 SC:     0 NC:     0
                SHR:   98.39%       HSR:    0.00%       OCA:   99.08%
#

y ahora le echamos un vistazo a las estadísticas del usuario

# dspam_stats -H victor
victor:
            TP True Positives:            734
            TN True Negatives:            560
            FP False Positives:             0
            FN False Negatives:            12
            SC Spam Corpusfed:              0
            NC Nonspam Corpusfed:           0
            TL Training Left:            1940
            SHR Spam Hit Rate          98.39%
            HSR Ham Strike Rate:        0.00%
            OCA Overall Accuracy:      99.08%

y vamos a comprobar si con algunos mensajes que conocemos el filtro tiene aciertos o no, aunque sabemos que es muy pronto para ello, el número de mensajes tiene que superar la cifra de 2500.

$ dspam --stdout --classify < ruta_al_mensaje_de_spam 
X-DSPAM-Result: victor; result="Spam"; class="Spam"; probability=1.0000; confidence=0.68; signature=46972193199353588779037

Lo que viene a decirnos que sí, que está funcionando por el momento. Veremos qué ocurre después, cuando llegue el correo real.