AI-напарник в действии: наше путешествие по Kaggle-соревнованию

в 16:11, , рубрики: AI, llm
AI-напарник в действии: наше путешествие по Kaggle-соревнованию - 1

Всем привет!

Коротко о себе: я  Data Science энтузиаст, увлекающийся машинным обучением в качестве хобби. Хотя эта область не является моей основной профессиональной деятельностью, она занимает значительную часть моего свободного времени. Моё развитие в этом направлении строится на двух основных элементах: обучении на онлайн-платформах (преимущественно Stepik) и участии в хакатонах, что существенно способствует углублению знаний. Недавно я завершил курс по применению искусственного интеллекта в разработке, и, вдохновленный полученными знаниями, решил провести эксперимент по максимальному использованию AI в соревновательном проекте.

К этому моменту на kaggle стартовало подходящее соревнование уровня Swag (Stuff We All Get), предполагающее участие в первую очередь  начинающих любителей. Это забавное состязание, в процессе которого необходимо предсказать цены на рюкзаки —  классическая задача линейной регрессии. Ссылка на соревнование : https://www.kaggle.com/competitions/playground-series-s5e2

Свою роль в этом соревновании я определил как посредника между искусственным интеллектом и платформой. Моя задача заключалась в формировании промптов, выполнении предложенного кода на платформе на основе ответов AI и передаче результатов обратно модели. В качестве инструмента я выбрал модель Claude 3.5 Sonnet (в дальнейшем буду называть её LLM), которая показалась мне достаточно мощной и подходящей для решения поставленной задачи.
Прежде чем поставить задачу перед LLM, я тщательно изучил структуру данных и провел разведочный анализ (EDA). Результаты оказались не слишком обнадеживающими: в данных присутствовали пропуски, большинство переменных были категориальными (например, бренд, цвет и т.п.), и, что самое важное, целевая переменная — цена, которую предстояло предсказать, — слабо коррелировала с остальными признаками. Это хорошо иллюстрирует выборка данных для одного из брендов, отсортированная по цене: явных зависимостей между ценой и другими параметрами не наблюдается.

AI-напарник в действии: наше путешествие по Kaggle-соревнованию - 2

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

Я не буду приводить здесь полный листинг нашего взаимодействия с LLM, а представлю только ключевые моменты. С полной версией диалога можно ознакомиться по ссылке: https://www.kaggle.com/code/igorsharygin/ai-assistent

После того как я описал задачу, LLM разработала комплексный план действий. План выглядел основательно и включал в себя несколько этапов:

  • оценочный анализ данных

  • стратегии обработки возможных отклонений

  • построение базового решения (baseline)

LLM сразу выявила проблему пропущенных значений  в датасете и предложила методы их заполнения новой категорий. Для числовых значений было предложено использовать медиану а для категориальных была введена новая категория Unknown. Преобразования  категориальных переменных реализовывалось с использованием  LabelEncoder  .

После успешной предобработки данных согласно намеченному сценарию, LLM провела корреляционный анализ, который подтвердил наши опасения, показав слабые зависимости между переменными:

AI-напарник в действии: наше путешествие по Kaggle-соревнованию - 3

Цена при этом была распределена достаточно равномерно

AI-напарник в действии: наше путешествие по Kaggle-соревнованию - 4

Заключение LLM выглядело следующим образом:

AI-напарник в действии: наше путешествие по Kaggle-соревнованию - 5

Далее мы двигались по процессу так называемого Feature engineering , создавая новые дополнительные признаки, ожидая какого либо улучшения.

После нескольких шагов, LLM сделала вывод

AI-напарник в действии: наше путешествие по Kaggle-соревнованию - 6

По результатам проведенного анализа был построен baseline с использованием LGBMRegressor, в результате которого получили  распределение ошибки, что и было ожидаемо. И как результат, полученный результат на тот момент давал положение на лидерборде даже не в первой сотне.

AI-напарник в действии: наше путешествие по Kaggle-соревнованию - 7

Следующим был предложен иной  подход, в котором  были реализованы существенные улучшения ( по мнению LLM), включающие применение mean encoding для категориальных переменных, создание ансамбля из LightGBM, XGBoost и RandomForest, внедрение кросс-валидации, замену StandardScaler на RobustScaler для лучшей обработки выбросов, а также создание групповых признаков. По результатам предложенных изменений получить рабочее предложение без ошибок не получилось, и LLM предложило убрать сложную схему mean encoding, добавить простые признаки и увеличить количество деревьев в моделях

Результат по итогу несколько ухудшился, то есть предпринятые меры не помогли.

Озадаченная LLM предприняла радикальный шаг: использовать нейронную сеть с последовательной архитектурой (Sequential), которая состоит из слоев:

Input Layer входной слой ,принимающий входные данные

Dense Layer (64 units): Первый плотный слой содержит 64 узла. Используется активация ReLU, инициализатор ядер He Normal и регуляризация L2 с коэффициентом 0.01 для предотвращения переобучения.

BatchNormalization: Слой нормализации батчей для стабилизации обучения и ускорения сходимости.

Dropout (20%): Слой дропаут с вероятностью 0.2 для уменьшения переобучения путем случайного отключения части узлов.

Dense Layer (32 units): Второй плотный слой содержит 32 узла. Используются те же настройки активации, инициализации и регуляризации, что и в первом слое.

Output Layer: Выходной слой имеет один узел без активации, который возвращает линейное значение, что обычно используется для задач регрессии.

Но и этот шаг не привел к улучшению результатов

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

Какие выводы можно сделать по результатам проделанной работы:

  • получить базовое решение, используя режим диалога с LLM возможно.

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

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

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

Автор: IgorSh63

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js