Дополнительная попытка решить основанную на NLP регрессию набора данных Mercari Kaggle в рамках новаторского самостоятельного исследования - Курс прикладного искусственного интеллекта

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

Оглавление

  1. Бизнес-проблема
  2. Показатель ошибки
  3. Применение машинного обучения и глубокого обучения к нашей проблеме
  4. Источник данных
  5. Исследовательский анализ данных - EDA
  6. Существующие подходы
  7. Подготовка данных
  8. Описание модели
  9. Результаты
  10. Мои попытки улучшить RMSLE
  11. Будущая работа
  12. LinkedIn и репозиторий GitHub
  13. использованная литература

1. Деловая проблема

Mercari, Inc. - компания электронной коммерции, работающая в Японии и США, и ее основным продуктом является приложение Mercari marketplace. Люди могут легко продавать или покупать предметы, используя свои смартфоны. Пользователи приложения могут выбирать цену при перечислении товара. Однако здесь существует более высокий риск, поскольку и потребитель, и покупатель теряются, если прейскурант слишком высок или слишком низок по сравнению с рыночной ценой. Решение вышеуказанной проблемы состоит в том, чтобы автоматически рекомендовать цены на товары, и, как следствие, крупнейшее приложение для покупок на базе Сообщества хотело предлагать предложения по ценам своим продавцам.

Проблема заключается в том, чтобы предсказать цены на любой конкретный продукт, что объясняет, что это проблема регрессии. В данных о поездах есть следующие функции: train_id, name, item_condition_id, category_name, brand_name, price, shipping, item_description элемента. У нас есть все остальные функции в тестовых данных, кроме price, которая является нашей целевой переменной. Характеристики не только категориальные и числовые, они также представляют собой текстовое описание товара, предоставленное продавцом. Например, текстовые описания товаров, являющихся женскими аксессуарами, выглядят следующим образом:

Мы видим, что оба продаются по разным ценам; первый за 16 долларов США, второй за 9 долларов США.

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

2. Показатель ошибки.

Метрика ошибки для этой проблемы - среднеквадратическая логарифмическая ошибка (RMSLE). Пожалуйста, обратитесь к этому блогу, чтобы узнать больше о метрике. Формула для расчета метрики показана на изображении ниже:

код для расчета RMSLE показан ниже:

3. Применение машинного обучения и глубокого обучения к нашей проблеме.

В эту эпоху искусственного интеллекта (ИИ), когда мы думаем об ИИ, следующими двумя модными словами являются машинное обучение и глубокое обучение. Мы находим ИИ повсюду, они действительно являются неотъемлемой частью человеческой жизни. Будь то поездки на работу (например, заказ такси), медицинская диагностика, личный помощник (например, Siri, Alexa), обнаружение мошенничества, раскрытие преступлений, онлайн-поддержка клиентов, рекомендации по продукту, автомобили с автономным управлением и этот список можно продолжить. Благодаря передовым алгоритмам машинного обучения и глубокого обучения в нашем распоряжении могут быть решены любые задачи прогнозирования.

Наша проблема уникальна, так как это задача регрессии, основанная на NLP (Natural Language Processing). Первым шагом в НЛП является представление текста в число, то есть преобразование текстов в числовые векторные представления для построения регрессоров.

Одним из способов решения проблемы прогнозирования цен является использование методов векторизации, таких как TF-IDF, BoW, и построение разреженных векторных представлений фиксированного размера, которые будут использоваться классическими алгоритмами машинного обучения (например, простым линейным регрессором, древовидным регрессором и т. Д. .). Другой способ - использовать архитектуры Deep NLP (например, CNN, LSTM, GRU или их комбинации), которые могут изучать функции самостоятельно и нуждаются в плотных векторах от встраивания. В текущем анализе мы исследуем оба этих подхода.

4. Источник данных

Набор данных для этого анализа поступает от Kaggle, популярного онлайн-сообщества или платформы данных для специалистов по данным.

Понимание данных

Комплект поездов состоит из более 1,4 миллиона изделий, а испытательный комплект этапа 2 - более 3,4 миллиона изделий.

