Вопрос или проблема
Я новичок в машинном обучении и пытаюсь реализовать несколько небольших проектов. У меня есть этот фрагмент кода.
import pandas as pd
import json
import logging
import numpy as np
import matplotlib.pyplot as plt
from utils.utils import fetch_data, preprocess_data_cls, scale_features
from sklearn.metrics.pairwise import cosine_similarity
with open('configs/config_nn.json', 'r', encoding='utf-8') as f:
config = json.load(f)
DATA_PATH = config["DATA_PATH_TRN"]
RANDOM_STATE = config["RANDOM_STATE"]
ARGUMENT = 'suspicious_nn'
fraud_nn_df = fetch_data('fraud_nn')
no_fraud_nn_df = fetch_data('no_fraud_nn')
suspicious_nn_df = fetch_data('suspicious_nn')
conc_df = pd.concat([fraud_nn_df.drop(columns=['label']), no_fraud_nn_df.drop(columns=['label'])], ignore_index=True)
conc_labels = pd.concat([fraud_nn_df['label'], no_fraud_nn_df['label']], ignore_index=True)
conc_prp, _ = preprocess_data_cls(conc_df, 'TRNC')
conc_prp_scaled = scale_features(conc_prp)
suspicious = suspicious_nn_df.drop(columns=['label'])
suspicious_prp, _ = preprocess_data_cls(suspicious, 'SPS')
suspicious_prp_scaled = scale_features(suspicious_prp)
suspicious_cosine_sim = cosine_similarity(suspicious_prp_scaled, conc_prp_scaled)
suspicious_nn_labels = []
for i in range(suspicious_nn_df.shape[0]):
most_similar_index = np.argmax(suspicious_cosine_sim[i])
suspicious_nn_labels.append(conc_labels.iloc[most_similar_index])
suspicious_nn_df['label'] = suspicious_nn_labels
print(suspicious_nn_df.head())
У меня есть три датафрейма: один для мошеннических транзакций (метка 1), один для транзакций без мошенничества (метка 0) и один для сомнительных транзакций (метка -1). Я хотел бы классифицировать сомнительные данные в зависимости от того, ближе ли они к единице или нулю. Подходит ли вышеуказанная техника?
Заранее спасибо.
Ответ или решение
Ваша задача касается классификации подозрительных транзакций с помощью косинусного сходства. Подход, который вы описали, в целом может быть целесообразным, но важно учесть несколько моментов, чтобы улучшить его точность и эффективность.
Подход и Примечания:
-
Обработка Данных:
Вы правильно используетеfetch_data
,preprocess_data_cls
иscale_features
для подготовки данных. Убедитесь, что в процессе предобработки вы учитываете все аспекты, такие как отсутствие значений, нормализация и кодирование категориальных признаков, чтобы избежать смещения результата. -
Косинусное Сходство:
Косинусное сходство – это отличный метод для определения схожести между векторами, особенно в задачах, где важно учитывать направление векторов, а не их размеры. В данном случае он может помочь определить, насколько подозрительные транзакции похожи на транзакции с признаками "мошенничества" и "немошенничества". -
Метод Классификации:
Ваш метод основан на нахождении наиболее похожей транзакции из объединенного набора данных с помощьюnp.argmax
. Этот подход может работать, но он может быть чувствителен к выбросам и шуму в данных. Рассмотрите возможность использования более продвинутых методов машинного обучения, таких как kNN (k-Nearest Neighbors), которые могут предоставить более устойчивую классификацию, анализируя несколько ближайших соседей, а не только одного. -
Классификация:
После вычисления косинусного сходства, вы не просто должны найти максимальное значение, но и учитывать распределение соседей. Например:- Если наьюдится 3 ближайших соседа, вы могли бы использовать голосование по их меткам, чтобы получить более надежный результат.
- Это также позволит вам более точно определять границу между мошенническими и нет мошенническими транзакциями.
-
Оценка Модели:
После классификации обязательно пройдитесь по процессу оценки результатов. Используйте метрики, такие как точность (accuracy), полнота (recall), F1-мера и ROC-AUC, чтобы получить детальную информацию о производительности вашей модели. Это позволит вам понять, как хорошо классифицируются ваши подозрительные транзакции и требуются ли доработки.
Заключение:
Ваш текущий метод является хорошей отправной точкой, и может быть доработан для повышения точности. Учитывая положительные стороны и недостатки метода, вам следует рассмотреть возможность использования более сложных алгоритмов и методов оценки для достижения более надежных результатов в классификации подозрительных транзакций.
Если у вас возникнут еще вопросы или нужна помощь с кодом, не стесняйтесь обращаться!