среда, 31 января 2024 г.

Enefit - Predict Energy Behavior of Prosumers

Буквально только что закончилось соревнование Enefit - Predict Energy Behavior of Prosumers, в котором нужно было предсказывать объемы производства и потребления электроэнергии для субъектов в Эстонии, являющихся так называемыми просьюмерами (проще говоря, теми потребителями, которые еще и сами вырабатывают электричество при помощи своих солнечных станций). Это задача регрессии с 2 таргетами и честным оцениванием на новых данных в будущем, после окончания приема самбитов. Результаты будут не скоро - в конце апреля, поэтому по горячим следам пишу краткий отчет.

Основная сложность соревнования заключалась в специфическом способе расчета метрики качества (MAE) путем загрузки порций данных через проприетарный и почти никак не документированный API. Также имелись косяки с данными, которые исправлялись на ходу. На форуме соревнования можно оценить количество жалоб. Тем не менее, были доступны весьма качественные публичные ноутбуки, в которых все работало и сабмитилось. Модификациями этих рабочих решений я в итоге и ограничился. API исключительно питоновское, поэтому решать на R было невозможно.

Список удачных ходов невелик:

  1. Изучение списка фич показало отсутствие в нем лаговых фич для второго таргета. Простая добавка таковых улучшала MAE примерно на 0.5.

  2. Откат версии lightgbm до 3.3.2, используемой в данный момент на каггле, позволил уменьшить MAE еще почти на 0.2. Невоспроизводимость результатов между версиями была обнаружена при попытке обучить на своем ПК топовые модели из ноутбуков.

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

  4. К ансамблю из двух моделей lightgbm (каждая из них на самом деле была не одной моделью, а VotingRegressor-ом) добавил третью - нейросетку из чужого ноутбука с минимальными изменениями. Это позволило выиграть чуть больше 1 и получить MAE 62.14.

Лучшее итоговое решение было простым усреднением предиктов этих трех моделей: VotingRegressor из lightgbm-ов, предсказывающий таргеты; VotingRegressor из lightgbm-ов, предсказывающий разности между таргетом и лаговым значением таргета на -48 часов (+ чуть другой набор признаков); нейросетка DeepTables, также предсказывающая разности. Для второго сабмита выбрал вариант из тех же трех моделей + еще одна нейронка, предсказывающая непосредственно таргеты.

Что не сработало:

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

  2. Самостоятельно затюненный catboost на кроссвалидации был чуть лучше lightgbm-а, на лидерборде - хуже, а добавление его в ансамбль ухудшало скор. Логично, ведь разнообразие моделей важнее качества каждой индивидуальной модели в ансамбле.

Таким образом с минимальными усилиями после всего 3 недель участия получилось закончить соревнование на 61 месте на публичном лидерборде, ненадолго побывав даже на 35. Обновлю пост после публикации результатов соревнования. UPD 171 место на привате - бронзовая медаль.

Комментариев нет:

Отправить комментарий