{"id":28323556,"url":"https://github.com/skytecat/frauddetection","last_synced_at":"2025-09-13T13:26:48.697Z","repository":{"id":290377548,"uuid":"974240829","full_name":"skytecat/FraudDetection","owner":"skytecat","description":"Разработка моделей машинного обучения для обнаружения мошеннических транзакций","archived":false,"fork":false,"pushed_at":"2025-05-04T07:13:03.000Z","size":20329,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-06-24T00:35:51.283Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Jupyter Notebook","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/skytecat.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-04-28T13:22:08.000Z","updated_at":"2025-06-06T16:42:56.000Z","dependencies_parsed_at":"2025-06-24T00:41:35.072Z","dependency_job_id":null,"html_url":"https://github.com/skytecat/FraudDetection","commit_stats":null,"previous_names":["skytecat/frauddetection"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/skytecat/FraudDetection","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/skytecat%2FFraudDetection","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/skytecat%2FFraudDetection/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/skytecat%2FFraudDetection/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/skytecat%2FFraudDetection/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/skytecat","download_url":"https://codeload.github.com/skytecat/FraudDetection/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/skytecat%2FFraudDetection/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":274968610,"owners_count":25383113,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-13T02:00:10.085Z","response_time":70,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-05-25T16:14:27.430Z","updated_at":"2025-09-13T13:26:48.676Z","avatar_url":"https://github.com/skytecat.png","language":"Jupyter Notebook","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Обнаружение мошеннических транзакций\n\n## Описание проекта\n\nЦель данного проекта — разработка модели машинного обучения для обнаружения мошеннических транзакций по данным кредитных карт. Задача является задачей бинарной классификации, где целевая переменная (`Class`) принимает значение:\n- `1` — мошенническая транзакция.\n- `0` — легальная транзакция.\n\nДанные представляют собой транзакции, произведенные европейскими держателями кредитных карт в сентябре 2013 года. Особенностью датасета является **сильный дисбаланс классов**: только **492 из 284,807 транзакций (0.172%)** являются мошенническими.\n\n## Содержание датасета\n\nДатасет содержит следующие признаки:\n- **V1, V2, ..., V28:** Основные компоненты, полученные с помощью PCA (метод главных компонент). Исходные признаки не раскрываются из соображений конфиденциальности.\n- **Time:** Время в секундах, прошедшее между каждой транзакцией и первой транзакцией в датасете.\n- **Amount:** Сумма транзакции.\n- **Class:** Целевая переменная:\n  - `0` — легальная транзакция.\n  - `1` — мошенническая транзакция.\n\n## Проблемы и подходы\n\n### Проблема дисбаланса классов\nДоля мошеннических транзакций составляет всего **0.172%**, что создает сложности для обучения моделей:\n- Модели могут быть склонны к предсказанию мажоритарного класса, игнорируя миноритарный.\n- Стандартные метрики, такие как **Accuracy**, становятся ненадежными, так как высокая точность может быть достигнута простым предсказанием мажоритарного класса.\n\n### Подходы к решению\nДля работы с дисбалансом классов я использовала следующие методы:\n1. **Методы балансировки данных:**\n   - **SMOTE (Synthetic Minority Oversampling Technique):** Генерация новых примеров миноритарного класса.\n   - **Random Oversampling:** Увеличение числа примеров миноритарного класса за счет дублирования.\n   - **Random Undersampling:** Уменьшение числа примеров мажоритарного класса.\n2. **Метрики качества:**\n     - **Precision (Точность):** Показывает, насколько надёжны положительные предсказания модели. Важна для минимизации ложных срабатываний.\n     - **Recall (Полнота):** Оценивает способность модели находить все случаи миноритарного класса (в данном случае, мошенничества). Критична для минимизации пропущенных случаев.\n     - **F1-Score:** Гармоническое среднее между Precision и Recall, которое отражает баланс между данными метриками.\n     - **AUPRC (Area Under the Precision-Recall Curve):** Основной показатель качества модели в задачах с дисбалансом, поскольку он измеряет способность модели корректно обнаруживать миноритарный класс при различных порогах.\n\n## Используемые модели\n\n1. **Логистическая регрессия**\n2. **Случайный лес**\n\nКаждая модель обучается как на исходных данных, так и на данных, преобразованных с помощью методов балансировки.\n\n## Инструкции по запуску\n\nВ проекте уже обученные лучшие модели хранятся в директории **`models/`**. Это позволяет использовать их для предсказаний без необходимости повторного обучения. Ниже приведены шаги, которые помогут вам настроить среду и начать работать с сохраненными моделями.\n\n---\n\n### Предварительные требования\nДля запуска проекта необходимы следующие библиотеки Python:\n```bash\nnumpy\npandas\nmatplotlib\nseaborn\nscikit-learn\nimbalanced-learn\n```\n\n### Установка зависимостей\n\n1. Склонируйте репозиторий проекта:\n\n2. Установите зависимости из файла `requirements.txt`:\n   ```bash\n   pip install -r requirements.txt\n   ```\n\n---\n\n### Структура проекта\n\nПроект имеет следующую структуру:\n\n```\nFraudDetection/\n│\n├── README.md               # Описание проекта\n├── FraudDetection.ipynb    # Ноутбук с анализом и моделями\n├── requirements.txt        # Список зависимостей\n└── models/                 # Сохраненные модели\n    ├── randov_rf_model.joblib  # Random Forest с Random Oversampling\n    ├── imb_rf_model.joblib        # Random Forest с несбалансированными данными\n    └── smote_rf_model.joblib  # Random Forest с SMOTE\n```\n---\n\n### Загрузка и использование обученных моделей\n\nЧтобы загрузить и использовать одну из сохраненных моделей, выполните следующие шаги:\n\n#### **Шаг 1: Импортируйте необходимые библиотеки**\n\n```python\nimport joblib\nimport numpy as np\nimport pandas as pd\n```\n\n#### **Шаг 2: Загрузите модель**\n\nЗагрузите одну из моделей из директории `models/`. Например, Random Forest, обученную на данных, полученных с помощью Random Oversampling:\n\n```python\n# Путь к модели\nmodel_path = 'models/randov_rf_model.joblib'\n\n# Загрузка модели\nmodel = joblib.load(model_path)\nprint(\"Модель успешно загружена!\")\n```\n\n#### **Шаг 3: Выполните предсказания**\n\nИспользуйте загруженную модель для выполнения предсказаний:\n\n```python\n# Предсказание классов\npredictions = model.predict(data)\nprint(\"Predictions:\", predictions)\n\n# Вероятности принадлежности к классам\nprobabilities = model.predict_proba(data)\nprint(\"Probabilities:\", probabilities)\n```\n\n---\n\n### Датасет\n\nДля данного проекта используется датасет **\"Credit Card Fraud Detection\"**, который содержит транзакции кредитных карт. \n\nДатасет доступен на Kaggle: [Credit Card Fraud Detection](https://www.kaggle.com/datasets/mlg-ulb/creditcardfraud).\n\n### Запуск ноутбука\n1. Скачайте датасет и поместите его в директорию проекта.\n2. Откройте ноутбук `FraudDetection.ipynb`.\n3. Выполните ячейки для загрузки данных, обучения моделей и оценки их качества.\n\n## Результаты\n\nВ рамках проекта были протестированы различные модели и методы балансировки данных для задачи обнаружения мошеннических транзакций. \nУ лучших моделей получились следующие результаты:\n- Random Forest с Random Oversampling (Precision = 0.97, Recall = 0.73, AUPRC = 0.82)\n- Random Forest с несбалансированными данными (Precision = 0.99, Recall = 0.71, AUPRC = 0.82)\n- Random Forest с SMOTE (Precision = 0.91, Recall = 0.77, AUPRC = 0.81)\n\nСравнение с Dummy Model (Baseline):\n\nМодель, которая предсказывает все объекты как положительный класс, показала следующие результаты:\n- AUPRC = 0.50, Precision ≈ 0.002, F1 Score ≈ 0.003\n  \nЭто соответствует случайному угадыванию. Все протестированные модели значительно превзошли Dummy Model, что подтверждает их практическую ценность для задачи обнаружения мошенничества.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fskytecat%2Ffrauddetection","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fskytecat%2Ffrauddetection","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fskytecat%2Ffrauddetection/lists"}