Список имен полей в данных поезда / теста:

  • train_id или test_id - уникальный идентификатор листинга
  • name - название товара, указанное продавцом. Обратите внимание, что во избежание утечки данных цены в этом поле удалены и представлены как [rm]
  • item_condition_id - здесь продавец предоставляет условия товара.
  • category_name - список категорий для каждого элемента.
  • brand_name - соответствующие бренды, которым принадлежит каждый товар.
  • цена - это наша целевая переменная, представленная в долларах США (столбец отсутствует в test.tsv)
  • доставка - 1, если стоимость доставки оплачивается продавцом, и 0, в противном случае.
  • item_description - здесь приводится описание каждого предмета, а цены удалены и представлены как [rm]

Беглый взгляд на данные, показанные ниже:

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

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

print(train.isnull().sum())

Из вышеприведенного вывода мы понимаем, что три столбца, а именно название категории, название бренда и описание товара, содержат нулевые значения. Среди них в названии бренда много пропущенных значений (~ 632к). Имя категории столбца включает ~ 6,3 тыс. Значений NULL, в то время как описание элемента содержит всего 4 значения NULL. Давайте разберемся с ними позже, когда мы будем создавать модели, а теперь мы углубимся в особенности EDA.

5.1 Одномерный анализ category_name

В наборе обучающих данных всего 1287 категорий. Ниже показан фрагмент кода для подсчета:

График для category_count представлен ниже:

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

Название каждой категории состоит из 3 подразделов, разделенных знаком «/», и имеет обозначение основная категория / подкатегория1 / подкатегория2. Важно разделить их и включить в качестве новых функций, которые позволят нашей модели делать более точные прогнозы.

разделение категорий

В нашем анализе мы разделяем каждую category_name на main_category, sub_cat_1, sub_cat_2 с помощью функции ниже.

Кроме того, количество категорий в каждом из трех столбцов подсчитывается с помощью строки кода ниже:

main_category_count_te = test['main_category'].value_counts()
sub_1_count_te = test['sub_cat_1'].value_counts()
sub_2_count_te = test['sub_cat_2'].value_counts()

Приведенный выше анализ показывает, что существует 11 основных категорий, которые, в свою очередь, разделены на 114 подкатегорий (подкатегория 1), которые затем распределяются по 865 конкретным категориям (подкатегория 2) в данных поездов. Код для построения категорий показан ниже:

Гистограммы 10 лучших элементов в каждом столбце категории после разделения приведены ниже:

5.2 Одномерный анализ brand_name

Всего существует 4807 уникальных брендов, из которых 10 наиболее часто встречающихся брендов показаны на гистограмме ниже:

код построения здесь:

#https://www.datacamp.com/community/tutorials/categorical-data
sns.barplot(x=brand_count[:10].values, y=brand_count[:10].index)
plt.title('Frequency Distribution of top 10 brand names')
plt.xlabel('Counts', fontsize=12)
plt.show()

Отмечается, что бренды PINK и NIKE, за которыми следует Victoria’s Secret, занимают лидирующие позиции.

5.3 Одномерный анализ цены

Поскольку цена числовая, мы используем функцию describe (), чтобы получить статистическую сводку. Ниже приведен фрагмент кода:

train.price.describe()

Функция description () объясняет, что максимальная цена для любого продукта составляет 2009 долларов, а минимальная цена - 0. Также отмечается, что 75% ценового диапазона продукта приходится ниже 29 долларов, а 50% цены продукта - ниже 17 долларов, в то время как 25 % от стоимости товара ниже 10 долларов. Средний ценовой диапазон - 26,7 долларов.

Распределение ценовой переменной

Построение распределения цели

plt.title("Distribution of Price variable")
plt.xlabel("Price(USD)")
plt.ylabel("No. of products")
plt.hist(train['price'],bins=30)

Функция price следует за наклонным вправо распределением, как видно из приведенного выше графика. Как обсуждалось здесь, асимметричное распределение приведет к высоким значениям среднеквадратичной ошибки (MSE) из-за точек на другой стороне распределения, и если данные распределены нормально, MSE будет ограничена. В результате преобразование журнала для характеристики цены неизбежно, и модель также может работать лучше, если данные распределены нормально (см. Здесь). Это делается с помощью следующего фрагмента кода:

