我目前正在开发一个邮件系统,客户可以在其中将大量邮件发送到电子邮件地址。对于这种系统有一个重要的限制-客户端不得发送可能出现在垃圾邮件中的消息,因为在这种情况下,该平台的声誉受到威胁。
我的客户发送邮件后,我会收到收件人服务提供商(gmail,Outlook)的通知,告知该邮件是否已被放入垃圾邮件。因此,我的客户可以向1000个收件人发送1000条消息,并且我可以跟踪这些信件中有多少被丢入了垃圾邮件。因此,我必须降低客户的声誉,直到他提高消息质量。如果低客户评级的客户连续发送结果良好的邮件,则将重新建立客户评级。这是我的数据:
某天发送的电子邮件数量。
在特定的一天中发送给垃圾邮件的电子邮件数量。
例如:客户端具有以下历史记录
01.12.19客户已经发送了1000封电子邮件,其中5封垃圾邮件(0.5%垃圾邮件)
02.12.19客户端已发送2000封电子邮件,其中10封垃圾邮件(0.5%垃圾邮件)
03.12.19客户已经发送了500封电子邮件,其中10封是垃圾邮件(占2%垃圾邮件)
04.12.19客户已经发送了5000封电子邮件,其中42封是垃圾邮件(0.8%垃圾邮件)
05.12.19客户端已发送18125封电子邮件,其中654邮件出现在垃圾邮件中(3.6%垃圾邮件)
07.12.19客户端已发送50000封电子邮件,其中1000封出现在垃圾邮件中(占2%垃圾邮件)
08.12.19客户已发送45682封电子邮件,其中134封邮件出现在垃圾邮件中(垃圾邮件占0.3%)
09.12.19客户已经发送了100000封电子邮件,其中20000封电子邮件出现在垃圾邮件中(垃圾邮件占20%)。
我将极限设置为5%。当客户发送电子邮件并且其中超过5%的电子邮件出现在垃圾邮件中时,帐户评级将降低。正如您在09.12.19上看到的那样,该客户的垃圾邮件率为20%,因此帐户评级将降低。垃圾邮件的20%是一个麻烦的指标-显然我的客户发送了质量低下的信件。
一切都很好,并且系统正常运行,直到我遇到狡猾的客户,他们学会了如何快速恢复其帐户。降低他们的帐户等级后,我的客户每天发送2个字母,两个字母都不会出现在垃圾邮件中。结果,我的客户每天发送几封电子邮件-100%成功(0%垃圾邮件)。我意识到我在计算评分时遇到问题。我想获得一个计算客户评分的公式。为了解决这个问题,我意识到有必要使用已发送信件的历史记录并进行平均评分,以便客户不会欺骗我。也就是说,如果客户较早发送了50,000条消息,那么几天之内的几条完整消息将无法纠正这种情况并更改其评级。
我们在这里处理问题本身。我的产品规格团队为我设置了一个任务,即-帐户的较早历史不会影响该帐户上的当前操作。我的客户有可能每天发送50,000个字母(其中1,500个是垃圾邮件-数量是有限的),但随后他开始每天发送50个字母(其中2个是垃圾邮件-正常)。如果我考虑整个历史记录的平均值,则客户将长期降低评分。我认为最新数据应该比早期数据更重要。例如,我们可以将对数衰减应用于客户的日期,这意味着前一个数字比后一个数字更有意义。我知道任务非常复杂,因此我将举例说明系统的工作方式。
示例1。所有帐户指标均在标准范围内-评级良好
01.12.19客户已经发送了100封电子邮件,其中2封垃圾邮件(占垃圾邮件的2%)
02.12.19客户已发送256封电子邮件,其中4封垃圾邮件(1.6%垃圾邮件)
03.12.19客户已发送486封电子邮件,其中7封出现在垃圾邮件中(占垃圾邮件的1.4%)
04.12.19客户发送了4678封电子邮件,其中80封垃圾邮件(1.7%垃圾邮件)
05.12.19客户已发送684封电子邮件,其中13一封出现在垃圾邮件中(占垃圾邮件的1.9%)
07.12.19客户端已发送50000封电子邮件,其中1000封出现在垃圾邮件中(占2%垃圾邮件)
示例2。所有帐户指标均在标准范围内-评级良好。在过去几天中,有50%的电子邮件是垃圾邮件。但是,这只是一封电子邮件,在技术上是允许的,因此不应阻止该帐户。
01.12.19客户已经发送了1000封电子邮件,其中5封垃圾邮件(0.5%垃圾邮件)
02.12.19客户端已发送2000封电子邮件,其中10封垃圾邮件(0.5%垃圾邮件)
03.12.19客户已经发送了500封电子邮件,其中10封是垃圾邮件(占2%垃圾邮件)
04.12.19客户已经发送了5000封电子邮件,其中42封是垃圾邮件(0.8%垃圾邮件)
05.12.19客户已经发送了45682封电子邮件,其中134封垃圾邮件(占垃圾邮件的0.3%)
06.12.19客户端已发送2封电子邮件,其中1封是垃圾邮件(50%垃圾邮件)
07.12.19客户发送了2封电子邮件,其中1封是垃圾邮件(50%垃圾邮件)
08.12.19客户发送了2封电子邮件,其中1封垃圾邮件(50%垃圾邮件)
示例3。所有帐户指标均在标准范围内-评级良好。第一天发送了数百万封电子邮件,但垃圾邮件百分比在正常范围之内。
01.12.19客户端已发送1000000封电子邮件,其中20000出现在垃圾邮件中(垃圾邮件占2%)
示例4。应降低帐户评分,因为它发送了太多垃圾邮件。
01.12.19客户已经发送了1000封电子邮件,其中5封垃圾邮件(0.5%垃圾邮件)
02.12.19客户端已发送2000封电子邮件,其中10封垃圾邮件(0.5%垃圾邮件)
03.12.19客户已经发送了500封电子邮件,其中10封是垃圾邮件(占2%垃圾邮件)
04.12.19客户已经发送了5000封电子邮件,其中42封是垃圾邮件(0.8%垃圾邮件)
05.12.19客户端已发送18125封电子邮件,其中654邮件出现在垃圾邮件中(3.6%垃圾邮件)
07.12.19客户端已发送50000封电子邮件,其中1000封出现在垃圾邮件中(占2%垃圾邮件)
08.12.19客户已发送45682封电子邮件,其中134封邮件出现在垃圾邮件中(垃圾邮件占0.3%)
09.12.19客户已经发送了100000封电子邮件,其中20000封电子邮件出现在垃圾邮件中(垃圾邮件占20%)
示例5。:帐户等级已降低(08.12.19),然后该帐户发出了积极结果的电子邮件,但是不应提高帐户等级,因为无法成功修复几封电子邮件情况。
01.12.19客户已经发送了1000封电子邮件,其中5封垃圾邮件(0.5%垃圾邮件)
02.12.19客户端已发送2000封电子邮件,其中10封垃圾邮件(0.5%垃圾邮件)
03.12.19客户已经发送了500封电子邮件,其中10封是垃圾邮件(占2%垃圾邮件)
04.12.19客户已经发送了5000封电子邮件,其中42封是垃圾邮件(0.8%垃圾邮件)
05.12.19客户端已发送18125封电子邮件,其中654邮件出现在垃圾邮件中(3.6%垃圾邮件)
06.12.19客户端发送了50000封电子邮件,其中3548出现在垃圾邮件中(占垃圾邮件的7.1%)
07.12.19客户已发送45682封电子邮件,其中134封邮件出现在垃圾邮件中(垃圾邮件占0.3%)
08.12.19客户端发送了100000封电子邮件,其中20000封电子邮件出现在垃圾邮件中(垃圾邮件占20%)
09.12.19客户端已发送1封电子邮件,其中0封垃圾邮件(0%垃圾邮件)
10.12.19客户发送了1封电子邮件,其中0封垃圾邮件(0%垃圾邮件)
11.12.19客户发送了1封电子邮件,其中0封垃圾邮件(0%垃圾邮件)
12.12.19客户端发送了1封电子邮件,其中0封垃圾邮件(0%垃圾邮件)出现了
13.12.19客户已发送1封电子邮件,其中0封垃圾邮件(0%垃圾邮件)
14.12.19客户端发送了1封电子邮件,其中0封垃圾邮件(0%垃圾邮件)
15.12.19客户端发送了1封电子邮件,其中0封垃圾邮件(0%垃圾邮件)出现了
示例6。尽管该帐户已降低评分(04.12.19),但最近的结果是正面的,因此应提高该帐户的评分。
01.12.19客户已经发送了100封电子邮件,其中2封垃圾邮件(占垃圾邮件的2%)
02.12.19客户已发送256封电子邮件,其中4封垃圾邮件(1.6%垃圾邮件)
03.12.19客户已发送486封电子邮件,其中7封出现在垃圾邮件中(占垃圾邮件的1.4%)
04.12.19客户端已发送10000封电子邮件,其中2000封电子邮件出现在垃圾邮件中(垃圾邮件占20%)
05.12.19客户已发送4678封电子邮件,其中80封垃圾邮件(1.7%垃圾邮件)
06.12.19客户已经发送了684封电子邮件,其中13封是垃圾邮件(占垃圾邮件的1.9%)
07.12.19客户已发送500封电子邮件,其中10封垃圾邮件(占垃圾邮件的2%)
因此,我有以下两个问题:是否可以用一个公式解决此问题?如果是,怎么办?
答案 0 :(得分:0)
为什么不仅仅使用阈值,这使得只有大量的字母才有影响。
一个非常简单的python实现:
def f(reputation, letters, spam):
x = 1
if spam/letters > 0.05:
x = -1
if letters > 1000: # only if more than 1000 letters are send
reputation += x*(100*spam/letters) # the 100 is arbitrary: change it according to your needs
if reputation < 0:
reputation = 0
if reputation > 100:
reputation = 100
return reputation
EXAMPLE 0
letters: 100 spam: 2 (2.0%)
current reputation: 100
_____
letters: 256 spam: 4 (1.5625%)
current reputation: 100
_____
letters: 50000 spam: 1000 (2.0%)
current reputation: 100
EXAMPLE 1
letters: 1000 spam: 5 (0.5%)
current reputation: 100
_____
letters: 2000 spam: 10 (0.5%)
current reputation: 100
_____
letters: 2 spam: 1 (50.0%)
current reputation: 100
_____
letters: 2 spam: 1 (50.0%)
current reputation: 100
_____
letters: 3 spam: 2 (66.66666666666667%)
current reputation: 100
EXAMPLE 2
letters: 1000000 spam: 20000 (2.0%)
current reputation: 100
EXAMPLE 3
letters: 100 spam: 2 (2.0%)
current reputation: 100
_____
letters: 256 spam: 4 (1.5625%)
current reputation: 100
_____
letters: 100000 spam: 20000 (20.0%)
current reputation: 80.0
EXAMPLE 4
letters: 100 spam: 5 (5.0%)
current reputation: 100
_____
letters: 2000 spam: 100 (5.0%)
current reputation: 100
_____
letters: 500 spam: 10 (2.0%)
current reputation: 100
_____
letters: 100000 spam: 20000 (20.0%)
current reputation: 80.0
_____
letters: 1 spam: 0 (0.0%)
current reputation: 80.0
_____
letters: 1 spam: 0 (0.0%)
current reputation: 80.0
_____
letters: 1 spam: 0 (0.0%)
current reputation: 80.0
如果您需要一个平滑的过渡而不是阈值,则可以使用S型函数(https://en.wikipedia.org/wiki/Sigmoid_function)