我有每个客户的购买清单,我正在努力确定品牌忠诚度。基于这个列表,我计算了每个客户的品牌熵,我用它作为品牌忠诚度的代名词。例如,如果一个客户只购买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拥有更高的价值。其中一个想法是使用购物车/决策树/随机森林模型,但如果可以使用聪明的数学来完成,这将是理想的。
发布于 2017-05-10 11:04:48
我认为,你想要的指数是熵,用给定购买数量的熵的期望来规范。本质上,将一条曲线拟合成熵与购买数的关系图,然后将每个熵除以该曲线所给出的期望。
现在,这不能解决你的问题,超级忠诚的客户,其中有0熵。但我认为问题是微妙的不同:表面上的忠诚是由于机会(低计数)还是它是真实的?这是一个截然不同的问题,客户到底有多忠诚。本质上,你想知道观察这样一个数据点的概率。
如果0熵事件是您唯一的痛处,您可以从数据中计算出只购买一个品牌的概率。
或者,您可以确定熵和购买数量的完全联合概率分布(而不仅仅是均值),例如通过密度估计,然后计算给定熵的条件概率,给定购买数量。
https://stackoverflow.com/questions/43698464
复制相似问题