Views
No views yet
paypal-secure-login.xyz).
Output: a threat score from 0 to 100.| Example | Score |
|---|---|
google.com | 0.6 |
wikipedia.org | ~3 |
paypal-secure-login.xyz | 62.6 |
xhovsrwxqhls.com (DGA) | 98.0 |
paypal.com.evil.tk), abused-TLD membership, and structure statistics.HistGradientBoostingClassifier (scikit-learn) maps the
features to a probability, served as a 0–100 score.features.py, pure stdlib) ships alongside it.| Metric | Value |
|---|---|
| Holdout AUC | 0.892 |
| DGA-subset AUC | 0.981 |
| DGA recall @ score 60 | 0.894 |
| False-positive rate @ 60 (Tranco top-100K sample) | 1.7% |
| Phishing recall @ 60 | 0.356 |
| Inference latency | < 1 ms per domain |
imoblink.com) that hosts malicious content.
In production we use it to decide which domains are worth sending to a
verification service (VirusTotal); it never blocks on its own.1import joblib, sys
2sys.path.insert(0, ".") # features.py, psl_snapshot.dat, words_top5k.txt
3from features import extract_features
4
5artifact = joblib.load("threat_model.joblib")
6model, ngram = artifact["model"], artifact["ngram_model"]
7
8def score(domain: str) -> float:
9 return model.predict_proba([extract_features(domain, ngram)])[0][1] * 100
10
11print(score("paypal-secure-login.xyz")) # ~62
12print(score("google.com")) # ~1scikit-learn>=1.6, joblib, numpy. features.py itself is
pure stdlib.