Революционизация машинного обучения достижение топ-4% на платформе Kaggle с помощью AutoGluon всего за 7 строк кода.

Революционизация машинного обучения достижение топ-4% на платформе Kaggle с помощью AutoGluon всего за 7 строк кода!

Прогнозирование Autogluon

С тех пор, как я начал новую работу инженера по обработке данных в Slalom _build, я понял, что мне нужно освежить свой опыт в области машинного обучения, так как он был устаревшим на несколько лет. Несколько лет в инженерии данных/науке о данных – это целая вечность, и я предположил, что существует целый ряд автоматизированных средств для выполнения некоторых более трудоемких задач ML. Я был рад видеть, что AutoML становится неотъемлемой частью ML-потоков работы, поэтому я хотел попробовать его самостоятельно.

Изучение AutoML: Упрощение машинного обучения

AutoML революционизирует способ разработки моделей машинного обучения. В традиционном ML эксперты занимаются трудоемкими задачами, такими как предварительная обработка данных, выбор признаков и настройка моделей. AutoML автоматизирует эти сложные процессы, значительно сокращая время и экспертизу, необходимые для создания эффективных моделей для задач, таких как классификация, прогнозирование и регрессия. Эта инновация не только ускоряет разработку моделей, но и делает продвинутое ML более доступным для широкой аудитории, так как любой, кто знает Python, может реализовать модель и быстро получить прогнозы!

Зачем нужен AutoML?

Кратко говоря, это эффективность. Даже если есть компромисс в точности (что, по моему опыту, не так, как я объясню позже в своем примере), есть что сказать о возможности получить прогнозы в нескольких строках кода. Кроме того, поскольку это автоматизировано, если предсказания достаточно точные для вашего случая использования, процесс может автоматически адаптироваться к изменению данных и признаков при переобучении без дополнительных вмешательств человека.

Как это работает?

AutoGluon выполняет несколько шагов для автоматической обработки и подготовки данных к обучению, на высоком уровне эти шаги следующие:

  1. Загрузка и проверка данныхAutoGluon ожидает, что данные будут представлены в формате таблицы — в данном случае это Pandas Dataframe с указанной целевой колонкой, также выполняется несколько начальных проверок данных, таких как размер, формат и типы переменных (числовые, категориальные, текстовые и т. д.).
  2. Очистка данныхAutoGluon определяет и заполняет пропущенные значения. Он делает это, используя несколько стратегий, например, заполняя пропущенные значения средним, медианой или модой для числовых столбцов или специальным токеном для категориальных столбцов, также он удаляет дубликаты.
  3. Инженерия признаковОн автоматически выполняет кодирование категориальных данных, используя one-hot / label или более сложные методы, использует NLP для преобразования текста в числовой формат, который можно использовать моделями ML, а также преобразует дату и время в более полезные элементы, такие как день недели, месяц и т. д.
  4. Преобразование данныхAutoGluon выполнит преобразования, такие как нормализация и масштабирование, если это необходимо, в зависимости от алгоритма, и, возможно, преобразует определенные признаки с помощью методов, например, преобразование логарифмом для исправления искаженного распределения в наборах данных.
  5. Выбор признаков и снижение размерностиОн автоматически рассчитывает корреляцию признаков и удаляет признаки, которые не способствуют предсказательной способности модели, а также снижает размерность с помощью методов, например, PCA (анализ главных компонент) для сокращения числа измерений.
  6. Разделение данныхAutoGluon может автоматически разделить и тестировать внутри себя для создания наборов данных для обучения, проверки и тестирования.
  7. Выбор моделиAutoGluon автоматически тестирует различные модели с использованием ранее созданных разделенных наборов данных и ранжирует их в соответствии с выбранным метрическим показателем.
  8. Создание ансамблевой моделиВ большинстве случаев, AutoGluon будет создавать ансамблевую модель путем комбинирования моделей без нулевого веса, вы можете прочитать больше о механизме совмещения моделей здесь: https://towardsdatascience.com/ensemble-methods-bagging-boosting-and-stacking-c9214a10a205, вот как это выглядит:
Многоуровневое совмещение AutoGluon

Что насчет результатов? Лучше ли, чем «ручная машинное обучение»?

Как только обученный консультант, у меня есть идеальный ответ:

Это зависит

Я буду использовать пример соревнования Kaggle, в котором участвовал:

