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

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

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

DataSet

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

Здесь product обозначает тип продукта Television, AC.etc, а brand обозначает марку продукта. Предположим, что cus_points - это числовое значение, обозначающее покупательную способность клиента.

Предсказать: бренд продукта А

Анализ данных

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

Также купил Trend

Мы также можем проанализировать тенденцию к покупкам продукта D, используя совместную фильтрацию элементов данных. Мы можем создать матрицу совпадения, кодируя события покупок в двоичном формате с помощью 1 для продукта, имеющего ту же марку, что и продукт A и 0 в противном случае.

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

from sklearn.metrics import jaccard_similarity_score
cor = also_bought.corr(method=lambda x, y: jaccard_similarity_score(x, y))

Product N, D и BD имеют высокую корреляцию с Product A.. Они покупаются у одного и того же бренда в большинстве случаев, чем _6 _, _ 7_ и I.

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

Условная зависимость

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

Согласно вики, условная зависимость - это связь между двумя или более событиями, которые зависят от наступления третьего события. Например,, если A и B - два события, которые по отдельности увеличивают вероятность третьего события C

Анализ типа клиента

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

Анализ клиентских точек

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

Brand 10, 18 и 19 покупаются клиентом, у которого больше очков покупки. Возможно, это связано с дороговизной продукта.

Метка анализа прогноза (несбалансированный набор данных)

Ниже приведен график количества брендов продукта А, и мы видим, что этикетки несбалансированы. Бренд 3 и бренд 8 имеют больший набор данных, чем другие.

В большинстве случаев такой набор данных будет сбалансирован либо за счет увеличения меньших выборок, либо за счет уменьшения более высоких выборок. Но в нашем случае главные влияющие данные - это условная зависимость. Изменение данных повлияет на эту тенденцию к покупкам и может снизить точность. Опять же, увеличение количества покупок определенного бренда также является информацией, которую следует учитывать при прогнозировании. Поэтому мне не нужно делать повторную выборку с этими данными.

Выбор модели прогноза

Анализируя приведенные выше данные, мы можем понять, что событие ‘buying related product from same brand’ имеет большее влияние на прогнозирование метки. Таким образом, бренд продукта A можно предсказать, измерив условное распределение вероятностей всех событий покупки этих продуктов.

Условная вероятность - это мера вероятности наступления события при условии, что произошло другое событие.

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

Даже генеративные классификаторы, такие как наивный байесовский анализ, можно использовать для прогнозирования ярлыка. Но генеративные классификаторы, такие как Naive Bayes, хорошо работают только с меньшим набором данных. При увеличении объема данных дискриминантные классификаторы работают лучше, поскольку генеративная модель достигает асимптотического решения для меньшего количества обучающих наборов, чем дискриминативная модель. Это хорошо объясняется в экспериментальной статье Эндрю Нг и Майкла Джордана.

Дискриминантная модель ‌ измеряет условное распределение вероятностей p(y|x), которое можно использовать для прогнозирования y (метка для прогнозирования) от x (входные данные).

Генеративная модель ‌ измеряет совместное распределение вероятностей p(x,y) и делает прогноз p(y|x), используя теорему Байеса.

Давайте начнем с самого популярного дискриминирующего классификатора, логистической регрессии. Также мы перекрестно проверяем с генеративным классификатором, таким как наивный байесовский классификатор и другими дискриминирующими классификаторами.

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

Давайте сгруппируем данные с помощью cust_id и перенесем продукт в столбцы,

Очистка грязных данных

Удаление всех значений none из метки прогноза (продукт A)

Поскольку данные о продукте являются наиболее важными функциями, мы можем отбросить строки, у которых нет истории покупок, кроме продукта А. Итак, отбрасываем строки со всеми столбцами продуктов, не имеющими значения.

Разделение данных обучения и тестирования

Извлеките обучающую метку y и входные данные x из сгруппированных данных и разделите набор данных для обучения и тестирования в соотношении 60:40.

Закодированные события покупки продукта

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

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

Закодированные категориальные данные и масштабированные непрерывные данные

Закодированное значение типа клиента с использованием One Hot Encoding и масштабирование точек клиента с использованием масштабирования минимум-максимум.

Построение модели прогноза

Обучил модель с помощью логистической регрессии

Предварительно обработайте тестовые данные и оцените точность модели.

Мы получаем 82.8% точность с логистической регрессией

Сравните с наивным байесовским

Когда мы пробуем те же данные с наивным байесовским методом и получаем 78% точность

Для k-кратной перекрестной проверки логистическая регрессия и наивный байесовский метод получают оценки точности 81.55% и 76.56%. Он показывает, что логистическая регрессия работает лучше, чем наивный байесовский метод.

Сравните с другими дискриминирующими классификаторами

Сначала мы можем попробовать с одним типичным дискриминативным классификатором, машиной опорных векторов (SVM).

С машиной опорных векторов (линейное ядро)

С машиной опорных векторов (ядро Гаусса)

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

С ближайшим соседом по K (это дискриминационный классификатор?)

Иногда обсуждается, что KNN является дискриминационным или генеративным. Вы можете увидеть дискуссию здесь. Несмотря на то, что он попадает в какую-то дискриминационную категорию, его результаты ниже и почти такие же, как у Наивного Байеса.

Оценка модели

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

К-фолд перекрестная проверка

Во-первых, мы можем оценить точность с помощью перекрестной проверки K-Fold для обучающей выборки.

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

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

Здесь точки SVM (гауссовского) сгруппированы между лучшим и худшим набором данных. Он показывает, что SVM (по Гауссу) немного эффективнее, чем LR. Это может быть связано с их функцией потерь, поскольку логистические убытки расходятся быстрее, чем потеря петель.

SVM минимизирует потери шарниров, а логистическая регрессия минимизирует логистические потери.

Кривая ROC и кривая точного отзыва

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

Есть 4 параметра для интерпретации,

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

Кривые рабочих характеристик приемника (ROC) и Кривые точности-отзыва служат для интерпретации прогнозов вероятностей.

Кривая ROC находится между True Positive Rate (Sensitivity) и False Positive Rate (1 — Specificity), а кривая Precision-Recall - между Precision и Recall.

Здесь

  • Отзыв \ Истинно положительный результат = Истинно положительный результат / (Истинный положительный результат + ложно отрицательный результат)
  • Точность = истинные положительные результаты / (истинные положительные результаты + ложные положительные результаты)
  • Частота ложных срабатываний = ложные срабатывания / (ложные срабатывания + истинно отрицательные результаты)

На приведенном выше графике площадь под каждой кривой (AUC) используется для суммирования навыков модели.

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

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

Но если объем данных растет, SVM будет работать ниже логистической регрессии.

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

Матрица неточностей и ее отчет

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

Отчет по классификации предоставляет точность, запоминаемость и оценку f1 по всем классификациям брендов и их среднее значение.

Здесь Точность измеряет точность прогноза, а Напомнить - показатель полноты прогноза. Оценка f1 - это средневзвешенное значение точности и запоминания.

Все три параметра с оценкой 0,8 выше выглядят обнадеживающе.

Ту же задачу можно использовать для построения системы рекомендаций с использованием логистической регрессии. Мы можем попробовать это с набором данных рекомендаций в следующей статье.

Francium Tech - это технологическая компания, специализирующаяся на поставке программного обеспечения высочайшего качества и масштабируемости на экстремальных скоростях. Цифры и размер данных нас не пугают. Если у вас есть какие-либо требования или вы хотите бесплатно проверить работоспособность вашей системы или архитектуры, напишите письмо на адрес [email protected], мы свяжемся с вами!