网络机器人吧社区

机器学习那么多,什么小方向才有前景?

艾特斐勋 2018-11-11 07:00:21

推荐一个尚未受到足够重视但潜力很大的方向:异常检测(anomaly detection),也叫异常分析(outlier analysis),相关的还有novelty detection。

异常检测在工业上有非常广泛的应用场景:

  • 金融业:从海量数据中找到“欺诈案例”,如信用卡反诈骗,识别虚假信贷

  • 网络安全:从流量数据中找到“侵入者”,识别新的网络入侵模式

  • 在线零售:从交易数据中发现“恶意买家”,比如恶意刷评等

  • 生物基因:从生物数据中检测“病变”或“突变”

换句话来说,异常检测就是从茫茫数据中找到那些“长得不一样”的数据但检测异常过程一般都比较复杂,而且实际情况下数据一般都没有标签(label),我们并不知道哪些数据是异常点,所以一般很难直接用简单的监督学习。异常值检测还有很多困难,如极端的类别不平衡、多样的异常表达形式、复杂的异常原因分析等。

从人才供给上来看,专门研究或者应用异常检测的人才是非常有限的。而且大部分人往往都更青睐于传统互联网科技公司,留给银行和零售业的可用之人并不多。因此,已经身处某个行业的朋友们很适合了解学习异常检测,从而弥补所属领域对于异常检测人才的需求




应用场景与前景

像文章开头提到的,异常检测的主要应用场景是风险控制(risk control),常见于金融机构、保险机构、银行等。以我的个人体会为例,各大银行都在扩充自己的数据分析团队,尝试用机器学习手段来降低如银行卡盗刷的案例。而且值得关注的是,大部分银行的风控手段往往都还有很大的升级空间,十月份的时候和加拿大最大的银行之一的机器智能(machine intelligence)主管交流时,他告诉我他们的部门总共才7个人,最大的困难就是找不到合适的人,即缺少懂得用机器学习来做风控的又愿意加入银行的人。

换个角度来看,对于银行和普通金融机构来说,最大的挑战是很难吸引科技人才。大部分科技人才都还是选择加入互联网公司,比如国内的BAT或者国外的FLAG。

朋友也曾给另一个跨国保险公司做过诈骗识别的项目。他们所使用的风控软件叫做NetReveal,花费数百万美元,但误差率高达百分之90。换句话说,100个识别出的欺诈中只有不到10个是真的诈骗,浪费了大量的人力物力。在引入了机器学习的异常检测后,大幅度降低了误差率。

拿银行和保险行业的例子是为了说明这个方向缺口很大,但相关人才很少,有符合技能的人才又往往不愿意委身于此因此,异常检测在风控中的前景非常光明,属于为数不多机器学习能够落地的方向


相关技术

异常检测可以通过监督学习或者非监督学习来做,但往往最终还是需要非监督学习以反欺诈为例,大部分时候我们根本不知道什么是欺诈,什么不是。诈骗的定义往往是很模糊。往小了说,反诈骗似乎是一个二分类问题(binary classification),但细想后会发现如果把每种不同诈骗当做单独的类型的话,其实这是多分类问题(multi-class classification)。而单一类型的诈骗几乎是不存在的,且诈骗的手段日新月新总在变化。因此即使拥有历史数据,我们也很难分辨不同种类的诈骗。

退一步说,即使我们真的有诈骗的历史数据,即在有标签的情况下用监督学习,也存在很大的风险。用这样的历史数据学出的模型只能检测曾经出现过与历史诈骗相似的诈骗,而对于变种的诈骗和从未见过的诈骗,我们的模型将会无能为力因此,在实际情况中,一般不建议直接用任何监督学习,至少不能单纯依靠一个监督学习模型来奢求检测到所有的诈骗。除此之外,欺诈检测一般还面临以下问题:

九成九的情况数据是没有标签(label)的,各种成熟的监督学习(supervised learning)没有用武之地。


区分噪音(noise)和异常点(anomaly)时难度很大,甚至需要发挥一点点想象力和直觉。


紧接着上一点,当多种诈骗数据混合在一起,区分不同的诈骗类型更难。根本原因还是因为我们并不了解每一种诈骗定义。

一般来看,我们把异常检测的技术包括:

1. 建立在统计学意义上的检测方法

极值分析(extreme value analysis)。这样的方法往往仅对单独维度进行研究,使用上有很大的局限性。

对数据分布进行假设,如对异常数据和正常数据进行不同的分布假设,并用EM算法拟合数据。这样的方法局限性在于假设往往和实际有较大出入,效果一般。

2. 基于线性分析的检测方法:

特指在低维度上分析数据间相关性的方法。这样的方法包括维度压缩如PCA,Factor Analysis等。这类方法的问题在于把数据压缩后或者找到低维嵌入后,数据的可解释性下降,我们很难解释为什么异常是异常。


3. 基于时空上的异常检测,特指异常和其所处的环境有关:

  • 空间关系造成的异常:

O点在单独来看的情况下是正常点,但考虑到临近点后就是异常点

  • 时间序列上的异常:

红色部分单独来看不是异常,但考虑到临近点后就是异常点

时间序列上的突然上升或者下降都可能是异常点


4. 建立在相似性分析上的异常检测(proximity based outlier detection):


  • 建立在距离度量的上的异常检测(distance based),如K-近邻为原型的也可归为此类

  • 建立在密度分析上的异常检测,如经典的 Local outlier factor(LOF)


5. 其他各种异常检测方法,包括:


  • 集成异常检测(outlier ensemble):代表性的算法有isolation forest,feature bagging

  • 监督异常检测,半监督异常检测,主动学习(active learning)

  • 图中的异常检测,也包括网络中的异常检测




学习路径推荐

虽然异常检测有非常广阔的应用场景,但据我所知还没有一门公开课或者中文书籍系统的讨论相关的问题。以英文材料为例,比较权威的是Charu Aggarwal的Outlier Analysis,本文也多处参考了这本书的内容。

我自己觉得比较恰当的学习路径是:

  • 掌握基础的、通用的机器学习知识,如周志华《机器学习》中前半部分的基础知识点

  • 了解一些统计学的知识也有所帮助,因为最基本的异常检测是建立在统计学检验上的

  • 学习时间序列分析也大有帮助,很多工业界模型都无法逃离“时间轴”

  • 如果可能的话,建议系统学习上文提到Outlier Analysis这本教科书

  • 作为入门,可以阅读一下SIAM关于异常检测的教程

  • 进阶进行论文阅读的话,大部分研究都发表在数据挖掘会议上,主要包括KDD,ICDM,SIAM Data Mining,传统的机器学习会议不多


总结

个人认为,异常检测在工业应用上大有可为,是为数不多的有良好应用场景且人才缺口较大的领域。同时,因为大家对于互联网科技公司的向往,短时间内人才缺口很难被科班生补上,跨专业的朋友也有得天独厚的优势。

但值得注意的是,作为一个小领域,甚至是一个没那么火的领域,相关的资料不多,且不成体系。而且资料往往是英文,需要很强的自学能力。不难想象,自学难度以及学习曲线都非常陡峭。

开玩笑的说,富贵险中求,对于技术发展要有我们自己的判断。在全民深度学习的时代,不妨了解一下这些“遗珠”,说不定它会成为你未来很多年的依身傍命之技。







发…发车了


Copyright © 网络机器人吧社区@2017