„Данните се превръщат в новата суровина за бизнеса.“ – От Крейг Мънди

Системата за предложения и препоръки за цена на продукта е проблем, който е доста често срещан в днешно време в уебсайтове за електронна търговия. Когато бяха въведени термините „машинно обучение“ и „задълбочено обучение“, фирма като Mercari е пример за това, която е най-голямата общност за онлайн пазаруване в Япония, основана през 1991 г. и управлявана от пазар с JPY (японски йени) 10 милиона в месечни транзакции?

Mercari искаше да предложи предложения за ценообразуване на своите продавачи. Това е трудно, тъй като пазарът на Mercari позволява на търговците да продават почти всичко или всяка комбинация от артикули. Помислете за следните два продукта за продажба, за да разберете защо този проблем е толкова труден за решаване.

Един от тези пуловери струва $335, а другият струва $9,99. Можете ли да познаете кой на каква цена се продава? Малките детайли могат да означават големи разлики в цените.

Това е точно проблемът, който Mercari предизвика общността на Kaggle да реши, с парична награда от $100 000.

Съдържание

  1. Бизнес проблем.
  2. Източник на данни/Извличане на данни.
  3. Метрики за оценка.
  4. Съществуващо решение.
  5. Първи подход.
  6. Проучвателен анализ на данни (EDA).
  7. Инженеринг на характеристиките.
  8. Модели на машинно обучение.
  9. Модели за дълбоко обучение.
  10. Разгръщане.
  11. Бъдеща работа и подобрения.
  12. Препратки.

1. Бизнес проблем.

Най-същественият и труден аспект от пътуването в областта на науката за данни е разбирането на заявената постановка на проблема.

Mercari иска да създадем алгоритъм, който автоматично да препоръчва най-добрата цена на продукта въз основа на текстовите описания на артикулите, които потребителите предоставят, включително подробности като име на продуктова категория, име на марка, състояние на артикул и т.н.

Бизнес цел и ограничения

  • Целта е да се реши проблемът, като се предложи приемлива цена на продукта.
  • Проблемът налага изключително прецизно ценообразуване, дори и да отнеме много време, няма строги ограничения за забавяне.

Сега ще ви преведа стъпка по стъпка през методите, които използвах, за да се справя с този проблем, и как постигнах резултата си в първите 6% (на 121-ва позиция)в класацията на Kaggle. Състезанието приключи отдавна

2. Източник на данни/Извличане на данни.

Данните се предоставят от Kaggle, които идват в два файла: един за обучение, а другият за тестване. Файлът за обучение има около 1,4 милиона записа, докато тестовият файл има приблизително 3 милиона записа. Файловете са във формат .tsv и са с размер съответно 735MB и 325MB.

(1) име: - Заглавието на списъка. Обърнете внимание, че изчистихме данните, за да премахнем текст, който изглежда като цени (напр. Хубав продукт на $20), за да избегнем изтичане. Тези премахнати цени са представени като (Хубав продукт на).

(2) item_condition_id:-Състоянието на артикулите, предоставени от продавача.

(3) category_name:-Категория на списъка 3

(4) brand_name:-Марката на продукта.

(5) цена:-цената, на която артикулът е продаден. Това е целевата променлива, която ще предвидите. Единицата е USD. Тази колона не съществува в теста. tsv, тъй като това е, което ще предвидите.

(6) доставка: -1, ако таксата за доставка се заплаща от продавача и 0 от купувача.

(7) item_description:-пълното описание на артикула. Имайте предвид, че изчистихме данните, за да премахнем текст, който изглежда като цени (напр. $200)

3. Показатели за оценка.

RMSLE=Средна квадратна логаритмична грешка.

n=общ брой наблюдения.

p=предсказана стойност.

a=Действителна стойност.

log(y)=естествен логаритъм от y.

Изборът на метрика е поради следната причина.

  • Устойчив е на отклонения.
  • Той е мащабиран инвариант.

4. Съществуващо решение.

(a) Решение за първо място:-

Pawel & Konstantin спечели състезанието с голяма разлика със само 83 реда код.

• Свързване на функцията на името и характеристиката на марката.

• Свържете функцията item_description и categorical_name.

• Само 5 функции име, текст, пазаруване, описание_на артикул и цена.

• Приложете TFIDF Vectorizer в text и item_description.

Удвояването на размера на партидата не намалява скоростта на обучение

• Малко парализиране: - Те обучават 4 модела паралелно.

(b) Друго решение:-

• Прилагане на система за гласуване: - прогнозирана_цена=SGDRegression*0.60+Ridge*0.18+LGBM*0.10+Regressor*0.12.

• Приложете GRU модел, като използвате вграждане на Glove word вместо LSTM, защото отнема повече време от GRU.

• Използвайте прост многослоен перцептрон (дава нисък RMSLE)

• Направете 3 или 4 модела за дълбоко обучение и приложете системата за гласуване.

(c ) Mercari RNN + 2 Ridge модели с бележки (~0,42755)

  • Конструирайте модел, като използвате RNN, Ridge и RidgeCV, които постигат RMSLE приблизително 42%.
  • използвайте GRU слой за текстови функции повече от 300 000 функции за модели на Ridge.
  • използвайте малък размер на партида с епохи от 2.

