yuriylygin / card-fraud-detection

MIT License
0 stars 0 forks source link

card-fraud-detection

Проект обучения модели, определяющей мошеннические транзакции пластиковых карт.

1. Структура проекта


├── LICENSE
├── Makefile           <- Makefile with commands like `make data` or `make train`
├── README.md          <- The top-level README for developers using this project.
├── data
│   ├── external       <- Data from third party sources.
│   ├── interim        <- Intermediate data that has been transformed.
│   ├── processed      <- The final, canonical data sets for modeling.
│   └── raw            <- The original, immutable data dump.
│
├── docs               <- A default Sphinx project; see sphinx-doc.org for details
│
├── models             <- Trained and serialized models, model predictions, or model summaries
│
├── notebooks          <- Jupyter notebooks. Naming convention is a number (for ordering),
│                         the creator's initials, and a short `-` delimited description, e.g.
│                         `1.0-jqp-initial-data-exploration`.
│
├── references         <- Data dictionaries, manuals, and all other explanatory materials.
│
├── reports            <- Generated analysis as HTML, PDF, LaTeX, etc.
│   └── figures        <- Generated graphics and figures to be used in reporting
│
├── requirements.txt   <- The requirements file for reproducing the analysis environment, e.g.
│                         generated with `pip freeze > requirements.txt`
│
├── setup.py           <- makes project pip installable (pip install -e .) so src can be imported
├── src                <- Source code for use in this project.
│   ├── __init__.py    <- Makes src a Python module
│   │
│   ├── data           <- Scripts to download or generate data
│   │   └── make_dataset.py
│   │
│   ├── features       <- Scripts to turn raw data into features for modeling
│   │   └── build_features.py
│   │
│   ├── models         <- Scripts to train models and then use trained models to make
│   │   │                 predictions
│   │   ├── predict_model.py
│   │   └── train_model.py
│   │
│   └── visualization  <- Scripts to create exploratory and results oriented visualizations
│       └── visualize.py
│
└── tox.ini            <- tox file with settings for running tox; see tox.readthedocs.io

2. Цели и метрики

Целью проекта является модель, способная классифицировать мошеннические транзакции. Данная задача относится к задачам бинарной классификации. В качестве метрик качества обечения используются recall, F1-score и AUC ROC. Указанные метрики выбраны, так как наиболее негативным сценарием применения модели является ошибка второго рода (пропуск цели) или ошибка false negative: транзакция классифицирована как валидная при условии, что она является мошеннической.

Датасет используемый для обучения модели является сильно несбаллансированным. Т.к. рассматриваемая задача относится к задаче бинарной классификации, то cost matrix для нее будет следующей:

$$ c{00} = c{11} = 0, c{01} = 1, c{10} = IR, $$

где $IR$ - imbalance rate, отношение количества мошеннических транзакций к колличеству легальных транзакций в датасете.


Project based on the cookiecutter data science project template. #cookiecutterdatascience

3. Работат с датасетом

Создать датасет

python src/data/manage.py create --n-customers=150000 --n-terminals=10000 --start-date=2022-01-01 --nb-days=25 --radius=10

Дополнить датасет

python src/data/manage.py update --start-date=2022-02-01 --nb-days=25 --radius=5

Удалить датасет

