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

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

Часть 1: Обнаружение мошенничества с кредитными картами: углубленное исследование: подготовка данных

Часть 2: Обнаружение мошенничества с кредитными картами: углубленное исследование: оценка модели классификации

Часть 3: Обнаружение мошенничества с кредитными картами: логистическая регрессия

Предположим, что из P art 3, логистическая модель будет нашей базовой моделью, и мы будем сравнивать производительность каждой модели с ней.

Машины опорных векторов:

Фундаментальная идея, лежащая в основе этого, состоит в том, чтобы установить максимально возможные отступы между границей решения, которая разделяла бы два класса и обучающие экземпляры.

Важно отметить, что, в отличие от классификатора логистической регрессии, SVM-классификатор не выводит вероятности

Гиперпараметр для SVM:

C (Регуляризация): C - это параметр штрафа, который представляет неправильную классификацию или термин ошибки. Он сообщает оптимизации SVM, насколько допустима ошибка. Вот как вы можете контролировать компромисс между границей принятия решения и ошибочной классификацией.

гамма: параметр ядра Гаусса (для обработки нелинейной классификации).

Ядро: управляет способом проецирования входных переменных. Наиболее распространенное ядро ​​- RGF. Это в основном полезно в задачах нелинейного разделения.

Заявление об ограничении ответственности: высокое значение C может привести к переобучению набора данных.

Давайте обучим машину опорных векторов на данных с недостаточной выборкой и посмотрим на ее производительность:

from sklearn.svm import SVC
param_grid = {‘C’: [0.1,1, 10, 100], 
               ‘gamma’: [1,0.1,0.01,0.001],
                 ’kernel’: [‘rbf’, ‘poly’, ‘sigmoid’]
}
grid = GridSearchCV(SVC(),param_grid,refit=True,verbose=3, n_jobs= -1, cv= 3)
#Fit the gridsearchCV on undersampled dataset
grid.fit(X_train_us,y_train_us)
grid.estimator

Поиск по сетке исследовал различные комбинации гиперпараметров машины опорных векторов и обучил каждую модель 3 раза (так как мы используем трехкратную перекрестную проверку), и после обучения модели на выборочном наборе данных мы нашли лучшие параметры как

predict_us = grid.predict(X_test_us)
model_performance(y_test_us,predict_us)

Что касается производительности модели, мы получили оценку отзыва 94%. Это означает, что 94% всех транзакций мошенничества правильно предсказываются классификационной моделью. Это означает, что отзыв увеличился на 4,44% по сравнению с нашей базовой моделью. Полученная нами оценка точности составляет 95,9%.

Одним из недостатков модели SVM является ее чрезвычайно высокая временная сложность. Это означает, что на огромных наборах данных он работает ужасно медленно. Поэтому мы будем использовать SGDClassifier для классификации набора данных с избыточной дискретизацией. Мы собираемся применить стохастический градиентный спуск для обучения линейного классификатора SVM. Он не сходится так быстро, как LinearSVC, но может быть полезен для обработки больших наборов данных.

Теперь давайте выполним SGDClassifier для данных с избыточной выборкой и посмотрим на его производительность:

from sklearn.linear_model import SGDClassifier
clf = SGDClassifier()
clf.fit(X_train_os,y_train_os)
predict_os = clf.predict(X_test_os)
model_performance(y_test_os,predict_os)

Что касается производительности модели для набора данных с избыточной выборкой, мы наблюдали падение производительности при использовании SGDClassifier. мы получили показатель запоминаемости 90%. Это означает, что 90% всех транзакций мошенничества правильно предсказываются классификационной моделью.

Дерево решений:

Дерево решений универсально, оно может решать задачи как классификации, так и регрессии и способно подбирать сложные наборы данных. Они остаются фундаментальным компонентом модели случайного леса.

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

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

Примесь Джини и энтропия являются критерием выбора деревьев решений. По сути, они помогают вам определить подходящую точку разделения для корневых узлов в деревьях классификации. Деревья решений разделяются между функцией и соответствующей точкой разделения, что приводит к наибольшему приросту информации (IG) для данного критерия (в данном примере Джини или энтропия). В общих чертах мы можем определить получение информации как разницу между информацией до (родительский узел) и после разделения (дочерний узел).