Ниже показан график переменной price после преобразования журнала.

5.4 Одномерный анализ item_description

Мы рисуем облако слов, чтобы узнать, какие слова преобладают в описании. Соответствующий фрагмент кода с графиком, показанным ниже:

Из облака слов выше можно заметить часто встречающиеся слова в нашем item_description.

Wordcount описания

Само по себе текстовое описание может быть важной особенностью этой проблемы (ссылаться), то есть для моделей машинного обучения, и помогло бы в процессе встраивания для моделей глубокого обучения.

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

Коробчатый сюжет

sns.boxplot(train['description_wc'],orient='v')
plt.title("Box plot of description word count")
plt.xlabel("item_description")
plt.ylabel("No. of words")
plt.show()

Можно заметить, что большинство описаний содержат примерно менее 40 слов.

График плотности

plt.figure(figsize=(10,3))
sns.distplot(train['description_wc'], hist=False)
plt.title('Plot of the word count for each item description')
plt.xlabel('Number of words in each description')
plt.show()

График плотности количества слов описания наклонен вправо.

Сводные статистические данные

Сводная статистика показывает, что минимальная длина item_description равна 1, а максимальная - 245. Средняя длина составляет примерно 25 слов. Меньшее количество описаний длиннее, в то время как большинство из них содержат менее 40 слов, как мы можем видеть на графике.

5.5 Одномерный анализ item_condition_id

Диапазон порядкового категориального признака item_condition_id составляет от 1 до 5. Обычность заключается в том, что элемент с условием 1 является лучшим, а элемент с условием 5 - худшим (на основе ссылки this) . Гистограмма item_condition_id показана ниже:

Большинство выставленных на продажу товаров находятся в хорошем состоянии, как показано на гистограмме выше. Следовательно, элемент с условием 1 выше, за ним следуют условия 3 и 2, а элементы с условиями 4 и 5 ниже.

5.6 Двумерный анализ

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

Цена против доставки

Как всегда, построение сюжета поможет нам лучше понять ситуацию. Код и график показаны ниже:

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

Цена по сравнению с длиной описания

Построение обеих переменных, как мы делали выше.

plt.scatter(train['description_wc'],train['price'],alpha=0.4)
plt.title("Price Vs Description length")
plt.xlabel("Description length")
plt.ylabel("Price(USD)")
plt.show()

Примечательно, что товар с более коротким описанием, как правило, имеет более высокую цену, чем товары с более длинным описанием.

6. Существующие подходы

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

MLP

Павел и Константин выиграли этот конкурс своим удивительным решением. Они использовали подход на основе нейронных сетей с прямой связью, то есть простой MLP, который эффективно работает с разреженными функциями. Некоторые из выполненных уловок предварительной обработки включают быстрое кодирование для категориальных столбцов, выделение текстов с использованием стандартного PorterStemmer, BoW-1,2-граммы (с / без TF-IDF), конкатенацию различных полей, таких как name, название бренда и описание товара в одном поле. У них была исключительная итоговая оценка 0,37 (ссылка).

CNN

В этом исследовании автор использовал архитектуру CNN вместе с max-pooling для векторизации name и item_description по отдельности. Он использовал предварительно обученные векторы GloVE для встраивания слов, а встраивание - это общий поиск по name и item_description. Некоторые полезные приемы, которые используются: пропуск соединений числовых и категориальных функций с низкой мощностью перед последним полностью подключенным слоем и средний уровень объединения слов. Автор получил поразительную оценку 0,41 от единственной модели глубокого обучения (ссылка).

ЛГБМ + Ридж

Здесь автор применил древовидную структуру повышения градиента под названием LightGBM для более быстрого обучения и повышения эффективности. В исследовании также использовалась простая и быстрая модель Риджа для обучения. Некоторые методы включают: использование CountVectorizer для векторизации столбцов name и category_name, TfidfVectorizer для item_description, создание фиктивных переменных для item_condition_id и shipping_id и LabelBinarizer для brand_name. После объединения двух моделей автор получил оценку 0,44. ("ссылка на сайт")

