看到最新的一期auto encoder用于信用卡欺诈检测,进行重建误差的时候,已明确具体的正负样本,即数据是存在label标签的,这样子绘制reconstruction的mse、mae确实很清楚的看到欺诈样本的误差较大。但在数据集没有label的情况下怎么进行预测测试集中的欺诈样本呢,或者说怎么设定reconstruction MSE/MAE的threshold呢,通过threshold来确定?
2个回答
这里有两个步骤:
1. 先unsupervised learning,训练一个autoencoder得到MSE score。MSE=autoencoder(x)。loss中只有input$x$,并没有label$y$。
2.再根据MSE得到一个binary classifier,目的是确定一个threshold让总体error最小。比如下图中横轴是MSE。最终目的是让typeI和type II error的加权和最小。
$argmin_c [w_0 \int p(MSE>c|y=0) + w_1 \int p(MSE>c|y=1)]$如果对positive/negative平均看待,$w_1=P(y=1),w_0=P(y=0)$。也可以另外建模。
如果已知$y$,可以估计$p(MSE|y=1)$和$p(MSE|y=0)$。否则只能假设这两个分布。粗糙一点,也可以人为设定$c$,比如$P(MSE>c)=0.001$。
-----------------------------------------------------------------
第一步应用autoencoder中,有个假设是negative 和positive的pattern不同:在某个基(basis)坐标系中positive是远离negative的clusters。只要找到一个basis,能很好表达negative,并且很大概率不能很好表达positive,这样就能在这个basis上区分positive/negative。
autoencoder学习的是数据的nonlinear sparse representation,中间层的Z code就是一个m维的非线性basis。假设要表达所有positive/negative需要n维,[z1,z2,...zn],而表达negative只需要m维,m
举个例子,一只猪混到一群猴子中,而且对它们只进行爬树的考试。最后根据爬树的结果,很容易就把猪找出来了。而autoencoder学习的是如何在[吃饭,跑步,爬树,跳高,...]等考试中把爬树找出来。
好像的确挺不好办的,很多时候非监督学习也是有ground truth的。但是如果完全不知道真实情况的非监督异常检验,那就只能凭直觉或者应用场景了。
比如你知道0.1%的信用卡有异常,那么你的threshold就可以选择重建误差最大的0.05%或者0.1%,基于你是想保守点还是冒险点了。
SofaSofa数据科学社区DS面试题库 DS面经