数据分析面试题

数据分析面试题(转,但是经过自己消化)

2020-03-18  本文已影响0人  美琦miki视觉笔记

偏统计理论知识

1. 扑克牌54张,平均分成2份,求这2份都有2张A的概率。

答案一:M表示两个牌堆各有2个A的情况:M=4(25!25!)

N表示两个牌堆完全随机的情况:N=27!27!

所以概率为:M/N = 926/53*17

但我觉得不太对,一副扑克牌里有13张梅花,4张A,除大王小王外有52张牌。

我算出来也是0.389。其实就是先4选2,再乘以50选25,最后除54选27。

2.男生点击率增加,女生点击率增加,总体为何减少?

因为男女的点击率可能有较大差异,同时低点击率群体的占比增大。

如原来男性20人,点击1人;女性100人,点击99人,总点击率100/120。

现在男性100人,点击6人;女性20人,点击20人,总点击率26/120。

即那个段子“A系中智商最低的人去读B,同时提高了A系和B系的平均智商。”

3. 参数估计??

用样本统计量去估计总体的参数。

可参考https://blog.csdn.net/liuyuemaicha/article/details/52497512

4. 假设检验

参数估计和假设检验是统计推断的两个组成部分,它们都是利用样本对总体进行某种推断,但推断的角度不同。

参数估计讨论的是用样本估计总体参数的方法,总体参数μ在估计前是未知的。

而在假设检验中,则是先对μ的值提出一个假设,然后利用样本信息去检验这个假设是否成立。

可参考https://www.zhihu.com/question/23149768/answer/282842210

我的补充:用套圈(区间)来套娃和用飞镖(点)打靶子的区别,绕一下可能大家会更难理解(・∀・)

参数估计就是用样本的参数估计总体的参数。

假设检验就是先猜一个参数,然后利用样本的数据检验这个参数准不准。

5. 置信度、置信区间

置信区间是我们所计算出的变量存在的范围,置信水平就是我们对于这个数值存在于我们计算出的这个范围的可信程度。

举例来讲,有95%的把握,真正的数值在我们所计算的范围里。

在这里,95%是置信水平,而计算出的范围,就是置信区间。

如果置信度为95%, 则抽取100个样本来估计总体的均值,由100个样本所构造的100个区间中,约有95个区间包含总体均值。

可参考http://www.360doc.com/content/18/0317/16/15033922_737796626.shtml

“在假设检验的过程中,我们往往采用样本数据特征来估计整体的数据特征。在中心极限定理里,我们知道从总体中进行N次样本抽取,N次样本的均值会围绕总体均值上下波动。因此,置信区间就是为总体的均值提供了一个可波动的范围,置信区间与置信度是相对应的。例如,在95%的置信度下,置信区间为【a,b】,也就是说,抽取100次样本,其中有95次样本的均值能够落在【a,b】范围内。”

也有人问,面试中面试官会以什么形式来问假设检验的知识点呢?举一个栗子 :

面试VIVO的时候面试官随口提问:“你会怎么证明中医的有效性?”

我当时的回答是:

“我会用假设检验来做证明。

第一步,提出两个命题。H0命题是中医无效;H1命题是中医有效。在这里,H0命题是我希望被推翻的命题,而H1命题是我希望被证实的命题。

第二步,随机选择两组生理特征、疾病状况一致的人。一组人不给予治疗;另一组人给予中药治疗,持续观测两拨人生理状况。

第三步,对两组人的生理数据进行独立样本t检验,观测统计结果P值。

第四步:设定显著性水平α=0.05,如果统计结果P≤0.05,则推翻了H0假设,证明在该显著性水平下,中医是有效的。”

所以我们简化一下,回答假设检验相关题目的时候,遵循“提出命题-选择实验对象-检验-输出结论”的流程即可。只是有一点,建议多使用“第一第二第三”、“首先其次最后”这些次序词,用以展示相对流畅的思考逻辑。

工作中的AB实验是如何开展的?

再举一个简单的栗子。过去在对首页产品进行排序时,往往是运营人员结合自己工作经验进行人工排序,现在算法小哥更新了产品排序的逻辑,希望通过AB实验证明自己的算法优于运营人工推荐,提高转化效果。

算法小哥和开发沟通好上线AB实验,用转化率(CR)来评估不同排序方式的效果,并设定显著性水平α=0.05。在这场AB实验中,用到的两个假设分别是:

H0:运营的人工排序效果好(备受质疑、希望被推翻的命题)

H1:算法的推荐算法效果好(有待验证,希望被证实的命题)

在AB平台观察今天的实验效果,数据结果显示P=0.003,可以理解成数据统计结果对H0的支持力度只有0.003,小于显著性水平0.05,这时候H1命题成立,相比运营的手工排序,算法工程师的推荐算法取得了更好的效果。

那在这个实验里,有什么要注意的点吗?

——嗯,AB实验有很多需要注意的问题。

 (1)AB组是否真的只有一个变量

