数据科学:评分方法

时间:2017-05-24 17:42:28

标签: machine-learning statistics data-science scoring

我正在寻找任何基于某些事件为个人分配风险评分的方法。我希望得到一个指数为0-100的指数。例如,对于每天一个事件,分数可以升至25,对于2可以升至50-60,对于每天3-4个事件,当天的分数将为100。

我尝试谷歌它,但由于我不知道正确的术语,我正在登陆随机主题。 :(

这种评分系统有没有数学术语?您可能知道哪些最常用的方法?

P.S。:专家/经验数据科学家的建议高度赞赏;)

1 个答案:

答案 0 :(得分:1)

我首先要写一些资格:

  1. 0个事件触发得分为0。
  2. 非边缘事件计数观察是分数 - 100阈值将存在的位置。
  3. 阈值后的任何分数为100.
  4. 如果是这样,这是一个(非常)简化的例子:

    阶段数据:

    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)。

    这可能对对数属性有帮助。 (否则,给定假设函数,得分=事件^ 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. events是一个自然数 - 整数&gt; 0:我们照顾它 省略边缘)
    3. exponent&gt; 1
    4. 指数计算:

      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。

      编写数据科学问题并不总是那么容易。我对你要找的东西做了很多假设,希望这是大方向。