Рубрики
Без рубрики

Люди, которые купили X, также купили …? [Простое обслуживание nampy]

Этот Numpy One-LiLER решает важную проблему науки о данных: анализ ассоциации.

Автор оригинала: Chris.

Представьте, что вы Джефф Безос. Одной из самых успешных особенностей вашей компании Amazon является Рекомендация продукта Отказ «Люди, которые купили X, также купили Y.»

Грубо говоря, эта особенность одна эта особенность сделала вам миллиарды. Для вас Джефф Безос, рекомендация продукта является наиболее важным алгоритмом в мире, не так ли?

В этой статье вы узнаете о основах Ассоциации Анализ, основные алгоритмические рамки Рекомендация продукта используется компаниями, такими как Amazon или Netflix.

Я покажу вам основные идеи анализа ассоциации в одной строке кода. Одноклассный – это мощный рычаг. Не верь мне? Прочитайте этот научный пособие по данным и учиться

  • Идеи и применение важных научных научностей анализа ассоциаций анализа,
  • Как использовать важные функции numpy и python и концепции, такие как нарезка, понимание списка и операции мудрых элементов, и
  • Как проанализировать комплексный код строгими способами.

Но первые вещи первыми: что такое анализ ассоциации?

Концептуальное введение в анализ ассоциации

Ассоциативный анализ основан на исторических (клиентах) данных. Например, вы, возможно, уже прочитали рекомендацию «Люди, которые купили X, также купили Y» на Amazon. Эта ассоциация различных продуктов является мощной маркетинговой концепцией, потому что она не только связана друг с другом, но также бесплатные продукты, но это также предоставляет вам элемент «социального доказательства» – тот факт, что другие люди купили продукт, увеличивает психологическую безопасность для вас купить продукт самостоятельно. Это отличный инструмент для маркетологов.

Давайте посмотрим на практический пример:

Есть четыре человека Алиса, Боб, Луи и Лариса. Каждый человек купил разные продукты (книга, игра, футбол, ноутбук, наушники). Скажем, мы знаем, что каждый продукт купил все четыре человека, но не ли Луи купил ноутбук. Что бы вы сказали: Луи могут купить ноутбук?

Ассоциативный анализ (или совместная фильтрация) обеспечивает ответ на эту проблему. Основное предположение заключается в том, что если два человека исполняли подобные действия в прошлом (например, купили аналогичный продукт), более вероятно, что они продолжают выполнять подобные действия в будущем. Если вы внимательно посмотрите на приведенные выше профили клиентов, вы быстро поймете, что в Луи подобное покупаемое поведение Алису. И Луи, и Алиса купили игру и футбол, но не наушники и книгу. Для Алисы мы также знаем, что она купила записная книжка Отказ Таким образом, система рекомендации будет предсказать, что Луи также купит ноутбук тоже.

Давайте рассмотрим тему анализа ассоциаций более подробно. Готовый?

Рассмотрим пример предыдущего раздела: ваши клиенты приобретают отдельные продукты из корпуса из четырех различных продуктов. Ваша компания хочет Usell Products для клиентов. Таким образом, ваш босс говорит вам рассчитать для каждой комбинации продуктов, как часто они были приобретены одним и тем же клиентом – и найти две продукты, которые были приобретены чаще всего вместе.

Как применить анализ ассоциации в одной строке Numpy Code?

Проблема: найти два предмета, которые были приобретены чаще всего вместе.

## Dependencies
import numpy as np


## Data: row is customer shopping basket
## row = [course 1, course 2, ebook 1, ebook 2]
## value 1 indicates that an item was bought.
basket = np.array([[0, 1, 1, 0],
                   [0, 0, 0, 1],
                   [1, 1, 0, 0],
                   [0, 1, 1, 1],
                   [1, 1, 1, 0],
                   [0, 1, 1, 0],
                   [1, 1, 0, 1],
                   [1, 1, 1, 1]])


## One-liner (broken down in two lines;)
copurchases = [(i,j,np.sum(basket[:,i] + basket[:,j] == 2))
               for i in range(4) for j in range(i+1,4)]

## Result
print(max(copurchases, key=lambda x:x[2]))

Какой вывод этого одноклассника?

Объяснение и обсуждение Кодекса

Матрица данных состоит из исторических данных закупок с одной строкой на одного клиента и один столбец на продукт. Наша цель – найти список кортежей, так что каждый кортеж описывает комбинацию продуктов и как часто они были куплены вместе. Для каждого элемента списка первые два значения кортежа являются индексами столбцов (комбинация двух продуктов), а третье значение кортежного кортежа – это количество раз, когда эти продукты были куплены вместе. Вот пример такого кортежа:

(0,1,4)

Значение этого кортежа является следующим: клиенты, которые купили продукт 0, также купил продукт 1 четыре раза.

Так как мы можем достичь этой цели? Давайте сломаем одноклассник вниз (я переформатировал одноклассник, чтобы избежать того, чтобы линия слишком широкая).

## One-liner (broken down in two lines;)
copurchases = [(i,j,np.sum(basket[:,i] + basket[:,j] == 2))
               for i in range(4) for j in range(i+1,4)]

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

print([(i,j) for i in range(4) for j in range(i+1,4)])
# [(0, 1), (0, 2), (0, 3), (1, 2), (1, 3), (2, 3)]

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

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

np.sum(basket[:,i] + basket[:,j] == 2)

Мы используем нарезку для извлечения обоих столбцов i и j из исходного numpy массива. Затем мы добавляем их вместе элемент-мудрый. Для полученного массива мы проверяем элемент-мудрые, равно ли сумма 2. Почему? Потому что, если это, мы знаем, что обе продукты были приобретены вместе. Результатом этого дает нам логический массив с истинными значениями, если две продукты были приобретены вместе одним клиентом.

Используя свойство, которую Python представляет собой логические значения в качестве целых чисел, мы просто суммируем все элементы массива, чтобы получить количество клиентов, которые купили обе продукты i и j. Мы храним все результаты кортежей в списке «Coopurchases».

Хотите увидеть элементы списка?

print(copurchases)
# [(0, 1, 4), (0, 2, 2), (0, 3, 2), (1, 2, 5), (1, 3, 3), (2, 3, 2)]

Сейчас осталось одна вещь: найдите две продукты, которые были непрошедшены чаще всего.

## Result
print(max(copurchases, key=lambda x:x[2]))

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

## Result
print(max(copurchases, key=lambda x:x[2]))
# (1, 2, 5)

Второй и Третий продукты были приобретены вместе пять раз одним и тем же клиентами. Никакая другая комбинация продукта не достигает этого высокого Coopurcasing власть. Следовательно, вы можете сообщить своему боссу в Upsell Product 2 при продаже продукта 1 и наоборот.

Куда пойти отсюда?

Тщательное понимание Numpy Library имеет решающее значение для вашего научного образования данных. Каждый эксперт на сайте данных в пространстве Python знает, как использовать, применять и использовать Numpy Library для решения их проблем.

Если вы чувствуете, что вам нужно прочитать немного больше о Numpy Library, перейдите на мою бесплатное обслуживание Numpy в блоге.

Работая в качестве исследователя в распределенных системах, доктор Кристиан Майер нашел свою любовь к учению студентов компьютерных наук.

Чтобы помочь студентам достичь более высоких уровней успеха Python, он основал сайт программирования образования Finxter.com Отказ Он автор популярной книги программирования Python одноклассники (Nostarch 2020), Coauthor of Кофе-брейк Python Серия самооставленных книг, энтузиаста компьютерных наук, Фрилансера и владелец одного из лучших 10 крупнейших Питон блоги по всему миру.

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