This repository is a part of the paper "Inductive and Transductive Link Prediction for Criminal Network Analysis," published in the Journal of Computational Science in 2023. The paper discusses how identifying potential offenders who might co-offend can help law enforcement focus their investigations and improve predictive policing. Traditional methods rely heavily on manual work by police officers, which can be inefficient. To address this, the paper introduces two machine learning frameworks based on graph theory, specifically for burglary cases. These are transductive link prediction (see the implementation here), which predicts connections between existing nodes (offenders or crime cases), and inductive link prediction (this repository), which finds links between new crime cases and existing nodes.
This repository has been adapted from the original implementation by working-yuhao
, found at https://github.com/working-yuhao/DEAL, and a fork by lajd
, found at https://github.com/lajd/DEAL. Specifically, this repository involves restructuring the initial implementation to make it more concise and modular. The restructuring process is dedicated to enhancing criminal networks' inductive link prediction task.
Ahmadi, Z., Nguyen, H. H., Zhang, Z., Bozhkov, D., Kudenko, D., Jofre, M., Calderoni, F., Cohen, N., & Solewicz, Y. (2023). Inductive and transductive link prediction for criminal network analysis. Journal of Computational Science. Preprint
@article{ahmadi2023inductive,
title = {Inductive and Transductive Link Prediction for Criminal Network Analysis},
author = {Ahmadi, Zahra and Nguyen, Hoang H. and Zhang, Zijian and Bozhkov, Dmytro and Kudenko, Daniel and Jofre, Maria and Calderoni, Francesco and Cohen, Noa and Solewicz, Yosef},
journal = {Journal of Computational Science},
publisher = {Elsevier},
volume = {72},
pages = {102063},
year = {2023},
issn = {1877-7503},
doi = {https://doi.org/10.1016/j.jocs.2023.102063},
url = {https://www.sciencedirect.com/science/article/pii/S1877750323001230},
}
- Linux
- Nvidia GPU
- Cuda version 11.0
- Anaconda
The installation below uses anaconda.
#!/bin/bash
CONDA_ENV_NAME=DEAL
#conda clean --all -y
conda env list | grep ${CONDA_ENV_NAME}
if [ $? -eq 0 ]; then
echo "DEAL environment already exists; skipping creation"
else
echo "Creating ${CONDA_ENV_NAME} environment"
conda create -n ${CONDA_ENV_NAME} python=3.9 -y
fi
conda activate ${CONDA_ENV_NAME}
conda install pytorch torchvision torchaudio cudatoolkit=11.0 -c pytorch -c nvidia -y
conda install -q -y numpy pyyaml scipy ipython mkl mkl-include conda-build
conda install pyg -c pyg -c conda-forge -y
pip install -e .
make train-burglary
Total Load data time: 58.32 s
Total Train/val time: 78.44 s
Test time: 0.01 s
Total time: 136.76 s
ROC-AUC: 0.7580
AP: 0.7567
make train-burglary-ind-val
Total Load data time: 36.09 s
Total Train/val time: 66.05 s
Test time: 0.01 s
Total time: 102.15 s
ROC-AUC: 0.7468
AP: 0.7477
python israel_lea_inp_burglary_v2_crimes_network.py