知识图谱建模

我们的目标在业务上是反欺诈,现有的特征不能使用,因为已经有建模的团队了。 为了提升反欺诈的效果,我们只能从数据角度出发,挖掘出更多更好的变量,不用现有的任何特征,目标却是比现有的模型效果更好。

了解了状况之后,于是开始做关系网络,因为这块是公司空缺的领域,而且整个行业来看的话,做的好的公司也没有几家。

说干就干,工作从研究数据类型,关系, 数据清洗开始。 遇到的第一个问题是 sql, 无法构造成图结构。 于是自己动手 写代码用 java 读写 hdfs 数据,在内存里面构图,计算特征。尽管搞到一台256G内存的机器,依然遇到 内存不够用的情况。 查的原因是 需要加载到内存的边太多,几亿条。 接下来,优化数据结构的内存开销,能用short 就不用integer, 能用long 就不用 string. 甚至自己做数据做分片。 计算特征的时候,仅仅加载该分片需要的所有数据到内存里面来。 终于第一个里程碑做到了, 特征有了, 标签有了。 从开始工作到第一个模型的建立,中间花了1.5个月。还好模型效果显著,得到了老大们的支持。

既然模型效果好,仅仅用了 xgboost 就效果显著了。那么就努力上线啊。这个时候才知道上线才是最大的困难。因为这个模型上线需要优先做到实时关系网络的构建。

关系网络数据存哪里?试过 Neo4j , OriginDB, Titan 等图数据库。 花了3个多星期用来写各种demo, 测试逻辑准确性,测试性能等等。 得到的结论是没有一个开源的图数据能够满足需求。

捉急啊,有价值的模型居然因为技术实现问题难以上线。总不能放弃吧。 最终决定只把边这一种数据保存到 HBASE 表里面。 让HBASE 帮我解决存储问题。 采用Flink 实时流框架,写了一堆代码暴力的往 HBASE里面写入 增量的边。 历时2个多月,完成 FLINK + kafka 做到实时关系网络的构建, 延时不到1秒。 并发的进程数量高达30多个。

后续还需要做 图的完整性测试,时效性测试,测试ok 后。 还需要自己写基于关系网络的特征工程,模型预测,预测结果还需要上线观察一个月。 真正意义上的上线都已经10月份了。从2月底开始尝试去做,到做成上线一共经历了7个月。

整个过程下来,建模的工作不超过2周。流计算,实时关系网络构建,特征工程,特征准确性测试等技术工程实现上花的时间占用99%。一条龙全部自己做。而业务使用上,只是到 hbase 的一张表里面根据 rowkey 拿模型预测分就好了。却无法感知上线路程之艰难。

模型的实际效果好,为之辛苦值得。

猜你喜欢

转载自my.oschina.net/u/2935389/blog/1626002