Олимпиадный тренинг

Задача . Испорченная энтропия


Задача

Темы:

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

Формула, которую использовал Егор:

\(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
 

 


time 1000 ms
memory 256 Mb
Правила оформления программ и список ошибок при автоматической проверке задач

Статистика успешных решений по компиляторам
Комментарий учителя