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

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

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

Звучит круто, правда? Давайте погрузимся!

Шаг 1. Импортируйте необходимые библиотеки:

Во-первых, вам нужно импортировать необходимые библиотеки, включая numpy, pandas, matplotlib и scikit-learn.

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report
from sklearn.ensemble import RandomForestClassifier

Шаг 2. Загрузите данные:

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

df = pd.read_csv('creditcard.csv')

Шаг 3. Изучите данные:

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

# Explore the data
print(df.head())
print(df.describe())
print(df.info())

Шаг 4. Предварительно обработайте данные:

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

# Preprocess the data
# Remove the Time column as it is not useful for classification
df = df.drop('Time', axis=1)

# Normalize the Amount column
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
df['Amount'] = scaler.fit_transform(df['Amount'].values.reshape(-1, 1))

# Split the data into features and labels
X = df.drop('Class', axis=1)
y = df['Class']

# Split the data into training and validation sets
X_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.2, stratify=y, random_state=42)

В этом примере предварительной обработки мы сначала удаляем столбец Time из набора данных, так как он бесполезен для классификации. Затем мы нормализуем столбец Amount с помощью StandardScaler, который масштабирует данные так, чтобы среднее значение равнялось 0, а стандартное отклонение равнялось 1. Это важный шаг предварительной обработки, поскольку он гарантирует, что все функции имеют одинаковые масштабы, что может помочь повысить производительность анализа. модель машинного обучения.

Затем мы разделяем данные на функции (X) и метки (y). Фрейм данных X содержит все столбцы, кроме столбца Class, который является целевой переменной, которую мы пытаемся предсказать. Фрейм данных y содержит только столбец Class.

Наконец, мы разделили данные на наборы для обучения и проверки, используя train_test_split из scikit-learn. Мы используем размер теста 0,2, что означает, что 20% данных используются для проверки. Мы также используем стратифицированную выборку, чтобы гарантировать, что доля мошеннических и немошеннических транзакций одинакова как в обучающей, так и в проверочной выборке. Это важно, поскольку гарантирует, что модель машинного обучения обучается на репрезентативной выборке данных.

Шаг 5. Определите модель:

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

# Define the model
model = RandomForestClassifier(n_estimators=100)

Шаг 6. Обучите модель:

Как только модель определена, вам необходимо обучить ее, используя предварительно обработанные данные.

# Train the model
model.fit(X_train, y_train)

Шаг 7. Оцените модель:

После обучения модели необходимо оценить ее производительность на проверочном наборе.

# Evaluate the model on the validation set
y_pred = model.predict(X_val)
print(classification_report(y_val, y_pred))

Шаг 8. Протестируйте модель:

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

# Test the model on new data
# Load the new data
new_data = pd.read_csv('new_data.csv')

# Preprocess the new data
new_data = new_data.drop('Time', axis=1)
new_data['Amount'] = scaler.transform(new_data['Amount'].values.reshape(-1, 1))
X_new = new_data.drop('Class', axis=1)
y_new = new_data['Class']

# Make predictions on the new data
y_pred = model.predict(X_new)

# Evaluate the performance on the new data
print(classification_report(y_new, y_pred))

В этом тестовом примере мы сначала загружаем новые данные из CSV-файла, используя pd.read_csv(). Затем мы предварительно обрабатываем новые данные, удаляя столбец Time и нормализуя столбец Amount, используя тот же объект scaler, который мы использовали для обучающих данных.

Затем мы разделяем новые данные на функции (X_new) и метки (y_new). Затем мы используем метод model.predict() для прогнозирования новых данных. Наконец, мы оцениваем производительность модели на новых данных, используя classification_report() из scikit-learn. Этот метод печатает отчет, который включает такие показатели, как точность, полнота и оценка F1 как для мошеннических, так и для немошеннических классов.

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

Вот и все! Этот базовый пример должен дать вам представление о том, как использовать машинное обучение для обнаружения мошенничества с помощью Python.