这家公司是做广告投放的,面试前看到网上评论说面试官要求很严格,但是看到招聘广告上写的工资又低于平均水平,很好奇所以去面了一下,看看是什么情况。
测试
一小时完成一份数据挖掘工程师笔试题卷子。
A.Concepts
A.1 What is your favorite book on data mining? List the data mining tools you often use and explain the data mining process.
A.2 List some of your favorite ML algorithms. Pick one you like the most and explain how it works.
A.3 Most machine learning methods suffer greatly when faced with severely imbalanced data. Please explain at least techniques for solving this problem.
A.4 What is the curse of dimensionality? Please describe at least two dimensionality reduction techniques.
B.Techniques
B.1 Write a SELECT statement in SQL to generate all frequent 2-length item sets from the transcation table T, whose structure is illustrated below. The support threshold is s.
*If you are note familiar with SQL, sketch your algorithm using your own personal style of pseudo-code.
TID | Item
1 | Milk
1 | Beer
1 | Chocolate
2 | Meat
2 | Chocolate
3 | Beer
3 | Chocolate
... | ...
C. Problem-Solving Capabilities
C.1 Suppose you want to increase the CTR of an online advertising campaign. List the steps you will take and the data processing methods you envisage.
还有一份表格,正面是基本信息,反面是一些问题。
你所期望的领导?你希望和什么同事工作?你对加班的态度?
面试
面试官先让我自己介绍一下做过的项目。我说我做过很多个,有没有特别指定的。面试官说你知道自己应聘的职位是什么吗?知道我们公司是干什么的吗?要介绍什么项目自己不知道吗?Machine Learning有很多的方向,你是哪一个呢?
病人手术低温预测项目介绍。
其中有说到要对不同的特征进行rescale,原因是防止数值较大的特征(0-500)产生的影响比数值较小的特征(0-1)要大,而忽略了数值较小的特征。面试官说,这个叫做normalization,梯度下降不是平滑的,在下降的时候数值范围不同的特征走动的速率会不一样,但是算法中只能用一个速率。
下面是摘自Wikipedia对feature scaling的说法,
Since the range of values of raw data varies widely, in some machine learning algorithms, objective functions will not work properly without normalization. For example, the majority of classifiers calculate the distance between two points by the Euclidean distance. If one of the features has a broad range of values, the distance will be governed by this particular feature. Therefore, the range of all features should be normalized so that each feature contributes approximately proportionately to the final distance.
Another reason why feature scaling is applied is that gradient descent converges much faster with feature scaling than without it.
从上面可以看出,我说的是原因1,面试官说的是原因2。但是面试官只承认他知道的原因2。
有说到LR模型中,参数为正的特征产生正影响,参数为负的特征产生负影响。面试官说我说反了,让我当场推算一下。我说逻辑回归函数是单调递增的,当然正的的参数会让正值的X变大,从而Y也变大。但是他不能理解,非让我从1/e{x},一直推算到逻辑回归函数X和Y的关系。幸亏数学是有客观的正确性的,最后承认是他错了。(综合下面的他对统计知识知道的很少,有点怀疑面试官的数学基础和知识面好像并不是很扎实。)
然后我说要做特征选择,他问我一共几个特征,我说20几个,他说20几个特征我们这里是不做特征选择的。我说不同的模型是有评判标准比较好坏的,比如我用的是AIC。他说选特征要用regularization,我说我知道可以用这个方法,可是AIC也可以达到同样的效果。面试官就认为是我不懂。
面试官再问,最后怎么评价模型好坏。我做了Likelihood ratio test,模型通过了假设验证,被接受了。面试官不做声。
股票预测项目。
他问我怎么判别模型的好坏。我拿模型的准确率和经验准确率比较。但是他好像年纪大了,一时没办法反应过来或者理解我说的经验准确率是什么。然后他说会有一些评判指标的,我说我也有算F1 score。(准确率不算一个分类算法的判别指标了?) 面试官不做声。
编程
给一个很大的数组,不能复制,每个元素是一个字母(aaabbcc),提取出不同的字母(abc)。复杂度是O(n)。
我当时理解的是(aaabbaacc)这样的数组,最后出(abc)。
面试官不承认我的算法,觉得太复杂,绕弯。
然后我问那么他的解法是什么,就说设置一个指针 i,一个指针 j,然后固定 i,移动 j,比较 i 和 j 的内容。
我有点没听懂,想再问问他就让我自己回家想了。
总结
面试官最后说,machine learning 一共两件事,一个是算法,一个是编程,你两个都不会,我怎么要你?
hmmm,对于第二个我承认,本科毕业后就没有用C++刷过题目了。
但是说我不会算法,不好意思,科班出身的我还要怀疑面试官的背景和专业性。
PS:看到有人说这个职位不应该看编程而是看算法。我在这之前面试过蚂蚁金服的算法专家职位,一面考察的主要就是编程,所以编程还是很重要的。
PPS:面试官年龄应该有40+,估算AI方面的经验有5年左右,但是为什么只能呆在这样一个加班严重(但是上班氛围很松懈)但是薪资低的小公司呢?个人推测是因为面试官的情商太低,外加思想太闭塞,不愿意聆听别人的想法,不接受和自己不一样或者自己不知道的解决方案。