https://detectorphishing.streamlit.app/
OPR_API_KEY = "<Open Page Rank API key>"
WHOIS_API_KEY = "<whoisxmlapi API key> #(if you want to use the paid version)"
SERP_API_KEY = "<SerpAPI key>"
CACHE_EXPIRATION_DAYS = "Number of days before the serpapi search cache expires"
SEARCH_HISTORY_FILE = "Location of the search.history.json file" # This file includes searches performed by the program to avoid incurring extra serpAPI costs
If you wish to use the paid API for the domain age from WHOIS, you need to uncomment the code in external_features.py
.
In principle, the whois library works well.
This project implements a phishing URL detection system using an interactive application developed with Streamlit. The system allows you to load pre-trained models, analyze datasets, generate predictions, and visualize performance metrics. Additionally, it offers advanced functionalities for detailed error analysis and comparisons between different models.
- Model and Pipeline Loading: Imports pre-trained models and pipelines to perform predictions.
- Data Visualization: Displays preliminary views of the loaded datasets.
- Prediction Generation: Makes predictions on URLs and shows basic metrics such as Accuracy, Precision, Recall, F1 Score, and ROC AUC.
- Advanced Analysis: Provides detailed analysis of errors and model strengths, including feature importance graphs.
- Model Comparison: Enables the comparison of multiple models by loading a CSV file with specific metrics.
- Result Download: Facilitates the download of complete predictions and error details in CSV format.
# Project Structure
## 📂 Data
- `allbrands.txt`
- `comparativa_modelos.csv`
- `test_dataset_F.csv`
- `test.parquet`
- `train_with_estimated_web_traffic.csv`
- `train_with_predicted_traffic.csv`
- `train_with_tranco.csv`
- `train.csv`
- `train.parquet`
- `tranco_list.csv`
## 📂 Models
- `__init__.py`
- `mejor_modelo.pkl`
- `mejor_pipeline.pkl`
- `metadatos.pkl`
- `web_traffic_stacking.pkl`
## 📂 Notebooks
- `Informe Final.docx`
- `Informe Final.pdf`
- `Phishing_modelling.ipynb`
- `Phising_EDA.ipynb`
- `webtraffic_modelling.ipynb`
## 📂 Results
_(Folder is empty or files are not listed)_
## 📂 scripts
- `__init__.py`
- `content_features.py`
- `external_features.py`
- `extract_url_features.py`
- `feature_extractor.py`
- `pandas2arff.py`
- `url_features.py`
## 📂 tests
- `__init__.py`
- `check_variables.py`
- `test_extract_features.py`
- `test_results.json`
## 📂 tools
- `convert_to_parquet.py`
- `tranco_dataset_building.py`
## 📂 utils
- `__init__.py`
- `functions.py`
- `transformers.py`
## Root Files
- `.env`
- `.gitignore`
- `app.py`
- `readme.md`
- `requirements.txt`
- `search_history.json`
git clone https://github.com/your_username/phishing-detection-system.git
cd phishing-detection-system
python -m venv env
source env/bin/activate # On Windows: env\Scripts\activate
pip install -r requirements.txt
If you are going to use new datasets, before running the application, it is necessary to convert the CSV files to Parquet format to optimize performance.
1. Run the Conversion Script (Not necessary to run, the Parquet files are already in the Data folder)
python scripts/convert_to_parquet.py
This script will load train.csv
and test_dataset_F.csv
from the Data
folder, process them, and save them as train.parquet
and test.parquet
respectively in the same directory.
The notebook Phising_EDA.ipynb
contains the complete process of dataset exploration, including feature creation.
The notebook Phishing_modelling.ipynb
contains the complete process of model training, including feature selection, hyperparameter tuning, and evaluation. Once trained, the model, pipeline, and metadata are saved in the Models
folder.
streamlit run app.py
-
Sidebar:
- Load Model and Pipeline: Button to load the files
mejor_modelo.pkl
,mejor_pipeline.pkl
, andmetadatos.pkl
. - Load Dataset: Select and load one of the available datasets (
train.parquet
ortest.parquet
). - Decision Threshold: Adjust the classification threshold for predictions.
- Load Model and Pipeline: Button to load the files
-
Main Tabs:
- 📄 Data View: Displays a preliminary view of the loaded dataset.
- 📊 Prediction & Metrics: Generates predictions and shows basic metrics.
- 📈 Advanced Analysis: Provides detailed analysis of errors and model strengths.
- 🆚 Model Comparison: Allows comparing different models by loading a CSV file with metrics.
Within the Prediction and Advanced Analysis tabs, you will find options to download the complete predictions and errors in CSV format.
To compare different models, upload a CSV file with the metrics of interest (for example, comparativa_modelos.csv
) in the 🆚 Model Comparison tab. The file must include at least the columns Modelo
, Prueba
, and F1-Validation
. Comparative graphs will be generated automatically.
Contributions are welcome. Please open an issue or submit a pull request with your improvements or fixes.
For any questions or suggestions, please contact [email protected].
https://detectorphishing.streamlit.app/
.env requerido para ejecutar en local o archivo secrets.toml en una carpeta .streamlit con los siguientes datos:
OPR_API_KEY = "" WHOIS_API_KEY = " #(si quieres usar la version de pago)" SERP_API_KEY = "" CACHE_EXPIRATION_DAYS = "Dias para expirar la cache de busqueda de serpapi" SEARCH_HISTORY_FILE = "Localizacion del archivo search.history.json" #Esto incluye las busquedas realizadas con el programa, para evitar sobrecoste de serpAPI
Si deseas usar la API de pago para el domain age del whois, necesitas descomentar el codigo en external_features.py En principio la libreria de whois funciona bien
Este proyecto implementa un sistema de detección de URLs de phishing utilizando una aplicación interactiva desarrollada con Streamlit. El sistema permite cargar modelos preentrenados, analizar datasets, generar predicciones y visualizar métricas de rendimiento. Además, ofrece funcionalidades avanzadas para el análisis detallado de errores y comparativas entre diferentes modelos.
- Carga de Modelos y Pipelines: Importa modelos y pipelines preentrenados para realizar predicciones.
- Visualización de Datos: Muestra vistas preliminares de los datasets cargados.
- Generación de Predicciones: Realiza predicciones sobre URLs y muestra métricas básicas como Accuracy, Precisión, Recall, F1 Score y ROC AUC.
- Análisis Avanzado: Proporciona análisis detallados de errores y fortalezas del modelo, incluyendo gráficos de importancias de características.
- Comparativa de Modelos: Permite comparar múltiples modelos mediante la carga de un archivo CSV con métricas específicas.
- Descarga de Resultados: Facilita la descarga de predicciones completas y de errores en formato CSV.
# Estructura del Proyecto
## 📂 Data
- `allbrands.txt`
- `comparativa_modelos.csv`
- `test_dataset_F.csv`
- `test.parquet`
- `train_with_estimated_web_traffic.csv`
- `train_with_predicted_traffic.csv`
- `train_with_tranco.csv`
- `train.csv`
- `train.parquet`
- `tranco_list.csv`
## 📂 Modelos
- `__init__.py`
- `mejor_modelo.pkl`
- `mejor_pipeline.pkl`
- `metadatos.pkl`
- `web_traffic_stacking.pkl`
## 📂 Notebooks
- `Informe Final.docx`
- `Informe Final.pdf`
- `Phishing_modelling.ipynb`
- `Phising_EDA.ipynb`
- `webtraffic_modelling.ipynb`
## 📂 Results
_(Carpeta vacía o sin listar archivos)_
## 📂 scripts
- `__init__.py`
- `content_features.py`
- `external_features.py`
- `extract_url_features.py`
- `feature_extractor.py`
- `pandas2arff.py`
- `url_features.py`
## 📂 tests
- `__init__.py`
- `check_variables.py`
- `test_extract_features.py`
- `test_results.json`
## 📂 tools
- `convert_to_parquet.py`
- `tranco_dataset_building.py`
## 📂 utils
- `__init__.py`
- `functions.py`
- `transformers.py`
## Archivos en la raíz
- `.env`
- `.gitignore`
- `app.py`
- `readme.md`
- `requirements.txt`
- `search_history.json`
git clone https://github.com/tu_usuario/sistema-deteccion-phishing.git
cd sistema-deteccion-phishing
python -m venv env
source env/bin/activate # En Windows: env\Scripts\activate
pip install -r requirements.txt
Si vas a usar nuevos dataset, antes de ejecutar la aplicación, es necesario convertir los archivos CSV a formato Parquet para optimizar el rendimiento.
1. Ejecutar el Script de Conversión (No es necesario ejecutarlo, los parquet ya se encuentran en Data)
python scripts/convert_to_parquet.py
Este script cargará train.csv
y test_dataset_F.csv
desde la carpeta Data
, los procesará y los guardará como train.parquet
y test.parquet
respectivamente en el mismo directorio.
El notebook Phising_EDA.ipynb
contiene el proceso completo de exploración del dataset, incluyendo la creación de características.
El notebook Phishing_modelling.ipynb
contiene el proceso completo de entrenamiento del modelo, incluyendo la selección de características, ajuste de hiperparámetros y evaluación. Una vez entrenado, el modelo, el pipeline y los metadatos se guardan en la carpeta Modelos
.
streamlit run app.py
-
Barra Lateral:
- Cargar Modelo y Pipeline: Botón para cargar los archivos
mejor_modelo.pkl
,mejor_pipeline.pkl
ymetadatos.pkl
. - Cargar Dataset: Selecciona y carga uno de los datasets disponibles (
train.parquet
otest.parquet
). - Umbral de Decisión (Threshold): Ajusta el umbral de clasificación para las predicciones.
- Cargar Modelo y Pipeline: Botón para cargar los archivos
-
Pestañas Principales:
- 📄 Vista de Datos: Muestra una vista preliminar del dataset cargado.
- 📊 Predicción & Métricas: Genera predicciones y muestra métricas básicas.
- 📈 Análisis Avanzado: Proporciona análisis detallados de errores y fortalezas del modelo.
- 🆚 Comparativa Modelos: Permite comparar diferentes modelos mediante la carga de un archivo CSV con métricas.
Dentro de las pestañas de Predicción y Análisis Avanzado, encontrarás opciones para descargar las predicciones completas y los errores en formato CSV.
Para comparar diferentes modelos, sube un archivo CSV con las métricas de interés (por ejemplo, comparativa_modelos.csv
) en la pestaña 🆚 Comparativa Modelos. El archivo debe contener al menos las columnas Modelo
, Prueba
y F1-Validation
. Se generarán gráficos comparativos automáticamente.
Las contribuciones son bienvenidas. Por favor, abre un issue o envía un pull request con tus mejoras o correcciones.
Para cualquier consulta o sugerencia, por favor contacta a [email protected].