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

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

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

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

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

Это не совсем проблема классификации, потому что мы пытаемся получить экземпляры из группы «негативов».

Это не совсем кластеризация, которая обычно не контролируется, потому что мы уже знаем кластер (клиенты карт лояльности).

Я думал об использовании kNN. Но я действительно не знаю, какие у меня есть варианты здесь.

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

Итак, что вы хотите, так это обнаружить те новые экземпляры, которые не являются выбросами?

OSainz 22.05.2019 13:41

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

DPM 22.05.2019 14:56
Анализ настроения постов в Twitter с помощью Python, Tweepy и Flair
Анализ настроения постов в Twitter с помощью Python, Tweepy и Flair
Анализ настроения текстовых сообщений может быть настолько сложным или простым, насколько вы его сделаете. Как и в любом ML-проекте, вы можете выбрать...
Сертификатная программа "Кванты Python": Бэктестер ансамблевых методов на основе ООП
Сертификатная программа "Кванты Python": Бэктестер ансамблевых методов на основе ООП
В одном из недавних постов я рассказал о том, как я использую навыки количественных исследований, которые я совершенствую в рамках программы TPQ...
3
2
135
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

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

Есть две основные идеи (из статьи, на которую я ссылаюсь ниже):

  1. Вы преобразуете векторы признаков ваших данных с положительной меткой (клиенты с картой) в векторное пространство с меньшей размерностью (например, с помощью PCA). Затем можно рассчитать распределение вероятностей для полученных преобразованных данных и узнать, относится ли новый клиент к тому же статистическому распределению или нет. Вы также можете вычислить расстояние нового клиента до центроида преобразованных данных и решить, используя стандартное отклонение распределения, является ли оно по-прежнему достаточно близко.

  2. Подход машинного обучения: вы обучаете сеть автокодировщика на данных клиенты с картой. У автокодировщика есть узкое место в его архитектуре. Он сжимает входные данные в новый вектор признаков с меньшей размерностью, а затем пытается восстановить входные данные из этого сжатого вектора. Если обучение выполнено правильно, ошибка реконструкции для входных данных, похожих на набор данных клиенты с картой, должна быть меньше, чем для входных данных, которые не похожи на него (надеюсь, это клиенты, которые не хотят карту).

Взгляните на это руководство для начала: https://towardsdatascience.com/how-to-use-machine-learning-for-anomaly-detection-and-condition-monitoring-6742f82900d7

Оба метода потребуют сначала стандартизировать атрибуты.

Спасибо, первый подход выглядит многообещающе. Это просто и понятно для меня. Мне просто нужно проработать детали с какой-нибудь библиотекой.

DPM 22.05.2019 15:11

И попробуйте одноклассовая машина опорных векторов.

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

Или просто используйте расстояния до ближайшего соседа для ранжирования пользователей.

Другие вопросы по теме