我如何找到异常子群体

时间:2014-08-25 14:34:39

标签: algorithm artificial-intelligence

这是我的问题:我基本上有一个对象集合,将它们视为具有多个列的数据库表,如:

  • 表名:"人员"
  • 列:
    • ID
    • 日期已插入
    • 年龄(1岁0-9岁,2岁10-19岁,依此类推),
    • 脸型(圆形1个,椭圆形2个),
    • 手的大小(1表示小,2表示中等),
    • 患有慢性疾病(1是,2否),
    • 有精神问题的历史(1是,2没有),

和其他类似的专栏。共有约30列。其中任何一个都可能出现异常值。

有时,异常行会批量插入此数据库表中。例如,整个亚群体,例如所有年龄为3(30-39岁)的人,在8月20日插入,其面部类型为95%,仅为" 1" (圆形),而剩下的5%具有其他正常值。

我的问题是,如何自动检测并报告此类异常行为?我的约束是我无法以任何方式预先验证数据。我只能在事件发生后检测到事件(将这些人视为网站上的访问者,如果它有帮助 - 我只是记录它们并稍后丢弃垃圾)。我不期望实现,只是有点详细的想法。我可以使用哪种算法?人工智能算法,遗传算法,更简单(图形)?这通常是怎么做的?

谢谢!

1 个答案:

答案 0 :(得分:0)

我建议你看一下关于异常检测的Wikipedia article,因为它提出了很多想法,例如寻找群集。

否则,我能想到的一个简单方法是首先按日期排序数据,然后按年龄排序,然后检查特定特征是经常发生还是很少发生。异常测试可能看起来像这样:

  1. 获取当前特征的比率
  2. 检查比例是否足够“超出范围”
  3. “越界”可能表示与标准的特定距离:

    function outOfBounds(trait, index)
      norm = 1 / number of distinct traits
      ratio = number of people with trait / total number of people
      return abs(norm - ratio) > ratio;
    end function;