【社招面经】某厂数据挖掘岗位一面
开头依然自我介绍+依照项目发问。
进行异常数据分析,在简历中提到过这一点,并特别强调了这一内容。随后我介绍了如何根据业务规则捕获异常数据这些方法都是基于业务规则来识别和输出异常数据。因此,面试官就问我为何选择了基于规则而非基于异常检测的模型
该问题表述得相当清晰。
问题提出后,
采用模型识别异常数据的方法其适用性更强,
伴随着业务规模的扩大,
相关参数如阈值等也可以实现动态调整。
然而,
选择使用规则的原因应分为两点:
首先,
设定规则易于被业务人员理解和接受,
考虑到项目由 business主导且周期较短,
这种设定方式能够在短时间内快速并直接地解决问题。
相比之下,
基于 model 或 algorithm 的方法短期内其效果难以超越 business rules,
但经过 phase 二的优化是可以提升效果的;
其次,
设定 rules 的目的与采用 model 识别异常的根本不同。
看板上的数据主要用于记录 business 的关键绩效指标,
这些指标能够真实反映 business 的变化情况。
举例而言,
从 business 经验出发的人认为某指标达到特定阈值时就意味着业务发展可能出现问题,
这种设定属于总部制定的标准考核指标范围,
而非监督学习环境下的 model 是无法完成此类任务的学习过程。
2 什么是充分统计量和完备统计量
我们可以阐述:若已知充分统计量,则无需保留样本信息;这是因为所有相关信息都被充分统计量所囊括。在正态分布情形下,则存在两个关键的充分统计量:均值与方差。这两项参数组具备足够的信息以唯一确定该分布;因此它们是必要且完整的。
称其为complete statistic;若存在一个统计量T满足条件,则T被称为complete statistic。
3 什么是大数定理(我淦,居然还被问到本科上课的定理。。。)
4 l1正则和l2正则是什么,作用是
为防止模型发生过拟合现象, 采用L1和L2正则化方法降低其复杂度水平. 通常在线性回归相关的文章中会提及, L1正则化通过减少参数数量实现降维目标, 而L2正则化则是通过缩减参数值的规模来实现降噪效果.
5 给一组数据,如何快速了解这组数据
进行探索性数据分析,在分析过程中考察一系列描述性统计数据包括均值、最大值和最小值等。同时可以通过绘图的方式进行可视化处理对于时间序列数据,则需要绘制时序图此外,在分析过程中还可以利用箱线图来观察数据分布的离散程度等方法
6 做线性回归之前,需要关注的问题
检验因变量(y)是否满足正态分布假设,并考察自变量(x)之间是否存在严重的多重共线性问题。此外,在进行模型建立时还需要评估是否需要对方差齐性和数据标准化进行处理
7 遇到多重共线性的问题要怎么处理
a. 保留关键解释变量并去除次要或替代性的解释项;当自变数之间存在多重共线性时, 说明各自变数提供的信息具有高度相关性, 可以通过剔除冗余的自变数来降低模型中的重复信息
b、主成分分析,对自变量降维处理。
c、逐步回归分析法 。逐步回归(Stepwise Regression)是一种常用的技术手段,在多元线性回归模型中用于消除多重共线性并选取最优自变量子集。其基本思路是通过有系统的方法将各个候选自变量依次纳入到当前模型中,在每一次纳入新的自变量子集后需逐一验证现有子集中每个已入选的自变量是否仍满足显著性条件;若某个自变量由于后续新加入的其他相关自变量子素的影响而不再满足显著性条件,则将其从模型中剔除出去。每一次纳入或移出都需要通过F检验来评估其统计意义,并持续执行这一过程直至模型中既没有不重要的自变量子素被纳入进来又没有重要但不再满足条件的因素被排除为止
8 常见的方法检验正态性
绘制数据分布图进行分析是否符合服从正态分布……通过QQ plot观察可以判断变量是否符合服从于标准的钟型曲线形态;此外还涉及正态性检验:基于假设检验的方法,在进行正态性检验时采用的主要方法包括德福-拉贝罗(DW)检测法等;其中最常见的方法是德福-拉贝罗(DW)检测法
9 数据预处理,log变化,标准化
10 一道算法题。
规则:不能有相邻重复,如 1,2,2,3要变成1,2,3
样例1: 输入 [1,1,2,2,3,3] 输出 [1,2,3]
样例2: 输入 [1,2,3,3,1,2,2,3,1,2,3] 输出 [1,2,3]
样例3: 输入 [1,2,3,4,1,2] 输出 [1,2,3,4,1,2]
值得重点观察样例二,在去除相邻重复的部分后得到序列...接着序列中连续出现了三个'...'因此最终结果应简化为'...'即每次处理单个元素时就是相邻的元素进行去重操作;随后将连续两个元素视为一组进行处理例如连续出现两次'ab'会被压缩成'ab';接着每三个字符作为一个单元进行操作。
nums = [1,2,3,3,1,2,2,3,1,2,3]
count = 1
while count <= len(nums)/2:
i = 0
while i<len(nums):
before = nums[i+count:i + 2*count]
after = nums[i:i+count]
if after == before:
nums = nums[0:i + count]+nums[i + 2 * count:]
continue
i += count
count = count+1
nums