5. Подход за първи разрез.

• Само две функции съдържат NULL стойности brand_name 42,67% и category_name 0,42%. Преобразувайте NULL стойности на brand_name в новата марка, наречена „missing_brand“ и отстранете редовете, съдържащи липсващото име на категория.

• В ценови характеристики минималната стойност на цената е 0$, а максималната стойност е 2009$. Мисля, че има отклонения в данните, защото нито един продукт не е безплатен. price follow log Нормално разпределение преобразувайте го в разпределение на Гаус.

• Category_name:-Съдържа две “/”.

харесва: -Жени/Бижута/Колиета.

Преобразувайте име на категория в три различни функции main_category, sub_category, item_category.

Данни, съдържащи текстова информация.

item_description и името се конвертират в

(i) Приложете BOW, TFIDF, Avg W2V, TFIDF Avg W2V, преобразувайте го в Sparse вектор, след което приложете модели на машинно обучение.

(ii) Приложете вграждане на Word Преобразувайте го в плътен вектор след тези модели за дълбоко обучение.

• Използвайте оценка на полярността за описание на артикул и характеристики на име

• Използвайте Ridge, Linear Regressor, Random Forest, AdaBoost Regressor, Bagging Regressor, XGBoost Regressor, LGBM Regressor изберете топ 4 най-добри модела и регресор за гласуване.

• Направете 3 или 4 модела за задълбочено обучение с функцията за вграждане на думи в текст с настройка на хиперпараметри и приложете регресор за гласуване.

6. Проучвателен анализ на данни (EDA).

EDA е най-важният компонент на всяко статистическо или математическо моделиране. EDA ни помага да разберем по-добре данните и да придобием нови прозрения. Само когато имаме задълбочено разбиране на данните, можем да приложим значително инженерство на характеристиките към тях.

Както можете да видите, има много нулеви стойности в колоната за името на марката. Същото е незначително в колоните за категории и описание на артикулите.

Анализиране на цената (целева променлива)

Разпределението на цените е силно изместено надясно, както може да се види. Можем също да забележим, че по-голямата част от разходите варират от нула до $250. Има само няколко неща, които струват повече от $250. Разпределението прилича на разпределението на Паретона външен вид.

Когато разглеждаме цените в различни процентили, може да получим по-добро разбиране на ценовото разпределение.

Можем да забележим, че 99 процента от разходите са под $170, като разгледаме цените в гореспоменатите процентили. Отклоненията са цени, които са много по-високи от средните. В момента има две налични опции. Нашият модел никога не се научава да прогнозира по-високи цени, тъй като отхвърляме извънредните стойности. Струва по-малко от $2000, но повече от $5.

Приложете трансформация на Box-Cox върху цената.

Можем да видим от графиката Q-Q, че разпределението не е изцяло Гаусово.

Анализиране на състоянието на артикула

Стойността 1 за id на състояние на артикул е най-често срещаната в данните. Има стоки със стойности на идентификатор на състояние на артикул 1 в над 6 милиона записа, докато стойността на идентификатор на състояние на артикул 5 е най-малко повтарящата се стойност сред всички продукти.

50-ият персентил на продуктите със стойност на идентификатор на състояние на артикул 5 е по-голям от този на продукти с други стойности на идентификатор на състояние на артикул. Почти всички диаграми имат един и същ диапазон, с изключение на стойността на ID на състоянието на артикула 5.

Можем да кажем, че log_price е равномерно разпределен за всеки от item_condition_id.

Анализира се състоянието на доставка

  • Можем да забележим, че по-голямата част от разходите за доставка се поемат единствено от купувачите. (56%)
  • 44,0% от продуктите, чиито такси за доставка се заплащат от продавачите.

Можем да кажем, че log_price е равномерно разпределен за всяка от стойностите за доставка.

Анализиране на колона за марка

Вземане на първите 15 марки на най-често повтаряните стоки в данните.

Като отправна точка се вземат първите 15 марки на най-скъпата марка в данните.

Облакът от думи на марка (Victoria Secret, липсва, розово, Michael kors, Adidas) е най-често срещаната марка.

Облак от думи на най-скъпата марка (розово, липсва, victoria secret, Nike) е най-скъпата марка.

Анализиране на колона с имена.

Вземане на първите 15 имена на продукти, които се появяват най-често в данните.

Bundle, Reserved и Converse са първите три имена на продуктите, които се повтарят най-много. Близо 2000 Bundle продукта са в данните.

Вземане на първите 15 имена на продуктите с най-висока цена в данните.

Облакът от думи на Име (Безплатна доставка, Черно, Марка, ново, Розово) е най-често срещаната дума.

Анализиране на колона main_category.

Вземане на топ 15 main_category на продуктите, които се повтарят най-много в данните. и близо 6 лакха продукти имат жени като основна_категория.

Вземайки топ 15 main_category на продуктите, които са предимно с по-високи цени в данните.

