未来 3~5 年内，哪个方向的机器学习人才最紧缺？
反欺诈方向的实际应用很多，我有做过保险业反欺诈和零售快消业的欺诈检测，抛砖引玉的谈谈反欺诈项目的"道"和"术"。 *具体的学习方法可以参考我最近的文章： 该回答的第一部分(1)讨论了为什么欺诈检测难度很大，第二部分(2-4)讨论了a. 数据可视化 b. 一些常用的算法及模型 c. 欺诈点验证，第三部分(5)归纳并提出了一个反欺诈模型的通用框架供大家参考。 反欺诈项目很多情况下就是客户根本不知道什么是欺诈，什么不是。换句话说，诈骗的定义很模糊。往小了说，反诈骗似乎是一个二分类问题(binary classification)，但你仔细想想后会发现其实这是个多分类问题(multi-class classification)，因为可以每种不同的诈骗都当做一种单独的类型。而单一类型的诈骗几乎是不存在的，且诈骗的手段日新月新总在变化。即使像银行还有保险公司这种常年和诈骗打交道的行业，也必须常常更新自己的检测手段，而不是把赌注压到同一个模型上。除此之外，欺诈检测一般还面临以下问题： 退一步说，即使我们真的有诈骗的历史数据，即在有标签的情况下用监督学习，也存在很大的风险。用这样的历史数据学出的模型只能检测曾经出现过与历史诈骗相似的诈骗，而对于变种的诈骗和从未见过的诈骗，我们的模型将会无能为力。因此，在实际情况中，我不建议直接用任何监督学习，至少不能单纯依靠一个监督学习模型来奢求检测到所有的诈骗。 这就陷入了一个鸡生蛋蛋生鸡的死循环，因为没有历史标签和对诈骗的理解，我们无法做出能对诈骗细分的模型。因此我们一般使用无监督学习(unsupervised learning)，且需要领域专家(domain experts)也就是对这个行业非常了解的人来验证我们的预测，提供反馈，以便于及时的调整模型。 一般在拿到数据以后，我会推荐以下步骤进行分析。当然，一个答案很难包括所有常见的操作，仅仅是分享个人经验以供思考。 数据可视化 - 相关矩阵(Correlation Matrix) & 多维尺度变换(Multidimensional Scaling)  。人是视觉动物，可以在第一时间“看到”数据中存在的问题。因此，对于大部分反欺诈问题，我建议至少要做以下两个可视化尝试: 2.1. 首先对不同的特征(feature)做一个相关矩阵分析并可视化，分析相关矩阵的目的是告诉我们特征两两之间的关系，以便于我们快速发现一些数据里面可能存在的问题。最重要的是帮助我们检查数据是否存在问题，有没有什么违反常理的情况。 以我最近在写的文章为例（并不是反欺诈问题），对不同偶像团体是否能够继续走红进行预测。我们希望不同特征之间的两两关系符合尝试， 我在模型里面用了6个不同的特征并计算相关矩阵: 通过上表及下图，我们发现： 举例，如果我们发现出道年限和专辑数呈负相关，这就违反了常识。按照常识出道时间越长专辑数应该越多，因此需要认真检查为什么会有这样的情况发生，是否是潜在问题。 2.2. 多维尺度变换(MDS)来直接可视化数据分布 我们都知道一般来说欺诈和正常数据应该“长得不一样”，那是否可以直接把它们画出来来分析。 然而，数据可视化往往都是二维或者三维的，但现实往往是成百上千维。即使我们把一个特征作为一个维度，我们最多也只能可视化三个维度。而多维尺度变换(MDS)可以将高维的数据在二维或者三维的框架里面进行可视化，类似的数据点会更加接近。通过观察数据点的分布，我们可以直观的猜测数据是否有规律，是否存在潜在异常点。 以我最近做的一个项目为例，我们用MDS将一个8维的数据在2维上展示出来。我们似乎可以直观的看到一些近似线性的关系，以及一些看起来“很可疑”的点，我在图中标注了出来。 这样做的好处有两点: 如果在可视化中我们看到了一些规律，这让有信心继续往下做，进入建模阶段。多加一句，此处和主成分分析(PCA)也有异曲同工之妙。 一般我们对欺诈检测做两种假设： 3.1. 时间序列分析(time series analysis) 时间序列分析展开说是很大的话题，从简单的观察一个时间序列是否稳定(stability)到更复杂的看多个特征如何在时间上互相作用如 vector auto-regression(var)。 一般我们对时间序列重整使其稳定后，会进行一系列分析，最简单的就是观察什么时候出现反常的spike(即突然上升)。 图片来源(Anomaly Detection – Using Machine Learning to Detect Abnormalities in Time Series Data) 就像上图所标注出来着一系列点都是潜在的异常点。严格意义上说，时间序列分析在金融经济领域使用的更多，任何交易模型都需要时序分析。 另一种简单的时序分析就是持续追踪某个值的变化情况，并在多个数据中进行对比： 上图是某种产品在不同零售商(不同颜色)的退货情况，x轴是时间。我们会发现“橙色”的零售商的退货模式更不稳定(前期有大量持续退货)，而“青色”的零售商退货非常稳定。因此，"橙色"零售商似乎有些可疑。当然，这只是一种解读方法，不代表一定有问题。 3.2. 时间独立下的建模 3.2.1. 无监督学习 如果我们假设时间对于欺诈并没有影响，那么我们有很多无监督学习可以用来检测异常值。 3.2.2. 统计学密度估计及分布测试 比较简单的做法可以尝试将数据拟合到假设的混合模型上(finite mixture models)，再通过统计学测试检查异常点、 一般不大推荐直接这么做，因为需要对于正常数据分布的深刻了解，才能做出对于数据分布的正确推断。 3.2.3. 监督学习 就像上文提到的，我不太建议直接用监督学习。当然，在特定场合下如果需要使用的话，比较出名的就是MetaCost框架，可以结合各种基础学习器使用。 3.3. 时间相关及独立的交叉验证 其实很多问题不是非此即彼，换句话说，时间独立和时间独立可能找到相似的异常点。在项目允许的情况下，我们大可以将两种时间假设都做一遍，之后求交集。若出现在交集中，我们对于该点是诈骗的信心会进一步上升。 假设我们通过上面的无监督学习得到了一些“潜在的欺诈点”，我们可以做一些分析来验证它们是否真的是欺诈。首先我必须声明，这种归纳是存在很大偏见的，但很难避免。 举例，我们可以对比异常值数据作为样本(sample)与总体(population)的各项数据的统计值(如均值方差等)，从统计学上证明它们是有显著差异的。但有显著差异并不代表他们一定是欺诈，只能说明它们不同。 当我们从统计学上证明其存在显著差异后，我们就开始想要归纳潜在的欺诈原因。以某供货商的数据为例，我们发现一个产品的进货变多、退货变少，但单位收益却上升，这是有问题的。 于是我们就可以大胆的推测他的进货和退货不是同一种产品，即在退货时用了比较便宜商品但拿到了更多的退货钱。 把这个故事讲给领域专家以后，他们会支持、质疑、甚至反对这个看法。根据领域专家的反馈，我们可以不断的调整优化模型，期待发现更多的问题。有的时候，也可以直接叫领域专家来帮忙分析为什么一些数据可能是欺诈。 首先，我们必须先要认清一个残酷的现实: 单纯依靠机器学习模型来检测欺诈是愚蠢的。至少在现阶段我们不能单纯依靠纯粹的数据模型来做这一点。比较折中且可行的方法是做 混合模型(hybrid model)，也就是把人为规则和机器学习模型合二为一，一起来使用。 首先我们通过对领域专家的访谈和对历史数据的分析，可以得到一些非常可靠的评判标准。以保险行业为例，如果一个人刚买短期保险没两天就意外身亡，这存在欺诈的风险就很高。这样的标准或许从机器学习中可以学到，或许学不到。如果有成本更低方法做到更好的效果，不要迷信全自动模型。 总结来说，反欺诈模型难度很高，而且需要和领域专家一起协作才能有最好的结果。机器学习从业者千万不要闭门造车，试图自己靠调参就搞个大新闻。 我个人推荐的步骤是： 鉴于篇幅，很多有趣的做法都没法详谈，比如时间序列上的聚类和半监督异常检测，有兴趣的朋友可以继续深入挖掘。 *具体的学习方法可以参考我最近的文章：