House Prices — Advanced Regression Techniques

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

www.kaggle.com

Это соревнование предлагает предсказывать цены домов на основе ряда характеристик недвижимости, данные представлены в формате CSV с 81 столбцом.

Тестирование «Out-of-the-box» производительности с AutoGluon

Для тестирования производительности с AutoGluon, я следовал документации для построения необходимой структуры и затем обучил модель, используя «best_quality»

  1. Загрузка обучающих данных: Я прочитал обучающие данные в pandas dataframe, чтобы посмотреть их структуру, что является обязательным для таблицы с предиктором (который мы используем в данном случае).
import pandas as pdfrom autogluon.tabular import TabularDataset, TabularPredictordf = pd.read_csv("/kaggle/input/house-prices-advanced-regression-techniques/train.csv")df.head(20)--- out ---Id MSSubClass MSZoning LotFrontage LotArea Street Alley LotShape LandContour Utilities ... PoolArea PoolQC Fence MiscFeature MiscVal MoSold YrSold SaleType SaleCondition SalePrice0 1 60 RL 65.0 8450 Pave NaN Reg Lvl AllPub ... 0 NaN NaN NaN 0 2 2008 WD Normal 2085001 2 20 RL 80.0 9600 Pave NaN Reg Lvl AllPub ... 0 NaN NaN NaN 0 5 2007 WD Normal 1815002 3 60 RL 68.0 11250 Pave NaN IR1 Lvl AllPub ... 0 NaN NaN NaN 0 9 2008 WD Normal 2235003 4 70 RL 60.0 9550 Pave NaN IR1 Lvl AllPub ... 0 NaN NaN NaN 0 2 2006 WD Abnorml 1400004 5 60 RL 84.0 14260 Pave NaN IR1 Lvl AllPub ... 0 NaN NaN NaN 0 12 2008 WD Normal 2500005 6 50 RL 85.0 14115 Pave NaN IR1 Lvl AllPub ... 0 NaN MnPrv Shed 700 10 2009 WD Normal 1430006 7 20 RL 75.0 10084 Pave NaN Reg Lvl AllPub ... 0 NaN NaN NaN 0 8 2007 WD Normal 3070007 8 60 RL NaN 10382 Pave NaN IR1 Lvl AllPub ... 0 NaN NaN Shed 350 11 2009 WD Normal 2000008 9 50 RM 51.0 6120 Pave NaN Reg Lvl AllPub ... 0 NaN NaN NaN 0 4 2008 WD Abnorml 1299009 10 190 RL 50.0 7420 Pave NaN Reg Lvl AllPub ... 0 NaN NaN NaN 0 1 2008 WD Normal 11800010 11 20 RL 70.0 11200 Pave NaN Reg Lvl AllPub ... 0 NaN NaN NaN 0 2 2008 WD Normal 12950011 12 60 RL 85.0 11924 Pave NaN IR1 Lvl AllPub ... 0 NaN NaN NaN 0 7 2006 New Partial 34500012 13 20 RL NaN 12968 Pave NaN IR2 Lvl AllPub ... 0 NaN NaN NaN 0 9 2008 WD Normal 14400013 14 20 RL 91.0 10652 Pave NaN IR1 Lvl AllPub ... 0 NaN NaN NaN 0 8 2007 New Partial 27950014 15 20 RL NaN 10920 Pave NaN IR1 Lvl AllPub ... 0 NaN GdWo NaN 0 5 2008 WD Normal 15700015 16 45 RM 51.0 6120 Pave NaN Reg Lvl AllPub ... 0 NaN GdPrv NaN 0 7 2007 WD Normal 13200016 17 20 RL NaN 11241 Pave NaN IR1 Lvl AllPub ... 0 NaN NaN Shed 700 3 2010 WD Normal 14900017 18 90 RL 72.0 10791 Pave NaN Reg Lvl AllPub ... 0 NaN NaN Shed 500 10 2006 WD Normal 9000018 19 20 RL 66.0 13695 Pave NaN Reg Lvl AllPub ... 0 NaN NaN NaN 0 6 2008 WD Normal 15900019 20 20 RL 70.0 7560 Pave NaN Reg Lvl AllPub ... 0 NaN MnPrv NaN 0 5 2009 COD Abnorml 13900020 rows × 81 columns

