该如何应对预付费校园水卡的脾气,从而降低损失金额呢?

生活 2018-04-23

这段时间刚好学校换上了一卡通,在同学们共同适应一卡通带来的变化同时我注意到了一个小的点:

水卡的扣费机制(20元/立方米)

每当看到数字跳动的我如同吸毒般上了瘾。
一下子忍不住想深究下学校的校园水卡的扣费算法,通过多次刷卡消费提出以下假设

  • 校园水卡使用价格梯度预付费算法
  • 预付费算法并未缓存记录上一次使用者
  • 每次扣费>=0.05获得的热水量相同(既可能存在扣费不准现象,且扣费间隔不低于0.05yuan)
以上所有的假设仅建立在我测试的这台水卡机,对于其他水卡机是否同样存在相同情况不予以保证。

对以上假设对应的提出以下可能所致问题

  • 因为主观意识导致,大多数人习惯于一看到水卡扣费到某个金额后迅速拔出水卡行为,那么在预付费机制下这大多数人便损失了最最后一次水卡扣费的金额(本文将此次损失金额命名为剩余金额),虽然只有0.05yuan但假设校园有4W人,每天半人2W洗澡那么这可能就会是1000yuan。
  • 未缓存记录上一次使用者在某些情况下也是会导致严重的后果的,例如某人的手正处于正弦式波动抽插动作-。-频率刚好达到水卡扣费并且刚开始出水时就拔出,依次循环,那么这个人是不是不断的扣钱然而并没有打到多少水,极端一点可能该某人一点出水量都没获取到。当然该某人现象毕竟是一个极端,那我们来讨论下正常情况下,由于各种情况有时我们在打水时同一次打水,水卡重新计费了几次,那么每一次重新计费是不是就损失了一次剩余金额,也就是说重新计费次数越多剩余金额损失得越多。
  • 扣费不准情况是否为随机事件还是算法漏洞?若是梯度预付费算法的机制应当不会出现该情况才对,所以我在这里推断水卡扣费算法应当不仅仅是按照固定的一个扣费间隔,可能呈现一个周期扣费。

通过以上的假设和问题进一步在数据上证明

  • 问题一中只需要证明水卡扣费机制是先扣费后出水,那么这个问题就有可能发生。

    1. 验证方式:仅需验证是否第一次插上水卡后扣费先于出水,所以直接验证即可
    2. 验证图片:

13.88.png0.05未出水.png0.05出水.png

 3. 验证结果:扣费算法应为预付费算法
  • 问题二中只需要证明每一次拔插操作扣费重置并未延续上次扣费金额,那么这个问题就有可能发生。

    1. 验证方式:仅需验证满足某条件下的拔插操作后水卡扣费的金额与获水量的比例,所以直接实验验证即可
    2. 验证图片:

13.88.png
13.83.png
13.78.png
13.73.png
13.68.png
13.63.png
13.58.png
13.53.png
13.48.png
13.43.png
13.38.png

 3. 验证结果:本次实验在满足正弦式拔插操作后,我水卡总扣金额为0.55元,获取水量经测量约1.8升,在此取2升,那么按20元/立方米 的价格来算我一共损失了多少水量呢?在python中执行结果如下图:

values.png

由上图可知我共损失了25.5升!!的热水了。(看来正弦式拔插的骚操作在没有缓冲机制下我是损失了这么多热水量!!)
  • 问题三需要大量的采样数据验证,所以这个问题我本打算使用机器学习中的回归模型,由于需要大量的样本数据我自己一个人来弄这个数据确实有点麻烦,所以我打算暂时不折腾这个。

    数据取样例子图:

0.15.png
0.20.png
0.26.png
0.31.png

 从扣费金额规律可以看出,在0.20前都是按照每次0.05的间隔扣费但在0.20后出现了一次0.26 间隔涨为0.06,随后又到0.31恢复为0.05的间隔。
但我这里有个想法:若有同校的校友,你们每一次打热水都记住你每一次扣费间隔的数据保留下来,多次后把保留的数据发给我那么我这里就会降低很多的工作量

最后就是通过了解水卡的脾气,我给出的一些建议,从而降低损失金额,以及水卡机的一些改进建议。

money.png

咳咳~发文不易感谢赞赏
  1. 尽量减少重新计费次数,没事不要正弦式拔插的骚操作。。。。。
  2. 不要一看到新扣费就立即拔出水卡。
  3. 通过计算每0.05元的扣费会持续6秒左右所以再你看到新扣费出现后保守默数5秒后再拔卡。
  4. 减小间隔扣费金额由0.05降低到0.02或0.03也可以降低损失。
  5. 建议水卡机加入 缓冲保存机制 保存最后一个使用者信息,若短时间内下次使用还为同一人应当承接上一次扣费的剩余金额。(想了想这个在算法上好像有点难实现,不过也是可以有互利算法的)

本文由 白间 创作,采用 知识共享署名 3.0,可自由转载、引用,但需署名作者且注明文章出处。

还不快抢沙发

添加新评论

0:00