Вопрос или проблема
Я пытаюсь построить регрессионное дерево с 70 атрибутами, где бизнес-команда хочет зафиксировать первые два уровня, а именно страна и тип продукта. Для достижения этой цели у меня есть два предложения:
-
Построить отдельное дерево для каждой комбинации страна и тип продукта и использовать подмножества данных соответственно, передавая их в соответствующее дерево для предсказания. Видел здесь в комментариях. У меня 88 уровней в стране и 3 уровня в типе продукта, так что получится 264 дерева.
-
Построить базовое дерево с двумя переменными, а именно страна и тип продукта, с соответствующим значением cp для генерации всех комбинаций в качестве листовых узлов (264). Построить второе дерево с остальными переменными и наложить одно дерево на другое как одно решение.
Я не думаю, что первый способ является правильным. Кроме того, я застрял на том, как наложить деревья во втором подходе, даже если это не самый правильный способ, мне было бы интересно узнать, как это сделать.
Пожалуйста, подскажите мне, как подойти к этой проблеме.
В зависимости от того, какой алгоритм дерева вы хотите использовать, вы можете вручную построить первые два уровня дерева. Вы можете просто следовать псевдокоду, объясненному, например, здесь для дерева C4.5. Как только вы это сделаете, вы можете убрать два признака из набора данных и создать деревья для оставшейся части дерева. Если вы хотите создать объект rpart
, вам потребуется взять некоторые части исходного кода, и это может быть немного сложнее. В зависимости от того, какой алгоритм дерева вы используете, вы будете иметь только бинарное разделение на обоих уровнях, так что вам нужно будет построить всего 4 отдельных дерева, а не 264. Обратите внимание, что у вас может не быть оптимального решения дерева, так как после прохождения первых двух уровней, страна и тип продукта могут все еще быть переменными, которые вызывают разделение. Но без просмотра данных невозможно сказать.
Замечание: может быть полезно объяснить бизнесу, что страна и тип продукта не являются самыми разумными переменными для размещения вверху дерева решений. Иногда лучше обучить конечных пользователей, чем заставить машинное обучение делать что-то неаккуратно. По моему опыту, конечные пользователи предпочитают иметь правильное решение, чем решение, которое работает, потому что люди имеют интуитивное чувство, что это должно быть определенным образом.
Я думаю, что вы могли бы сделать это довольно автоматически, если вы открыты к использованию Python. Библиотека под названием auto_ml* имеет функцию, называемую категориальное ансамблирование, где вы можете явно сказать “Я хочу модель, построенную для каждого уровня этой функции”. Если вы создадите признак, который будет комбинировать страну и тип продукта, и используете это как категорию, остальное должно быть довольно просто.
*Раскрытие информации: я внес небольшие изменения в auto_ml. Это FOSS под лицензией MIT.
Ответ или решение
Чтобы исправить первые два уровня дерева решений для задачи регрессионного анализа с использованием 70 атрибутов, где бизнес-требования предполагают закрепление уровней по атрибутам «страна» и «тип продукта», необходимо рассмотреть оба предложенных подхода: создание отдельных деревьев для каждой комбинации и проектирование дерева с использованием всех переменных. Давайте детально рассмотрим оба варианта и их особенности.
Подход 1: Создание отдельных деревьев для каждой комбинации
Первый предложенный вами вариант заключается в создании 264 отдельных деревьев для каждой комбинации «страна» (88 уровней) и «тип продукта» (3 уровня). Это решение имеет свои плюсы и минусы:
Плюсы:
- Четкая структура: каждое дерево будет специально настроено под сочетание «страна» и «тип продукта».
- Более высокая точность прогнозирования для определенных подгрупп данных.
Минусы:
- Высокая стоимость вычислений и времени: создание и поддержка 264 отдельных деревьев может быть ресурсоемким и сложным процессом.
- Обслуживание и обновление моделей будет затруднено, особенно если в будущем добавятся новые страны или типы продуктов.
Подход 2: Создание базового дерева с фиксированными уровнями
Второй подход подразумевает создание базового дерева с двумя фиксированными переменными «страна» и «тип продукта», а затем построение второго дерева на основе остальных переменных:
Схема выполнения:
- Создание основного дерева: Сначала необходимо построить дерево решений с использованием только переменных «страна» и «тип продукта». Это позволит получить начальную структуру дерева с комбинацией этих двух переменных, где каждая комбинация станет конечной (листовой) вершиной дерева.
- Создание второго дерева: После этого можно построить второе дерево, которое будет учитывать все остальные 68 атрибутов без «страны» и «типа продукта», принимая во внимание, что листовые узлы первого дерева могут быть использованы как основа для второго дерева.
- Слияние деревьев: Этот этап наиболее сложный и требует некоторых экспериментов. Итоговое дерево может быть представлено как бинарное дерево, где каждый путь от корня (с фиксированными уровнями) к листу (с другими переменными) будет представлять идею смешанного прогноза.
Реализация
-
Построение первого дерева: Используйте библиотеку, такую как
rpart
в R илиdecision_tree
в Python (например, из библиотекscikit-learn
илиXGBoost
), чтобы создать первое дерево с фиксированными уровнями. -
Скриптирование для комбинирования: Вам может понадобиться написать пользовательский скрипт, чтобы взаимодействовать между деревьями. Это может включать в себя вручную манипулировать данными или использовать ensembling в таких библиотеках, как
auto_ml
, где вы можете указать, что хотите построить модель для каждой категории.
Важно помнить
При проектировании модели также следует учитывать, действительно ли «страна» и «тип продукта» являются оптимальными начальными переменными. То, что кажется разумным на первый взгляд, может не гарантировать наилучшие результаты. Важно проводить параллельные эксперименты и исследования, чтобы определить, будет ли предложенное решение наиболее результативным для всех заинтересованных сторон.
На заключение, при выборе метода важно учитывать не только технические аспекты, но и бизнес-требования. Диалог с командой, анализ их ожиданий и вовлечение в процесс могут значительно повысить шансы на успех проекта.