2. Указание метки для выбораСтолбец, который мы предсказываем, это SalePrice – поэтому мы устанавливаем метку и смотрим на некоторую базовую статистику этого столбца:

label = 'SalePrice'df[label].describe()--- выход ---count      1460.000000mean     180921.195890std       79442.502883min       34900.00000025%      129975.00000050%      163000.00000075%      214000.000000max      755000.000000Name: SalePrice, dtype: float64

3. Обучение модели(ей)Обучение модели на табличных данных в AutoGluon очень простое: вы передаете ей метку и фрейм данных и заставляете его работать; затем он обучает и оценивает модели, указанные в выбранной группе (в данном случае – best_quality):

predictor = TabularPredictor(label=label, path="/kaggle/working", ).fit(df, presets='best_quality')--- выход ---Указанные предустановки: ['best_quality']Конфигурация стека (auto_stack=True): num_stack_levels=1, num_bag_folds=8, num_bag_sets=1Начало обучения автоматического глубокого обучения ...AutoGluon будет сохранять модели в папке "/kaggle/working/"Версия AutoGluon:  0.8.0Версия Python:     3.10.10Операционная система:   LinuxПлатформа:   x86_64Версия платформы:   #1 SMP Sat Jun 24 10:55:41 UTC 2023Доступное место на диске:   20,94 ГБ / 20,96 ГБ (99,9%)Количество строк обучающих данных:    1460Количество столбцов обучающих данных: 80Метка столбца: SalePriceПредварительная обработка данных ...AutoGluon определяет вашу задачу предсказания как: 'регрессия' (так как тип колонки с меткой == int и наблюдаются многоуникальные значения метки). Информация о метке (максимум, минимум, среднее, стандартное отклонение): (755000, 34900, 180921.19589, 79442.50288) Если 'регрессия' не является правильным типом задачи, пожалуйста, вручную указывайте параметр problem_type при инициализации предсказателя (вы можете указать problem_type как одно из следующего: ['binary', 'multiclass', 'regression'])Использование генераторов признаков для предварительной обработки данных ...Fitting AutoMLPipelineFeatureGenerator... Доступная память:                    32451.21 MB Объем памяти тренировочных данных (исходные): 4.06 MB (0.0% доступной памяти) Вывод типов данных каждого признака на основе значений столбцов. Задайте feature_metadata_in, чтобы вручную указать особые типы данных признаков. Stage 1 Генераторы:  Аппроксимация AsTypeFeatureGenerator...   Примечание: Преобразование 3 признаков в булевый тип данных, так как они содержат только 2 уникальных значения. Stage 2 Генераторы:  Аппроксимация FillNaFeatureGenerator... Stage 3 Генераторы:  Аппроксимация IdentityFeatureGenerator...  Аппроксимация CategoryFeatureGenerator...   Аппроксимация CategoryMemoryMinimizeFeatureGenerator... Stage 4 Генераторы:  Аппроксимация DropUniqueFeatureGenerator... Stage 5 Генераторы:  Аппроксимация DropDuplicatesFeatureGenerator... Типы признаков в исходных данных (сырой тип данных, специальные типы данных):  ('float', [])  :  3 | ['LotFrontage', 'MasVnrArea', 'GarageYrBlt']  ('int', [])    : 34 | ['Id', 'MSSubClass', 'LotArea', 'OverallQual', 'OverallCond', ...]  ('object', []) : 43 | ['MSZoning', 'Street', 'Alley', 'LotShape', 'LandContour', ...] Типы признаков в обработанных данных (сырой тип данных, специальные типы данных):  ('category', [])  : 40 | ['MSZoning', 'Alley', 'LotShape', 'LandContour', 'LotConfig', ...]  ('float', [])     :  3 | ['LotFrontage', 'MasVnrArea', 'GarageYrBlt']  ('int', [])       : 34 | ['Id', 'MSSubClass', 'LotArea', 'OverallQual', 'OverallCond', ...]  ('int', ['bool']) :  3 | ['Street', 'Utilities', 'CentralAir'] 0.7s = Время обучения Всего 80 признаков в исходных данных использовались для генерации 80 признаков в обработанных данных. Объем памяти тренировочных данных (обработанные): 0.52 MB (0.0% доступной памяти)Время предобработки данных и создания новых признаков = 0.73s ...AutoGluon будет оценивать качество предсказания с использованием метрики оценки: 'root_mean_squared_error' Знак этой метрики был изменен на "чем выше, тем лучше". Значение метрики можно умножить на -1, чтобы получить метрику. Чтобы изменить это, укажите параметр eval_metric в Predictor()...Обучение AutoGluon завершено, общее время выполнения = 1423.48 с ... Лучшая модель: "WeightedEnsemble_L3"TabularPredictor сохранен. Чтобы загрузить, используйте: predictor = TabularPredictor.load("/kaggle/working/")

