|
--- |
|
license: cc-by-nc-4.0 |
|
datasets: |
|
- FredZhang7/malicious-website-features-2.4M |
|
wget: |
|
- text: https://chat.openai.com/ |
|
- text: https://huggingface.co/FredZhang7/aivance-safesearch-v3 |
|
metrics: |
|
- accuracy |
|
language: |
|
- af |
|
- en |
|
- et |
|
- sw |
|
- sv |
|
- sq |
|
- de |
|
- ca |
|
- hu |
|
- da |
|
- tl |
|
- so |
|
- fi |
|
- fr |
|
- cs |
|
- hr |
|
- cy |
|
- es |
|
- sl |
|
- tr |
|
- pl |
|
- pt |
|
- nl |
|
- id |
|
- sk |
|
- lt |
|
- no |
|
- lv |
|
- vi |
|
- it |
|
- ro |
|
- ru |
|
- mk |
|
- bg |
|
- th |
|
- ja |
|
- ko |
|
- multilingual |
|
--- |
|
|
|
|
|
The classification task is split into two stages: |
|
1. URL features model |
|
- **96.5%+ accurate** on training and validation data |
|
- 2,436,727 rows of labelled URLs |
|
2. Website features model |
|
- **98.4% accurate** on training data, and **98.9% accurate** on validation data |
|
- 911,180 rows of 42 features |
|
|
|
## Training Features |
|
I applied cross-validation with `cv=5` to the training dataset to search for the best hyperparameters. |
|
Here's the dict passed to `GridSearchCV`: |
|
```python |
|
params = { |
|
'objective': 'binary', |
|
'metric': 'binary_logloss', |
|
'boosting_type': ['gbdt', 'dart'], |
|
'num_leaves': [15, 23, 31, 63], |
|
'learning_rate': [0.001, 0.002, 0.01, 0.02], |
|
'feature_fraction': [0.5, 0.6, 0.7, 0.9], |
|
'early_stopping_rounds': [10, 20], |
|
'num_boost_round': [500, 750, 800, 900, 1000, 1250, 2000] |
|
} |
|
``` |
|
To reproduce the 98.4% accurate model, you can follow the data analysis in the dataset page to filter out the unimportant features. |
|
Then train a LightGBM model using the most suited hyperparamters for this task: |
|
```python |
|
params = { |
|
'objective': 'binary', |
|
'metric': 'binary_logloss', |
|
'boosting_type': 'gbdt', |
|
'num_leaves': 31, |
|
'learning_rate': 0.01, |
|
'feature_fraction': 0.6, |
|
'early_stopping_rounds': 10, |
|
'num_boost_round': 800 |
|
} |
|
``` |
|
|
|
|
|
## URL Features |
|
```python |
|
from transformers import AutoModelForSequenceClassification, AutoTokenizer |
|
tokenizer = AutoTokenizer.from_pretrained("FredZhang7/malware-phisher") |
|
model = AutoModelForSequenceClassification.from_pretrained("FredZhang7/malware-phisher") |
|
``` |
|
## Website Features |
|
```bash |
|
pip install lightgbm |
|
``` |
|
```python |
|
import lightgbm as lgb |
|
lgb.Booster(model_file="phishing_model_combined_0.984_train.txt") |
|
``` |