melemad-eval
MeLeMaD: Adaptive Malware Detection via Chunk-wise Feature Selection and Meta-Learning — Ajvad Haneef K et al. (2025) (arXiv:2512.23987, 2025)
What this evaluates
This evaluation protocol assesses a model's ability to classify Android and Windows PE binaries as benign or malicious using only static features. It probes robustness, generalization across malware families, and discriminative power under concept drift and evolving threat scenarios.
Datasets
Metrics
Accuracy (primary) — range: [0, 1]
- Proportion of correct predictions out of total predictions: (TP+TN)/(TP+TN+FP+FN).
Precision — range: [0, 1]
- Proportion of true positive predictions among all positive predictions: TP/(TP+FP).
Recall — range: [0, 1]
- Proportion of true positive predictions out of all actual positive instances: TP/(TP+FN).
F1-Score — range: [0, 1]
- Harmonic mean of precision and recall: 2*(Precision*Recall)/(Precision+Recall).
MCC — range: [0, 1]
- Balanced metric for binary classification considering all confusion matrix quadrants: (TPTN - FPFN)/sqrt((TP+FP)(TP+FN)(TN+FP)(TN+FN)).
AUC-ROC — range: [0, 1]
- Area under the Receiver Operating Characteristic curve, integrating True Positive Rate over False Positive Rate across thresholds.
Input / output format
Input: Pre-extracted static feature vectors representing Android applications (permissions, API calls, intents, strings) or Windows PE binaries (headers, imports, sections, entropy statistics), formatted as numerical arrays. Labels are binary (0 for benign, 1 for malware).
Output: Binary classification label (0 or 1) or continuous probability score for threshold-dependent metrics and AUC-ROC calculation.
Scoring recipe
def compute_metrics(y_true, y_pred, y_prob=None):
tp = np.sum((y_true == 1) & (y_pred == 1))
tn = np.sum((y_true == 0) & (y_pred == 0))
fp = np.sum((y_true == 0) & (y_pred == 1))
fn = np.sum((y_true == 1) & (y_pred == 0))
acc = (tp + tn) / (tp + tn + fp + fn)
prec = tp / (tp + fp) if (tp + fp) > 0 else 0
rec = tp / (tp + fn) if (tp + fn) > 0 else 0
f1 = 2 * prec * rec / (prec + rec) if (prec + rec) > 0 else 0
mcc = ((tp*tn) - (fp*fn)) / np.sqrt((tp+fp)*(tp+fn)*(tn+fp)*(tn+fn))
auc = roc_auc_score(y_true, y_prob) if y_prob is not None else None
return acc, prec, rec, f1, mcc, auc
Common pitfalls
- The paper explicitly restricts training to static features only, ignoring dynamic features (system calls, network traffic) present in the raw datasets.
- Datasets are class-balanced (50/50 benign/malware), but this does not represent the train/validation/test split ratios used during meta-learning experiments.
- AUC-ROC requires predicted probabilities, not hard class labels, yet the paper reports it alongside accuracy without clarifying the thresholding strategy.
Evidence (verbatim from paper)
We evaluate our proposed method in terms of Accuracy($A_{c}$), Precision($P_{c}$), Recall($R_{c}$), F1 score($F1_{c}$), Matthews Correlation Coefficient($M_{c}$), and Area Under the Receiver Operating Characteristic Curve ($AUC-ROC$). These metrics are calculated based on the number of True Positives (TP), True Negatives (TN), False Positives (FP), and False Negatives (FN).
Citation
@misc{haneef2025melemad,
title={MeLeMaD: Adaptive Malware Detection via Chunk-wise Feature Selection and Meta-Learning},
author={Ajvad Haneef K et al. (2025)},
year={2025},
note={arXiv:2512.23987}
}
1---2name: melemad-eval3description: This evaluation protocol assesses a model's ability to classify Android and Windows PE binaries as benign or malicious using only static features. It probes robustness, generalization across malware families, and discriminative power under concept drift and evolving threat scenarios. Use when the user wants to benchmark on CIC-AndMal2020, BODMAS, EMBOD, or asks about evaluating this task. Reports Accuracy.4---56# melemad-eval78> MeLeMaD: Adaptive Malware Detection via Chunk-wise Feature Selection and Meta-Learning — Ajvad Haneef K et al. (2025) (arXiv:2512.23987, 2025)910## What this evaluates1112This evaluation protocol assesses a model's ability to classify Android and Windows PE binaries as benign or malicious using only static features. It probes robustness, generalization across malware families, and discriminative power under concept drift and evolving threat scenarios.1314## Datasets1516- **CIC-AndMal2020** — total 400000; splits: train (-1), test (-1)17- **BODMAS** — total 134435; splits: train (-1), test (-1)18- **EMBOD** — total 934311; splits: train (-1), test (-1); repo https://www.kaggle.com/datasets/ajvadhaneef/embod-all/1920## Metrics2122- `Accuracy` **(primary)** — range: [0, 1]23 - Proportion of correct predictions out of total predictions: (TP+TN)/(TP+TN+FP+FN).24- `Precision` — range: [0, 1]25 - Proportion of true positive predictions among all positive predictions: TP/(TP+FP).26- `Recall` — range: [0, 1]27 - Proportion of true positive predictions out of all actual positive instances: TP/(TP+FN).28- `F1-Score` — range: [0, 1]29 - Harmonic mean of precision and recall: 2*(Precision*Recall)/(Precision+Recall).30- `MCC` — range: [0, 1]31 - Balanced metric for binary classification considering all confusion matrix quadrants: (TP*TN - FP*FN)/sqrt((TP+FP)(TP+FN)(TN+FP)(TN+FN)).32- `AUC-ROC` — range: [0, 1]33 - Area under the Receiver Operating Characteristic curve, integrating True Positive Rate over False Positive Rate across thresholds.3435## Input / output format3637**Input**: Pre-extracted static feature vectors representing Android applications (permissions, API calls, intents, strings) or Windows PE binaries (headers, imports, sections, entropy statistics), formatted as numerical arrays. Labels are binary (0 for benign, 1 for malware).3839**Output**: Binary classification label (0 or 1) or continuous probability score for threshold-dependent metrics and AUC-ROC calculation.4041## Scoring recipe4243```python44def compute_metrics(y_true, y_pred, y_prob=None):45 tp = np.sum((y_true == 1) & (y_pred == 1))46 tn = np.sum((y_true == 0) & (y_pred == 0))47 fp = np.sum((y_true == 0) & (y_pred == 1))48 fn = np.sum((y_true == 1) & (y_pred == 0))49 acc = (tp + tn) / (tp + tn + fp + fn)50 prec = tp / (tp + fp) if (tp + fp) > 0 else 051 rec = tp / (tp + fn) if (tp + fn) > 0 else 052 f1 = 2 * prec * rec / (prec + rec) if (prec + rec) > 0 else 053 mcc = ((tp*tn) - (fp*fn)) / np.sqrt((tp+fp)*(tp+fn)*(tn+fp)*(tn+fn))54 auc = roc_auc_score(y_true, y_prob) if y_prob is not None else None55 return acc, prec, rec, f1, mcc, auc56```5758## Common pitfalls5960- The paper explicitly restricts training to static features only, ignoring dynamic features (system calls, network traffic) present in the raw datasets.61- Datasets are class-balanced (50/50 benign/malware), but this does not represent the train/validation/test split ratios used during meta-learning experiments.62- AUC-ROC requires predicted probabilities, not hard class labels, yet the paper reports it alongside accuracy without clarifying the thresholding strategy.6364## Evidence (verbatim from paper)6566> We evaluate our proposed method in terms of Accuracy($A_{c}$), Precision($P_{c}$), Recall($R_{c}$), F1 score($F1_{c}$), Matthews Correlation Coefficient($M_{c}$), and Area Under the Receiver Operating Characteristic Curve ($AUC-ROC$). These metrics are calculated based on the number of True Positives (TP), True Negatives (TN), False Positives (FP), and False Negatives (FN).6768## Citation6970```bibtex71@misc{haneef2025melemad,72 title={MeLeMaD: Adaptive Malware Detection via Chunk-wise Feature Selection and Meta-Learning},73 author={Ajvad Haneef K et al. (2025)},74 year={2025},75 note={arXiv:2512.23987}76}77```7879- arXiv: 2512.23987