数据科学:评分方法
Data Science: Scoring methodology
我正在寻找任何方法来根据某些事件为个人分配风险评分。我正在寻找具有指数分配的 0-100 比例。例如,一天一个事件的分数可能上升到 25,2 个事件可能上升到 50-60,一天 3-4 个事件的分数将是 100。
我尝试 Google 它,但由于我不知道正确的术语,所以我开始随机话题。 :(
这种评分系统有数学术语吗?您可能知道哪些最常用的方法?
P.S.: Expert/experience 非常感谢数据科学家的建议 ;)
我先写一些条件:
- 0 个事件触发 0 分。
- 非边缘事件计数观察值是得分 - 100 阈值所在的位置。
- 阈值后的任何分数均为 100。
如果是这样,这里有一个(非常)简化的例子:
阶段数据:
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)
可选:将事件规范化为 (1,2)。
这可能对对数性质有帮助。 (否则,假设函数 score=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))
使用设置的阈值找到得分为 100 的事件数量。
MaxScoreEvents <- quantile(qts,MaxScoreThreshold)
求指数函数的指数
鉴于:
- 分数 = 事件 ^ 指数
- events 是一个自然数 - 整数 >0:我们通过
省略边缘)
- 指数 > 1
指数计算:
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 之间。
写数据科学问题并不总是那么容易。我对你要找的东西做了很多假设,希望这是大方向。
我正在寻找任何方法来根据某些事件为个人分配风险评分。我正在寻找具有指数分配的 0-100 比例。例如,一天一个事件的分数可能上升到 25,2 个事件可能上升到 50-60,一天 3-4 个事件的分数将是 100。
我尝试 Google 它,但由于我不知道正确的术语,所以我开始随机话题。 :(
这种评分系统有数学术语吗?您可能知道哪些最常用的方法?
P.S.: Expert/experience 非常感谢数据科学家的建议 ;)
我先写一些条件:
- 0 个事件触发 0 分。
- 非边缘事件计数观察值是得分 - 100 阈值所在的位置。
- 阈值后的任何分数均为 100。
如果是这样,这里有一个(非常)简化的例子:
阶段数据:
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)
可选:将事件规范化为 (1,2)。
这可能对对数性质有帮助。 (否则,假设函数 score=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))
使用设置的阈值找到得分为 100 的事件数量。
MaxScoreEvents <- quantile(qts,MaxScoreThreshold)
求指数函数的指数
鉴于:
- 分数 = 事件 ^ 指数
- events 是一个自然数 - 整数 >0:我们通过 省略边缘)
- 指数 > 1
指数计算:
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 之间。
写数据科学问题并不总是那么容易。我对你要找的东西做了很多假设,希望这是大方向。