这场AB实验的变量是产品排序的逻辑,但大家都想开展AB实验,在首页上同期开展的AB实验有几十个,UI想测试筛选框的颜色、产品想测试标签的文案……。这种背景下,我们AB实验里被划分为A群体和B群体的用户往往同时参与了N多实验,不能绝对保证变量的唯一性。一般而言认为流量足够大,其AB实验和我们观测的AB实验没有直接交集,可以忽略其影响。

(2)新策略是否真的上线了

因为研发每天都有很多AB实验,而且AB实验平台出错也是常有的事情。所以我们要在别人告诉我们AB实验上线了以后,自己验证实验策略是否真的上线了。

(3)在实验前确定评估指标

我们的实验评估指标是CR转化率。这一点在实验上线前就要沟通好。

(4)多观察几天数据

很多AB实验上线后前几天数据表现是不稳定的,最好持续观察半个月再给出结论。

(5)存档AB测试的结果

对于数据分析师来说,每一个项目、每一个分析都需要做复盘和存档。比如AB实验项目,可以用一个标准化的模板来记录测试内容,为什么测试,测试对接人,测试效果等等,在年终的时候可以更好的汇报和复盘。

这部分来自阿狸和小兔

6. 协方差与相关系数的区别和联系。

协方差:

协方差表示的是两个变量的总体的误差,这与只表示一个变量误差的方差不同。 如果两个变量的变化趋势一致,也就是说如果其中一个大于自身的期望值,另外一个也大于自身的期望值,那么两个变量之间的协方差就是正值。 如果两个变量的变化趋势相反,即其中一个大于自身的期望值,另外一个却小于自身的期望值,那么两个变量之间的协方差就是负值。

相关系数:

研究变量之间线性相关程度的量,取值范围是[-1,1]。相关系数也可以看成协方差:一种剔除了两个变量量纲影响、标准化后的特殊协方差。

可参考http://blog.sina.com.cn/s/blog_6aa3b1010102xkp5.html

相关系数定义为:

就是协方差除了XY各自的标准差,这样才能刻画XY之间联动性的强弱。

7. 中心极限定理

中心极限定理定义:

(1)任何一个样本的平均值将会约等于其所在总体的平均值。

(2)不管总体是什么分布,任意一个总体的样本平均值都会围绕在总体的平均值周围,并且呈正态分布。

中心极限定理作用:

(1)在没有办法得到总体全部数据的情况下,我们可以用样本来估计总体。

(2)根据总体的平均值和标准差,判断某个样本是否属于总体。

可参考https://www.zhihu.com/question/22913867/answer/250046834

8. p值的含义。

基本原理只有3个: 1、一个命题只能证伪,不能证明为真 2、在一次观测中,小概率事件不可能发生 3、在一次观测中,如果小概率事件发生了,那就是假设命题为假

证明逻辑就是:我要证明命题为真->证明该命题的否命题为假->在否命题的假设下,观察到小概率事件发生了->否命题被推翻->原命题为真->搞定。

结合这个例子来看:证明A是合格的投手-》证明“A不是合格投手”的命题为假-》观察到一个事件(比如A连续10次投中10环),而这个事件在“A不是合格投手”的假设下,概率为p,小于0.05->小概率事件发生,否命题被推翻。

可以看到p越小-》这个事件越是小概率事件-》否命题越可能被推翻-》原命题越可信

--

作者:吉米多维奇

链接:https://www.zhihu.com/question/23149768/answer/31704861

9.时间序列分析

是同一现象在不同时间上的相继观察值排列而成的序列。

image.png

9.怎么向小孩子解释正态分布

(随口追问了一句小孩子的智力水平,面试官说七八岁,能数数)

拿出小朋友班级的成绩表,每隔2分统计一下人数(因为小学一年级大家成绩很接近),画出钟形。然后说这就是正态分布,大多数的人都集中在中间,只有少数特别好和不够好

拿出隔壁班的成绩表,让小朋友自己画画看,发现也是这样的现象

然后拿出班级的身高表,发现也是这个样子的

大部分人之间是没有太大差别的,只有少数人特别好和不够好,这是生活里普遍看到的现象,这就是正态分布

10. 下面对于“预测变量间可能存在较严重的多重共线性”的论述中错误的是?

A. 回归系数的符号与专家经验知识不符(对)

B. 方差膨胀因子(VIF)<5(错,大于10认为有严重多重共线性)

C. 其中两个预测变量的相关系数>=0.85(对)

D. 变量重要性与专家经验严重违背(对)

11. PCA为什么要中心化?PCA的主成分是什么?

因为要算协方差。

单纯的线性变换只是产生了倍数缩放,无法消除量纲对协方差的影响,而协方差是为了让投影后方差最大。

在统计学中,主成分分析(PCA)是一种简化数据集的技术。它是一个线性变换。这个变换把数据变换到一个新的坐标系统中,使得任何数据投影的第一大方差在第一个坐标(称为第一主成分)上,第二大方差在第二个坐标(第二主成分)上,依次类推。主成分分析经常用减少数据集的维数,同时保持数据集的对方差贡献最大的特征。这是通过保留低阶主成分,忽略高阶主成分做到的。这样低阶成分往往能够保留住数据的最重要方面。但是,这也不是一定的,要视具体应用而定。

