使用购买频率对品牌熵进行加权
Weighting Brand Entropy using Frequency of Purchases
我有每个客户的购买清单,我正在尝试确定品牌忠诚度。基于此列表,我计算了每个客户的品牌熵,我将其用作品牌忠诚度的代理。例如,如果客户只购买 brand_a 那么他们的熵将为 0,并且他们非常忠诚于品牌。但是,如果客户购买了brand_a、brand_b等,那么他们的熵就会很高,不是很品牌忠诚。
# Dummy Data
CUST_ID <- c("c_X","c_X","c_X","c_Y","c_Y","c_Z")
BRAND <- c("brand_a","brand_a","brand_a","brand_a","brand_b","brand_a")
PURCHASES <- data.frame(CUST_ID,BRAND)
# Casting from PURCHASES to grouped_by CUST_ID
library(plyr)
library(dplyr)
library(data.table)
ENTROPY <- PURCHASES %>%
group_by(CUST_ID, BRAND) %>%
summarise(count = n()) %>%
dcast(CUST_ID ~ BRAND, value.var = "count")
ENTROPY[is.na(ENTROPY)] <- 0
# Calculating Entropy
library(entropy)
ENTROPY$entropy <- NA
for (i in 1:nrow(ENTROPY)){
ENTROPY[i,4] <- entropy(as.numeric(as.vector(ENTROPY[i,2:3])), method="ML")
}
# Calculating Frequency
ENTROPY$frequency <- ENTROPY$brand_a + ENTROPY$brand_b
ENTROPY
但是,我的问题是熵不考虑每个客户的购买数量。考虑以下情况:
1) Customer_X购买了3次,每次都是brand_a。他们的熵是0.
2) Customer_Z购买了1次,是brand_a。他们的熵是0.
自然地,我们更确定 Customer_X 比 Customer_Z 更忠诚于品牌。因此,我想通过频率对熵计算进行加权。但是,Customer_X: 0/3 = 0 和 Customer_Z: 0/1 = 0。
本质上,我想要一个聪明的方法让 Customer_X 对我的品牌忠诚度和 Customer_Z 有更高的价值。一种想法是使用 CART/Decision Tree/Random 森林模型,但如果可以使用巧妙的数学来完成,那将是理想的。
我认为您想要的指数是根据给定购买数量的熵的某种期望对熵进行归一化的。本质上,将一条曲线拟合到熵与购买次数的关系图中,然后将每个熵除以曲线给出的期望值。
现在这并不能解决熵为 0 的超级忠诚客户的问题。但我认为这里的问题略有不同:表面上的忠诚度是出于偶然(低计数)还是真实存在?这是一个关于客户忠诚度的明显问题。本质上,您想知道观察到这样一个数据点的概率。
如果 0 熵事件是您唯一的痛点,您可以根据数据中的购买次数计算只购买单个品牌的概率。
或者,您可以确定熵和购买次数的完整联合概率分布(而不仅仅是均值),例如通过密度估计,然后在给定购买次数的情况下计算观察给定熵的条件概率。
我有每个客户的购买清单,我正在尝试确定品牌忠诚度。基于此列表,我计算了每个客户的品牌熵,我将其用作品牌忠诚度的代理。例如,如果客户只购买 brand_a 那么他们的熵将为 0,并且他们非常忠诚于品牌。但是,如果客户购买了brand_a、brand_b等,那么他们的熵就会很高,不是很品牌忠诚。
# Dummy Data
CUST_ID <- c("c_X","c_X","c_X","c_Y","c_Y","c_Z")
BRAND <- c("brand_a","brand_a","brand_a","brand_a","brand_b","brand_a")
PURCHASES <- data.frame(CUST_ID,BRAND)
# Casting from PURCHASES to grouped_by CUST_ID
library(plyr)
library(dplyr)
library(data.table)
ENTROPY <- PURCHASES %>%
group_by(CUST_ID, BRAND) %>%
summarise(count = n()) %>%
dcast(CUST_ID ~ BRAND, value.var = "count")
ENTROPY[is.na(ENTROPY)] <- 0
# Calculating Entropy
library(entropy)
ENTROPY$entropy <- NA
for (i in 1:nrow(ENTROPY)){
ENTROPY[i,4] <- entropy(as.numeric(as.vector(ENTROPY[i,2:3])), method="ML")
}
# Calculating Frequency
ENTROPY$frequency <- ENTROPY$brand_a + ENTROPY$brand_b
ENTROPY
但是,我的问题是熵不考虑每个客户的购买数量。考虑以下情况:
1) Customer_X购买了3次,每次都是brand_a。他们的熵是0.
2) Customer_Z购买了1次,是brand_a。他们的熵是0.
自然地,我们更确定 Customer_X 比 Customer_Z 更忠诚于品牌。因此,我想通过频率对熵计算进行加权。但是,Customer_X: 0/3 = 0 和 Customer_Z: 0/1 = 0。
本质上,我想要一个聪明的方法让 Customer_X 对我的品牌忠诚度和 Customer_Z 有更高的价值。一种想法是使用 CART/Decision Tree/Random 森林模型,但如果可以使用巧妙的数学来完成,那将是理想的。
我认为您想要的指数是根据给定购买数量的熵的某种期望对熵进行归一化的。本质上,将一条曲线拟合到熵与购买次数的关系图中,然后将每个熵除以曲线给出的期望值。
现在这并不能解决熵为 0 的超级忠诚客户的问题。但我认为这里的问题略有不同:表面上的忠诚度是出于偶然(低计数)还是真实存在?这是一个关于客户忠诚度的明显问题。本质上,您想知道观察到这样一个数据点的概率。
如果 0 熵事件是您唯一的痛点,您可以根据数据中的购买次数计算只购买单个品牌的概率。
或者,您可以确定熵和购买次数的完整联合概率分布(而不仅仅是均值),例如通过密度估计,然后在给定购买次数的情况下计算观察给定熵的条件概率。