Инженеринг и анализ на характеристиките

Решаване на предизвикателството за анализ на пазарната кошница на Instacart с машинно обучение за подобряване на изживяването на клиента при пазаруване.

Както видяхте в последния ми блог, обсъдихме изложението на проблема и също така направихме задълбочено EDA на данните, предоставени от Instacart. Ако не сте виждали последния ми блог, вижте го тук .

Това е част 2 от поредицата от три части на моя блог за анализ на пазарната кошница на Instacart.

Други части от тази серия можете да намерите тук:

В тази част ще разгледаме някои техники за инженеринг на функции, за да генерираме нови функции в нашите данни, които ще ни помогнат да разрешим проблема си по-добре.

Съдържание :

  1. Описание
  2. Генериране на нови функции
  3. Едномерен анализ на нови функции
  4. Създаване на окончателни данни за моделно обучение
  5. Препратки

Описание:

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

Генериране на нови функции:

  1. Брой поръчки за всеки потребител:

Тази функция помага да се определи колко поръчки е направил всеки потребител общо до момента.

2. Дължина на поръчката:

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

3. Важност на поръчката:

Важността на поръчката се определя тук като съотношението на номера на поръчката (напр. 1-ва, 2-ра поръчка на клиент) към общия брой поръчки, направени от потребителя в миналото. Това дава по-голяма тежест на последните поръчки. По този начин се придава по-голямо значение на скорошното пазарно поведение. важност на поръчката = номер_на_поръчка/брой_поръчки.

4. Значение на продукта:

Тази функция придава по-голямо значение на продуктите, които се добавят по-рано в количката за всяка поръчка. Дефинира се като (дължина на поръчката - add_to_cart_order + 1 ) / order_length. Това определя важността на продукта във всяка поръчка.

5. Рейтинг на важност:

Тази функция е дефинирана за всеки уникален продукт и двойка поръчка. Това се определя като product_importance, умножено по order_importance.

6. Сбор от оценка на важността:

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

Характеристики за пренареждане:

7. Брой повторни поръчки:

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

8. Съотношение на пренареждане:

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

Едномерен анализ на новогенерирани характеристики

Функция Num_orders – Брой поръчки за потребител.

Във функцията num_orders определено можем да видим стойности, които предпочитат пренаредената целева променлива. Междуквантилният обхват (IQR) на num_orders, където продуктът не е пренареден, е в диапазона от 10 до 35. Докато IQR обхватът за пренаредените продукти е от 19 до 47. Следователно можем да заключим, че по-високата стойност на num_orders, т.е. общите поръчки на потребителя са високи тогава шансовете за повторни поръчки са високи.

Важност на поръчката:

В горните диаграми също можем да наблюдаваме, че по-високият order_importance има по-голяма плътност на пренареждане. Също така диапазонът на IQR (интерквантилният диапазон. 25-ти до 75-ти персентил) на order_importance е по-висок за пренаредени продукти. По този начин тази функция също ще ни помогне при определянето на пренаредени продукти.

Важност на продукта:

В кутия графика можем да наблюдаваме, че IQR е висок при повторни поръчки, когато стойността на характеристиката за важност на продукта е висока. Също така в диаграмата на цигулка можем да видим, че плътността и средната стойност на стойностите на важност на продукта са по-високи, когато продуктът се пренареди.

Оценка на важност:

Тук също можем да видим „непренареден“ продукт с висока плътност, когато important_score е нисък в pdf.

Диапазонът на IRQ е от по-високата страна, т.е. от 0,18 до 0,5 за пренаредени продукти. Докато IQR за „непоръчани“ продукти е в долния диапазон, т.е. 0,02 до 0,3.

В диаграмата на цигулка също можем да видим, че плътността на точките е по-висока, когато стойността на important_score е близо до 0.

Сума оценка за важност:

Горната диаграма на важния_резултат дава много хубаво обяснение дали продуктът е пренареден или не. Можем да видим, че IQR на функцията без „не е пренаредена“ е в много по-малък диапазон (0–1). Докато IQR за функция w.r.t „поръчан“ е от 0 до 6. 100-ият процентил също е в диапазона от 0 до 0,2 за „не е пренареден“ и 0 до 10 за пренаредени продукти.

Нашата последна рамка с данни:

След почистване, премахване на излишни функции и включване на новогенерирани функции, нашата рамка от данни ще бъде готова за обучение, както е показано по-долу.

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

И така, нашата крайна рамка с данни ще изглежда така:

Създайте данни за обучение и тестове

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

След това ще обединим това с нашата рамка с данни orders_with_order_products, използвайки ляво съединение. За повече информация относно операциите за присъединяване вижте тази връзка .

След това ще филтрираме редовете с колона eval_set като влак.

Сега ще обединим, използвайки ляво присъединяване order_products__train.csv към горната рамка с данни data_train върху уникална двойка идентификатор на продукт и идентификатор на поръчка. Правим това, защото искаме да получим целевата променлива, т.е. пренаредена колона за нашата двойка поръчка и продукт.

Можем да видим някои Nan стойности в пренаредената колона. Това се случва, защото в данните за влака имаме някои поръчки, които са поръчки за първи път. Ние просто ще им приписваме стойност 0.

След премахване на ненужните колони нашата рамка с данни за влак изглежда така.

По подобен начин създайте тестови данни:

Така че сега нашите данни ще изглеждат нещо подобно.

Най-накрая, след много анализ на данни и инженеринг на функции, ние сме готови с нашите окончателни кадри с данни, върху които да обучим нашия модел.

В следващата част на това решение ще видим стратегиите за моделиране.

В следващия раздел ще обсъдим:

  • Моделиране с помощта на различни алгоритми за машинно обучение и дълбоко обучение.
  • оптимизиране на резултатите и избор на най-добрия модел.
  • Създаване на файл за изпращане в необходимия формат.

Прогноза с помощта на различни модели може да бъде намерена тук.

Можете да намерите кода в моя профил в github .

Връзка към моя профил в Linkedin

Референции: