Автор: Гириш Дешмукх, старший инженер-программист, Synerzip.

Машинное обучение — это подмножество одного из самых популярных и загадочных терминов в компьютерном мире; «Искусственный интеллект» или ИИ! В машинном обучении компьютеры применяют методы статистического обучения для автоматического выявления закономерностей в данных. С помощью этих методов можно делать очень точные прогнозы.

Чтобы способствовать обучению и внедрению, многие группы проводят соревнования по ИИ, ориентированные на разработчиков. Kaggle — одна из таких платформ, известная проведением соревнований по прогнозному моделированию и аналитике по всему миру. Они часто анализируют и бросают вызов талантливым людям, желающим преуспеть в методах машинного обучения. Как культура, команды Synerzip часто принимают участие в этих соревнованиях Kaggle, чтобы доказать свою техническую компетентность.

Один из таких вызовов был представлен компанией Mercari. У него самое большое в Японии приложение для покупок, созданное сообществом. Задача заключалась в том, чтобы предложить продавцам ценовые предложения. Но это сложно, поскольку их продавцы могут выставить на рынок Mercari практически все или любой набор вещей.

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

Вызов:

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

Подробнее об этом челлендже читайте здесь.

Мыслительный процесс:

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

Используемая технология:

  • Исследование и анализ данных: Power BI
  • Обработка данных и машинное обучение: Python

Мы следовали стандартным шагам машинного обучения, как показано ниже:

  1. Понимание проблемы бизнеса
  2. Исследование и анализ данных с помощью визуализаций
  3. Подготовка данных с использованием методов обработки данных
  4. Применить модель машинного обучения
  5. Оцените модель по заданным данным поезда и теста

Обычный рабочий процесс любого проекта ML, показанный Microsoft:

Исследовательский анализ данных

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

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

В R/Python есть ряд инструментов визуализации и библиотек для анализа данных. Мы выбираем Microsoft Power BI для исследовательского анализа данных, так как это интерактивный инструмент визуализации типа plug-and-play, простой для понимания и использования.

Предоставленные данные:

Для этой задачи были предоставлены два файла:

  1. Поезд.тсв
  2. Тест.tsv

Файлы состояли из списка списков продуктов. Эти файлы были разделены табуляцией.

  • train_id или test_id — идентификатор листинга.
  • name — Название листинга.
  • item_condition_id — Состояние товаров, предоставленных продавцом
  • category_name — Категория листинга
  • brand_name — Название бренда
  • доставка — 1, если стоимость доставки оплачивается продавцом и 0, если оплачивается покупателем
  • item_description — Полное описание предмета

Входные данные для анализа данных были предоставлены в Train.csv.

Когда мы анализировали Train.csv, мы разработали несколько следующих визуализаций для анализа данных Train:

  • Счетчик записей
    Чтобы подсчитать общее количество записей в Train.csv.

  • Определить переменную-предиктор
    Нам нужно было определить переменную-предиктор. «Поле цены», представленное в Train.csv, было переменной-предиктором. Нам нужно было предсказать цены на товары в данных Test.csv. Ниже приведен снимок данных поезда:

  • Подсчет Train_id по цене
    Как показано на изображении ниже, диапазон цен составляет от 0 до 2000 долларов США. Это означало, что были какие-то грязные данные 0 $.

  • Считать train_id по brand_name
    Как видно на изображении ниже, почти 0,6 миллиона записей не содержат brand_names.

Предварительная обработка данных:

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