python src/data/manage.py delete
python3 -m virtualenv --copies venv
venv-pack -o venv.tar.gz
git archive --format zip --output cfd.zip main
PYTHON_VENV='./venv/bin/python'
export PYSPARK_PYTHON=${PYTHON_VENV}
spark-submit --master yarn --deploy-mode cluster \
--conf spark.yarn.appMasterEnv.PYSPARK_PYTHON=${PYTHON_VENV} \
--archives ./venv.tar.gz#venv \
src/data/yandex-example.py s3a://yl-otus/yandex-data.txt s3a://yl-otus/output
PYTHON_VENV='./venv/bin/python'
export PYSPARK_PYTHON=${PYTHON_VENV}
spark-submit --master yarn --deploy-mode cluster \
--conf spark.yarn.appMasterEnv.PYSPARK_PYTHON=${PYTHON_VENV} \
--conf spark.yarn.appMasterEnv.PYSPARK_DRIVER_PYTHON=${PYTHON_VENV} \
--archives s3a://yl-otus/venv.tar.gz#venv \
s3a://yl-otus/yandex-example.py s3a://yl-otus/yandex-data.txt s3a://yl-otus/output
PYTHON_VENV='./venv/bin/python'
export PYSPARK_PYTHON=${PYTHON_VENV}
spark-submit --master yarn --deploy-mode cluster \
--conf spark.yarn.appMasterEnv.PYSPARK_PYTHON=${PYTHON_VENV}\
--num-executors 5 --executor-cores 5 \
--driver-memory 8g --executor-memory 16g \
--archives ./venv.tar.gz#venv \
src/data/update-dataset.py
yc dataproc job create-pyspark --cluster-id c9q1ee8pnj1r46ogk49s \
--name yc-manual-launch \
--main-python-file-uri s3a://yl-otus/yandex-example.py \
--args s3a://yl-otus/yandex-data.txt --args=s3a://yl-otus/output \
--archive-uris s3a://yl-otus/venv.tar.gz#venv \
--properties spark.yarn.appMasterEnv.PYSPARK_PYTHON=./venv/bin/python \
--properties spark.executorEnv.PYSPARK_PYTHON=./venv/bin/python \
--properties spark.submit.deployMode=cluster \
--properties spark-env:PYSPARK_PYTHON=./venv/bin/python \
--properties hadoop-env:PYSPARK_PYTHON=./venv/bin/python
yc dataproc job create-pyspark --cluster-id=c9qe7r6747r6hidd2p05 \
--name=yc-manual-launch \
--main-python-file-uri ./card-fraud-detection.tar.gz/card-fraud-detection/src/data/yandex-example.py \
--args s3a://yl-otus/yandex-data.txt --args s3a://yl-otus/output \
--archive-uris s3a://yl-otus/venv.tar.gz#venv \
--archive-uris s3a://yl-otus/card-fraud-detection.tar.gz \
--properties spark.yarn.appMasterEnv.PYSPARK_PYTHON=venv/bin/python \
--properties spark.submit.deployMode=client
spark-submit --master yarn --deploy-mode cluster \
--files s3a://yl-otus/requirements.txt \
--conf spark.pyspark.virtualenv.enabled=true  \
--conf spark.pyspark.virtualenv.type=native \
--conf spark.pyspark.virtualenv.requirements=./requirements.txt \
--conf spark.pyspark.virtualenv.bin.path=/opt/conda/bin/virtualenv \
--conf spark.pyspark.python=/usr/bin/python3 \
s3a://yl-otus/cloudera.py
yc dataproc job log --cluster-id=c9q1ee8pnj1r46ogk49s c9qslupu9ch0v2u33lrb
PYTHON_VENV='./venv/bin/python'
yc dataproc job create-pyspark --cluster-id c9q1ee8pnj1r46ogk49s \
--name yc-manual-launch \
--main-python-file-uri s3a://yl-otus/update.py \
--args 30 --args 2022-01-01 --args 10 \
--archive-uris s3a://yl-otus/venv.tar.gz#venv \
--python-file-uris s3a://yl-otus/cfd.zip \
--properties spark.pyspark.python=${PYTHON_VENV} \
--properties spark.executorEnv.PYSPARK_PYTHON=${PYTHON_VENV} \
--properties spark.submit.deployMode=client
PYTHON_VENV='/home/ubuntu/card-fraud-detection/venv/bin/python'
spark-submit --master yarn --deploy-mode cluster \
--conf spark.yarn.appMasterEnv.PYSPARK_PYTHON=${PYTHON_VENV} \
--py-files cfd.zip \
--archives venv.tar.gz#venv \
src/data/update.py 30 2022-01-01 10
PYTHON_VENV='./venv/bin/python'
spark-submit --master yarn --deploy-mode client \
--conf spark.executorEnv.PYSPARK_PYTHON=${PYTHON_VENV} \
--py-files cfd.zip \
--archives venv.tar.gz#venv \
src/data/update.py 30 2022-01-01 10

worked

PYTHON_VENV='/home/ubuntu/cfd/bin/python'
spark-submit --master yarn --deploy-mode client \
--conf spark.executorEnv.PYSPARK_PYTHON=${PYTHON_VENV} \
--py-files cfd.zip \
src/data/update.py 30 2022-01-01 10
PYTHON_VENV='/home/ubuntu/cfd/bin/python'
spark-submit --master yarn --deploy-mode cluster \
--conf spark.spark.yarn.appMasterEnv.PYSPARK_PYTHON=${PYTHON_VENV} \
--py-files cfd.zip \
src/data/update.py 30 2022-01-01 10
PYTHON_VENV='./venv/bin/python'
spark-submit --master yarn --deploy-mode cluster \
--conf spark.executorEnv.PYSPARK_PYTHON=${PYTHON_VENV} \
--archives s3a://yl-otus/venv.tar.gz#venv s3a://yl-otus/cloudera.py
PYTHON_VENV='./venv/bin/python'
spark-submit --master yarn --deploy-mode client \
--conf spark.executorEnv.PYSPARK_PYTHON=${PYTHON_VENV} \
--archives s3a://yl-otus/venv.tar.gz#venv s3a://yl-otus/cloudera.py
PYTHON_VENV='./venv/bin/python'
yc dataproc job create-pyspark --cluster-id c9qe7r6747r6hidd2p05 \
--name yc-manual-launch \
--main-python-file-uri s3a://yl-otus/cloudera.py \
--archive-uris s3a://yl-otus/venv.tar.gz#venv \
--properties spark.executorEnv.PYSPARK_PYTHON=${PYTHON_VENV} \
--properties spark.submit.deployMode=cluster
PYTHON_VENV='./venv/bin/python'
spark-submit --master yarn --deploy-mode client \
--conf spark.executorEnv.PYSPARK_PYTHON=${PYTHON_VENV} \
--conf spark.pyspark.python=${PYTHON_VENV} \
--py-files cfd.zip \
--archives venv.tar.gz#venv \
src/data/create.py 5000 10000 30 2022-01-01 10
PYTHON_VENV='./venv/bin/python'
spark-submit --master yarn --deploy-mode cluster \
--conf spark.executorEnv.PYSPARK_PYTHON=${PYTHON_VENV} \
--conf spark.pyspark.python=${PYTHON_VENV} \
--py-files cfd.zip \
--archives venv.tar.gz#venv \
src/data/create.py 5000 10000 30 2022-01-01 10
spark-submit --master yarn --deploy-mode client \
--py-files cfd.zip \
src/data/delete.py
PYTHON_VENV='./venv/bin/python'
spark-submit --master yarn --deploy-mode client \
--conf spark.executorEnv.PYSPARK_PYTHON=${PYTHON_VENV} \
--conf spark.pyspark.python=${PYTHON_VENV} \
--py-files cfd.zip \
--archives venv.tar.gz#venv \
src/data/update.py 30 2022-01-01 10
PYTHON_VENV='./venv/bin/python'
spark-submit --master yarn --deploy-mode cluster \
--conf spark.executorEnv.PYSPARK_PYTHON=${PYTHON_VENV} \
--conf spark.pyspark.python=${PYTHON_VENV} \
--py-files cfd.zip \
--archives venv.tar.gz#venv \
src/data/update.py 30 2022-01-01 10
PYTHON_VENV='/usr/bin/python3'
spark-submit --master yarn --deploy-mode client \
--conf spark.pyspark.python=${PYTHON_VENV} \
--py-files cfd.zip \
src/data/update.py 30 2022-01-01 10
yc dataproc job create-pyspark --cluster-id c9qe7r6747r6hidd2p05 \
--name yc-update \
--main-python-file-uri s3a://yl-otus/update.py \
--args 30 --args 2022-01-01 --args 10 \
--python-file-uris s3a://yl-otus/cfd.zip \
--properties spark.submit.deployMode=client