数据科学:评分方法论

我正在寻找一种方法,根据某些事件为个人分配风险评分。我希望使用0到100的量表,并采用指数分配方式。例如,一天发生一次事件,评分可能上升到25,两次事件可能上升到50-60,三到四次事件一天的评分将达到100。

我尝试用Google搜索,但由于我不了解正确的术语,我总是找到一些随机的话题。:(

这种评分系统有没有数学术语?你知道的最常见的方法是什么?

P.S.: 非常欢迎专家/有经验的数据科学家的建议 😉


回答:

我会先写一些限定条件:

  1. 0次事件触发的评分为0。
  2. 非边缘事件计数观察是评分-100阈值所在的位置。
  3. 超过阈值后的任何评分都将为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)

找到指数函数的指数

考虑到以下几点:

  1. 评分 = 事件 ^ 指数
  2. 事件是自然数 – 整数 >0:我们通过忽略边缘来处理这一点)
  3. 指数 > 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 Score1      a1      0     02      a2      0     03      a3      0     04      a4      0     05     a11      0     06     a12      0     07     a13      0     08     a14      0     09      u2      0     010  wtf42      0     011   ub40      0     012    foo      0     013    bar      1     114    baz      2   10015   blue      3   10016    bop      2   10017    bob      3   10018   boop      6   10019   beep    122   10020    mee     13   10021      r      1     1

假设你的数据更大且有更多的事件类别,评分不会那么快达到100,这也是阈值的函数。

我会更多地依赖数据来定义参数,在这种情况下是阈值。

如果你有关于用户实际做了什么的前期数据,你可以进行监督学习,例如在比率超过50%的地方设置阈值。或者,如果事件到“成功”概率的图表看起来像正态分布的累积概率函数,我会在它第一次达到45度的地方设置阈值。

如果你有前期数据,你也可以使用逻辑回归,但不是使用Logit函数来处理回归的输出,而是使用该数字作为你的评分。你可以将其标准化为0到100之间。

写一个数据科学问题并不总是容易的。我对你所寻找的东西做了很多假设,希望这是大致的方向。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注