Не позволяйте никому обмануть вас; большая часть того, что делает ученый, является прославленной формой подсчета. И если бы у вас было несколько миллиардов пальцев, вы сами могли бы заниматься наукой о данных с одной стороны. В моей недавней работе с Кассандрой я обнаружил, что Кассандра очень хорошо умеет считать. Фактически, вы можете рассматривать Cassandra как гигантскую, распределенную, избыточную, «бесконечно» масштабируемую систему подсчета. Таким образом, для аналитических приложений, которые в значительной степени зависят от накопления счетчиков, Cassandra может быть полезным инструментом. В этом и следующем посте в блоге мы рассмотрим пару приложений для анализа больших данных, которые сильно зависят от подсчета, и продемонстрируем, как Cassandra может найти хорошее применение.
Допустим, вы управляете рекламной онлайн-компанией. Когда вы основали компанию, ваши клиенты были достаточно счастливы, чтобы просто разместить у вас рекламу и заняться грязной работой. Но теперь, в условиях растущей конкуренции, вы предоставляете своим клиентам аналитику обратной связи, чтобы сохранить свои конкурентные преимущества. И первое, что клиенты хотят знать, это как работает их реклама. Самый простой показатель для этого: коэффициент конверсии . Коэффициент конверсии — это часть всех кликов рекламы, которые приводят к фактическим покупкам. Это число может быть представлено в виде вероятности от 0 до 1 или в процентах от 0 до 100%. И самый простой способ оценить коэффициент конверсии, это посчитать! По сути, вам необходимо отслеживать, сколько раз было кликано по каждому объявлению и сколько раз такой клик приводил к возможной покупке продукта.
Вот как я бы собрал это в Кассандре. Сначала мы создаем таблицу для хранения всех наших показателей:
CREATE TABLE conversion_rate ( company text, ad text, product text, count counter, PRIMARY KEY (company, ad, product) )
Допустим, Apple является одним из ваших самых важных клиентов, и вы держите рекламу специально для iPhone, iPad и iPod. И сейчас Apple запускает новую рекламную кампанию с рекламой, соответствующей каждому из перечисленных продуктов. Мы будем называть эти объявления соответственно iPhoneAd, iPadAd и iPodAd. Когда кто-то нажимает на iPodAd, вы регистрируете его, обновляя Cassandra:
UPDATE conversion_rate SET count=count+1 WHERE company='Apple' AND ad='iPodAd' AND product='NO_PRODUCT';
Вам может быть интересно, product='NO_PRODUCT'
о чем. Именно так мы кодируем рекламные клики, независимо от того, была ли сделана покупка. Конечно, большую часть времени пользователь, который нажимает на объявление, немного осматривается и затем уходит. Но в этом случае давайте предположим, что этот пользователь продолжает покупать iPod:
UPDATE conversion_rate SET count=count+1 WHERE company='Apple' AND ad='iPodAd' AND product='iPod';
И так далее; много разных объявлений показывается разным пользователям. Некоторые пользователи нажимают на объявления, а некоторые из них продолжают покупать товары. В конце концов, маркетологи Apple приходят к нам, чтобы посмотреть, как идут дела с их новой рекламной кампанией. В частности, они хотят знать, какие объявления наиболее эффективны для их различных продуктов. Чтобы сделать это определение, все, что нам нужно сделать, это сделать один запрос:
SELECT ad,product,count FROM conversion_rate WHERE company = 'apple'
И результаты будут выглядеть примерно так.
ad | product | count ----------+---------------+--------- iPadAd | iPad | 210 iPadAd | iPhone | 3 iPadAd | iPod | 152 iPadAd | NO_PRODUCT | 17533 iPhoneAd | iPad | 7 iPhoneAd | iPhone | 1409 iPhoneAd | iPod | 4 iPhoneAd | NO_PRODUCT | 28131 iPodAd | iPad | 6 iPodAd | iPhone | 2 iPodAd | iPod | 15 iPodAd | NO_PRODUCT | 11299
Приведенные здесь результаты напрямую не отражают коэффициент конверсии, но если вы думаете об этом заранее, то держу пари, что вы видите, что мы близки. Вместо того, чтобы напрямую подсчитывать Apple, нам нужно сначала разделить количество кликов по рекламе, которые ведут к покупке, на общее количество кликов по рекламе. Например, здесь мы видим, что 17533 человека нажали на iPadAd, и это привело к 210 покупкам iPad. Это подразумевает коэффициент конверсии 210/17533 или примерно 1,2%. Если мы соберем это в хороший стол для клиента, он будет выглядеть примерно так:
IPad | iPhone | IPOD | |
iPadAd | 1,2% | 0,0% | 0,9% |
iPhoneAd | 0,0% | 5,0% | 0,0% |
iPodAd | 0,0% | 0,0% | 0,1% |
Теперь клиент сразу увидит, как его реклама показывается по всем продуктам. Например, мы видим, что реклама iPod неэффективна, в то время как реклама iPhone работает довольно хорошо. Но здесь есть и другая интересная информация; Посмотрите, сколько iPod продается через iPad. С некоторыми дальнейшими исследованиями, здесь может появиться возможность перепродать клиентов тому, какой продукт, iPod или iPad, имеет более высокую маржу.
Отзывы, представленные здесь, неоценимы для клиента, и для вас, компании, занимающейся онлайн-рекламой, сбор этих данных был просто куском! Но есть пара вещей, на которые стоит обратить внимание. 1) Имейте в виду, что при обновлении счетчиков в Cassandra вы получите меньшую пропускную способность, чем при обычных обновлениях. Зачем? Потому что для каждого приращения счетчика должен быть соответствующий фоновый запрос, чтобы убедиться, что состояние счетчика соответствует. Поскольку это делается в фоновом режиме, это мало влияет на задержку. 2) Счетчики могут быть немного сложнее обслуживать. Например, при увеличении или уменьшении кластера необходимо следить за тем, чтобы счетчики оставались в согласованном состоянии. Однако подробности обслуживания таблицы счетчика — это еще один пост в другой раз!
Далее — если вы хотите пойти еще дальше, ознакомьтесь с нашей следующей статьей об использовании Cassandra для создания наивного байесовского классификатора клиента .