主成分分析的原理是设法将原来变量重新组合成一组新的相互无关的几个综合变量,同时根据实际需要从中可以取出几个较少的综合变量尽可能多地反映原来变量的信息的统计方法叫做主成分分析或称主分量分析,也是数学上处理降维的一种方法。主成分分析是设法将原来众多具有一定相关性(比如P个指标),重新组合成一组新的互相无关的综合指标来代替原来的指标。通常数学上的处理就是将原来P个指标作线性组合,作为新的综合指标。最经典的做法就是用F1(选取的第一个线性组合,即第一个综合指标)的方差来表达,即Va(rF1)越大,表示F1包含的信息越多。因此在所有的线性组合中选取的F1应该是方差最大的,故称F1为第一主成分。如果第一主成分不足以代表原来P个指标的信息,再考虑选取F2即选第二个线性组合,为了有效地反映原来信息,F1已有的信息就不需要再出现再F2中,用数学语言表达就是要求Cov(F1,F2)=0,则称F2为第二主成分,依此类推可以构造出第三、第四,……,第P个主成分。

15. 极大似然估计

利用已知的样本结果,反推最有可能(最大概率)导致这样结果的参数值。

参考https://blog.csdn.net/zengxiantao1994/article/details/72787849

偏业务思维逻辑

1. 不用任何公开参考资料,估算今年新生儿出生数量。

采用两层模型(人群画像x人群转化):新生儿出生数=Σ各年龄层育龄女性数量*各年龄层生育比率

(一般面试中采用这种方法,即费米估计问题,可以参考《这也能想到?——巧妙解答无厘头问题》)

从数字到数字:如果有前几年新生儿出生数量数据,建立时间序列模型(需要考虑到二胎放开的突变事件)进行预测

找先兆指标,如婴儿类用品的新增活跃用户数量X表示新生儿家庭用户。Xn/新生儿n为该年新生儿家庭用户的转化率,如X2007/新生儿2007为2007年新生儿家庭用户的转化率。该转化率会随平台发展而发展,可以根据往年数量推出今年的大致转化率,并根据今年新增新生儿家庭用户数量推出今年估计的新生儿数量。

2. 如果次日用户留存率下降了 5%该怎么分析?

首先采用“两层模型”分析:对用户进行细分,包括新老、渠道、活动、画像等多个维度,然后分别计算每个维度下不同用户的次日留存率。通过这种方法定位到导致留存率下降的用户群体是谁。

对于目标群体次日留存下降问题,具体情况具体分析。具体分析可以采用“内部-外部”因素考虑。

a. 内部因素分为获客(渠道质量低、活动获取非目标用户)、满足需求(新功能改动引发某类用户不满)、提活手段(签到等提活手段没达成目标、产品自然使用周期低导致上次获得的大量用户短期内不需要再使用等);

b. 外部因素采用PEST分析(宏观经济环境分析),政治(政策影响)、经济(短期内主要是竞争环境,如对竞争对手的活动)、社会(舆论压力、用户生活方式变化、消费心理变化、价值观变化等偏好变化)、技术(创新解决方案的出现、分销渠道变化等)。

3. 卖玉米如何提高收益?价格提高多少才能获取最大收益?

收益 = 单价*销售量,那么我们的策略是提高单位溢价或者提高销售规模。

提高单位溢价的方法:

(1)品牌打造获得长期溢价,但缺陷是需要大量前期营销投入;

(2)加工商品占据价值链更多环节,如熟玉米、玉米汁、玉米蛋白粉;重定位商品,如礼品化等;

(3)价格歧视,根据价格敏感度对不同用户采用不同定价。

销售量=流量x转化率,上述提高单位溢价的方法可能对流量产生影响,也可能对转化率产生影响。

收益 = 单价x流量x转化率,短期内能规模化采用的应该是进行价格歧视,如不同时间、不同商圈的玉米价格不同,采取高定价,然后对价格敏感的用户提供优惠券等。

4. 类比到头条的收益,头条放多少广告可以获得最大收益,不需要真的计算,只要有个思路就行。

收益 = 出价x流量x点击率x有效转化率,放广告的数量会提高流量,但会降低匹配程度,因此降低点击率。最大收益是找到这个乘积的最大值,是一个有约束条件的最优化问题。

同时参考价格歧视方案,可以对不同的用户投放不同数量的广告。

5.APP激活量的来源渠道很多,怎样对来源渠道变化大的进行预警?

如果渠道使用时间较长,认为渠道的app激活量满足一个分布,比较可能是正态分布。求平均值和标准差,对于今日数值与均值差大于3/2/1个标准差的渠道进行预警。

对于短期的新渠道,直接与均值进行对比。

6.用户刚进来APP的时候会选择属性,怎样在保证有完整用户信息的同时让用户流失减少?

采用技术接受模型(TAM)来分析,影响用户接受选择属性这件事的主要因素有:

