Проблема косинусного сходства

Вопрос или проблема

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

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). Я хотел бы классифицировать сомнительные данные в зависимости от того, ближе ли они к единице или нулю. Подходит ли вышеуказанная техника?

Заранее спасибо.

Ответ или решение

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

Подход и Примечания:

  1. Обработка Данных:
    Вы правильно используете fetch_data, preprocess_data_cls и scale_features для подготовки данных. Убедитесь, что в процессе предобработки вы учитываете все аспекты, такие как отсутствие значений, нормализация и кодирование категориальных признаков, чтобы избежать смещения результата.

  2. Косинусное Сходство:
    Косинусное сходство – это отличный метод для определения схожести между векторами, особенно в задачах, где важно учитывать направление векторов, а не их размеры. В данном случае он может помочь определить, насколько подозрительные транзакции похожи на транзакции с признаками "мошенничества" и "немошенничества".

  3. Метод Классификации:
    Ваш метод основан на нахождении наиболее похожей транзакции из объединенного набора данных с помощью np.argmax. Этот подход может работать, но он может быть чувствителен к выбросам и шуму в данных. Рассмотрите возможность использования более продвинутых методов машинного обучения, таких как kNN (k-Nearest Neighbors), которые могут предоставить более устойчивую классификацию, анализируя несколько ближайших соседей, а не только одного.

  4. Классификация:
    После вычисления косинусного сходства, вы не просто должны найти максимальное значение, но и учитывать распределение соседей. Например:

    • Если наьюдится 3 ближайших соседа, вы могли бы использовать голосование по их меткам, чтобы получить более надежный результат.
    • Это также позволит вам более точно определять границу между мошенническими и нет мошенническими транзакциями.
  5. Оценка Модели:
    После классификации обязательно пройдитесь по процессу оценки результатов. Используйте метрики, такие как точность (accuracy), полнота (recall), F1-мера и ROC-AUC, чтобы получить детальную информацию о производительности вашей модели. Это позволит вам понять, как хорошо классифицируются ваши подозрительные транзакции и требуются ли доработки.

Заключение:

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

Если у вас возникнут еще вопросы или нужна помощь с кодом, не стесняйтесь обращаться!

Оцените материал
Добавить комментарий

Капча загружается...