Облак от думи на main_category най-често срещаната дума е (жени, деца, електроника, красота).

Анализиране на колона sub_category.

Вземане на първите 15 под_категории на продуктите, които най-често се повтарят в данните. и близо 1,5 лакха продукти имат спортно облекло като под_категория.

Вземане на топ 15 sub_category на продуктите с най-висока цена в данните.

Облак от думи на sub_category най-често срещаната дума е (горнища блузи, видео игри, мобилни телефони, грижа за кожата).

Анализиране на колона item_category.

Вземайки топ 15 item_category на продуктите, които се повтарят най-много в данните, и близо 60k от продуктите имат панталони, чорапогащници, крачоли като своя item_category.

Вземане на топ 15 sub_category на продуктите с най-висока цена в данните.

Облак от думи на item_category най-често срещаната дума е (тениски, чорапогащници, грим, горнище на ризи).

Връзка между числови променливи.

7. Инженеринг на функциите.

Ще направим следните инженерни стъпки на характеристиките върху данните.

Разделете категориите на три части.

Предварителна обработка на текстови данни.

Следните стъпки бяха направени за предварителна обработка на текста.

  • Премахнете знака за емоджи.
  • Деконтрактирайте текста. Например не мога -› не мога; Аз съм -› аз съм; Ще -› ще
  • Премахнете препинателните знаци и излишните интервали
  • Премахнете стоп думите за item_description.

Добавете евтини и скъпи марки.

Оценка на настроението.

⑤ Въведете липсваща марка, като използвате колоната item_description и име.

8. Модели за машинно обучение.

Вече сме готови да използваме регресионни модели, за да се справим с нашия проблем. Но кой модел трябва да използваме с нашите данни??

SGD Regressor: Това е регресионен модел, който използва подхода „спускане на стохастичен градиент“. Резултатът от CV е 48,87%.

Ридж регресор: Това също е модел на линейна регресия с L2 регулация. Регулирането на L2 със сигурност ще намали теглата за по-малко важни характеристики, но за разлика от L1, никога няма да ги намали до нула. Това даде cv резултат от 48,89%.

CV на Ridge: Това също е модел на линейна регресия с L2 регулация. Доказано е, че това дава по-добри резултати в сравнение с горните два регресионни модела. Резултатът от CV е 45,24%.

LGBM: Това е олекотена версия на модела за усилване на градиента. Това е ансамбъл модел, базиран на дърво. Резултатът от CV е 48,36%.

След това прилагане на модела на ансамбъла.

9. Модели за дълбоко обучение.

В крайна сметка използвам техники за дълбоко обучение (DL). По-долу са дадени моделите, с които съм работил.

• Прости техники за дълбоко обучение (DL).

• LSTM модел с Glove Embedding, Fast Text Embedding и прост LSTM модел без тежест.

• 1D CNN с помощта на Glove Embedding, Fast Text Embedding и прост 1D модел без тежест.

  • Комбинация от 1D CNN & LSTM с помощта на бързо вграждане на текст.

Прост модел на многослоен персептрон (MLP).

„Животът е наистина прост, но ние настояваме да го направим сложен“ – Конфуций

Обучете три модела с една и съща архитектура, но различни проценти на отпадане и проценти на обучение.

Модел LSTM

Тук, за представяне на текст, използвах 2 слоя за вграждане от 300 измерения, които ще бъдат прекарани през слой LSTM. и обединете всичките 2 числови функции.

• Използвайте слой за вграждане на бърз текст, постигнете RMSLE приблизително 37,71 % при данни за влак и 41,68 % при данни от тест.

1D модел на CNN

Избрах да използвам 1D CNN слой в моя дизайн, тъй като бях сигурен, че DL моделите ще работят по-добре от стандартните ML техники. За текстови данни обикновено се използва 1D CNN слой. Той се върти само в 1D пространство (и текстовете са в 1D). Използвах вграждане на 300 измерения за текстовото представяне и обединих всички цифрови характеристики. Той ще бъде обработен от 1D CNN слой и след това от MaxPooling слой. Промених модела тук, опитвайки се да го направя малко по-труден чрез включване на прескачащи връзки и конкатенации.

Използвайте някаква сложна архитектура за 1D CNN + LSTM.

• Използвайте слой за вграждане на бърз текст, постигнете RMSLE приблизително 36 % при данни за влак и 44 % при данни от тест.

Използвайте по-сложна архитектура за 1D CNN + LSTM.

• Използвайте слой за вграждане на бърз текст, постигнете RMSLE приблизително 40 % при данни за влак и 42 % при данни от тест.

10. Разгръщане.

Използвах Flask, за да създам уеб приложение и след това внедрих модела в Amazon AWS.
Ето малко видео на моето внедрено приложение в действие.

11. Бъдеща работа и подобрения.

● Можем да опитаме други типове вграждания на думи като Word2Vec, Tfidf Word2Vec вграждания.

● Опитайте с повече данни. намерете данни от уеб скрапинг.

● За тази тема бих искал да опитам и конволюционни невронни мрежи.

12. Използвана литература.

Профил в LinkedIn



Github връзка