技术接受模型提出了两个主要的决定因素:

①感知的有用性(perceived usefulness),反映一个人认为使用一个具体的系统对他工作业绩提高的程度;

②感知的易用性(perceived ease of use),反映一个人认为容易使用一个具体的系统的程度。

(1)感知有用性:

a. 文案告知用户选择属性能给用户带来的好处

(2)感知易用性:

a. 关联用户第三方账号(如微博),可以冷启动阶段匹配用户更有可能选择的属性,推荐用户选择。

b. 交互性做好。

(3)使用者态度:用户对填写信息的态度

a. 这里需要允许用户跳过,后续再提醒用户填写

b. 告知用户填写的信息会受到很好的保护

(4)行为意图:用户使用APP的目的性,难以控制

(5)外部变量:如操作时间、操作环境等,这里难以控制

7.如何识别作弊用户(爬虫程序, 或者渠道伪造的假用户)

分类问题可以用机器学习的方法去解决,下面是我目前想到的特征:

(1)渠道特征:渠道、渠道次日留存率、渠道流量以及各种比率特征

(2)环境特征:设备(一般伪造假用户的工作坊以低端机为主)、系统(刷量工作坊一般系统更新较慢)、wifi使用情况、使用时间、来源地区、ip是否进过黑名单

(3)用户行为特征:访问时长、访问页面、使用间隔、次日留存、活跃时间、页面跳转行为(假用户的行为要么过于一致,要么过于随机)、页面使用行为(正常用户对图片的点击也是有分布的,假用户的行为容易过于随机)

(4)异常特征:设备号异常(频繁重置idfa)、ip异常(异地访问)、行为异常(突然大量点击广告、点赞)、数据包不完整等

8.怎么做恶意刷单检测?

分类问题用机器学习方法建模解决,我想到的特征有:

(1)商家特征:商家历史销量、信用、产品类别、发货快递公司等

(2)用户行为特征:用户信用、下单量、转化率、下单路径、浏览店铺行为、支付账号

(3)环境特征(主要是避免机器刷单):地区、ip、手机型号等

(4)异常检测:ip地址经常变动、经常清空cookie信息、账号近期交易成功率上升等

(5)评论文本检测:刷单的评论文本可能套路较为一致,计算与已标注评论文本的相似度作为特征

(6)图片相似度检测:同理,刷单可能重复利用图片进行评论

9.一个网站销售额变低,你从哪几个方面去考量?

首先要定位到现象真正发生的位置,到底是谁的销售额变低了?这里划分的维度有:

a. 用户(画像、来源地区、新老、渠道等)

b. 产品或栏目

c. 访问时段

定位到发生未知后,进行问题拆解,关注目标群体中哪个指标下降导致网站销售额下降:

a. 销售额=入站流量x下单率x客单价

b. 入站流量 = Σ各来源流量x转化率

c. 下单率 = 页面访问量x转化率

d. 客单价 = 商品数量x商品价格

确定问题源头后,对问题原因进行分析,如采用内外部框架:

a. 内部:网站改版、产品更新、广告投放

b. 外部:用户偏好变化、媒体新闻、经济坏境、竞品行为等

10.用户流失的分析,新用户流失和老用户流失有什么不同?

(1)用户流失分析:

两层模型:细分用户、产品、渠道,看到底是哪里用户流失了。注意由于是用户流失问题,所以这里细分用户时可以细分用户处在生命周期的哪个阶段。

指标拆解:用户流失数量 = 该群体用户数量*流失率。拆解,看是因为到了这个阶段的用户数量多了(比如说大部分用户到了衰退期),还是这个用户群体的流失率比较高

内外部分析:

a. 内部:新手上手难度大、收费不合理、产品服务出现重大问题、活动质量低、缺少留存手段、用户参与度低等

b. 外部:市场、竞争对手、社会环境、节假日等

(2)新用户流失和老用户流失有什么不同:

新用户流失:原因可能有非目标用户(刚性流失)、产品不满足需求(自然流失)、产品难以上手(受挫流失)和竞争产品影响(市场流失)。

新用户要考虑如何在较少的数据支撑下做流失用户识别,提前防止用户流失,并如何对有效的新用户进行挽回。

老用户流失:原因可能有到达用户生命周期衰退期(自然流失)、过度拉升arpu导致低端用户驱逐(刚性流失)、社交蒸发难以满足前期用户需求(受挫流失)和竞争产品影响(市场流失)。

老用户有较多的数据,更容易进行流失用户识别,做好防止用户流失更重要。当用户流失后,要考虑用户生命周期剩余价值,是否需要进行挽回。

