在上周的案例研究中,探讨了如何运用逻辑和商业理解来解决问题。是否也觉得这很令人兴奋呢?上一周的案例研究收到了热烈的反响,认为应该继续。在解决这个案例之前,请务必查看上周的案例研究。
这个案例研究是最喜欢的之一,因为它涉及到现实生活中的实际应用。在解决这个案例时所做的计算,正是现实生活中经常发生的。因此,这不仅仅是数学问题,也是实际问题。对于有经验的职位来说,类似的案例研究经常出现在工作面试中。所以,请尽最大的努力去尝试!
这个案例研究的目标是为在线零售商优化产品的价格水平。过度简化了这个案例研究,使其成为一个对所有人,包括在类似行业工作过的人,都相似的平台。使用商业方法和分析方法(使用R语言)解决了这个案例研究。数据集可以在下面下载。
是否正在为下一次数据科学面试做准备?已经将几个类似的案例研究整合到了“数据科学面试全攻略”课程中。确保不要错过!
假设是在线杂货店的所有者。在线销售250种产品。一个传统的方法是确定每种产品的价格。这个方法非常简单——将产品的价格定为与市场价格持平。
计划利用分析来确定定价,以最大化收入。在访问网站的100,000人中,只有5,000人最终购买了产品。现在,所有购买的人,都获得了他们的购买模式,包括他们平均购买的单位等。
为了理解价格变化的影响,尝试为每种产品测试不同的价格点。对结果感到惊讶。影响可以分解为两个方面:
较低的价格点增加了购买产品的数量。客户比其他产品更多地比较某些产品的价格点,以决定是否从门户网站购买产品。例如,产品1可能是一个经常使用的产品。如果降低产品1的价格点,那么客户响应率从最初的5%上升到5.2%,此外,客户将购买更多的产品1。
另一方面,降低产品价格显然降低了产品的利润率。现在,想要为每种产品找到最优的价格点,以最大化总利润。在这个案例研究中,提供了一个包含所有250项的表格:
下载数据集
数据集中有以下变量:
注意:允许的最大价格涨幅是20%。所以,产品的价格可以在平均价格/单位周围变化-10%到+20%之间。
数据集的快照
如果计算来到门户网站的客户所获得的利润:
将尝试通过商业方法和分析方法来解决这个案例研究。让开始吧!
在不应用任何技术的情况下解决这个问题,让分析频率分布。利润率:这是每种250种产品的利润率分布。让根据利润率带划分产品。
低利润率:低于10%的利润
中等利润率:10% - 25%的利润
高利润率:25%以上的利润
增量体积:这是每种250种产品的增量体积分布。让将增量体积带分类:
低增量体积:低于2%
中等增量体积:2% - 6%
高增量体积:6%以上
增量获取:这是每种250种产品的增量获取分布。最后,还应该分割增量获取带:
低增量获取:低于0.1%的利润
中等增量获取:0.1% - 0.4%的利润
高增量获取:0.4%以上的利润
让现在讨论定价策略:
到目前为止,为每种产品获得了三个决策属性。定价的极端是-10%和20%。需要为可以带来大量获取增量或高体积增量或两者兼有的人提供-10%。对于其余的,需要通过提高价格+20%来增加利润率。
显然,这是解决这个问题的一个非常简单的方法,但正在获得低挂果实的好处。因为增量获取的平均值是0.4%,知道如果降低高获取增量率的产品的成本,将有显著的增量总销售额,但由于利润率较低,影响较小。
对于中等增量获取,需要根据利润率和增量体积做出决策。所有用绿色标记的单元格将被标记为-10%,其余的为20%的价格增长。这里的决策纯粹是基于直觉,考虑到上面看到的收益驱动因素的基本理解。
现在,如果计算总利润,看到比最初的利润有显著的增长。
让采取一种更分析/数值的方法来解决同样的问题。这是在算法中尝试的:
从每种250种产品的增量销售价格的零向量开始。现在增加/减少每种产品的增量销售价格1%,以查看对总利润的影响。对于利润的增加,保留增量销售。现在从这个向量开始找到进一步的边际增量。
setwd("C:\\Users\\ts93856\\Desktop\\Taxi")
data <- read.csv("Bigbasket.csv")
dim(data)
#250*7
summary(data)
# 这是增量向量的初始值 - 全部为零
increment <- array(0,250)
flag = 0
increment_i <- increment
#flag = 1是当增量向量保持不变时的条件
while (flag == 0) {
print(find_rev(increment_i))
increment_iplus1 <- incremental_new(increment_i)
if (min(increment_iplus1 == increment_i) == 1) {flag = 1}
increment_i <- increment_iplus1
}
increment_i
find_rev(increment_i)
//find_rev(increment)
price <- increment_i
write.csv(price,"price.csv")
#This function tries to get the next best increment vector
incremental_new <- function(initial_increments){
initial_rev <- find_rev(initial_increments)
intermediate_rev <- 0
for(i in 1:250){
increments <- initial_increments
if(increments[i] > -0.099) {increments[i] <- increments[i] - 0.01}
rev <- find_rev(increments)
if (rev > initial_rev) {final_increments <- increments
intermediate_rev <- rev
}
if(increments[i] < 0.19) {increments[i] <- initial_increments[i] + 0.01}
rev <- find_rev(increments)
if (rev > max(initial_rev,intermediate_rev)) {final_increments <- increments}
}
return(final_increments)
}
# This function will get us the overall revenue for the given increment vector
find_rev <- function(increment){
price <- data$Avg_Price_per_unit*(1+increment)
volumes <- data$Average_units_sold*(1-(data$Increase_sale_volume*increment*10))
multiplier <- (1-(data$Incremental_acquisition*increment*10))
total_multiplier <- prod(multiplier)
profit_wo_multiplier <- 0.05*(sum(price*volumes) - sum(volumes*data$Cost_per_unit))
profit_w_multiplier <- profit_wo_multiplier*total_multiplier
net_profit <- sum(profit_w_multiplier)
return(net_profit)}
Total Profit earned : $310 (88% incremental benefit)