What No One Tells You About Real-Time Machine Learning

What No One Tells You About Real-Time Machine Learning

实时机器学习——那些没人告诉你的事

Date: OCTOBER 7,2015    Author: DMITRY PETROV


original link: http://fullstackml.com/2015/10/07/what-no-one-tells-you-about-real-time-machine-learning/


在这一年里,我听说和阅读了许多关于实时机器学习的内容。人们常常在讨论信用卡欺诈检测系统时会提到这种有吸引力的业务场景。他们会说他们可以实时地持续更新信用卡欺诈检测模型(见“What is Apache Spark?”, “…real-time use cases…”和“Real time machine learning”)。他们看起来非常出色,但对我来说却并不真实。它们缺失一个重要细节,即连续的交易数据并不是模型再训练所需要的数据,你需要的是连续的标注的(或已被标记为欺诈/非欺诈的)交易数据。

生成标注数据可能是绝大多数机器学习系统中最慢且最昂贵的步骤。机器学习算法从那些与标注数据相似的人那里学习如何检测欺诈交易。让我们来看看它是怎么进行欺诈检测的。

1.创建模型

为了训练信用卡模型,你需要很多交易样本,并且所有样本都应该被标注为欺诈或非欺诈。这些标签应该尽可能的准确。现在我们有了标注数据集,这个数据集是用来作为监督机器学习算法的输入的。基于标注数据,算法才能训练欺诈检验模型。通常,该模型都是二项分类模型,即正类(欺诈)和负类(非欺诈)。

标注数据在这个过程中扮演了核心角色。改变我们的算法的参数通常是非常容易的,比如修改特征归一化方法或是损失函数。我们也可以直接改变算法本身,比如把logistic regression换成SVM或是Random forest。但是,你却无法改变标注数据集。数据信息是事先定义好的,你的模型只能预测你已经拥有的标签。

2.数据标注过程要花费多长时间?

我们怎样才能标注新鲜的交易呢?如果用户报告了欺诈交易或信用卡遭窃,我们可以立即标记该交易为“欺诈”。那么我们怎样对付剩下的交易呢?我们可以假定未报告的交易都是“非欺诈”的。我们应该等多久来确定这些交易是非欺诈的呢?我的一个朋友上一次丢失信用卡的时候,她说:“我暂时不会报告我丢失了信用卡,明天我回去我最近去过的商店问问他们有没有捡到我的信用卡”。幸运的是,那个商店找到并且还给了她。我不是一个信用卡欺诈领域的专家(我只是一个良好的使用者),但根据我的经验,我们必须至少等几天才能将交易标记为非欺诈”

相对的,如果某人报告了一起欺诈交易,我们可以立即标注该交易为欺诈”。那些报告欺诈的人可能在丢失后几小时或几天内意识到了欺诈交易,但我们也只能做到这一步。

在这种情况下,我们“新鲜”的标注数据集会被限制在很少的延迟几小时或几天的“欺诈”交易和大量延迟2-3天的“非欺诈交易”。

3.试着加快数据标注

我们的目标是获得“最新鲜”的标记数据。事实上,我们只拥有“最新的欺诈”标签。对于“非欺诈”标签,我们必须等一些日子。也许建立一个只使用“最新的欺诈”标签数据的模型会是一个好主意。然而,我们必须了解这些标签数据集是有偏的,这可能会引发一系列的问题。

让我们想象一个昨天才开业的新的大型购物中心,我们只从该商店收到关于一次交易的一次欺诈报告。因此我们的标记数据集会包含仅仅一起标记为“欺诈”的交易。其他所有交易都未被标记。那么算法会认为该商店是一个强欺诈预测点,并且该商店所有的交易都会被“实时”地错误地分类为“欺诈”。实时的优点给了我们实时的问题。

结论

如我们所见,信用卡欺诈检测的业务情景不像是实时监督学习的最佳情景。并且,我也不能想出其他商业领域的好情景。我希望能见到实时机器学习的好运用。请在社区中与我们分享任何信息与点子。

你可能感兴趣的:(What No One Tells You About Real-Time Machine Learning)