„Данните се превръщат в новата суровина за бизнеса.“ – От Крейг Мънди
Системата за предложения и препоръки за цена на продукта е проблем, който е доста често срещан в днешно време в уебсайтове за електронна търговия. Когато бяха въведени термините „машинно обучение“ и „задълбочено обучение“, фирма като Mercari е пример за това, която е най-голямата общност за онлайн пазаруване в Япония, основана през 1991 г. и управлявана от пазар с JPY (японски йени) 10 милиона в месечни транзакции?
Mercari искаше да предложи предложения за ценообразуване на своите продавачи. Това е трудно, тъй като пазарът на Mercari позволява на търговците да продават почти всичко или всяка комбинация от артикули. Помислете за следните два продукта за продажба, за да разберете защо този проблем е толкова труден за решаване.
Един от тези пуловери струва $335, а другият струва $9,99. Можете ли да познаете кой на каква цена се продава? Малките детайли могат да означават големи разлики в цените.
Това е точно проблемът, който Mercari предизвика общността на Kaggle да реши, с парична награда от $100 000.
Съдържание
- Бизнес проблем.
- Източник на данни/Извличане на данни.
- Метрики за оценка.
- Съществуващо решение.
- Първи подход.
- Проучвателен анализ на данни (EDA).
- Инженеринг на характеристиките.
- Модели на машинно обучение.
- Модели за дълбоко обучение.
- Разгръщане.
- Бъдеща работа и подобрения.
- Препратки.
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. Използвана литература.
- https://medium.com/swlh/mercari-price-suggestion-challenge-an-end-to-end-machine-learning-case-study-4a6d833fa1c7
- https://medium.com/analytics-vidhya/mercari-price-suggestion-challenge-66500ac1f88a
- https://www.appliedaicourse.com/course/11/Applied-Machine-learning-course
- https://explosion.ai/blog/deep-learning-formula-nlp