Индекс Джини показывает, что точка данных, которую мы случайно выбрали для разделения из набора данных, неправильно помечена. Он используется для КОРЗИНЫ и дает более точное значение и меньше, чем индекс энтропии, который является его лучшим качеством, маленькие значения показывают меньше примесей.

Принимая во внимание, что энтропия часто используется как мера примеси: энтропия набора равна нулю, когда он содержит экземпляры только одного класса.
Примесь Джини умеренно быстрее и имеет тенденцию изолировать наиболее часто встречающийся класс в своей собственной ветви tree, в то время как энтропия имеет тенденцию производить слегка сбалансированные деревья.

Гиперпараметры для дерева решений:

критерий: функция для измерения качества раскола. Поддерживаемые критерии: «Джини» для примеси Джини и «энтропия» для получения информации.

max_depth: максимальная глубина дерева.

Давайте построим дерево решений для данных с недостаточной выборкой и посмотрим на его эффективность:

from sklearn.tree  import DecisionTreeClassifier
tree_cf = DecisionTreeClassifier(max_depth=3)
param_grid = { 'criterion':['gini','entropy'],'max_depth': np.arange(2, 15)}
dtree_gscv = GridSearchCV(tree_cf, param_grid, cv=3,verbose= 2)
dtree_gscv.fit(X_train_us,y_train_us)
dtree_gscv.best_params_

Поиск по сетке исследовал различные комбинации гиперпараметров Дерева решений и обучил каждую модель 3 раза, и после обучения модели на выборочном наборе данных мы нашли лучшие гиперпараметры: критерии выбора в виде энтропии с максимальной глубиной 12

model_performance(y_test_us, predict_tree_us)

Что касается производительности модели, мы получили отличную оценку запоминания 96,9%. Это говорит о том, что 96,9% от общей суммы мошеннических транзакций правильно предсказывается моделью. Это примерно на 7,33% больше отзыва по сравнению с базовой логистической регрессией. В целом, все остальные показатели также выглядят хорошо.

Давайте построим дерево решений для данных с избыточной выборкой и посмотрим на его эффективность:

param_grid = { 'criterion':['gini','entropy'],
                'max_depth': np.arange(2, 20)
}
dtree_gscv_os = GridSearchCV(tree_cf_os , param_grid, cv=3,verbose= 2)
dtree_gscv_os.fit(X_train_os,y_train_os)
dtree_gscv_os.best_params_

Поиск по сетке исследовал различные комбинации гиперпараметров Дерева решений и обучил каждую модель 3 раза, и после обучения модели на выборочном наборе данных мы нашли лучшие гиперпараметры: критерии выбора в виде энтропии с максимальной глубиной 19

predict_tree_os= dtree_gscv_os.predict(X_test_os)
model_performance(y_test_os, predict_tree_os)

Что касается производительности модели, мы получили 100% отличную оценку отзыва. Это означает, что модель правильно предсказывает 100% всех транзакций мошенничества. Это означает увеличение отзыва на 11% по сравнению с базовой логистической регрессией. Он абсолютно эффективно работал с набором данных с передискретизацией, поскольку в нем даже нет ни одного ложноотрицательного результата.

Случайный лес:

Это совокупность деревьев решений, обычно обучаемых с помощью метода упаковки.

Обучение группы классификаторов дерева решений, каждый на независимом случайном подмножестве обучающей выборки. Чтобы сгенерировать прогнозы, вы получаете прогнозы для всех изолированных деревьев, а затем прогнозируете класс, который получит наибольшее количество голосов.

Гиперпараметр для случайного леса:

n_estimators: количество деревьев, которое вы хотите построить, прежде чем проводить максимальное голосование или средние значения прогнозов.

критерий: функция для измерения качества раскола. Поддерживаемые критерии: «Джини» для примеси Джини и «энтропия» для получения информации.

Давайте выполним случайный лес для данных с недостаточной выборкой и посмотрим на его эффективность:

from sklearn.ensemble import RandomForestClassifier
rf_us = RandomForestClassifier()
param_grid = [{'n_estimators': [5,10, 25,50,100,250,500,1000],
               'criterion':['gini','entropy']
}]
rf_grid_us = GridSearchCV(rf_us, param_grid= param_grid, verbose=2, cv =3)
best_rf_grid_us = rf_grid_us.fit(X_train_us, y_train_us)
best_rf_grid_us.best_params_

