Цель: Выявление и прогнозирование мошеннических транзакций
По данным Forbes, убытки от мошенничества, понесенные банками и продавцами по всем кредитным, дебетовым и предоплаченным платежным картам общего назначения и частным торговым маркам, выпущенным во всем мире, достигли 21,84 млрд долларов США в 2015 году, при этом на Соединенные Штаты (США) приходится почти два -пятых (38,7%) от общей суммы в 8,45 млрд долларов. Но к 2020 году он может превысить 12 миллиардов долларов, если отразится глобальный процентный рост в 45%.
Набор данных:
- Источник Kaggle.com; данные предоставлены Вестой
- Форма (размер): 590540 записей, 433 функции
- Подробнее (https://www.kaggle.com/c/ieee-fraud-detection/data)
- Проблема: бинарная классификация
Код: https://github.com/aabdygaziev/capstone-project
Проблемы:большой набор данных, много пропущенных значений, несбалансированные данные и выбор функций.
Мой подход к проблеме:
Используемые инструменты:
- питон
- панды, scikit-learn, imblearn, mlxtend, lightgbm
Методологии:
- Синтетическое меньшинство по методу выборки — SMOTE
- Методы вменения — SimpleImputer
- Выбор функции
Актуальность проблемы
Самые большие проигрыши
Очистка данных. Процесс очистки очень важен. Прежде чем проводить анализ и строить модель, очистите данные. В моем случае я установил пороговый уровень 20% для отсутствующих значений. Если функция имеет более 20% отсутствующих значений, эта функция удаляется. Остальным, удовлетворяющим требованию, присваиваются их значения. Кроме того, удаляются выбросы, лежащие в квантилях 0,025 и 0,975. Собрано 99,5% данных.
Выбор функций:
После внедрения методов выбора признаков эти признаки оказались важными:
- C1-C14 (подсчет, например, сколько адресов связано с платежной картой и т. д. Фактическое значение маскируется)
- TransactionAmt (сумма транзакции)
- TransactionDT (разница во времени от заданной эталонной даты и времени)
- карта1 — карта6 (информация о платежной карте, такая как тип карты, категория карты, банк-эмитент, страна)
- D1-D15: дельта времени, например, количество дней между предыдущей транзакцией.
- Vxxx: Vesta разработала богатые функции, включая ранжирование, подсчет и другие отношения сущностей.
Несбалансированный набор данных. Этот набор данных очень несбалансирован. Только 3,5% отмечены 1 (мошенничество), а 96,5% — 0 (не мошенничество).
Важно передискретизировать ваши целевые данные, иначе ваша модель будет соответствовать мажоритарному классу и будет работать плохо.
SMOTE — метод синтетического меньшинства по выборке. Это подход с избыточной выборкой, при котором класс меньшинства подвергается избыточной выборке путем создания «синтетических» примеров, а не путем избыточной выборки с заменой.
Если вы хотите узнать больше о SMOTE: https://www.cs.cmu.edu/afs/cs/project/jair/pub/volume16/chawla02a-html/node6.html#SECTION000420000000000000000
Моделирование
Во время проекта я пытался подогнать несколько моделей:
- RandomOverSampler, LinearSVC (ресэмплинг, модель) — AUC 0,52
- BalancedRandomForestClassifier, — AUC 0,54
- SMOTE, RandomForestClassifier — AUC 0,71
- SMOTE, классификатор XGB — AUC 0,63
- SMOTE, Stacked Generalizer (уровень 2) — AUC 0,73
- SMOTE, GridSearch, LightGBM.LGBMClassifier — AUC 0,97
Лучшая модель: SMOTE, GridSearch, LightGBM.LGBMClassifier — AUC 0,97
Дерево решений модели: LightGBM.LGBMClassifier
Основные выводы из этого проекта:
- Иметь конкретную цель. Какую проблему вы решаете?
- Изучите свою проблему: с какими проблемами столкнулись другие люди, когда пытались решить эту проблему? (например, «несбалансированный набор данных»)
- Узнайте о своем наборе данных; изучите, какая информация у вас есть и что вы можете с ней сделать
- Проверьте свои данные: отсутствующие значения, нерелевантные функции, дубликаты и т. д.
- Инжиниринг данных: попробуйте уменьшить размер ваших данных
- Всегда старайтесь создавать свою модель с минимальным количеством функций.
- Проверьте свои результаты; настройте параметры для лучшего результата и протестируйте