ГРУ + 2 Ридж

В этом исследовании автор построил связанную модель с использованием RNN, Ridge и RidgeCV, которая дала RMSLE примерно 0,427. Некоторые полезные приемы, применяемые здесь, включают использование слоев GRU для текстовых функций, запланированного спада обучения для обучения RNN, использование небольших пакетов с 2 эпохами и более 300 тысяч функций для моделей Ridge (ссылка).

7. Подготовка данных

Очистка данных

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

#https://www.kaggle.com/valkling/mercari-rnn-2ridge-models-with-notes-0-42755
train = train.drop(train[(train.price < 3.0)].index)

Обработка нулевых / отсутствующих значений

Из EDA мы узнали, что 3 столбца, а именно, category_name, brand_name, и item_description, содержат нулевые значения. Поэтому мы заменяем их соответствующими значениями. Мы делаем это с помощью следующей функции:

Поезд-тестовый сплит

В нашем анализе поле price является целевой переменной «y». Важно оценить пригодность наших регрессионных моделей на основе функции ошибок, и нам нужно, чтобы наблюдались «y» и « ты предсказал. К сожалению, у нас нет наблюдаемого целевого значения для оценки наших моделей. Следовательно, обучающие данные делятся на обучающие и тестовые наборы.

Для базовых моделей линейной регрессии набор тестов состоит из 10% данных, а для моделей глубокого обучения набор тестов включает 20% всех данных.

Масштабирование цели

Стандартизация целевой переменной выполняется с помощью функции StandardScaler из sklearn.preprocessing, как показано ниже:

Поскольку наши целевые переменные стандартизированы с использованием вышеуказанной функции, важно масштабировать прогнозы обратно (обратное преобразование), прежде чем мы рассчитаем метрику ошибки. Это делается с помощью следующей функции:

8. Описание модели

Давайте подробно рассмотрим конвейер машинного обучения и глубокого обучения.

8.1 конвейер машинного обучения

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

Конструкция функции

При выполнении EDA мы добавляем четыре новые функции, т. Е. Генерируем три новых столбца, разделяя столбец category, и добавляем количество слов в текстовое описание из item_description. Кроме того, мы создаем еще один столбец на основе длины текста имени. Итак, у нас есть пять новых функций.

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

Кодирование категориальных признаков

Мы сразу же кодируем категориальные функции, такие как category_name, main_category, sub_cat_1, sub_cat_2, brand_name с помощью функции CountVectorizer из научного набора изучите и закодируйте shipping_id и item_condition_id с помощью функции get_dummies (). Ниже приведен код того же:

Векторизация текстовых объектов

Мы кодируем текстовые функции name и item_description с использованием BoW (с уни- и би-граммами) и TFIDF (с уни-, би- и триграммами) соответственно. Функция для этого же дана ниже:

код, использующий вышеуказанную функцию, приведен ниже:

Матрица характеристик

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

Итоговая матрица состоит из более чем 206 тысяч функций. Действительно, это много возможностей.

Модели первого разреза

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

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

В нашем анализе мы сначала экспериментируем с простыми линейными моделями, такими как линейная регрессия, регрессор опорных векторов, и для обеих моделей мы выбираем SGDRegressor из sci-kit learn. После этого мы тренируем регрессию Риджа.

Мы гиперпараметры настраиваем параметры для всех моделей с помощью GridSearchCV, используя следующую функцию:

Линейная регрессия

Линейная регрессия направлена ​​на уменьшение ошибки между прогнозом и фактическими данными. Мы тренируем простую линейную регрессию с помощью SGDregressor с настройкой «squared_loss» и гиперпараметром для разных альфа. Код, показанный ниже, такой же:

Эта простая модель дала RMSLE 0,513 для наилучшего альфа = 0,001 по нашим тестовым данным.

Регрессор опорных векторов:

Поддерживающий векторный регрессор (SVR) предназначен для прогнозирования функции, которая отклоняется от фактических данных на величину не более чем epsilon ε (ссылаться). Мы обучаем SVR с помощью SGDRegressor с параметром epsilon_insensitive в качестве настройки потерь и гиперпараметров для альфа-канала. Эта модель произвела RMSLE 0,632 для альфа = 0,0001 на наших тестовых данных. В нашем случае простая линейная регрессия работает намного лучше, чем машина опорных векторов. Код для SVR приведен ниже:

