如何解决计算均匀度并降低惩罚值的指标
在我的数据中,我有多个帐单日期和多个项目,并且每个项目每天的销售金额都不同。
我正在寻找一种度量标准,以将该数据纳入两件事。
- 有人正在测量在某日期附近购买某项商品的日期:
[0,1,1]
更加统一,而[0,0]
则不太统一,其中1表示对该商品进行了购买天,0表示未购买。
请注意,我有很多类似的物品,所以我需要一个度量标准来按顺序排列这些物品。
- 对没有购买的日子处以罚款。
我的最终目标是制定一个度量标准,以使购买日期上的购买分布最大化,并减少购买总天数。
现在我为此尝试了两种方法:
-
wasserstein_distance也称为earth mover distance。 该度量标准的问题在于它为
wasserstein_distance([0,1],[1,1])
和wasserstein_distance([0,0],1])
赋予了相同的值。同样,它也不会惩罚过多的零。 -
熵:同样的惩罚问题。
请注意,我也准备合并每天售出的总数量数组,而不是像上面的二进制表示形式。
解决方法
您的问题不太清楚,但我想您会假设一定的成功率,对购买的分散程度更感兴趣。
距离度量计算两个向量之间的总体差异,并且如果成功的次数大致相同,则得出的距离相同也就不足为奇了。
因此,在您给出的示例中,我们假设预期的成功次数是相同的。然后我们可以简单地估计“等待”时间:
import numpy as np
ex1 = [0,1,1]
ex2 = [0,0]
np.mean(np.diff(np.where(ex1)[0]))
3.0
np.mean(np.diff(np.where(ex2)[0]))
1.0
因此,如果您获得相同的成功次数,但是平均等待时间更短,那么它会更聚集。
通常称为poisson process for bernoulli trials。但是,如果您有更多数据(即更长的向量),并且它们是成功和传播的概率不同,那么一种快速的方法是测量成功之间的时间dispersion,以判断成功的传播程度。
下面,我模拟两种类型的成功率相同的分布:
np.random.seed(999)
ex1 = np.zeros(500)
ex1[np.cumsum(np.random.gamma(4,123)).astype(int)] = 1
ex2 = np.zeros(500)
ex2[np.cumsum(np.random.gamma(1.25,6,68)).astype(int)] = 1
您可以看到ex1的分布比ex2更好,或群集更少:
import matplotlib.pyplot as plt
fig,ax = plt.subplots(figsize=(8,4))
ax.plot(np.where(ex1),[1]*len(np.where(ex1)),'|',color='k')
ax.plot(np.where(ex2),[2]*len(np.where(ex2)),color='b')
fig.show()
我们可以计算出方差系数,并且ex2的值更高:
times_1 = np.diff(np.where(ex1))
np.std(times_1)/np.mean(times_1)
0.5221040055320324
times_2 = np.diff(np.where(ex2))
np.std(times_2)/np.mean(times_2)
0.8645205800519346
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。