Как стать автором
Обновить

Data Fusion Contest 2023. Для опыта и не только… Соревнование от ВТБ с призовым фондом в 2 млн рублей

Уровень сложностиСредний
Время на прочтение3 мин
Количество просмотров1.9K
Соревнование Data Fusion Contest 2023
Соревнование Data Fusion Contest 2023

Я, как новичок, наблюдаю за всем происходящим вокруг, и замечаю, что тренд на IT-специальности огромный. Множество курсов заманивают обещаниями о работе с высокой зарплатой, но спустя полгода после окончания курсов вы понимаете, что на "рынке" полно таких же как вы без опыта, а всем нужны профессионалы. Знакомо?

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

В настоящее время проходят два соревнования по машинному обучению с крупным призовым фондом, однако на одном из них такая высокая конкуренция, что для достижения чего-либо нужно тратить на это 24 часа в сутки. Второе же соревнование, Data Fusion Contest 2023, не получило достаточного внимания, хотя формат соревнования непривычный. Это турнир по Adversarial ML между командами атакующих и защищающих ML-моделей на транзакционных данных и содержит две задачи:

🗡 В задаче Атака участники будут создавать атаки на нейросеть, обученную на данных транзакций. 

🛡 В задаче Защита — наоборот, учиться защищать свои модели от заранее оговоренного вида атак.

🏆 Призеров определят Турниры — лучшие команды обеих задач столкнутся друг с другом за призовой фонд в 2 000 000 рублей!  

Также участников ждет много мерча и подарков, онлайн-митапы с воркшопами и возможность круто прокачаться в новых DS/ML методах

Прочитав описание задач три раза, мне, как новичку, мало что стало понятно. Но низкая конкуренция, большой призовой фонд, множество подарков и любопытство заставляют меня разбираться в этих данных.

Мое решение задачи Защиты.

Прочитав все вводные, форум и посмотрев митапы, я осознал как отправлять решение на задачу защита, его нужно отправлять в формате zip.

Организаторы предоставили свой бейзлайн защиты submit_defence.zip, который состоит из 4 файлов:

файлы для отправка к задаче защита
файлы для отправка к задаче защита

– metadata.json – какой образ взять и как запустить скрипт

metadata.json
metadata.json

– model.py – скрипт, который сделает предикт. На вход имя .csv файла для предикта и имя выходного .csv файла с результатом работы

– nn_bins.pickle nn_weights.ckpt – файлы, необходимые для работы бейзлайна

Мы пока не будем лезть в дебри и создавать новые веса и прочее. Мы залезем в параметры модели в файле model.py и будем менять параметры этой модели. Главное на начальном этапе - попасть в топ-10.

В классе TransactionsRnn я меняю коэффициент скорости обучения (Learning rate=5e-2) и Droupout (nn.Dropout2d(0.1)) и смотрю что будет.

class TransactionsRnn(pl.LightningModule):
    def __init__(self, rnn_units=128, top_classifier_units=64, lr=5e-2, out_features=2):
        super().__init__()
        self._transaction_cat_embeddings = nn.ModuleList(
            [
                self._create_embedding_projection(*embedding_projections[feature])
                for feature in embedding_projections.keys()
            ]
        )

        self._spatial_dropout = nn.Dropout2d(0.1)
        concat_embed = sum([embedding_projections[x][1] for x in embedding_projections.keys()])
        self._gru = nn.GRU(input_size=concat_embed, hidden_size=rnn_units, batch_first=True, bidirectional=True,)

        self._hidden_size = rnn_units

Меняю количество повторений на 50 и random_seed на 42.

def reliable_predict(source_file, bins_path, model_path, random_seed=42):
    REPETITIONS = 50  # Сколько повторений

Увеличю batch_size до 256.

def get_dataloader(dataset, device, batch_size=256, is_validation=False):
    def collate_loader(x):
        return tuple(x_.to(device) for x_ in default_collate(x))

    return DataLoader(dataset, batch_size=batch_size, collate_fn=collate_loader, shuffle=not is_validation,)
def predict(source_file, bins_path, model_path, random_seed=42):
    pl.seed_everything(random_seed)

Далее мы сохраняем изменения, отправляем решение в формате .zip и получаем первый сабмит после базовой версии. Таким образом, меняя параметры модели и/или модель, добавляя слои, мы находим оптимальное для нас решение и достигаем лучшего скора в лидерборде.

Метрика соревнования

Mean Harm ROC-AUC. Это среднее гармоническое ROC-AUC на исходных данных и на атакованных. Метрика сочетает в себе компромисс между повышением защищенности модели и потенциальным снижением ее качества.

Mean Harm ROC-AUC: 0,71016

Код представлен на githab

Теги:
Хабы:
Всего голосов 11: ↑10 и ↓1+9
Комментарии3

Публикации

Истории

Работа

Ближайшие события