Хребтовая регрессия

Ридж-регрессия является ближайшим родственником линейной регрессии с некоторой регуляризацией, заданной L2-нормой, чтобы предотвратить переобучение. Мы получили хорошее соответствие, используя библиотеку sci-kit learn Ridge в рамках линейной модели с RMSLE 0,490 для альфа = 6,0. Ниже приведен код модели Ridge с настройкой гиперпараметров:

RidgeCV

Это оценщик перекрестной проверки, который может автоматически выбирать лучший гиперпараметр (см .: здесь). Другими словами, регрессия Риджа со встроенной перекрестной проверкой. Как сказано в этом ядре, что это работает лучше, чем Ridge для нашей проблемы, мы построили модель RidgeCV, которая дала RMSLE 0,442 для альфа 6.0 на наших тестовых данных. Код для того же показан ниже:

Мы также можем заметить, что RidgeCV превзошел наши первые модели сокращения. Чтобы еще больше улучшить оценку, мы изучаем нейронные сети, которые используют RNN для решения этой проблемы.

8.2 конвейер глубокого обучения

Рекуррентные нейронные сети (RNN) хорошо справляются с обработкой информации о данных последовательности (для получения дополнительной информации, пожалуйста, обратитесь). Мы используем Gated Recurrent Units (GRU) для построения регрессоров с использованием нейронных сетей, нового типа RNN, который быстрее обучается. Из GRU мы получаем векторы признаков текста для столбцов name, item_description после встраивания, а для других категориальных полей мы используем встраивание с последующим выравниванием. Все это вместе формирует 80-мерный вектор функций для нашей модели глубокого обучения.

Вложения

Подготовка данных для конвейера глубокого обучения (DL) выполняется так же, как и для конвейера машинного обучения, за исключением разделения на поезд и тест. Здесь мы считаем, что 20% обучающих данных являются тестовыми. Как упоминалось ранее, конвейер DL требует плотных векторов, а внедрение нейронной сети является эффективным средством представления наших дискретных переменных в виде непрерывных векторов (ссылаться).

Токенизация и заполнение

Слой внедрения требует, чтобы ввод был целочисленным (отсылка). В результате мы кодируем текстовые данные с помощью Tokenizer API, и вот фрагмент кода для того же:

Скриншот примера данных описания после токенизации показан ниже:

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

Ниже показан код для выбора длины отступа для текста описания:

print("% of sequence containing len > 160 is")
len(X_train[X_train.wc_desc > 160])/X_train.shape[0]*100

На изображении выше мы видим, что процент точек, длина которых превышает 160, составляет 0,7, что составляет ‹1%. Следовательно, мы дополняем текст описания значением 160. Аналогичным образом мы вычисляем для столбца name и выбираем 10. Соответствующий фрагмент кода показан ниже:

print("% of name containing len > 10 is")
len(X_train[X_train.wc_name > 10])/X_train.shape[0]*100

Кроме того, мы кодируем категориальные переменные на основе ранжирования, и фрагмент кода показан ниже:

Примечание. Все вложения изучаются вместе с самой моделью.

Весь конвейер подготовки данных, а также кодирование, разметка и заполнение выполняется следующей функцией:

Сетевая архитектура

Дизайн сети для текущего анализа вдохновлен этим ядром. Кроме того, мы экспериментируем с дополнительными выпадающими слоями и слоями пакетной нормализации в этой структуре. Ниже приведен фрагмент кода для построения нашей сети:

Взгляните на нашу сеть ниже:

Модели глубокого обучения

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

Обучение

Для обучения Model 1 и Model 2 мы используем оптимизатор Adam со скоростью обучения по умолчанию. Далее эти модели обучаются для 3 эпох с удвоением размера пакета. RMSLE по нашим тестовым данным для моделей 1 и 2 составляет 0,436 и 0,441 соответственно. Обучение модели проиллюстрировано ниже:

