How raubkatz/classifying_layered_software_obfuscations works
Purpose and execution model
This is a script-driven machine-learning pipeline for classifying layered software obfuscation schemes from experiment-derived software metrics. There is no application server or package entry point; execution is sequential through standalone Python scripts:
01_fin_prepare_data.py → 02_fin_train_test_split_ADASYN.py → one or more model-training scripts.
Raw experiment data boundary
Input data is CSV-based experiment output stored under original_data/. The current/updated source is likely original_data/results_new.csv, alongside an earlier experimental snapshot at original_data/results_2023_11_09.csv. These files are the boundary between external metric-generation experiments and this classification pipeline.
Data preparation stage
01_fin_prepare_data.py performs initial preprocessing and preparation of the raw results. It is responsible for transforming experiment records into a model-ready dataset, establishing the feature/label representation consumed by later stages. Its outputs are implicit from the repository tree rather than committed as named artifacts.
Program-level split control
The train/test partition is defined by program identity rather than being left solely to random row-level sampling. data_split/train_programs.txt enumerates programs available to training, while data_split/test_programs.txt reserves held-out programs for evaluation. This separation is an important generalization boundary: models should be evaluated on distinct programs, not merely unseen rows from known programs.
Split and class-balancing stage
02_fin_train_test_split_ADASYN.py applies the defined train/test partition and ADASYN augmentation. ADASYN is a training-data balancing mechanism for minority classes; it should logically operate only after the held-out test programs are isolated, so synthetic examples do not influence evaluation data.
Alternative model branches
The prepared, split, and augmented data feeds three independent classifier paths:
• Extra Trees: 03_fin_ML_ExtraTrees.py
• LightGBM: 03_fin_ML_LGBM.py
• XGBoost: 03_fin_ML_XGBoost.py
These scripts form parallel model-selection/evaluation branches rather than sequential dependencies on one another. Each trains and evaluates a different tree-based learning approach against the same classification task.
Runtime and dependencies
The pipeline runs under Python from the command line. Its material ML stack necessarily includes implementations for Extra Trees, LightGBM, XGBoost, and ADASYN (typically scikit-learn, LightGBM, XGBoost, and imbalanced-learn), though dependency manifests are not present in the tree. No cloud infrastructure, database, API, or external runtime service is indicated.
Artifact and reproducibility considerations
The repository commits source data and explicit split lists, but no generated prepared datasets, trained models, metrics reports, or environment lockfiles are visible. Reproduction therefore depends on script conventions and local Python environments; downstream work should treat generated intermediate paths and model outputs as contracts to discover from the scripts.
Main entry points: 02_fin_train_test_split_ADASYN.py Program split and ADASYN · 01_fin_prepare_data.py Prepare data · 03_fin_ML_ExtraTrees.py Extra Trees · 03_fin_ML_LGBM.py LightGBM
Components 13
Experiment Inputs
- Current experiment results · Current external metric-generation output.
original_data/results_new.csv - Earlier experiment snapshot · Earlier experimental source snapshot.
original_data/results_2023_11_09.csv - Training program list · Programs eligible for training.
data_split/train_programs.txt - Held-out program list · Programs reserved for evaluation.
data_split/test_programs.txt
Python Pipeline
- Prepare data · Transforms experiment records into feature and label representations.
01_fin_prepare_data.py - Prepared dataset · Implicit model-ready feature and label data.
- Program split and ADASYN · Isolates held-out programs before balancing training classes.
02_fin_train_test_split_ADASYN.py - Balanced training data · Training partition augmented with ADASYN.
- Held-out test data · Unaugmented evaluation partition from reserved programs.
Model Branches
- Extra Trees · Trains and evaluates an Extra Trees classifier.
03_fin_ML_ExtraTrees.py - LightGBM · Trains and evaluates a LightGBM classifier.
03_fin_ML_LGBM.py - XGBoost · Trains and evaluates an XGBoost classifier.
03_fin_ML_XGBoost.py
Other components
- Local Python ML environment · Python with scikit-learn, imbalanced-learn, LightGBM, and XGBoost; no lockfile is committed.
Connections 19
- Current experiment results → Prepare data: preprocesses
- Earlier experiment snapshot → Prepare data: alternative source
- Prepare data → Prepared dataset: produces
- Prepared dataset → Program split and ADASYN: partitions
- Training program list → Program split and ADASYN: defines training programs
- Held-out program list → Program split and ADASYN: defines held-out programs
- Program split and ADASYN → Balanced training data: splits and balances
- Program split and ADASYN → Held-out test data: holds out without augmentation
- Balanced training data → Extra Trees: trains
- Held-out test data → Extra Trees: evaluates
- Balanced training data → LightGBM: trains
- Held-out test data → LightGBM: evaluates
- Balanced training data → XGBoost: trains
- Held-out test data → XGBoost: evaluates
- Local Python ML environment → Prepare data: runs
- Local Python ML environment → Program split and ADASYN: runs
- Local Python ML environment → Extra Trees: runs
- Local Python ML environment → LightGBM: runs
- Local Python ML environment → XGBoost: runs