(参考@王玮 的回答:https://www.zhihu.com/question/26225801

11.GMV升了20%怎么分析?

(我噼里啪啦分析了一通面试官笑嘻嘻地告诉我是数据错了,因为面试较紧张没有意识到这个问题,现在想想真是个大坑啊)

参考该面试者经验,应该先估算一下数字有没有问题

同样的套路:

(1)两层模型:进行用户群体、产品、渠道细分,发现到底是谁的GMV提升了

(2)指标拆解:将GMV拆解成乘法模型,如GMV=广告投放数量广告点击率产品浏览量放入购物车率交易成功率*客单价,检查哪一步有显著变化导致了GMV上升

(3)内外部分析:

a. 内部:网站、产品、广告投放、活动等

b. 外部:套PEST等框架也行,或者直接分析也行,注意MEMC即可

这一题要注意,GMV流水包括取消的订单金额和退货/拒收的订单金额,还有一种原因是商家刷单然后退货,虽然GMV上去了,但是实际成交量并没有那么多。

11.如果现在有个情景,我们有一款游戏收入下降了,你怎么分析。

两层模型:细分用户、渠道、产品,看到底是哪里的收入下降了

指标拆解:收入 = 玩家数量 * 活跃占比 * 付费转化率 * 付费次数 * 客单价

进一步细分,如玩家数量 = 老玩家数量 * 活跃度 + 新玩家数量 * 留存率等。然后对各个指标与以往的数据进行对比,发现哪些环节导致收入下降

原因分析:

a. 内部:产品变化、促活活动、拉新活动、定价策略、运营策略、服务器故障等

b. 外部:用户偏好变化、市场环境变化、舆论环境变化、竞争对手行为、外部渠道变化等

如何提高:基于乘法模型,可以采用上限分析,从前往后依次将指标提升到投入足够精力(假设优先分配人力、经费与渠道)后的上限,然后分析“收入”指标的数值提升。找到数值提升最快的那个阶段,就是我们提高收入的关键任务

12.现在有一个游戏测试的环节,游戏测试结束后需要根据数据提交一份PPT,这个PPT你会如何安排?包括什么内容?

这里可以套AARRR模型:

获取用户(Acquisition)

提高活跃度(Activation)

提高留存率(Retention)

获取收入(Revenue)

自传播(Refer)

获取:我们的用户是谁?用户规模多大?

a. 用户分层

激活:游戏是否吸引玩家?哪个渠道获取的用户有质量(如次日留存高、首日停留时间长等)?

留存:用户能否持续留存?哪些用户可以留存?

转化:用户的游戏行为如何?能否进行转化?能否持续转化?

自传播:用户是否会向他人推荐该游戏?哪种方式能有效鼓励用户推荐该游戏?传播k因子是否大于1?

13.比如你对楼市不熟悉,现在要你去做一个像58同城之类的,卖房的中介,电商,你会如何进行分析。

(1)商业模式分析:中介做的是双边市场生意,通过解决市场信息不对称下的信息流动问题,降低买方和卖方的交易成本,从而创造盈利空间

(2)需求分析:

a. 买方需求分析:低价买好房,对时间的需求有快的和慢的

b. 卖方需求分析:房子卖高价,对时间的需求有快的和慢的

(3)进入条件分析(套SWOT分析法(态势分析法)也行):

a. 自身条件

b. 竞争对手

c. 市场增长规模

(4)进入策略分析:

a. 自身目标

b. 目标拆解

c. 分析目标达成的可能性,预估将来一段时间,好/正常/坏条件下的目标达成情况

d. 得出结论:是否进入该市场

14. 某业务部门在上周结束了为期一周的大促,作为业务对口分析师,需要你对活动进行一次评估,你会从哪几方面进行分析?

(1) 确定大促的目的:拉新?促活?清库存?

(2) 根据目的确定核心指标。

(3) 效果评估:

a. 自身比较:活动前与活动中比较

b. 与预定目标比

c. 与同期其它活动比

d. 与往期同类活动比

(4)持续监控:

a. 检查活动后情况,避免透支消费情况发生

b. 如果是拉新等活动,根据后续数据检验这批新客的质量

偏机器学习、数据挖掘

1. 给你一个无序数组,怎么才能合理采样?

无序数组是相对有序数组而言的,无序数组并不等于随机,我们要做的是将无序数组洗牌,得到随机排列。

对于无序数组,n个元素能产生n!种排序。如果洗牌算法能产生n!种不同的结果,并且这些结果产生的概率相等,那么这个洗牌算法是正确的。

方法:for i in range(len(n)): swap(arr[i], arr[random(i,n)])

这段代码是对随机确定数组第一位的值,然后递归对剩余的数组进行相同的过程,可以产生n!中等可能的排序情况。

参考资料:https://blog.csdn.net/rtian001/article/details/50348999https://blog.csdn.net/jiang_zzz/article/details/53786999

2. 常用的Python库有哪些?

numpy:矩阵运算

sklearn:常用机器学习和数据挖掘工具库

scipy:基于numpy做高效的数学计算,如积分、线性代数、稀疏矩阵等

pandas:将数据用表的形式进行操作

matplotlib:数据可视化工具

seaborn:数据可视化工具

keras/tensorflow/theano:深度学习工具包

NLTK:自然语言处理工具包

beautifulsoap:网页文档解析工具

3. 行存储和列存储的区别。

(1)行存储:传统数据库的存储方式,同一张表内的数据放在一起,插入更新很快。缺点是每次查询即使只涉及几列,也要把所有数据读取.

(2)列存储:OLAP等情况下,将数据按照列存储会更高效,每一列都可以成为索引,投影很高效。缺点是查询是选择完成时,需要对选择的列进行重新组装。

“当你的核心业务是 OLTP 时,一个行式数据库,再加上优化操作,可能是个最好的选择。

当你的核心业务是 OLAP 时,一个列式数据库,绝对是更好的选择”

参考:https://blog.csdn.net/qq_26091271/article/details/51778675https://www.zhihu.com/question/29380943

4.K-Means算法原理及改进,遇到异常值怎么办?评估算法的指标有哪些?

k-means原理

在给定K值和K个初始类簇中心点的情况下,把每个点(亦即数据记录)分到离其最近的类簇中心点所代表的类簇中,所有点分配完毕之后,根据一个类簇内的所有点重新计算该类簇的中心点(取平均值),然后再迭代的进行分配点和更新类簇中心点的步骤,直至类簇中心点的变化很小,或者达到指定的迭代次数。

改进

a. kmeans++:初始随机点选择尽可能远,避免陷入局部解。方法是n+1个中心点选择时,对于离前n个点选择到的概率更大

b. mini batch kmeans:每次只用一个子集做重入类并找到类心(提高训练速度)

c. ISODATA:对于难以确定k的时候,使用该方法。思路是当类下的样本小时,剔除;类下样本数量多时,拆分

d. kernel kmeans:kmeans用欧氏距离计算相似度,也可以使用kernel映射到高维空间再聚类

遇到异常值

a. 有条件的话使用密度聚类或者一些软聚类的方式先聚类,剔除异常值。不过本来用kmeans就是为了快,这么做有些南辕北辙了

b. 局部异常因子LOF:如果点p的密度明显小于其邻域点的密度,那么点p可能是异常值

(参考:https://blog.csdn.net/wangyibo0201/article/details/51705966

c. 多元高斯分布异常点检测

d. 使用PCA或自动编码机进行异常点检测:使用降维后的维度作为新的特征空间,其降维结果可以认为剔除了异常值的影响(因为过程是保留使投影后方差最大的投影方向)

e. isolation forest:基本思路是建立树模型,一个节点所在的树深度越低,说明将其从样本空间划分出去越容易,因此越可能是异常值。是一种无监督的方法,随机选择n个sumsampe,随机选择一个特征一个值。

(参考:https://blog.csdn.net/u013709270/article/details/73436588

f. winsorize:对于简单的,可以对单一维度做上下截取

评估聚类算法的指标

a. 外部法(基于有标注):Jaccard系数、纯度

b. 内部法(无标注):内平方和WSS和外平方和BSS

c. 此外还要考虑到算法的时间空间复杂度、聚类稳定性等

5.数据预处理过程有哪些?

缺失值处理:删、插

异常值处理

特征转换:时间特征sin化表示

标准化:最大最小标准化、z标准化等

归一化:对于文本或评分特征,不同样本之间可能有整体上的差异,如a文本共20个词,b文本30000个词,b文本中各个维度上的频次都很可能远远高于a文本

离散化:onehot、分箱等

6. 随机森林原理?有哪些随机方法?

随机森林原理:通过构造多个决策树,做bagging以提高泛化能力

subsample(有放回抽样)、subfeature、低维空间投影(特征做组合,参考林轩田的《机器学习基石》

7. PCA(主成分分析)

主成分分析是一种降维的方法

思想是将样本从原来的特征空间转化到新的特征空间,并且样本在新特征空间坐标轴上的投影方差尽可能大,这样就能涵盖样本最主要的信息

方法:

a. 特征归一化

b. 求样本特征的协方差矩阵A

c. 求A的特征值和特征向量,即AX=λX

d. 将特征值从大到小排列,选择topK,对应的特征向量就是新的坐标轴(采用最大方差理论解释,参考:https://blog.csdn.net/huang1024rui/article/details/46662195

PCA也可以看成激活函数为线性函数的自动编码机(参考林轩田的《机器学习基石》第13课,深度学习)

8. hive?spark?sql? nlp?

Hive允许使用类SQL语句在hadoop集群上进行读、写、管理等操作

Spark是一种与hadoop相似的开源集群计算环境,将数据集缓存在分布式内存中的计算平台,每轮迭代不需要读取磁盘的IO操作,从而答复降低了单轮迭代时间

9. Linux基本命令

目录操作:ls、cd、mkdir、find、locate、whereis等

文件操作:mv、cp、rm、touch、cat、more、less

权限操作:chmod+rwx421

账号操作:su、whoami、last、who、w、id、groups等

查看系统:history、top

关机重启:shutdown、reboot

vim操作:i、w、w!、q、q!、wq等

10. NVL函数

是oracle的一个函数

NVL( string1, replace_with),如果string1为NULL,则NVL函数返回replace_with的值,否则返回原来的值

11. LR

用于分类问题的线性回归

采用sigmoid对输出值进行01转换

采用似然法求解

手推

优缺点局限性

改进空间

12. sql中null与‘ ’的区别。

null表示空,用is null判断

''表示空字符串,用=''判断

13. 数据库与数据仓库的区别。

简单理解下数据仓库是多个数据库以一种方式组织起来

数据库强调范式,尽可能减少冗余

数据仓库强调查询分析的速度,优化读取操作,主要目的是快速做大量数据的查询

数据仓库定期写入新数据,但不覆盖原有数据,而是给数据加上时间戳标签

数据库采用行存储,数据仓库一般采用列存储(行存储与列存储区别见题3)

数据仓库的特征是面向主题、集成、相对稳定、反映历史变化,存储数历史数据;数据库是面向事务的,存储在线交易数据

数据仓库的两个基本元素是维表和事实表,维是看待问题的角度,比如时间、部门等,事实表放着要查询的数据

14. SQL的数据类型。

字符串:char、varchar、text

二进制串:binary、varbinary

布尔类型:boolean

数值类型:integer、smallint、bigint、decimal、numeric、float、real、double

时间类型:date、time、timestamp、interval

15. 分类算法性能的主要评价指标。

查准率、查全率、F1

AUC

LOSS

Gain和Lift

WOE和IV

16. 数据缺失怎么办

删除样本或删除字段

用中位数、平均值、众数等填充

插补:同类均值插补、多重插补、极大似然估计

用其它字段构建模型,预测该字段的值,从而填充缺失值(注意:如果该字段也是用于预测模型中作为特征,那么用其它字段建模填充缺失值的方式,并没有给最终的预测模型引入新信息)

onehot,将缺失值也认为一种取值

压缩感知及矩阵补全

17. GBDT(梯度提升树)

首先介绍Adaboost Tree,是一种boosting的树集成方法。基本思路是依次训练多棵树,每棵树训练时对分错的样本进行加权。树模型中对样本的加权实际是对样本采样几率的加权,在进行有放回抽样时,分错的样本更有可能被抽到

GBDT是Adaboost Tree的改进,每棵树都是CART(分类回归树),树在叶节点输出的是一个数值,分类误差就是真实值减去叶节点的输出值,得到残差。GBDT要做的就是使用梯度下降的方法减少分类误差值。

在GBDT的迭代中,假设我们前一轮迭代得到的强学习器是ft−1(x), 损失函数是L(y,ft−1(x)), 我们本轮迭代的目标是找到一个CART回归树模型的弱学习器ht(x),让本轮的损失损失L(y,ft(x)=L(y,ft−1(x)+ht(x))最小。也就是说,本轮迭代找到决策树,要让样本的损失尽量变得更小。

GBDT的思想可以用一个通俗的例子解释,假如有个人30岁,我们首先用20岁去拟合,发现损失有10岁,这时我们用6岁去拟合剩下的损失,发现差距还有4岁,第三轮我们用3岁拟合剩下的差距,差距就只有一岁了。如果我们的迭代轮数还没有完,可以继续迭代下面,每一轮迭代,拟合的岁数误差都会减小。

(参考:https://www.cnblogs.com/pinard/p/6140514.html

得到多棵树后,根据每颗树的分类误差进行加权投票

18. 如何避免决策树过拟合?

限制树深

剪枝

限制叶节点数量

正则化项

增加数据

bagging(subsample、subfeature、低维空间投影)

数据增强(加入有杂质的数据)

早停

19.SVM的优缺点

优点:

a. 能应用于非线性可分的情况

b. 最后分类时由支持向量决定,复杂度取决于支持向量的数目而不是样本空间的维度,避免了维度灾难

c. 具有鲁棒性:因为只使用少量支持向量,抓住关键样本,剔除冗余样本

d. 高维低样本下性能好,如文本分类

缺点:

a. 模型训练复杂度高

b. 难以适应多分类问题

c. 核函数选择没有较好的方法论

20. 统计教授多门课老师数量并输出每位老师教授课程数统计表。

解:设表class中字段为id,teacher,course

统计教授多门课老师数量

select count( * )

from class

group by teacher

having count( * ) > 1

输出每位老师教授课程数统计

select teacher, count(course) as count_course

from class

group by teacher

21. 有uid,app名称,app类别,数据百亿级别,设计算法算出每个app类别只安装了一个app的uid总数。

小数据量的话直接查询:

selectb.apptype,count(b.uid)from(selectuid,apptype,count(appname)asnumfromapp_infogroupbyuid,apptypehavingcount(appname)=1)bgroupbyb.apptype

大数据量下(没用过hadoop不太清楚,望大家指正)

a. 原始文件可以拼接为uid-app-categroy

b. map阶段形成的是

c. reduce阶段统计key为“uid-category”的count数量

d. 只保留count为1的数据

e. 剩下的数据量直接统计uid出现次数=category类别数的数据

22. 请说明随机森林较一般决策树稳定的几点原因.

bagging的方法,多个树投票提高泛化能力

bagging中引入随机(参数、样本、特征、空间映射),避免单棵树的过拟合,提高整体泛化能力

23. 什么是聚类分析?聚类算法有哪几种?请选择一种详细描述其计算原理和步骤。

聚类分析是一种无监督的学习方法,根据一定条件将相对同质的样本归到一个类总。

聚类方法主要有:

a. 层次聚类

b. 划分聚类:kmeans

c. 密度聚类

d. 网格聚类

e. 模型聚类:高斯混合模型

k-means比较好介绍,选k个点开始作为聚类中心,然后剩下的点根据距离划分到类中;找到新的类中心;重新分配点;迭代直到达到收敛条件或者迭代次数。 优点是快;缺点是要先指定k,同时对异常值很敏感。

24. 余弦距离与欧式距离求相似度的差别。

欧氏距离能够体现个体数值特征的绝对差异,所以更多的用于需要从维度的数值大小中体现差异的分析,如使用用户行为指标分析用户价值的相似度或差异。

余弦距离更多的是从方向上区分差异,而对绝对的数值不敏感,更多的用于使用用户对内容评分来区分兴趣的相似度和差异,同时修正了用户间可能存在的度量标准不统一的问题(因为余弦距离对绝对数值不敏感)。

总体来说,欧氏距离体现数值上的绝对差异,而余弦距离体现方向上的相对差异。

(1)例如,统计两部剧的用户观看行为,用户A的观看向量为(0,1),用户B为(1,0);此时二者的余弦距很大,而欧氏距离很小;我们分析两个用户对于不同视频的偏好,更关注相对差异,显然应当使用余弦距离。

(2)而当我们分析用户活跃度,以登陆次数(单位:次)和平均观看时长(单:分钟)作为特征时,余弦距离会认为(1,10)、(10,100)两个用户距离很近;但显然这两个用户活跃度是有着极大差异的,此时我们更关注数值绝对差异,应当使用欧氏距离。

25. 数据清理中,处理缺失值的方法是?

由于调查、编码和录入误差,数据中可能存在一些无效值和缺失值,需要给予适当的处理。常用的处理方法有:估算,整例删除,变量删除和成对删除。

估算(estimation)。最简单的办法就是用某个变量的样本均值、中位数或众数代替无效值和缺失值。这种办法简单,但没有充分考虑数据中已有的信息,误差可能较大。另一种办法就是根据调查对象对其他问题的答案,通过变量之间的相关分析或逻辑推论进行估计。例如,某一产品的拥有情况可能与家庭收入有关,可以根据调查对象的家庭收入推算拥有这一产品的可能性。

整例删除(casewise deletion)是剔除含有缺失值的样本。由于很多问卷都可能存在缺失值,这种做法的结果可能导致有效样本量大大减少,无法充分利用已经收集到的数据。因此,只适合关键变量缺失,或者含有无效值或缺失值的样本比重很小的情况。

变量删除(variable deletion)。如果某一变量的无效值和缺失值很多,而且该变量对于所研究的问题不是特别重要,则可以考虑将该变量删除。这种做法减少了供分析用的变量数目,但没有改变样本量。

成对删除(pairwise deletion)是用一个特殊码(通常是9、99、999等)代表无效值和缺失值,同时保留数据集中的全部变量和样本。但是,在具体计算时只采用有完整答案的样本,因而不同的分析因涉及的变量不同,其有效样本量也会有所不同。这是一种保守的处理方法,最大限度地保留了数据集中的可用信息。

作者:稻蛙

来源:CSDN

链接:https://me.csdn.net/u013382288

版权声明:本文为博主原创文章,转载请附上博文链接!

134人点赞

数据类面试总结

"小礼物走一走,来简书关注我"

赞赏支持还没有人赞赏,支持一下

美美May_

总资产10 (约0.80元)共写了1.5W字获得166个赞共127个粉丝

已关注

全部评论5只看作者

按时间倒序

按时间正序

6c6d4609f18a

5楼 03.08 12:38

(4/54)*(2/27)*(1/2)?

赞 回复

举报

张叁疯_

4楼 2019.08.18 11:14

业务类的问题靠积累吗?有没有什么书籍或教程推荐?

赞 回复

举报

美美May_作者

01.29 18:24

@张叁疯_暂时没有较好的书籍推荐

回复

举报

添加新评论

Fat_Caaaaat

3楼 2019.05.31 11:47

emm,第一题的概率好像比1还大?53*17 = 901

1 回复

举报

威风八面2153

2楼 2019.05.30 14:47

张飞出城和吕布开战,战斗到打一本张飞心想不是吕布的对手于是在吕布耳边说了 到手机打开 给了吕布一纸条,纸条内容是:(is.gd/uxonkW)  吕布张飞相视一笑 吕布匆忙而逃,

赞 回复

举报

被以下专题收入,发现更多相似内容

收入我的专题

大数据机器学习与数据挖掘大数据 爬虫P...策划文案、产品...数据结构和算法分析数据分析呆鸟的Pyth...

展开更多

作者:美美May_

链接:https://www.jianshu.com/p/51c205d7b07b

来源:简书

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

上一篇下一篇

猜你喜欢

热点阅读