我正在寻找任何基于某些事件为个人分配风险评分的方法。我希望得到一个指数为0-100的指数。例如,对于每天一个事件,分数可以升至25,对于2可以升至50-60,对于每天3-4个事件,当天的分数将为100。
我尝试谷歌它,但由于我不知道正确的术语,我正在登陆随机主题。 :(
这种评分系统有没有数学术语?您可能知道哪些最常用的方法?
P.S。:专家/经验数据科学家的建议高度赞赏;)
答案 0 :(得分:1)
我首先要写一些资格:
如果是这样,这是一个(非常)简化的例子:
userid <- c("a1","a2","a3","a4","a11","a12","a13","a14","u2","wtf42","ub40","foo","bar","baz","blue","bop","bob","boop","beep","mee","r")
events <- c(0,0,0,0,0,0,0,0,0,0,0,0,1,2,3,2,3,6,122,13,1)
df1 <- data.frame(userid,events)
这可能对对数属性有帮助。 (否则,给定假设函数,得分=事件^ exp,如本例所示,1事件将总是得分为1)这将允许您控制灵敏度,但必须在我们处理指数时正确完成对数。我没有在示例中使用规范化:
normevents <- (events-mean(events))/((max(events)-min(events))*2)+1.5
设置最高分数的分位数阈值:
MaxScoreThreshold <- 0.25
qts <- quantile(events[events>min(events) & events<max(events)], c(seq(from=0, to=100,by=5)/100))
MaxScoreEvents <- quantile(qts,MaxScoreThreshold)
鉴于:
指数计算:
exponent <- log(100)/log(MaxScoreEvents)
df1$Score <- apply(as.matrix(events^exponent),1,FUN = function(x) {
if (x > 100) {
result <- 100
}
else if (x < 0) {
result <- 0
}
else {
result <- x
}
return(ceiling(result))
})
df1
userid events Score
1 a1 0 0
2 a2 0 0
3 a3 0 0
4 a4 0 0
5 a11 0 0
6 a12 0 0
7 a13 0 0
8 a14 0 0
9 u2 0 0
10 wtf42 0 0
11 ub40 0 0
12 foo 0 0
13 bar 1 1
14 baz 2 100
15 blue 3 100
16 bop 2 100
17 bob 3 100
18 boop 6 100
19 beep 122 100
20 mee 13 100
21 r 1 1
假设您的数据较大并且具有更多事件类别,分数不会如此快速地捕捉到100,它也是阈值的函数。
在这种情况下,我会更多地依赖数据来定义参数,阈值。
如果您有关于用户真正做过什么的先前数据,那么您可以执行监督学习,例如,在比率超过50%的任何地方设置阈值@。或者如果事件图表与“成功”概率看起来像是正态分布的累积概率函数,我会设置阈值@,无论它达到45度(第一次)。
如果您有先前的数据,但是您可以使用逻辑回归,而不是摄取回归输出的Logit函数,请使用该数字作为您的分数。您可以将其标准化为0-100。
编写数据科学问题并不总是那么容易。我对你要找的东西做了很多假设,希望这是大方向。