Егор изучает машинное обучение и решил написать собственную реализацию дерева решений. Всё шло хорошо, пока он не допустил ошибку в формуле энтропии.
Формула, которую использовал Егор:
\(H_{Egor}(p) = -p \cdot \ln(p) - (1-p) \cdot \ln(1-p) + p^2\)
Егор обучил дерево решений глубины 3 на своих данных и остался доволен результатом. Однако позже он обнаружил ошибку и понял, что его дерево построено неоптимально.
Ваша задача
Имея обучающие данные и структуру дерева Егора (какие признаки используются в каждом узле), найти оптимальные пороги разбиения, которые получились бы при использовании правильной энтропии.
Входные данные
Вам предоставляются следующие файлы:
1. train.csv
Обучающая выборка с признаками и целевой переменной.
| Колонка |
Описание |
| feature_0, feature_1, ... feature_9 |
Числовые признаки |
| target |
Целевая переменная (0 или 1) |
2. tree_structure.json
Структура дерева Егора в формате JSON:
json
{
"max_depth": 3,
"nodes": [
{
"node_id": 0,
"feature_index": 3,
"threshold_egor": 0.547,
"left_child": 1,
"right_child": 2
},
{
"node_id": 1,
"feature_index": 7,
"threshold_egor": 0.234,
"left_child": 3,
"right_child": 4
},
...
],
"leaves": [
{"node_id": 7, "class": 0},
{"node_id": 8, "class": 1},
...
]
}
3.
test.csv
Тестовая выборка (без целевой переменной), для которой нужно сделать предсказания.
Выходные данные
Загрузите файл
submission.csv со следующей структурой:
| Колонка |
Описание |
| id |
Индекс объекта (0, 1, 2 ...) |
| predictoin |
Предсказанный класс (0 или 1) |
Пример:
csv
id,prediction
0,1
1,0
2,1
3,0
...
Оценка
Решения оцениваются по метрике
F1-score (macro).
Для получения максимального балла необходимо:
1. Сохранить структуру дерева (те же признаки в тех же узлах)
2. Пересчитать пороги разбиения, используя правильную энтропию
3. Применить исправленное дерево к тестовой выборке
Подсказки
1. Дерево имеет фиксированную структуру — вы меняете только пороги, не признаки
2. Для каждого узла нужно найти порог, максимизирующий Information Gain с правильной энтропией
3. Пороги нужно пересчитывать сверху вниз (от корня к листьям), так как данные в дочерних узлах зависят от порога в родительском
Ограничения
- Количество объектов в обучающей выборке: 5000
- Количество объектов в тестовой выборке: 2000
- Количество признаков: 10
- Глубина дерева: 3
- Все признаки — вещественные числа в диапазоне [0, 1]
Файлы к заданию
train.csv
test.csv
tree_structure.json