Поиск по сетке исследовал различные комбинации гиперпараметров дерева решений и обучил каждую модель три раза, и после обучения модели на выборочном наборе данных мы нашли лучшие гиперпараметры: критерии выбора, такие как Джини, и он обучил ансамбль из 25 классификаторов дерева решений.

pred_us =  best_rf_grid_us.predict(X_test_us)
model_performance(y_test_us, pred_us)

Что касается производительности модели, мы получили отличную оценку отзыва (94%). Это означает, что модель правильно спрогнозирует 94% от общего числа мошеннических транзакций. Это примерно на 4,4% больше отзыва по сравнению с базовой логистической регрессией. Но мы видим снижение производительности по сравнению с деревом решений, и это, возможно, не так сильно беспокоит, потому что метод упаковки обычно снижает смещение и дисперсию.

Теперь давайте сделаем то же самое с данными с избыточной выборкой и посмотрим на их эффективность:

rf_os = RandomForestClassifier()
param_grid = [{'n_estimators': [5,10,25,50,100,250,300],
'criterion':['gini','entropy']}
]
rf_grid_os = GridSearchCV(rf_os, param_grid= param_grid, verbose=2, cv =3)
best_rf_grid_os = rf_grid_os.fit(X_train_os, y_train_os)
best_rf_grid_os.best_params_

Поиск по сетке исследовал различные комбинации гиперпараметров дерева решений и обнаружил лучшие гиперпараметры: критерии выбора в виде Джини и обучение ансамбля из 50 классификаторов дерева решений.

pred_os =  best_rf_grid_os.predict(X_test_os)
model_performance(y_test_os, pred_os)

Мы получили 100% отличную оценку отзыва. Это означает, что модель правильно предсказывает 100% всех транзакций мошенничества. Это означает увеличение отзыва на 11% по сравнению с базовой логистической регрессией. Он, несомненно, эффективно работал с набором данных с передискретизацией, поскольку в нем нет ни одного ложноотрицательного результата. Мы уверены, что модель случайного леса будет лучше работать при классификации мошеннических транзакций.

Нейронная сеть:

Нейронные сети обычно организованы по слоям. Слои состоят из ряда взаимосвязанных «узлов», которые содержат «функцию активации». Шаблоны представляются в сеть через «входной уровень», который связывается с одним или несколькими «скрытыми слоями», где фактическая обработка выполняется через систему взвешенных «соединений». Затем скрытые слои связываются с «выходным слоем».

Мы будем строить нейронную сеть с несколькими фильтрами и использовать relu во входном плотном слое и функцию активации сигмоида для выходного плотного слоя.

import tensorflow as tf
import numpy as np
from tensorflow import keras
model = tf.keras.Sequential([
keras.layers.Dense(units=10, input_shape=X_train_os.shape[1:], activation ='relu'),
keras.layers.Dense(1, activation= 'sigmoid')
])
model.summary()

model.compile(loss=’binary_crossentropy’,
optimizer=’sgd’,
metrics=[‘accuracy’])
model.fit(X_train_os, y_train_os, epochs= 50)
pred_os = model.predict(X_test_os)
y_pred_bool = np.round(pred_os)
pred_os = y_pred_bool.tolist()
model_performance(y_test_os, pred_os)

Мы использовали двоичную функцию кросс-энтропийных потерь с оптимизатором стохастического градиентного спуска и обучаем ее в течение 50 эпох.

Что ж, даже базовая нейронная сеть показала отличные результаты со 100% запоминанием и хорошими общими показателями.

Подведение итогов моделей:

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

Я бы предположил, что Случайный лес является достаточно хорошей моделью для выполнения классификации мошенничества в наборе данных с избыточной выборкой. Поскольку он отвечает требованиям и ограничениям проекта и достаточно квалифицирован для имеющихся ресурсов. Мы заметили, что на тестовом наборе данных он работает на 11% лучше, чем наша базовая модель, и дает лучшие результаты, чем нейронные сети.

Вывод:

Я надеюсь, что эта статья была для вас полезной и предоставила достаточно информации о подготовке данных, метрике классификации и выборе модели для решения тематических исследований.