File size: 18,583 Bytes
439e7b1 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 | # Error analysis β test3 split (three-way holdout), run `ft-focal` (2026-10-09 10:46)
All quoted emails are rows of public corpora (source Assassin, CEAS-08, Enron, Nazario, Nigerian_Fraud, TREC-07); nothing here is private mail. Threshold 0.5. Binary positive class = Unwanted (phishing or spam), P(unwanted) = P(phishing) + P(spam).
## Counts (binary roll-up)
- rows 3,220 (positives 1,221, 37.9%); label3 counts legit 1,999, phish 521, spam 700
- **recall (unwanted) 0.9836** β 20 missed unwanted emails (false negatives) out of 1,221
- precision 0.9893 β 13 false alarms out of 1,214 flagged
- F1 0.9864, accuracy 0.9898, specificity 0.9935
- ROC-AUC 0.9993, PR-AUC 0.9989; recall at 1% FPR 0.9869, at 0.1% FPR 0.8788
- credential-lure slice: 275 rows, 268 positive (97.5% label purity: slice precision cannot exceed what the phrase list selects), recall 1.0000, precision 1.0000, 0 missed
## Top-25 false negatives (missed unwanted mail, most confident first)
| # | doc_id | P(unwanted) | tokens (full) | source | label_set | preview (subject β body, 160 chars) |
|---:|---|---:|---:|---|---|---|
| 1 | `primary:191966` | 0.0224 | 86 | Enron | spam | re : saturday . here new and β good day : i tried to call your 3 three time but your phone is not available . i think you did a mistake during filling the form ... |
| 2 | `primary:148887` | 0.0467 | 1097 | Enron | spam | southern california demographic analysis workshop announcement ( january charset = windows - 1252 " > β analyzing southern california communities : demographic ... |
| 3 | `aura:Nazario:000097` | 0.1782 | 39 | Nazario | phish | Oil Payment Approval β Find the attached document via Google secure to view closing statement. All parties have completed Documents. please sign these at your e... |
| 4 | `primary:010013` | 0.2112 | 135 | Enron | spam | new birthday calendar β hi i ' m setting up a birthday calendar and need your help . just click the link below and enter your birthday details . ( it ' s quick ... |
| 5 | `primary:007176` | 0.2300 | 281 | Assassin | spam | TOMORROW -- Password: Soleil -- TV Casting β Tomorrow will be huge. Password: Soleil has become the premiere Thursday night in New York - with a chill after-wor... |
| 6 | `aura:Nazario:000643` | 0.2584 | 368 | Nazario | phish | Phishing Email Corpus β Good Morning, Jose, My name is Michael Kotson, and I am a Cybersecurity researcher at MIT Lincoln Laboratory. I am developing a lecture ... |
| 7 | `primary:181246` | 0.2858 | 1051 | Assassin | spam | [ILUG] (no subject) β Suppliers of Computers, Printers, etc. & Consumables Central Data Supplies 24, Middleton Road, Banbury, Oxon, OX16 4QJ. Tel: 01295 271666 ... |
| 8 | `primary:095405` | 0.2967 | 40 | Enron | spam | pocket micro scope id : sxo 683 β re : ppql 308243023 not interested , please let us know : powerlinepromo @ yahoo . com |
| 9 | `primary:014300` | 0.3203 | 301 | Enron | spam | cecil county networking lunch β networking lunch chesapeake bay golf club in north east wednesday , november 17 th 11 : 15 am smallcompanies . com in conjunctio... |
| 10 | `primary:001939` | 0.3348 | 1153 | Assassin | spam | Invite: Content Management Summit, Oct. 10th New York City β  
| # | doc_id | P(unwanted) | tokens (full) | source | label_set | preview (subject β body, 160 chars) |
|---:|---|---:|---:|---|---|---|
| 1 | `primary:144048` | 0.9853 | 46 | CEAS-08 | legit | Whiskas Scratching Post β HTML Message - =?windows-1252?B?V2hpc2thcyBTY3JhdGNoaW5nIFBvc3QA?= |
| 2 | `primary:199386` | 0.9471 | 2206 | Assassin | legit | Back to School with Buy4Now β This is a multi-part message in MIME format. ------=_NextPart_000_22A2C_01C23F09.09760420 Content-Type: text/plain; charset="iso-8... |
| 3 | `primary:091801` | 0.9436 | 66 | CEAS-08 | legit | Lots Of SPAM β Hi List, i have posted my RAW email in http://pastebin.ca/918849 , i'm receiving 1000 to 4000 per day this king of mesages. SA also skipping this... |
| 4 | `primary:152763` | 0.8427 | 1228 | CEAS-08 | legit | SAVE 30% on Best Recipe Cookbooks β Untitled Document We don't want you to miss out on our e-mail offers! Please add our e-mail address, arfldpykmjrzc@americast... |
| 5 | `primary:165228` | 0.8246 | 4917 | Assassin | legit | United We Fall? β This is a multi-part message in MIME format... ------------=_1029244856-11739-4 Content-Type: text/plain; charset="iso-8859-1" Content-Disposi... |
| 6 | `primary:041713` | 0.7668 | 340 | TREC-07 | legit | Electric Transmission Week complimentary trial β 1105_ETW_Trial View this message as a Web page. FREE Trial Offer You're invited to receive a FREE trial subscri... |
| 7 | `primary:103927` | 0.7592 | 1587 | CEAS-08 | legit | FREE Shipping on "America's Best Lost Recipes" Cookbook - Plus Free OXO(R) Tongs β Untitled Document We don't want you to miss out on our e-mail offers! Please ... |
| 8 | `primary:055965` | 0.7247 | 5197 | Assassin | legit | Brother, Can You Spare a Jet? β This is a multi-part message in MIME format... ------------=_1029157891-23956-4 Content-Type: text/plain; charset="iso-8859-1" C... |
| 9 | `primary:170237` | 0.6660 | 88 | CEAS-08 | legit | The jet set β Well, it appears you have all taken an idea and run with it. My point was that "Knocked Up" appeared quite the good film, and the Williams one so ... |
| 10 | `primary:117398` | 0.6510 | 5959 | Assassin | legit | AOL Keyword: Fraud Probe β This is a multi-part message in MIME format... ------------=_1033046883-23957-4 Content-Type: text/plain; charset="iso-8859-1" Conten... |
| 11 | `primary:168120` | 0.5796 | 268 | TREC-07 | legit | Please confirm your request to join Deficiv β Hello deficient@speedy.uwaterloo.ca, We have received your request to join the Deficiv group hosted by Yahoo! Grou... |
| 12 | `primary:057514` | 0.5173 | 809 | CEAS-08 | legit | WIN a $6,000 Cook Islands getaway β HotelClub Newsletter Dear Tony, Subscribe to any free NEWS.com.au newsletter for your chance to WIN a $6,000 Cook Islands ge... |
| 13 | `primary:021911` | 0.5051 | 875 | CEAS-08 | legit | It's here. Dell's first tablet PC. β Dell would like to introduce our first tablet PC, the Latitude XT. Part of the trusted Latitude line, the XT gives you all ... |
## Three-way (legitimate / phishing / spam)
Decision rule: unwanted iff P(phishing)+P(spam) >= threshold, then kind = argmax(P(phishing), P(spam)); the 3x3 matrix therefore collapses exactly onto the binary confusion matrix. argmax-of-3 reported alongside.
Rows with a full label: 3,220; unwanted-but-unsplit rows (binary roll-up only): 0.
| true \ predicted | Legitimate | Phishing | Spam |
|---|---:|---:|---:|
| **Legitimate** | 1,986 | 1 | 12 |
| **Phishing** | 4 | 514 | 3 |
| **Spam** | 16 | 1 | 683 |
- accuracy 0.9885, **macro-F1 0.9867** (over 3 classes; over the 3 present: 0.9867); argmax-of-3 rule: macro-F1 0.9858, 6 rows differ between the rules
| class | precision | recall | F1 | support |
|---|---:|---:|---:|---:|
| Legitimate | 0.9900 | 0.9935 | 0.9918 | 1,999 |
| Phishing | 0.9961 | 0.9866 | 0.9913 | 521 |
| Spam | 0.9785 | 0.9757 | 0.9771 | 700 |
### Phishing vs spam on the 1,221 true unwanted rows
Kind decision alone (given the row is unwanted, argmax(P(phishing), P(spam))): accuracy 0.9959; phishing read as spam 4, spam read as phishing 1.
| true \ predicted (roll-up rule) | Legitimate (missed) | Phishing | Spam |
|---|---:|---:|---:|
| **Phishing** | 4 | 514 | 3 |
| **Spam** | 16 | 1 | 683 |
### Per source (three-way rows)
| source | n | Legitimate | Phishing | Spam | accuracy | macro-F1 (present classes) |
|---|---:|---:|---:|---:|---:|---:|
| Assassin | 236 | 164 | 0 | 72 | 0.9534 | 0.9458 |
| CEAS-08 | 736 | 736 | 0 | 0 | 0.9905 | 0.9952 |
| Enron | 628 | 0 | 0 | 628 | 0.9841 | 0.9920 |
| Nazario | 222 | 0 | 222 | 0 | 0.9865 | 0.9932 |
| Nigerian_Fraud | 299 | 0 | 299 | 0 | 0.9866 | 0.9933 |
| TREC-07 | 1,099 | 1,099 | 0 | 0 | 0.9982 | 0.9991 |
### Top-25 phishing -> spam confusions (3 total, most confident first)
| # | doc_id | P(legit) | P(phish) | P(spam) | tokens (full) | source | preview (subject β body, 160 chars) |
|---:|---|---:|---:|---:|---:|---|---|
| 1 | `aura:Nigerian_Fraud:001698` | 0.0949 | 0.0320 | 0.8730 | 2061 | Nigerian_Fraud | " Please add me to your mailing list. " β "How to turn 3 into 10,000" This is not a get rich quick scheme, but with a little effort will make a nice little retu... |
| 2 | `aura:Nigerian_Fraud:000337` | 0.1620 | 0.3029 | 0.5352 | 330 | Nigerian_Fraud | Dddddddd R. Rrrrr Message from Vasil Nanchev. β Hi, This is Vasil Nanchev. I just wanted to inform you about something which is really time sensitive. For the f... |
| 3 | `aura:Nigerian_Fraud:000824` | 0.1349 | 0.3997 | 0.4654 | 1089 | Nigerian_Fraud | Seeking joint-venture partners for ERW oil casing project β Dear Sir or Madam: We are keenly interested in setting up a new factory to produce 120,000 ERW oil c... |
### Top-25 spam -> phishing confusions (1 total, most confident first)
| # | doc_id | P(legit) | P(phish) | P(spam) | tokens (full) | source | preview (subject β body, 160 chars) |
|---:|---|---:|---:|---:|---:|---|---|
| 1 | `primary:077835` | 0.0080 | 0.8669 | 0.1251 | 1179 | Assassin | URGENT BUSINESS ASSISTANCE. β --0-1118764524-1030968705=:44128 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 8bit KEVIN GEORGE ABIDJAN... |
### Tokens over-represented in phishing read as spam vs phishing read correctly
| token | share of phish->spam docs | share of phish->phish docs | ratio |
|---|---:|---:|---:|
| `join` | 1.000 | 0.019 | 49.00 |
| `could` | 1.000 | 0.076 | 13.03 |
| `www` | 1.000 | 0.150 | 6.64 |
| `new` | 1.000 | 0.160 | 6.24 |
| `http` | 1.000 | 0.193 | 5.17 |
| `years` | 1.000 | 0.196 | 5.07 |
| `get` | 1.000 | 0.202 | 4.92 |
| `about` | 1.000 | 0.239 | 4.17 |
| `after` | 1.000 | 0.278 | 3.59 |
| `who` | 1.000 | 0.317 | 3.15 |
| `into` | 1.000 | 0.323 | 3.09 |
| `com` | 1.000 | 0.339 | 2.95 |
| `which` | 1.000 | 0.362 | 2.76 |
| `now` | 1.000 | 0.379 | 2.63 |
| `can` | 1.000 | 0.467 | 2.14 |
| `are` | 1.000 | 0.562 | 1.78 |
| `from` | 1.000 | 0.644 | 1.55 |
| `will` | 1.000 | 0.714 | 1.40 |
| `for` | 1.000 | 0.800 | 1.25 |
| `this` | 1.000 | 0.815 | 1.23 |
### Tokens over-represented in spam read as phishing vs spam read correctly
(too few rows in one of the groups)
### Predicted kind of the flagged rows (informational β includes the unsplit rows, which have no kind label)
| group | n | predicted Phishing | predicted Spam |
|---|---:|---:|---:|
| true positives flagged | 1,201 | 515 | 686 |
| false positives flagged | 13 | 1 | 12 |
| missed positives (kind the model would have given) | 20 | 3 | 17 |
## Patterns (simple lexical statistics, not a model explanation)
### Tokens over-represented in false negatives vs true positives (document frequency, smoothed ratio)
| token | share of FN docs | share of TP docs | ratio |
|---|---:|---:|---:|
| `invite` | 0.250 | 0.002 | 128.94 |
| `cut` | 0.150 | 0.002 | 82.05 |
| `practical` | 0.150 | 0.002 | 82.05 |
| `networking` | 0.200 | 0.002 | 75.36 |
| `audience` | 0.150 | 0.003 | 45.59 |
| `oct` | 0.150 | 0.003 | 45.59 |
| `innovative` | 0.150 | 0.003 | 45.59 |
| `event` | 0.200 | 0.005 | 40.58 |
| `angeles` | 0.150 | 0.004 | 37.30 |
| `anyway` | 0.150 | 0.004 | 37.30 |
| `feature` | 0.150 | 0.005 | 31.56 |
| `york` | 0.150 | 0.005 | 31.56 |
| `subscription` | 0.200 | 0.007 | 27.76 |
| `technologies` | 0.150 | 0.006 | 27.35 |
| `entertainment` | 0.150 | 0.007 | 24.13 |
| `staff` | 0.200 | 0.011 | 19.54 |
| `association` | 0.150 | 0.008 | 19.54 |
| `markets` | 0.150 | 0.009 | 17.84 |
| `hosting` | 0.150 | 0.009 | 17.84 |
| `mailman` | 0.150 | 0.009 | 17.84 |
### Tokens over-represented in false positives vs true negatives
| token | share of FP docs | share of TN docs | ratio |
|---|---:|---:|---:|
| `outlets` | 0.231 | 0.001 | 206.01 |
| `zzz-unspun` | 0.231 | 0.001 | 206.01 |
| `czzz-unspun` | 0.231 | 0.001 | 206.01 |
| `cook` | 0.231 | 0.001 | 206.01 |
| `full-color` | 0.385 | 0.002 | 179.85 |
| `muehlbauer` | 0.231 | 0.002 | 147.15 |
| `vanderkolk` | 0.231 | 0.002 | 147.15 |
| `eletra` | 0.231 | 0.002 | 147.15 |
| `loripatel` | 0.231 | 0.002 | 147.15 |
| `copyedited` | 0.231 | 0.002 | 147.15 |
| `jimduffy86` | 0.231 | 0.002 | 147.15 |
| `asbrand` | 0.231 | 0.002 | 147.15 |
| `patel` | 0.231 | 0.002 | 147.15 |
| `authoritatively` | 0.231 | 0.002 | 147.15 |
| `four-week` | 0.231 | 0.002 | 147.15 |
| `duffy` | 0.231 | 0.002 | 147.15 |
| `mediaunspun` | 0.231 | 0.002 | 147.15 |
| `savviest` | 0.231 | 0.002 | 147.15 |
| `dasbrand` | 0.231 | 0.002 | 147.15 |
| `sendashtml` | 0.231 | 0.002 | 147.15 |
### Composition of the error groups (share of rows)
| group | n | mailing-list / digest | HTML-heavy | very short (<20 content tokens) | truncated (>512) | lure phrase |
|---|---:|---:|---:|---:|---:|---:|
| FP | 13 | 46.2% | 0.0% | 0.0% | 61.5% | 0.0% |
| TN | 1,986 | 56.3% | 0.0% | 0.0% | 38.3% | 0.4% |
| FN | 20 | 30.0% | 0.0% | 10.0% | 35.0% | 0.0% |
| TP | 1,201 | 8.3% | 0.0% | 0.6% | 26.6% | 22.3% |
### Length confound (RUN_LOG entry 2)
| group | n | mean tokens (full) | mean tokens fed | median (full) | % truncated |
|---|---:|---:|---:|---:|---:|
| TP | 1,201 | 978.0 | 279.8 | 243 | 26.6 |
| TN | 1,986 | 732.6 | 358.4 | 392 | 38.3 |
| FP | 13 | 1814.3 | 377.2 | 875 | 61.5 |
| FN | 20 | 1807.8 | 284.1 | 291 | 35.0 |
| CORRECT | 3,187 | 825.1 | 328.8 | 339 | 33.9 |
| WRONG | 33 | 1810.4 | 320.8 | 368 | 45.5 |
| all legitimate | 1,999 | 739.7 | 358.6 | 393 | 38.5 |
| all unwanted | 1,221 | 991.6 | 279.9 | 243 | 26.7 |
| all label3=phish | 521 | 1349.4 | 355.1 | 412 | 39.9 |
| all label3=spam | 700 | 725.3 | 223.9 | 159 | 16.9 |
| length bucket (full tokens) | n | positive rate | recall | FPR | accuracy |
|---|---:|---:|---:|---:|---:|
| <=64 | 129 | 0.767 | 0.9495 | 0.0333 | 0.9535 |
| 65-128 | 427 | 0.590 | 0.9921 | 0.0114 | 0.9906 |
| 129-256 | 699 | 0.395 | 0.9928 | 0.0000 | 0.9971 |
| 257-512 | 870 | 0.308 | 0.9851 | 0.0033 | 0.9931 |
| >512 | 1,095 | 0.298 | 0.9785 | 0.0104 | 0.9863 |
## Summary
- The classifier catches **98.36% of unwanted mail (phishing or spam)** at threshold 0.5 (20 of 1,221 missed) while flagging 0.65% of legitimate mail (13 false alarms). Recall is the headline because a missed phish is the costly error for a small-business inbox.
- Holding false alarms to 1 in 100 legitimate emails keeps recall at 98.69% (threshold 0.434, flag when p >= threshold); at 1 in 1,000 it is 87.88%. The best-F1 threshold is 0.475 (F1 0.9877).
- Three-way: macro-F1 **0.9867** over 3,220 rows with a full label (recall legitimate 99.3%, phishing 98.7%, spam 97.6%). Given that an email is unwanted, the model tells phishing from spam 99.6% of the time (4 phishing read as spam, 1 spam read as phishing). The phishing/spam labels follow corpus provenance (Nazario + Nigerian fraud + synthetic lures = phishing; SpamAssassin + Enron-Spam spam folders = spam), so part of this confusion is corpus style, not lure content.
- On the 275-row credential-lure slice (37 documented phrases, 97.5% of its rows are labelled positive) recall is 100.00% with precision 100.00%: the highest-cost phish are caught at least as well as the average.
- Length confound: missed unwanted mail averages 1808 tokens vs 978 for caught; false positives average 1814 tokens vs 733 for correct legitimate mail (all legitimate 740, all unwanted 992).
Legitimate mail is ~0.7x longer than unwanted mail on average; the error groups do not follow the length gap, so length is not the main shortcut.
Phishing rows average 1349 tokens vs spam 725: a length gap between the two unwanted kinds is a second shortcut to watch in the phishing-vs-spam confusion.
- Recall by length is lowest in the <=64-token bucket (94.9%, 99 positives).
- Of the 13 false positives, 46.2% look like mailing-list or digest traffic, 0.0% are HTML-heavy and 0.0% are very short (TN reference: 56.3% / 0.0% / 0.0%).
- Tokens most over-represented in missed unwanted mail vs caught: `invite`, `cut`, `practical`, `networking`, `audience`, `oct`, `innovative`, `event`, `angeles`, `anyway`.
- Tokens most over-represented in false positives vs correct legitimate mail: `outlets`, `zzz-unspun`, `czzz-unspun`, `cook`, `full-color`, `muehlbauer`, `vanderkolk`, `eletra`, `loripatel`, `copyedited`.
|