Реальные данные часто зашумлены, непоследовательны и/или не имеют определенного поведения, а также могут содержать ошибки. Предварительная обработка данных является проверенным методом решения таких проблем. Мы использовали следующие методы предварительной обработки данных:

  • Очистка данных
  • Разработка функций
  • Преобразование данных
  1. Очистка данных:
    При очистке данных мы очистили данные, удалив записи с ценой «0» $ и заполнив пустые значения «имя_категории» значением «Другое».
  2. Разработка признаков.
    Разработка признаков — это процесс использования знаний предметной области о данных для создания функций, обеспечивающих работу алгоритмов машинного обучения.
    В соответствии с анализом данных мы добавили следующие поля:
  • Название + название бренда
    Мы заметили, что большинство названий брендов также появляются в столбце «Название». Чтобы заполнить 0,6 миллиона пустых значений brand_name, присутствующих в Train.csv, как показано на диаграмме в точке 4, мы объединили Brand_name с name
  • Текст = Описание товара + название + название категории
    Объединение трех вышеуказанных полей дает информацию о продукте в одном месте. После применения IDF (обратная частота документа) эта новая функция повышает точность модели.
  • Category_Name_X = Category_name + Item_condition_id
    Согласно анализу, Category_name и Item_condition_id имеют отношение, поэтому после объединения этих двух полей модель дает хорошие результаты.
  1. Преобразование объекта:
  • Стандартизация данных. В данных Train мы могли видеть, что цена не была нормально распределена. Поэтому мы применили метод логарифмического масштабирования, чтобы уменьшить цену в диапазоне 0,5–4.

  • Фиктивные переменные. В регрессионном анализе фиктивная переменная — это числовая переменная, используемая для представления подгрупп выборки в вашем исследовании. В ситуациях, когда вы хотите работать с категориальными переменными, которые не имеют количественной связи друг с другом, используются фиктивные переменные.
  • Используя «LabelBinarizer», мы можем создавать фиктивные переменные, поэтому мы использовали «LabelBinarizer» для следующих полей:
  1. название бренда
  2. перевозки
  3. item_condition_id
  4. Название_Категории_X
  • Для следующих категориальных переменных мы использовали «HashingVectorizer»:
  • имя
  • текст
  • Он превращает набор текстовых документов в матрицу scipy.sparse, содержащую количество вхождений токенов (или двоичную информацию о вхождениях), возможно, нормализованную как частоты токенов, если norm=’l1’, или спроецированную на евклидову единичную сферу, если norm=’l2’.
  • Мы использовали несколько методов NLP в HashingVectorizer, чтобы удалить ненужные функции и создать новые функции из существующих последовательностей слов.
  • Нграмма:
  • Диапазон триграмм для построения функций ngram_range=(1, 3)
  • Стоп-слова:
  • Стоп-слова — это слова, которые мы хотим отфильтровать перед обучением классификатора. Обычно это высокочастотные слова, которые не дают никакой дополнительной информации для нашей маркировки. Мы предоставили собственный список стоп-слов: ['the', 'a', 'an', 'is' , 'это', 'это', ]
  • Шаблон токена:
  • Сопоставление с образцом — это проверка и обнаружение определенных последовательностей данных некоторого образца среди необработанных данных или последовательности токенов.
  • Мы использовали шаблон токена как token_pattern=’\w+
  • Это означает, что ‘\w+’ соответствует любому символу слова (равному [a-zA-Z0–9_])
  • Отбрасывать функции с очень низкой и очень высокой частотой:
  • В этом варианте использования наблюдаемые признаки с частотой менее 3 не имеют значения.
  • Также функции, встречающиеся в 90% записей, не имеют никакого значения, поэтому мы исключили такие функции.
  • Трансформатор Tf-idf:
  • Частота термина — это количество раз, когда слово встречается в данном документе. Обратная частота документа — это количество раз, когда слово встречается в корпусе документов.
  • Использование «tf-idf» для взвешивания слов в соответствии с их важностью. Чтобы иметь такое же масштабирование и повысить точность, мы объединили все функции и применили к ним Tf-idf.
  • Применение модели машинного обучения
  • Выбор алгоритма машинного обучения зависит от имеющихся данных и предлагаемой задачи. Поскольку здесь нам нужно было предсказать цену продукта, это была проблема регрессии.
  • Первоначально мы применяли линейную регрессию, но поскольку ограничение по времени для задачи составляло всего 60 минут, а у нас было 60 миллионов функций, линейная регрессия заняла слишком много времени.
  • Мы заметили, что на данных Train точность была больше, чем на тестовых данных, поэтому модель переобучалась.
  • Количество функций было 60 миллионов, а модель переобучалась, поэтому мы решили применить регрессию хребта.
  • Ридж-регрессия снижает величину коэффициентов признаков, а также минимизирует ошибку между предсказанными и фактическими наблюдениями.
  • Регрессия хребта —
  • Выполняет регуляризацию L2, т.е. добавляет штраф, эквивалентный квадрату величины коэффициентов.
  • Цель минимизации = LS Obj + α * (сумма квадратов коэффициентов)
  • Производительность гребенчатой ​​регрессии была намного лучше, чем у линейной регрессии, и мы также получили хорошую точность. Вот модель Ridge, которую мы использовали:
  • Ridge(solver='auto', fit_intercept=True, alpha=0,6, max_iter=50, normalize=False, tol=0,01)
  • Результаты
  • Команда Synerzip показала впечатляющие результаты с хорошим временем: