Вопрос или проблема
У меня есть признак, который имеет определенные категориальные значения, например (Технологии, Оборудование, Программное обеспечение, Маркетинг, События и т.д.). На основе этого и некоторых других признаков я пытаюсь классифицировать набор данных на 2 категории: ЯвляетсяПрограммнойСистемой или НеЯвляетсяПрограммнойСистемой. В этом случае не приведет ли это к снижению точности, поскольку я подаю категорию самой в данные и пытаюсь предсказать то же самое.
Используя Random Forest/XGB.
У вас две проблемы:
- Техническая проблема: Как сказал 10xAI в комментарии, если целевая переменная также принадлежит признакам, то модель должна очень легко предсказать каждую инстанцию правильно. Поэтому вы должны получить идеальную производительность на тестовом наборе. Модель машинного обучения не беспокоит “циклическая зависимость”, она использует любой хороший показатель, который она получает в качестве признака. Поскольку вы упоминаете о снижении точности, это означает, что где-то в процессе есть ошибка.
- Семантическая проблема: какую проблему вы пытаетесь решить с этой настройкой МЛ? Если цель заключается в том, чтобы различать программное обеспечение и непограммное обеспечение, и вы вводите категорию “программное обеспечение”, то обучение модели МЛ бессмысленно. Вы можете получить тот же результат гораздо более эффективно с помощью простого условия:
для каждой инстанции:
если инстанция.категория == "программное обеспечение":
инстанция.ответ="программное обеспечение"
иначе:
инстанция.ответ="не программное обеспечение"
Ответ или решение
При анализе циклической зависимости между классом признака и целевым классом в контексте машинного обучения, важно обратить внимание на несколько ключевых аспектов, касающихся вашей задачи классификации.
1. Техническая проблема: Циклическая зависимость
Ваша ситуация предполагает, что один из признаков (категория) включает в себя целевую переменную (IsSoftwareSystem). Это создает очевидную циклическую зависимость, которая может привести к перфекционизму модели. Являясь частью входных данных, целевой признак фактически становится "золотым стандартом", что делает задачу предсказания практически тривиальной. Это может вызывать завышенные показатели точности, но не отражает реальной способности модели к обобщению.
Если модель использует категорию "software" для предсказания класса, то она, безусловно, должна показывать высокую точность, поскольку данные самими собой по своей природе уже эвалируют результат. Однако, если вы наблюдаете снижение точности, это может указывать на несколько проблем:
- Ошибки в процессах подготовки данных: Проверьте, нет ли несоответствий между обучающим и тестовым наборами данных. Возможна ситуация, когда модель видела категорию "software" только на обучающей выборке, а на тестовой — нет, что негативно скажется на ее производительности.
- Переобучение (Overfitting): Если модель слишком хорошо подстраивается под обучающую выборку, это может привести к тому, что она не будет эффективно предсказывать на новых, невидимых данных.
2. Семантическая проблема: Цель классификации
Из вашей формулировки становится ясно, что задача заключается в классификации объектов на "программные" и "непрограммные". Если у вас есть явный признак, указывающий на "software", вопрос о необходимости использования сложных моделей машинного обучения вызывает сомнения.
Если цель — разделить данные на два класса, где один из классов уже представлен в ваших данных, то использование условных операторов будет более эффективным и устойчивым решением:
for each instance:
if instance.category == "software":
instance.answer = "software"
else:
instance.answer = "non-software"
Такой подход не потребует сложной обработки и вычислений, и, вероятно, сразу даст вам точность, близкую к 100%, не прибегая к сложным методам, таким как Random Forest или XGBoost.
Заключение
Использование циклической зависимости между признаком и целевой переменной вводит в заблуждение как с точки зрения модели, так и с точки зрения бизнес-логики. Необходимо более чётко определить задачи и рассмотреть использование более простых, но эффективных решений для достижения ваших целей. В конечном итоге, ваша цель должна быть ясной и не предполагать излишней сложности, если задача может быть решена более простыми методами.