为何应用Beta、Gamma等概率分布与变换后结果均相同?
营销支出数据变换后全值相同的问题解析
问题根源拆解
1. 几何衰减函数未生效
geometric_adstock_tt函数中alpha默认值为0,生成的权重数组w为[1, 0, 0, ..., 0]——仅当期数据权重为1,其余滞后项权重全为0。这导致函数直接返回输入值,完全没有实现延迟衰减的效果。
2. Beta分布与输入数据不兼容
st.beta(a=3, b=3)的有效取值范围是*[0, 1]*,但营销支出数据(如TV、Referral等渠道的周支出)远大于1。此时beta_dist.pdf(xx)会返回0(超出分布支撑区间),后续所有变换都基于0值计算,必然输出同质化结果。
3. Logistic饱和函数公式错误
logistic_function的分母被错误写为1 * np.exp(-mu * x_t),正确的Logistic函数分母应为1 + np.exp(-mu * x_t)。当前错误会导致:
- 输入为0时,分子
1 - np.exp(0) = 0,输出直接为0 - 非0输入也会因分母异常导致结果失真,进一步放大同质化问题
4. 后续变换的连锁失效
当Beta分布输出为0后:
- Gamma分布的PDF在x=0处返回0(Gamma分布仅支持x>0)
- 错误的Logistic函数输出0
- HalfNorm分布的PDF在x=0处返回固定值
1/(sqrt(2π)*5) ≈ 0.0798
所有渠道最终都会输出这个固定值,因此全量结果相同。
修复方案
- 调整几何衰减参数:将
alpha设为0~1之间的正数(如0.7),才能实现合理的滞后衰减效果 - 适配Beta分布或更换分布:将营销支出数据归一化到*[0,1]*区间后再使用Beta分布,或改用Gamma、Log-Normal等适配大正数的分布
- 修正Logistic函数:把分母改为
1 + np.exp(-mu * x_t) - 分步验证输出:在每一步变换后添加打印或校验,确认结果符合预期,避免链式错误
内容的提问来源于stack exchange,提问作者Erin
相关产品推荐
相关产品推荐

