【面经】数据分析岗_面试题整理总结
偏统计理论知识
1. 扑克牌54张,平均分成2份,求这2份都有2张A的概率。
- M表示两个牌堆各有2个A的情况:M=4(25!25!)
N表示两个牌堆完全随机的情况:N=27!27!
所以概率为:M/N = 926/53*17
2.男生点击率增加,女生点击率增加,总体为何减少?
- 因为男女的点击率可能有较大差异,同时低点击率群体的占比增大。
如原来男性20人,点击1人;女性100人,点击99人,总点击率100/120。
现在男性100人,点击6人;女性20人,点击20人,总点击率26/120。
即那个段子“A系中智商最低的人去读B,同时提高了A系和B系的平均智商。”
3. 假设检验、F检验
4.怎么向小孩子解释正态分布
(随口追问了一句小孩子的智力水平,面试官说七八岁,能数数)
- 拿出小朋友班级的成绩表,每隔2分统计一下人数(因为小学一年级大家成绩很接近),画出钟形。然后说这就是正态分布,大多数的人都集中在中间,只有少数特别好和不够好
- 拿出隔壁班的成绩表,让小朋友自己画画看,发现也是这样的现象
- 然后拿出班级的身高表,发现也是这个样子的
- 大部分人之间是没有太大差别的,只有少数人特别好和不够好,这是生活里普遍看到的现象,这就是正态分布
偏业务思维逻辑
1. 不用任何公开参考资料,估算今年新生儿出生数量。
- 采用两层模型(人群画像人群转化):新生儿出生数=Σ各年龄层育龄女性数量各年龄层生育比率
(一般面试中采用这种方法,即费米估计问题,可以参考《这也能想到?——巧妙解答无厘头问题》)
- 从数字到数字:如果有前几年新生儿出生数量数据,建立时间序列模型(需要考虑到二胎放开的突变事件)进行预测
- 找先兆指标,如婴儿类用品的新增活跃用户数量X表示新生儿家庭用户。Xn/新生儿n为该年新生儿家庭用户的转化率,如X2007/新生儿2007位为2007年新生儿家庭用户的转化率。该转化率会随平台发展而发展,可以根据往年数量推出今年的大致转化率,并根据今年新增新生儿家庭用户数量推出今年估计的新生儿数量。
2. 如果次日用户留存率下降了 5%该怎么分析?
- 首先采用“两层模型”分析:对用户进行细分,包括新老、渠道、活动、画像等多个维度,然后分别计算每个维度下不同用户的次日留存率。通过这种方法定位到导致留存率下降的用户群体是谁。
- 对于目标群体次日留存下降问题,具体情况具体分析。具体分析可以采用“内部-外部”因素考虑。
内部因素分为获客(渠道质量低、活动获取非目标用户)、满足需求(新功能改动引发某类用户不满)、提活手段(签到等提活手段没达成目标、产品自然使用周期低导致上次获得的大量用户短期内不需要再使用等);
外部因素采用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上去了,但是实际成交量并没有那么多。
偏代码、算法
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/50348999;https://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/51778675;https://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) - 得到多棵树后,根据每颗树的分类误差进行加权投票
作者:稻蛙
来源:CSDN
原文:https://blog.csdn.net/u013382288/article/details/80417681
版权声明:本文为博主原创文章,转载请附上博文链接!