#####一面,1.5小时
7月中旬找了蚂蚁金服的师兄内推。之后大概10天后收到蚂蚁金服面试电话,面试官刚开始是用钉钉打过来的,没接到,之后再给他回电话也没人接,没想到面试官在下班路上给我来的电话,可以说很敬业了。
面试官先给我说明一下他所在的部门是支付宝的安全部,然后让我介绍一下自己
我简单说了一下自己现在所在学校,还有自己本科的两个项目,一个是获得全国大学生信息安全竞赛的项目–app(因为是安全部门,所以这个我提了),第二个是本科老师创业的项目–web,然后说明我研究生阶段的研究方向是机器学习,项目还有我在滴滴公司实习的情况。
说一下你具体做的一个项目
这里我就讲自己做的kaggle上的一个竞赛了,关于广告欺诈的,讲了自己的数据处理,特征工程,还有主要用xgboost模型,之后用AUC值评估
说一下你处理数据的过程
这里讲了一下对数据缺失值,异常值的常见处理方式,以及对数据做离散化的操作,以及数据不平衡的处理
为什么对数据做离散化
回答的时候差不多按照这些方向回答的:
0. 离散特征的增加和减少都很容易,易于模型的快速迭代;
-
稀疏向量内积乘法运算速度快,计算结果方便存储,容易扩展;
-
离散化后的特征对异常数据有很强的鲁棒性:比如一个特征是年龄>30是1,否则0。如果特征没有离散化,一个异常数据“年龄300岁”会给模型造成很大的干扰;
-
逻辑回归属于广义线性模型,表达能力受限;单变量离散化为N个后,每个变量有单独的权重,相当于为模型引入了非线性,能够提升模型表达能力,加大拟合;
-
离散化后可以进行特征交叉,由M+N个变量变为M*N个变量,进一步引入非线性,提升表达能力;
-
特征离散化后,模型会更稳定,比如如果对用户年龄离散化,20-30作为一个区间,不会因为一个用户年龄长了一岁就变成一个完全不同的人。当然处于区间相邻处的样本会刚好相反,所以怎么划分区间是门学问;
-
特征离散化以后,起到了简化了逻辑回归模型的作用,降低了模型过拟合的风险。
对数据不平衡你怎么处理的
对样本少的进行过采样,对样本多的进行下采样,或者相结合为什么处理不平衡的数据,这样会有什么好处吗
因为我想先有lr模型拟合一下,但是lr模型对数据不平衡特别敏感,所以需要对数据进行采样,这是好处,但是数据采样之后会丢失一些特征,这个只是单纯的用lr看一下效果,大概的baseline那能不能不处理
更换模型,比如我采用xgboost模型,或者nn模型就不用过多的处理不平衡的数据。
那你怎么做特征工程的
我说根据业务的需要,比如广告欺诈里,对于欺诈产生的场景,哪些特征是影响结果的,然后讲了讲我的一些特征,还有为什么选这个特征的原因。
那这些特征你怎么选择的
我用xgboost的特征重要性的函数来筛选,它会给出特征的评分。
xgboost怎么给出评分的,以及xgboost的原理你清楚吗
这个回答我基本是按照我的博客,手推记录——xgboost,评分就是根据节点分割的增益,原理就从目标函数讲起。然后从头到尾基本说了一遍。
我看你的简历,你们还用到了lgbm,lgbm的原理是什么,那这两个有什么区别
我说使用lgbm主要原因是因为lgbm处理大数据集速度更快,自己并不太清楚lgbm的原理,但是目标函数适合xgb一样的,只是分裂节点的方式不一样,xgboost采用的是level-wise的分裂策略,而lightGBM采用了leaf-wise的策略,区别是xgboost对每一层所有节点做无差别分裂,可能有些节点的增益非常小,对结果影响不大,但是xgboost也进行了分裂,带来了务必要的开销。 leaft-wise的做法是在当前所有叶子节点中选择分裂收益最大的节点进行分裂,如此递归进行,leaf-wise这种做法容易过拟合,因为容易陷入比较高的深度中,因此需要对最大深度做限制,从而避免过拟合。lightgbm使用了基于histogram的决策树算法,这一点不同与xgboost中的 exact 算法。然后有讲了一些其他的不同。
我看你现在还在滴滴实习,说一下你在滴滴的工作吧
然后讲了一下我在滴滴实习的一些工作,包括用到的模型,数据等等
最后
你有什么问题问我的吗
我跟面试官提了,为什么拿我的简历,因为他们是安全部门,而我不是做安全的,面试官解释说要AI的同学来搞安全了。很多场景需要用到;我又提了说没有安全基础是不是需要补充一下,有什么途径,之后面试官建议我去看看一些介绍安全的网站,了解一下就行。
#####二面,1.5小时
一面之后一周的时间,二面是一个比较偏向做安全的面试官,但是他说自己也搞机器学习
你本科的那个项目,就是拿一等奖的是什么样的,能介绍一下吗
我就介绍了一下这是一个手机丢失之后,能够远程防护手机,把文件进行取回销毁等等功能的一个产品。跟安全攻防没有什么关系。
我看你做的项目用auc值来评判模型的好坏,能解释一下auc吗
我说,auc值是roc曲线下的面积,用来评判模型结果结果的可信度,可以理解为,在样本里抽一个正样本和一个负样本,正样本的评分高于负样本的概率比较大。然后面试官说是不是可以理解成auc高的话精确率会高,然后这里我其实不太赞同,但是我当时又没想到怎么解释auc和精确率没有必然的联系,没解释好,我们两个讨论了好久,最好面试官说,很多人都解释不清楚。。。然后问我roc曲线怎么画出来。我说先把所有样本给出的评分从高到低排序,然后依次设定阈值,每一次都算出一个真阳率和假阳率,真阳率就是召回,正样本里有多少预测成正的,假阳率,就是负样本里面有多少被预测称正的。然后以真阳率为纵坐标,假阳率为横坐标,打点,连线。曲线就是roc曲线了。
你用的xgboost模型,能解释下gbdt,xgb,rf的区别吗
我先说rf和gbdt/xgb不一样,一个是bagging一个是boosting,rf是将样本抽样,特征抽样,然后训练很多个弱分类器,然后加权求和。gbdt和xgb都是加法模型,串行的,根据上一个弱分类器的结果训练下一个分类器,消除残差。
xgb是怎么消除残差的,目标函数什么
往残差的负梯度方向走,来消除残差。面试问什么是梯度。我说都是当你上山时,最陡峭的位置,就是梯度。面试还问了梯度下降,以及梯度下降的改进和梯度消失的概念。我就把梯低下降的优化算法,比如adam讲了一下。之后我解释了目标函数是损失函数加正则项,面试官接着问正则。我把xgb正则的定义说了一下,他说为什么要加正则,我说是防止过拟合,他说那为什么加了正则可以防止过拟合,我根据xgb的原理,讲了树在分裂时的表达式,分裂的增益需要减去一个r,这个就可以防止树疯长,防止过拟合,然后又讲了l1,l2一般化的是怎么防止过拟合的。
你打算怎么改进自己的项目
我说自己打算用nn模型,因为工业界已经开始往深度学习方向走了,然后面试问我深度学习了解的怎么样,我说知道一点卷积。面试官问,为什么深度学习会好一点,我说深度学习可以帮我提取特征。
那你能解释一下卷积网络吗?
我从卷积,填充,滑步,池化讲了一遍。面试官说,那你觉得卷积有什么好的或者不足,我说卷积最大的好处是参数共享,可以减少求参。不足就是没办法识别大图。就是空间信息不能捕捉,卷积之后特征会丢失。
之后还问了一些和一面有点重复的问题。就不打出来了。
最后问我有什么问题,我就再聊了一下部门的工作内容就结束了。
#####三面,30分钟
二面之后,15天左右,三面应该是部门leader了,搞安全的,主要问我做的安全竞赛项目是什么,对linux系统是否熟悉,对文本数据分析怎么样,我介绍了一下安全竞赛的项目,然后说linux熟悉指令,内核不太熟悉。文本数据没搞过。然后他说如果我要能够检测异常的用户,用AI怎么实现。我就从数据,收益,模型讲了一下。然后他说异常的样本很少的,这种情况怎么处理,我就按数据不平衡的处理方式说了一下,然后建议做迁移学习。讲了一下想法。面试官又问,如果我想有一个模型来定义用户的正常行为呢,我说可以考虑成用户行为画像(胡扯的。。。。)自己说了一下理解。
之后让我提问题,我再聊了一下,就结束了
#####四面,30分钟
三面我以为要凉了,但是第3天hr就打来了电话,问了一下有没有别公司的offer,我说有美团,360,滴滴的。其实都是意向书,然后他说怎么选择offer呢,我说首选杭州,然后公司也是首选阿里,他说为什么是阿里。我说阿里牛逼。。。。
之后聊了一下,对金融未来风险的看法,我说安全第一,然后讲了一下理解。然后他再问了一些个人情况就结束。
结束之前说我有什么问他的,我让他介绍了一下蚂蚁金服晋升体系,还有培训体系,就没有了,之后hr让我月底等消息。