Модели 3 и 4 обучаются с использованием оптимизатора Adam с запланированной скоростью обучения. Всего 3 эпохи с размером пакета 1024. Для эпох 1 и 2 скорость обучения составляет 0,005, и мы уменьшаем ее до 0,001 для последней эпохи. Обучение модели 4 представлено ниже:

Модель среднего ансамбля

Усреднение модели - это метод ансамблевого обучения, позволяющий снизить высокую дисперсию нейронных сетей. В настоящем анализе мы объединяем модели, которые обучаются в условиях, которые различаются их регуляризацией выпадения (отсылка). На обучение каждой модели уходит от 30 до 35 минут. Учитывая время обучения, мы включаем только две модели для ансамбля. Таким образом, из четырех моделей создаются два ансамбля, то есть один из моделей 1 и 2, который достигает RMSLE 0,433, а другой из моделей 3 и 4 с RMSLE 0,429.

Код для объединения моделей 1 и 2 показан ниже:

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

Окончательные модели

Чтобы получить окончательный результат от Kaggle, мы тренируемся в ядре Kaggle. Мы строим две модели, идентичные моделям 3 и 4, для сборки. Ниже представлен снимок экрана с моделями, обученными в Kaggle:

Объединение средних моделей для этих двух моделей дает 0,428 в общедоступной оценке Kaggle по нашим окончательным тестовым данным, содержащим ~ 3,4 миллиона продуктов. Таким образом, мы получаем результат в 10% лучших в таблице лидеров.

9. Результаты

Ниже показан сводный снимок экрана с выходными данными модели:

Выходные данные конвейера машинного обучения:

Выходной снимок из конвейера глубокого обучения:

Снимок экрана с выводом ансамбля:

Оценка отправки Kaggle:

10. Мои попытки улучшить RMSLE

Как правило, ядра конкурентов Kaggle являются дидактическими источниками. Настоящий анализ основан на этом, этом и некоторых решениях победителя. Следующие стратегии улучшили нашу оценку:

  • Включение игнорируемых слов для анализа. Одним из ключей к этой проблеме является то, что удаление игнорируемых слов в текстовом описании / названии влияет на оценку RMSLE. Сохранение игнорируемых слов улучшает оценку.
  • Рассмотрение дополнительных текстовых функций для построения моделей: Всего мы получаем 206 тысяч функций, включая 200 тысяч только на основе текстовых данных. Повышение важности текстовой информации в этой задаче улучшает оценку.
  • Би-граммы и триграммы: В НЛП принято включать n-граммы, такие как би-граммы, триграммы и т. д., если мы намерены добавить некоторую семантику во время векторизации. В нашем исследовании мы применяем уни- и биграммы, используя «Пакет слов» для name, и уни-, би- и триграммы для item_description, используя TFIDF.
  • Фильтрация данных на основе цены: Mercari не позволяет публиковать товары стоимостью менее 3 долларов США. Таким образом, те строки, в которых цена продукта меньше 3 долларов, будут ошибочными точками. Их удаление поможет модели работать лучше.
  • Модельное обучение с небольшим размером пакета и несколькими эпохами: использование пакета размером 1024 с запланированным обучением улучшило оценку
  • Объединение двух моделей нейронных сетей: эта стратегия является эксклюзивной для текущего исследования, которое подняло оценку выше в таблице лидеров. Мы выполнили прогнозный анализ, обучив две модели нейронных сетей и построив их ансамбль.

11. Будущая работа

Можно улучшить счет, изучив следующие варианты:

  1. использование многослойных перцептронов, так как это популярно для решения этой проблемы
  2. использование CNN в сочетании с RNN для обработки текстовых данных
  3. добавление дополнительных слоев ГРУ или дальнейшая тонкая настройка

Это некоторые из возможностей, которые мы хотели бы изучить позже.

12. Репозиторий LinkedIn и GitHub

Вот мой профиль LinkedIn, чтобы подключиться ко мне. Пожалуйста, обратитесь к моему репозиторию GitHub, чтобы просмотреть полный код.

13. Ссылки

Https://github.com/pjankiewicz/mercarisolution/blob/master/presentation/build/yandex.pdf