Процесс занимает около 30 минут на обучение всех разных моделей.

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

test_data = TabularDataset(f'/kaggle/input/house-prices-advanced-regression-techniques/test.csv')y_pred = predictor.predict(test_data)y_pred.head()--- out ---Загружены данные из: /kaggle/input/house-prices-advanced-regression-techniques/test.csv | Столбцы = 80 / 80 | Строки = 1459 -> 1459 ПРЕДУПРЕЖДЕНИЕ: Целочисленные функции без пустых значений на этапе обучения содержат пустые значения при интерпретации! Заполнение пустых значений нулевыми. Чтобы избежать этого, во время обучения передавайте функции как числа с плавающей точкой! ПРЕДУПРЕЖДЕНИЕ: Целочисленные функции с пустыми значениями: ['BsmtFinSF1', 'BsmtFinSF2', 'BsmtUnfSF', 'TotalBsmtSF', 'BsmtFullBath', 'BsmtHalfBath', 'GarageCars', 'GarageArea']0    121030.3593751    164247.5468752    186548.2343753    193435.8750004    184883.546875Name: SalePrice, dtype: float32

5. Представление результатов Отправка результатов на Kaggle довольно проста (это мой первый конкурс Kaggle, поэтому все было для меня новым)

submission = pd.read_csv('/kaggle/input/house-prices-advanced-regression-techniques/sample_submission.csv')submission['SalePrice'] = y_predsubmission--- out ---Id SalePrice0 1461 121030.3593751 1462 164247.5468752 1463 186548.2343753 1464 193435.8750004 1465 184883.546875... ... ...1454 2915 79260.7187501455 2916 82355.2968751456 2917 165794.2812501457 2918 111802.2109381458 2919 212835.9375001459 строк × 2 столбцассубмит.to_csv("/kaggle/working/submission.csv", index=False, header=True)

Результаты

Изначально Autogluon получил 0,12082 и занял 252 место из 4847 – топ 5%, что невероятно для всего 7 строк программного кода.

Если исключить топ 50-75 человек (большинство из которых совершили обман и использовали утечку данных)…

…то это 4% лучших результатов

*все данные верны на момент написания статьи

Могу ли я улучшить это?

Мой лучший результат составил 0,11985 и занял 117 место из 4847 – это лучшие 2,5%

Ура - проверка

Здесь использовался AutoGluon и некоторые довольно простые методы нормализации, инженерии признаков и различные вещи, например, исключение некоррелирующих пар.

Таким образом, мой (признаюсь, немного ржавый) опыт добавил всего 0,00097 пользы к результатам – я не уверен, что это заметно в реальном проекте.

Заключение

Вы можете просмотреть ноутбук здесь, чтобы убедиться в этом: Версия 8 показала лучшую оценку, а Версия 1 была просто использована при обучении (вы можете просматривать версии кода, выбирая меню с 3 точками и требуемую версию)

notebookc8be23bae5

Изучение и запуск кода машинного обучения с помощью Kaggle Notebooks | Использование данных из House Prices – Advanced Regression…

www.kaggle.com

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

AutoGluon – невероятно мощный инструмент в вашем арсенале машинного обучения. Его способность предоставлять высокоточные прогнозы всего лишь с помощью нескольких строк кода беспрецедентна, на мой взгляд, как было доказано на соревновании Kaggle. Он не победит очень талантливого ученого-исследователя/инженера данных, который владеет собственными инструментами, но он также не займет недели, чтобы получить очень точное прогнозирование данных.

Об авторе

Дэн является главным инженером по обработке данных в компании Slalom, специализирующейся на модернизации данных клиентов, машинном обучении и искусственном интеллекте.

Стартап-ветеран с более чем 20-летним стажем, с особым уклоном в создание высокопроизводительных команд разработки и руководство ими для успешной реализации решений для некоторых крупнейших компаний в Австралии и Великобритании.