正态分布:变量的频数或者频率呈现出中间最多,两端逐渐对称减少的一种分布规律。例如:一个班的成绩分布情况。
伯努利分布:一个事件有发生和不发生两种取值1,0。这两种取值对应的概率为p,1-p。期望为p,方差为p(1-p)。例如:抛一次硬币,正面朝上的概率。
二项分布:在n次独立重复的伯努利实验中,事件A恰好发生K次的概率期望np方差np(1-p)。例如:抛十次硬币,硬币有五次正面朝上的概率。
几何分布:在伯努利实验中,事件A进行实验X次才第一次成功的概率。例如:射击十次才命中一次靶的概率。
中心极限定理:样本量足够大的前提下,则变量均值的分布将近似于正态分布,而与该变量在总体中的分布无关。
大数定理:如果统计的数据足够大,在实验条件不变的情况下,重复多次,随机事件的频率近似于它的概率。
极大似然估计:通过若干次试验,观察其结果,利用试验结果得到某个参数值能够使样本出现的概率为最大。
最大似然估计的目的:利用已知的样本结果,反推最有可能(最大概率)导致这样结果的参数值。比如:有两个箱子,一个箱子99个黑球1个白球,另一个箱子1个黑球99个白球,现在我取出一个球,结果是黑球,那么这个球最有可能是来自于哪个箱子?
极大似然估计提供了一种给定观察数据来评估模型参数的方法,即:“模型已定,参数未知”。
假设检验的原理:对总体特征提出某种假设,通过抽样研究的统计推理,判断应该接受还是拒绝原假设。
假设检验的思想:小概率事件不会在一次实验中发生。
假设检验的目标:所测试的数据的均值等于目标均值的可能性。
假设检验过程:
1.提出检验假设H0代表我们需要推翻的假设,提出备择假设H1代表我们需要接受的假设。
2.选择显著性水平0.05。
3.选定统计方法计算p值。
4.根据P值分析结果若P值小于显著性水平代表原假设不成立备择假设成立。P值的大小一般可通过查阅相应的界值表得到。
第一类错误也叫做α错误,代表原假设为真,但各个统计量结果拒绝原假设,.这个错误的概率记作α,这个值也是显著性水平。简称‘弃真’。
第二类错误也叫做β错误,代表原假设为假,但各个统计量结果接受原假设,这个错误的概率记作β。简称‘取伪’。
P值是统计学中用于判断显著性的指标,统计量对应的概率值就是P值,也可以可以理解为原假设为真时,样本出现极端结果的概率,当P值小于α时,就代表原假设不成立,备择假设成立。
样本量不变的情况下,α愈小,β愈大;反之,α愈大,β愈小。因而可通过选定α控制β大小。
如果要同时减小α和β,只有增加样本量。
第一类错误更严重,由于报告了本来不存在的现象,则因此现象而衍生出的后续研究、应用的危害将是不可估量的。
通过显著性水平,统计功效,均值差异,以及标准差计算得到结果。
显著性水平(α):显著性水平是估计总体参数落在某一区间内,可能犯错误的概率。显著性水平越低,对实验结果的要求也就越高,越需要更大的样本量来确保精度。
统计功效(1–β):统计功效意味着避免犯二类错误的概率,这个值越大,需要的样本量也越大。也叫做power。
均值差异(μA-μB):如果两个版本的均值差别巨大,也不太需要多少样本,就能达到统计显著。
标准差(σ):标准差越小,代表两组差异的趋势越稳定。越容易观测到显著的统计结果。
以Z检验为例,n=2*(σ的平方)*(z(1-α/2)+z(1-β))的平方/(μA-μB)的平方。不同检验中,最小样本量公式不同。
置信区间可以理解为样本统计量所构造的总体参数的估计区间。
置信度可以理解这个参数的真实值有多大把握落在这个区间内。
比如:在中心极限定理中,我们知道从总体进行N次样本抽取,N次样本的均值会围绕总体均值上下波动。因此,置信区间就是为总体的均值提供了一个可波动的范围,置信区间与置信度是相对应的,例如,在95%的置信度下,置信区间为【a,b】,可以理解成抽取10000次样本,其中有9500次样本的均值能够落在【a,b】范围内。
辛普森悖论是指,在某个条件下的两组数据,在分别讨论的时候会满足某种性质,一旦合并数据,可能会得到相反的结论。
举个例子:美国有两个学院A和B,这两个学院均是女生录取率大于男性,因此人们怀疑这两个学院有性别歧视。但合并之后统计总体女生的录取率却小于男性。
研究之后发现:A学院的录取率很低,但是B学院的录取率很高;女性录取者集中在A学院,男性录取者集中在B学院。也就是说并非是这两个学院有性别歧视,而是男女生在专业上的分布不同,男性更倾向于选择B学院,女性更倾向于选择A学院。
用于两个样本平均值差异程度的检验方法,根据T分布理论来推断差异发生的概率,从而判定两个平均数差异是否显著。用于N小于三十的样本。
单样本T检验:比如:某学校某班级的平均身高和某学校整体的平均身高165是否有显著性差异。(一组样本)
独立样本T检验:例如:一组病人服药而另一组病人不服药。(两组样本)
配对T检验:例如:一组病人服药前和服药后的差异。(两组样本)
用标准正态分布的理论来推断差异发生的概率,从而比较两个平均数的差异是否显著。在国内也被称作u检验。Z检验适用于大于30以上的样本。
卡方检验是检验两个变量之间有没有关系,基本思想是计算观察值和期望值之间的偏离程度。例如:男性或者女对线上购买生鲜食品有没有区别。
方差分析是F检验的一种。
方差分析用于两样本或以上样本间的均数差别的显著性检验。
定量:数字有比较意义,比如数字越大满意度越高。
定类:数字无比较意义,比如性别,1代表男,2代表女。
参数检验:假设总体分布已知,根据样本数据对总体分布的统计参数进行推断。
非参数检验:对总体无特殊要求,利用样本数据对总体分布形态进行推断。
联系:参数检验和非参数检验都是统计分析方法的重要组成部分,共同构成统计推断的基本内容。
区别:参数检验的前提是总体分布已知,非参数检验的前提是总体分布未知,一般来说参数检验的效果比非参数检验的效果好,但是实际情况中,我们很难了解清楚总体的分布。
贝叶斯定理A条件下事件B发生的概率和B条件下事件A发生的概率是不同的。但是这两者是有明确关系的。支持某项属性的事件发生得愈多,则该属性成立的可能性就愈大。
贝叶斯公式已知先验概率求后验概率
B条件下发生A的概率=A条件下发生B的概率*A发生的概率/事件B发生的全概率
后验概率P(A|B)=先验概率P(A)*可能性函数P(B|A)/P(B)
应用天气预报、吸毒者检测
AB实验
作用:验证策略是否是可行有效的方法。
原理:通过运用假设检验对实验结果进行显著性分析。
步骤:提出假设→确定实验对象→确定实验条件→确定监测指标→开启实验→计算结果。
面试真题:在搜索引擎中,如何评估新排序算法相较于旧的排序算法更好?
第一步,根据实验的目的提出假设,在这里可以提出两个命题。H0是旧排序算法的转化率高。H1是新排序算法的转化率高。H0是我们希望被推翻的命题,H1是我们希望被证实的命题。
第二步,确定实验对象,因为排序算法最终应用在搜索结果页,所以实验对象就是进入搜索页面的人群,A组的用户会看见旧的排序算法,B组的用户会看见新的排序算法。
第三步,确定实验条件,确定显著性水平,并计算相应的最小样本量。
第四步,确定实验指标,我们以转化率作为目标指标。
第六步:计算实验结果并输出结论,默认显著性水平α=0.05,结合假设检验公式计算P值。若P值小于0.05则推翻了H0假设,证明在0.05的显著性水平下,新算法的转化率更高。
ab实验如何控制分流?
互斥实验:指的是实验与实验共用一层流量,互相不产生交叉,类似实验1中3个实验组,实验3和实验4,共用一层流量。
正交实验:实验与实验分别用不同层的流量,不产生互相的干扰,即便另一层也在做实验,但那一层流量到了这一层也是均匀分配的,不影响这一层实验变量的唯一性。
圈层实验:通常受众比较大的增长点做完了,更多的会去做用户的精细化运营,满足某些群体没有被很好满足到的需求,以带来业务的增长,圈层实验在这个时候就可以起到很好的帮助。
网页的流量是有限的,每天都会同时开展大量的AB实验,合理的分层分流能够保证实验对象在同一层中不会互相干扰,也能避免流量饥渴问题。总的来说,流量正交能够让关联度较小的实验同时进行,比如实验1是关于用户界面的实验,实验2是关于推荐算法的实验,关联度较弱,使用相同的流量不会对结果有太大影响;流量互斥能够让关联度较大的实验同时进行,比如实验1中实验组1测试颜色对按钮点击率的影响,实验1中实验组2想测试大小对按钮点击率的影响。
AB实验如何避免辛普森悖论
合理的进行正确的流量分割,保证试验组和对照组里的用户特征是一致的,并且都具有代表性,可以代表总体用户特征。
在试验设计上,如果我们觉得某两个变量对试验结果都有影响,那我们就应该把这两个变量放在同一层进行互斥试验,不要让一个变量的试验动态影响另一个变量的检验。如果我们觉得一个试验可能会对新老客户产生完全不同的影响,那么就应该对新客户和老客户分别展开定向试验,观察结论。
在试验实施上,对试验结果我们要积极的进行多维度的细分分析,除了总体对比,也看一看对细分受众群体的试验结果,不要以偏盖全,也不要以全盖偏。一个试验版本提升了总体活跃度,但是可能降低了年轻用户的活跃度,那么这个试验版本是不是更好呢?一个试验版本提升总营收0.1%,似乎不起眼,但是可能上海地区的年轻女性iPhone用户的购买率提升了20%,这个试验经验就很有价值了。
分层试验,交叉试验,定向试验是我们规避辛普森悖论的有力工具。
AB实验的特点
数据驱动创新,数据驱动增长,A/B测试是其中核心的工具和引擎。A/B测试是一切决策的前提和基础,用数据说话。
业务创新:通过持续的功能优化打磨,累积创新效果,逐步形成迄今最优的产品形态,同时可将优秀的功能模块抽象沉淀至通用化组件平台。
管理提效:通过A/B实验精准衡量新功能产出,为管理层提供准确的数据依据和科学度量。
AB测试的缺点
AB测试的应用场景
1)产品UI
不同行业的产品需要不同的风格,同时还要与企业的品牌相得益彰。利用A/B测试优化UI能给用户带来更好的交互体验和视觉感受。
2)文案内容
3)页面布局
有些时候,可能根本不需要对产品的UI或是文案内容作出调整,只是在布局排版上的改变,就可以出现增长的效果。
4)产品功能
想给产品增加一个新功能,可是很难确定是否能达到用户的预期,如果盲目上线,可能会造成一些损失;使用A/B测试,对你的用户真正负责;例如,社交类产品在付费查看照片的新功能正式上线前,需要进行A/B测试,以验证功能的使用情况和效果。
5)推荐算法
一个西瓜含水量99%,第二天含水量98%,问西瓜减重了多少?
首先需要确定的是西瓜中除水以外的质量不会减少,只有水的质量会减少。因此,假设西瓜的总质量为x,根据西瓜的含水量99%,即可得出除水以外的质量为(1-99%)x=0.01x,再根据第二天含水量98%可计算出第二天西瓜的总质量为0.01x/(1-98%)=0.5x,因此西瓜减重了1/2。
假设在一局王者荣耀对战中,30分钟之内见双方英雄出现在上路的概率是95%。那么,在10分钟内见到双方英雄出现在上路的概率是多少?
30分钟有三段10分钟,假设10分钟内的概率为P。则三十分钟内见双方英雄出现在上路的概率是1-(1-p)(1-p)(1-p)=0.95,得概率p约为0.63。
置信区间和置信度分别是什么?
定义:决策树是一种自上而下对样本进行分类的树形结构,也能够进行回归预测。
决策树主要包含3种结点(根结点:初始结点;叶节点:最终分类结果结点;内结点:树内部进行判断的条件结点-即特征)在决策树中,每个样本都只能被一条路径覆盖。
基本思想:以信息熵为度量构造一棵熵值下降最快的树。到叶子节点处的熵值为零,此时每个叶结点中的实例都属于同一类。
决策树的优点:①易于理解和解释、可以可视化分析,容易提取出规则。②速度快、计算量相对较小。③可以处理连续和种类字段
关于决策树可视化分析的实现方法:
fromsklearn.model_selectionimporttrain_test_split
fromsklearn.treeimportDecisionTreeClassifier
fromsklearnimportdatasets
importmatplotlib.pyplotasplt#加载鸢尾花数据
iris=datasets.load_iris()
X=iris['data']
y=iris['target']#查看鸢尾花类别的名字
feature_names=iris.feature_names#将数据分为训练数据和测试数据,比例是4:1
X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.2,random_state=1024)#训练数据,预测鸢尾花的种类
clf=DecisionTreeClassifier(criterion='gini')
clf.fit(X_train,y_train)
y_=clf.predict(X_test)
plt.figure(figsize=(18,12))#filled填充color
决策树学习算法包括3部分:特征选择、树的生成和树的剪枝。常用的算法有ID3、C4.5和CART决策树,分别基于信息增益、信息增益比、基尼指数划分的。
信息熵:可以衡量特征到底多不确定。信息熵越小,不确定性越低
公式如下:
其中,p(xi)代表代表随机事件x为xi的概率。P(xi)可以通俗地理解就是,某列特征中某个取值所占的比例。
举个例子,有个数据集含有‘性别’这个特征,其中性别为男的样本有3个,性别是女的样本有2个,求特征是‘性别’这列的信息熵。
男性样本所占比例为P(男)=3/5,女性样本所占比例P(女)=2/5,因此结合信息熵公式可得
H(x)=-(0.6*log2(0.6)+0.4*log2(0.4))=0.97
信息熵的特点:
1.状态取值越多,信息熵越大
2.每个状态取值的概率越平均,信息熵越大,反之各状态的概率越是相差悬殊,信息熵就越小。
3.信息熵实际上衡量随机事件的不确定程度,越是不确定,信息熵就越大,那用来表达清楚这条信息所需要的比特数就越多。
信息增益:得知特征x的信息而使y的信息的不确定性减少的程度。使用划分前后集合熵的差值来衡量使用当前特征对于样本集合划分效果的好坏。信息增益=使用该特征分类前的信息熵–使用该特征分类后的信息熵。
信息增益率:信息增益率=信息增益/特征熵
Gini指数:表示在样本集合中一个随机选中的样本被分错的概率。基尼指数(基尼不纯度)=样本被选中的概率*样本被分错的概率。假设一共有k个类别,pk代表被选中的样本属于第k类别的概率,基尼指数越小代表纯度越高,当类别只有1个的时候,基尼指数为0。
ID3算法:使用信息增益进行特征选择。当特征的取值较多时,根据此特征划分更容易得到纯度更高的子集,因此划分之后的熵更低,由于划分前的熵是一定的,因此信息增益比较偏向取值较多的特征。
优点:①处理离散型数据②倾向于选择取值较多的属性,因为信息增益反映的给定一个条件以后不确定性减少的程度,必然是分得越细的数据集确定性更高,也就是条件熵越小,信息增益越大。
缺点:①不能处理连续型数据和带有缺失值的数据集。②如果出现各属性值取值数分布偏差大的情况,分类精度大幅度降低。③没有考虑过拟合问题。
C4.5算法:使用信息增益率进行特征选择,克服了信息增益选择特征的时候偏向于特征取值个数较多的不足。并且可以处理连续性数据和缺失值,可以调用机器学习库weka实现C4.5算法。(sklearn不存在C4.5算法,只有ID3和CART算法)
优点:①克服了信息增益选择特征的时候偏向于特征取值个数较多的不足②可以处理连续性数据和缺失值③加入了树的后剪枝,有效解决决策树过拟合问题。
预测方式上,CART分类树采用叶子节点里概率最大的类别作为当前节点的预测类别。回归树输出不是类别,采用叶子节点的均值或者中位数来预测输出结果。(cart是可以自动处理缺失值的,但是sklearn中的cart不能自动处理缺失值)
优点:①既适用于回归,也可以用于分类。②采用基尼指数选择特征,相比于信息增益,计算速度更快,因为它不用计算log值。③CART构建回归树用到树的剪枝技术,用于防止树的过拟合。
缺点:①每次用最优特征进行划分,这种贪心算法很容易陷入局部最优,事实上分类决策不应该由某一特征决定,而是一组特征决定的。有一种多变量决策树可以解决,它会选择一个最优的特征线性组合做决策。代表算法OC1。②样本一点点改动,树结构剧烈改变,可以通过集成算法解决。
剪枝:给决策树瘦身,也就是不需要太多判断就可以得到好的结果.防止过拟合发生。
决策树通过剪枝防止过拟合,处理由于数据中的噪声和离群点导致的过分拟合问题。包括预剪枝和后剪枝。
预剪枝——在构造过程中,当某个节点满足剪枝条件,则直接停止此分支的构造。比如:建模时指定树的深度。
后剪枝——先构造完成完整的决策树,然后自底向上的对非叶结点进行考察,若将该结点对应的子树换为叶结点能够带来泛化性能的提升,则把该子树替换为叶结点。部分算法自带。
定义:随机森林由很多决策树构成,当我们输入一个要预测分类的数据时,每个决策树都会接收数据并产生一个分类结果,然后采用投票机制,认为哪个结果出现的次数最多就归为哪一类,做回归时采用平均值计算作为预测结果。
原理:随机森林是bagging类的集成学习算法,可以利用多个弱学习器投票得到最终答案,其中每个弱学习器的构建方法是从全部样本和全部特征中,有放回的抽取部分样本和特征进行训练。
构造过程:随机样本的选取→随机选取特征→构建决策树→随机森林投票
优势:有效解决决策树的过拟合问题,能够处理特征维度很多的数据,并且不需要做特征选择,可以解决回归或者分类问题。容易理解和解释,树可以被可视化。不需要进行数据归一化。
劣势:不适合小样本,只适合大样本。会在某些噪声较大的分类或回归问题上会过拟合(噪声意思是错误的数据)。
应用场景:可以用来预测贷款风险,银行和证券使用较多,调参简单。
线性回归是利用多个输入变量来预测一个输出变量,并且这些输入变量与输出变量之间呈线性关系。
线性回归的四大前提条件:线性、独立性、正态性、方差齐性
线性回归的损失函数是均方误差MSE。
如果所拟合模型的误差项(残差)不满足正态或者方差齐性时,可以考虑对模型进行改进,例如:对因变量采用log对数转化再进行回归。
如果模型存在多重共线性(即存在一个自变量随着另一个自变量变化而变化)会降低估计参数的精度以及模型效果。可以通过以下方法解决:
介绍:逻辑回归是线性回归通过S函数将结果映射到0,1区间内,做分类判断时,设定一个分类的阈值,大于阈值则样本预测值为1,小于阈值则样本预测为0。
原理:假设数据服从伯努利分布,通过极大化似然函数的方法,运用梯度下降来求解参数,从而实现数据二分类。
优点:①模型输出即为样本的概率分布;②能够输出表达式并且分析各个特征的权重;③在SPSS,Python中有许多现成的包能够调用,并且构建的模型可解释性高。
缺点:①预测结果呈S型分布,两端的概率变化非常小,中间的概率变化十分剧烈,难以找到阈值;②不引入其他方法的情况下,只能处理线性可分的数据;③拟合能力差。④很难处理数据不平衡问题。
逻辑回归面试题
牛顿法和梯度下降法的区别?
牛顿法是一种在实数域和复数域上近似求解方程的方法。方法使用函数f(x)的二阶泰勒展开来寻找方程f(x)=0的根。牛顿法最大的特点就在于它的收敛速度很快,但牛顿法需要计算海森矩阵(多元函数的二阶导数构成的矩阵)的逆,计算复杂,可以起到减小步长的效果。不过现在,一般采用拟牛顿法解决牛顿法复杂计算的问题,拟牛顿法只需要用到一阶导数,不需要计算海森矩阵的逆,而采用正定矩阵来近似Hessian矩阵的逆,简化运算的复杂度。
梯度下降通过搜索方向和步长来对参数进行更新。其中搜索方向是目标函数在当前位置的负梯度方向。因为这个方向是最快的下降方向。步长确定了沿着这个搜索方向下降的大小。梯度下降法中的步长是一定的,因此越接近最优值时,步长应该不断减小,否则会在最优值附近来回震荡。
逻辑回归的损失函数是?
采用的是交叉熵损失,如下图
逻辑回归的正则化项怎么构造的?
逻辑回归的正则化项一般分为两种分别是L1和L2正则,都是对参数θ的惩罚,默认的是L2正则。θ是特征系数也就是模型的coef_。L1是参数绝对值的和,容易得到稀疏解,起到类似降维的作用,L2是参数绝对值的平方和,得到的解比较平滑,但是同样能够保证解中接近于0。这两种方法都能够降低模型的复杂度。
逻辑回归和线性回归的区别和联系?
区别:
联系:
线性判别分析是一种线性的分类模型(可以多分类),它的目标是建立一条直线,让全体训练样本投影到这条直线上,使得同类样本的方差尽可能小,异类样本的中心尽可能远,从而实现分类的目的。同时它也可以做有监督的数据降维。这个算法主要是用于降维比较多一点。
前提假设:
LDA投影到w后的损失函数又叫做Fisher准则函数:
分子代表两个类别中心点距离的平方,分母每个类别内的方差之和。因为分类的目标是,建立一个直线,将所有样本映射上去之后,使得类别内的点距离越近越好(集中),类别间的点越远越好。因此最大化这个损失函数就可以求得目标直线的最优参数w,可以采用拉格朗日乘子法进行求解。
优点:
缺点:
PCA和LDA区别:
PCA(主成分分析)和LDA(线性判别分析)有很多的相似点,其本质是要将初始样本映射到维度更低的样本空间中,但是PCA和LDA的映射目标不一样:PCA是为了让映射后的样本具有最大的发散性;而LDA是为了让映射后的样本有最好的分类性能。所以说PCA是一种无监督的降维方法,而LDA是一种有监督的降维方法。
定义:K近邻算法是一种基本的回归和分类算法。K近邻算法多用于对数据集合中每一个样本进行分类,虽然K近邻是一个经典的有监督学习方法,但是他压根没有学习过程。
思想:如果有一个样本,附近有K个样本,这K个样本中大多数属于某个类别,那么这个样本就属于这个类别,和随机森林的多数投票类似。
过程:
优点:既可以用来做分类也可以用来做回归、适用于样本容量大的自动分类、对异常值不敏感
缺点:预测速度相较于逻辑回归慢、输出可解释性不强、样本不平衡时效果不好、计算量较大
应用场景:文本自动分类
k近邻模型的三个基本要素:
k值的选择:k值的选择会对结果产生重大影响。较小的k值可以减少近似误差,但是会增加估计误差;较大的k值可以减小估计误差,但是会增加近似误差。说白一点就是说K值过小容易过拟合,K值过大容易欠拟合,一般而言,通常采用交叉验证法来选取最优的k值,k一般为奇数。
距离度量:距离反映了特征空间中两个实例的相似程度。可以采用欧氏距离、曼哈顿距离等。
决策规则:在分类模型中,主要使用多数表决法或者加权多数表决法;在回归模型中,主要使用平均值法或者加权平均值法。
多数表决:邻近的K个样本,每个样本权重一样,也就是说最终预测的结果为出现类别最多的那个类。
加权多数表决:邻近的K个样本中,距离近的样本相较与远的样本权重高。
定义:朴素贝叶斯是贝叶斯分类算法中的一种,以贝叶斯定理为基础,对数据进行分类。
思想:根据贝叶斯公式,计算实例属于各个类的后验概率,并将实例分类到概率最大的类中。
1.训练分类器,计算输入的训练样本中,每个不同的分类类别在训练样本中出现的频率以及每个类别下各个特征属性出现的条件概率值。
2.对于待分类的样本,计算在该样本出现的条件下,各个分类类别出现的概率,哪个概率最大,待分类的样本就属于哪个类别。
优点:结果可解释性高、对缺失值不敏感、有稳定的分类效率、小规模数据表现良好
应用场景:文本分类、情感检测、拼写检测(比如在网站输入julw,网站会猜测你想搜索july)
介绍
支持向量机(SVM)是一类有监督地进行二元分类的广义线性分类器,它的决策边界是学习样本求解的最大边距超平面。线性可分时,在原空间寻找两类样本的最优超平面,在线性不可分时,加入松弛变量并通过使用非线性映射将低维度输入空间的样本映射到高维度空间使其变为线性可分,这样就可以在该特征空间中寻找最优分类超平面。
SVM使用准则:n为特征数,m为训练样本数。
核函数
为了处理非线性可分问题,非线性指的是在二维平面不可分,因此需要通过一个函数将原始数据映射到高维空间,从而使得数据在高维空间很容易可分,这样就达到数据分类或回归的目的。
松弛变量
线性不可分的样本经过映射到高维空间后,找到分类超平面的几率大大增加。仍然有可能有一些情况很难处理,比如样本数据的结构本身不是非线性的,但是由于噪声带来一些偏离正常位置较远的点,为了处理这种情况,SVM加入了松弛变量,允许数据点在一定程度上偏离超平面。
SVM优缺点
GBDT介绍
GBDT全名是梯度提升决策树,它利用boosting集成算法的思想,按顺序生成多个弱学习器,每次都是通过拟合上一次误差函数对预测值的残差建立一个新的学习器,所有弱学习器的结果相加等于最终的预测值。虽然GBDT可以做回归也可以做分类,但是它用到的所有树都是cart回归树,而不是cart分类树,因为分类树的结果是没办法累加的。在特征选择上,回归树在分枝时会穷举每一个特征的每个阈值以找到最好的分割点,衡量标准是最小化均方误差。
GBDT正则化主要体现在三个方面。
①定义步长(learningrate),也就是给每一颗树的预测结果乘以一个步长,减少之前树的影响,有利于后续创建的树有更大的学习机会。
②子采样比例(subsample),和随机森林的子采样不同,gbdt的子采样是对样本进行无放回抽样。将采样比例设置在0.5-1之间可以起到减少方差,减低过拟合的作用。
③对弱学习器cart回归树进行剪枝,如控制树的最大深度、节点的最少样本数、最大叶子节点数、节点分支的最小样本数等。
GBDT的优缺点
缺点:①由于弱学习器之间存在依赖关系,难以并行训练数据。②对异常值敏感。
应用场景
在回归、分类以及多分类问题上,都很适用。
基本思想
xgb的算法思想就是不断地添加树,然后进行特征分裂,每次添加一个树,就是学习一个新函数,拟合上一次预测的残差。当训练完成得到k棵树,我们要预测一个样本的分数,其实就是根据这个样本的特征,在每棵树中会落到对应的一个叶子节点,每个叶子节点就对应一个分数,最后只需要将每棵树对应的分数加起来就是该样本的预测值。
如下图所示,第一棵树对年龄和性别进行特征划分,第二棵树对特征‘日常是否使用电脑’进行划分,然后到叶子结点的时候会给出一个分数。最后将样本对应的两颗树叶子结点的分数相加就是该样本的预测值了。
优缺点
优缺点(简化版)
预排序算法详解
常用调参方式有网格搜索、随机搜索、贝叶斯优化等。超参数调优顺序如下:
取值范围是可以根据平时经验或者调参时交叉验证的结果,再次调整取值范围。
1.调整n_estimators(树的数量),取值范围可以是[400,500,600,700,800],树的数量越多越容易过拟合
2.调整min_child_weight(最小叶子节点样本权重和)和max_depth(最大深度),max_depth取值范围[3,4,5,6,7,8,9,10],min_child_weight取值范围[1,2,3,4,5,6]。min_child_weight越大容易欠拟合,max_depth越大容易过拟合。
3.调整gamma(惩罚系数:节点分裂所需的最小损失函数下降值),取值范围是[0.1,0.2,0.3,0.4,0.5,0.6],gamma越大越不容易过拟合。但性能就不一定能保证,需要平衡。
4.调整subsample(随机选样本的比例)以及colsample_bytree(随机选取特征的比例),'subsample'取值范围是[0.6,0.7,0.8,0.9],'colsample_bytree'取值范围是[0.6,0.7,0.8,0.9]都是越大越容易过拟合,
5.调整reg_alpha(L1正则)以及reg_lambda(L2正则),取值范围均为[0.05,0.1,1,2,3]都是越大越容易欠拟合。L1会趋向于产生少量的特征,而其他的特征都是0,而L2会选择更多的特征,这些特征都会接近于0,实践中L2正则化通常优于L1正则化。
6.调整学习率learning_rate[0.01,0.05,0.07,0.1,0.2],学习率过大越容易过拟合。
XGB与GBDT的区别?
回答参考上面XGB介绍中提到的优点。
xgb为什么要把全部样本特征值算出来,放到内存中去?
因为XGB关于最优特征以及最优切分点的选取采用的是一种贪心算法,是基于某种标准(GINI系数/均方误差/信息增益比等),需要依次遍历所有特征和所有特征的取值,通过线性扫描来找到最优分割点,这是需要将所有数据同时读入内存。当数据量过大时,这就不适用了。于是xgb也提供了另一种近似直方图算法,相比于贪心算法需要线性扫描特征的每个分裂点,而近似直方图算法只考察分位点,将连续的特征映射到对应的桶中,然后遍历桶之间的间隙来找最佳的分裂分位点,这样可以有效的减少计算量。
看你的简历上写了熟悉xgb算法,可以介绍一下吗?
回答模板:
1.原理/基本思想
2.优缺点(可以结合XGB相比于GBDT的改进进行论述)
3.应用场景
xgb的正则化项是如何构造的?
T:是对叶子的个数加了限制,从而限制了模型的复杂度
叶子结点权重ω:通过L2正则是不希望有太大的权重ω出现
γ:是gamma(结点分裂所需的最小损失函数下降值)
λ:是L2正则化系数reg_lambda
这里出现了γ和λ,这是xgboost自己定义的,在使用xgboost时,可以设定它们的值,显然,γ越大,表示越希望获得结构简单的树,因为此时对较多叶子节点的树的惩罚越大。λ越大也是越希望获得结构简单的树。
XGB怎么给特征评分?
XGB的特征重要性计算,有5个评价指标。
weight(默认):在所有树中,特征用作分裂点的总次数。
total_gain:在所有树中,该特征用作分裂节点带来的gain值之和。
total_cover:在所有树中,该特征用作分裂节点时,对于样本的覆盖程度之和。简单一点来说,覆盖是指一个特征作为分裂结点参与了某个样本的划分,那么就相当于是这个特征覆盖了这个样本,total_cover指的就是某个特征覆盖了的样本数量。
gain:计算公式为gain=total_gain/weight,在所有树中,该特征用作分裂节点带来的平均gain值。
cover:计算公式为,在所有树中cover=total_cover/weight,该特征用作分裂节点时,对于样本的平均覆盖程度。
LightGBM是基于XGBoost的改进版,在处理样本量大、特征纬度高的数据时,XGBoost效率和可扩展性也不够理想,因为其在对树节点分裂时,需要扫描每一个特征的每一个特征值来寻找最优切分点,耗时较大。而LightGBM则提出了GOSS(Gradient-basedOne-SideSampling,基于梯度的单边采样)和EFB(ExclusiveFeatureBundling,互斥特征捆绑)来分别进行样本采样和降低特征维度。同时,使用Histogram来加速寻找切分点。因此可以简单点说,LightGBM=XGBoost+Histogram+GOSS+EFB。
(1)Histogram直方图算法
直方图算法的基本思想是:先把连续的浮点特征值离散化成K个整数,同时构造一个宽度为K的直方图。在遍历数据的时候,根据离散化后的值作为索引在直方图中累积统计量,当遍历一次数据后,直方图累积了需要的统计量,然后根据直方图的离散值,遍历寻找最优的分割点。
简单理解为:首先确定对于每一个特征需要多少个箱子(bin)并为每一个箱子分配一个整数;然后将浮点数的范围均分成若干区间,区间个数与箱子个数相等,将属于该箱子的样本数据更新为箱子的值;最后用直方图(#bins)表示,将大规模的数据放在了直方图中。
直方图算法相比于预排序最直接的优点是很大程度上减少了内存占用和计算代价。虽然直方图算法找到的分割点并不算是最优的分割点,毕竟相比xgb算法来说通过bins分箱之后分裂点少了很多。但是正因为这个导致加上了一个正则化的效果,使得生成的弱分类器的有效的防止过拟合。
特征被离散化后,找到的并不是很精确的分割点,所以会对结果产生影响。但在不同的数据集上的结果表明,离散化的分割点对最终的精度影响并不是很大,甚至有时候会更好一点。原因是决策树本来就是弱模型,分割点是不是精确并不是太重要;较粗的分割点也有正则化的效果,可以有效地防止过拟合;即使单棵树的训练误差比精确分割的算法稍大,但在梯度提升(GradientBoosting)的框架下没有太大的影响。
预排序算法中,根据特征的不同取值进行分割,在直方图算法不考虑特征的取值,直接根据样本的在每个bin中的数量,并且在新的bin中存储的是特征取值的个数。
(2)直方图做差加速
LightGBM另一个优化是Histogram(直方图)做差加速。一个叶子的直方图可以由它的父亲节点的直方图与它兄弟的直方图做差得到,在速度上可以提升一倍。通常构造直方图时,需要遍历该叶子上的所有数据,但直方图做差仅需遍历直方图的k个桶。在实际构建树的过程中,LightGBM还可以先计算直方图小的叶子节点,然后利用直方图做差来获得直方图大的叶子节点,这样就可以用非常微小的代价得到它兄弟叶子的直方图。
(3)带有深度限制的按叶子生长(leaf-wise)算法
XGBoost采用Level-wise的增长策略,该策略遍历一次数据可以同时分裂同一层的叶子,容易进行多线程优化,也好控制模型复杂度,不容易过拟合。但实际上Level-wise是一种低效的算法,因为它不加区分的对待同一层的叶子,实际上很多叶子的分裂增益较低,没必要进行搜索和分裂,因此带来了很多没必要的计算开销。
LightGBM采用Leaf-wise的增长策略,该策略每次从当前所有叶子中,找到分裂增益最大的一个叶子,然后分裂,如此循环。因此同Level-wise相比,Leaf-wise的优点是:在分裂次数相同的情况下,Leaf-wise可以降低更多的误差,得到更好的精度;Leaf-wise的缺点是:可能会长出比较深的决策树,产生过拟合。因此LightGBM会在Leaf-wise之上增加了一个最大深度的限制,在保证高效率的同时防止过拟合。
(4)单边梯度采样算法GOSS
(5)互斥特征捆绑算法EFB
(6)支持类别型特征处理(不包括字符串类型)
LightGBM采用many-vs-many的切分方式将类别特征分为两个子集,实现类别特征的最优切分。算法流程如下图所示,在枚举分割点之前,先把直方图按照每个类别对应的label均值进行排序;然后按照排序的结果依次枚举最优分割点。这个方法很容易过拟合,所以LightGBM里面还增加了很多对于这个方法的约束和正则化。
相比one-hot编码展开的方法,使用LightGBM支持的类别特征可以使训练速度加速8倍,并且精度一致。更重要的是,LightGBM是第一个直接支持类别特征的GBDT工具。
(7)支持特征并行、数据并行、投票并行,应用于海量数据集。
LGBM优缺点
优点
缺点
CatBoost是俄罗斯的搜索巨头Yandex在2017年开源的机器学习库,是Boosting族算法的一种。CatBoost和XGBoost、LightGBM并称为GBDT的三大主流神器,都是在GBDT算法框架下的一种改进实现。XGBoost被广泛的应用于工业界,LightGBM有效的提升了GBDT的计算效率,而Yandex的CatBoost号称是比XGBoost和LightGBM在算法准确率等方面表现更为优秀的算法。
CatBoost是一种基于对称决策树(oblivioustrees)为基学习器实现的参数较少、支持类别型变量和高准确性的GBDT框架,主要解决的痛点是高效合理地处理类别型特征,CatBoost是由Categorical和Boosting组成。此外,CatBoost还解决了梯度偏差(GradientBias)及预测偏移(Predictionshift)的问题,从而减少过拟合的发生,进而提高算法的准确性和泛化能力。
创新点
定义:一种典型的无监督学习算法,对未标记的数据(即没有定义类别或组的数据)进行分类。
思想:定义多个簇,把相似的对象归到同个簇中,簇内对象之间的相似度最大,保持各个簇之间的相似度最小。
1.选择初始化K个样本作为初始聚类中心。
2.针对每个样本计算它到K个聚类中心的距离,并把它们分到距离最小的簇中。
3.针对每个簇,重新计算它的聚类中心。
4.重复二三步,直到达到某个终止条件比如:迭代次数。
评估效果:轮廓系数[-1,1],为0时表示有簇重叠,效果越接近1越好,代表簇内对象越相似,各个簇之间距离越远。
优点:原理简单、收敛速度快,聚类效果较优、算法解释度比较强。
缺点:K值的选取不好把握、非凸数据集难以收敛、采用迭代方法容易得到局部最优结果、对噪声、异常值比较敏感。
应用场景:用户价值分层(比如可以做个RFM模型,这样RFM模型的阈值可以根据聚类中心来确定)、欺诈地点识别
主成分分析(PCA),是一种比较基础的对数据降维的无监督学习算法,目的是用较少的变量来代替原来较多的变量,并且可以反映原来变量的大部分信息。相当于是从原数据集中选择最重要的数据来代替原始数据,也是一种数据预处理的方法。
核心思想
实现步骤
假定一个数据集有n个特征,m个样本。现需要将n维数据降到k维,步骤如下:
方差大概就是一些点在一个维度的偏差,越分散的话方差越大。而协方差是衡量一个维度是否会对另一个维度有所影响,从而查看这两个维度之间是否有关系。
去中心化的目的就是:让每个特征下的均值都为0,后续计算特征之间协方差的时候就可以简化计算。
PCA优缺点
高维数据集的探索与可视化、图像分析、数据压缩、在数据预处理取出数据的冗余和噪声
Bagging算法:对样本进行有放回抽样,产生多个booststrap数据集。为每一个数据集拟合一个弱学习器,最终得到一个较低方差的集成模型,做回归任务的时候,采用平均法;做分类任务的时候,采用多数投票的方式输出最终结果,例如随机森林。
Boosting算法:对样本进行无放回抽样,通过迭代地训练一系列的分类器,每个分类器采用的样本分布都和上一轮的学习结果有关,最终对各个基模型加权得到最终结果。代表算法有两种,分别是gbdt和adaboost,gbdt是在每轮中拟合损失函数的负梯度,adaboost则是在每轮中对误分类的样本提高权重,建立新的分类器。
stacking算法:训练一个模型用于组合其他各个基模型。对各个基模型进行交叉验证,将预测结果作为新的数据集,最后通过简单的模型(例如:逻辑回归,是为了防止过拟合)拟合预测。stacking要求第一层基模型之间需要体现差异化,要么在算法上、要么在特征和样本上。并且每个基模型基模型效果要好,stacking应用在样本量大、特征维度较多的场景中,主要用于组合强学习器(例如xgb/lgbm/catboost三者集成,生成更强的学习器),提高模型性能。
voting算法:voting是整个数据集上,训练多个学习器进行预测,每一个弱学习器的预测结果被看作是投票。做回归任务时,对所有弱学习器的结果求平均作为最终的预测结果。做分类任务时,可以分为硬投票和软投票,硬投票:选择投票数最高的预测作为最终结果,软投票:选择平均概率值最大的类别作为预测结果,软投票用的是基模型的分类概率,也就是需要设置probability=True。
区别:bagging和boosting采用的基模型是同质学习器,stacking和voting采用的基模型是异质学习器(各个基模型生成算法不同)。
①分类属于监督学习方法,样本数据都带有标签。聚类属于无监督学习方法,样本数据不带有标签。
②分类是根据已知的规则将数据进行分类,聚类是不知道已知规则,而通过学习数据集,发现规则,将相似的数据聚成一类,从而聚成多个类别。
①网格搜索是遍历式搜索方法,将所有超参数组合遍历一遍。随机搜索是随机选取部分超参数组合。贝叶斯优化是首先对目标函数的分布进行初始化,不断采集样本,根据结果更新参数组合,每次更新参数组合时都会考虑之前的参数信息。
③贝叶斯调参针对非凸问题依然稳健,因为贝叶斯优化的工作方式是通过对目标函数形状的学习,并找到使结果向全局最大提升的参数;网格搜索针对非凸问题易得到局部最优。
④贝叶斯优化迭代次数少,速度快,当特征较多时,需要较多的样本量,样本量不够会导致调参效果不好;网格搜索速度慢,适用于参数组合较少的情况,效果稳定。随机搜索适用于参数较多的情况,速度快,但效果可能会不稳定。
参数模型
在机器学习中,对于一组数据,通常会先提出一个假设H,通过训练这个假设H,让它接近数据的真实函数f。说通俗地就是会假定数据服从某种分布,并且知道这种分布的参数(比如假定一组数据服从正态分布),在这个基础上构建的模型叫做参数模型。
优点:易于理解和解释,学习快,适合小数据集。
缺点:复杂度低,会受到函数约束(参数模型可以用数学表达式表示出来),不适合处理复杂问题。
例如:逻辑回归(假设数据服从伯努利分布)、线性回归(假设数据服从正态分布)、朴素贝叶斯(假设各特征直接相互独立)
非参数模型
优点:灵活,能够适应大量的函数形式(非参数模型不可以用数学表达式表示出来)。对于底层函数没有假设,可以产生更高性能的预测模型。
缺点:需要较多的数据集训练,训练速度较慢,容易过拟合。维度较高时,也很难对某些特定的结果做出预测。
例如:K近邻、决策树、支持向量机
参数模型与非参数模型的区别:是否对数据分布做出假设
判别式模型介绍
由数据直接学习决策函数Y=f(X)或者条件概率分布P(Y|X)作为预测的模型。判别模型关心的是对于给定的输入X,应该预测什么样的输出Y。基本思想是有限样本条件下建立判别函数,不考虑样本的产生模型,直接研究预测模型。典型的判别模型包括逻辑回归(在x条件下,两个分类的的概率),k近邻,感知机,决策树,支持向量机等。
生成式模型介绍
由数据学习联合概率密度分布P(X,Y),然后由P(Y|X)=P(X,Y)/P(X)求出条件概率分布P(Y|X)作为预测的模型,即生成模型。基本思想是首先建立样本的联合概率概率密度模型P(X,Y),然后再得到后验概率P(Y|X),再利用它进行分类。例如:朴素贝叶斯、隐马尔科夫等。
生成式模型的特点
判别式模型的特点
举个通俗的例子,假如我们要识别一只羊是山羊还是绵羊。
判别模型是这样做的,通过训练山羊和绵羊的特征,得到一个模型,然后提取这只羊的特征进行预测,就能够预测出来这只羊是山羊或者绵羊的概率。生成模型是这样做的,它会通过训练山羊的特征得到一个山羊模型,然后再训练绵羊的特征得到一个绵羊模型,最后提取这只羊的特征分别放入这两个模型中,看看放入山羊模型的概率是多少,放入绵羊模型的概率是多少。
为什么要做特征选择?
特征的选择的好处在于减少数据量、加速模型计算、降低模型复杂度、使模型易于理解、提高模型的准确率
特征选择方法分为三类,分别是过滤法(Filter)、包裹法(Wrapper)、嵌入法(Embedded)。
选择特征的时候不考虑模型,仅从特征的角度上去选择表现好的特征。
优点:计算量小、有效降低过拟合程度
缺点:没有考虑从后续要使用的学习器上去选择特征、可能会降低模型的拟合能力
包裹法采用的是特征搜索的办法。它的基本思路是,从初始特征集合中不断的选择子集合,根据学习器的性能来对子集进行评价,直到选择出最佳的子集。在搜索过程中,我们会对每个子集做建模和训练。递归特征消除、前向搜索、后向搜索、双向搜索都属于包裹法。
优点:更具有针对性
缺点:计算开销大、样本量较小时容易过拟合
RFECV(递归特征消除+交叉验证法):流程是这样的,RFE是使用一个基模型进行多轮训练,每轮训练后,删除权重低的特征,然后再用剩下的特征集进行训练,最后会得到每个特征的等级(排名)。然后再基于REF的结果选择不同数量的特征分成多个特征子集,训练模型并交叉验证,最后选择平均分最高模型的特征子集。这种方法不仅考虑了特征权重也考虑到了模型表现,效果不错。除此之外还有前向搜索、后向搜索、双向搜索、启发式搜索、随机搜索、完全搜索等方法,
前向搜索法:开始时,按照特征数来划分子集,每个子集只有一个特征,对每个子集进行评价。然后在最优的子集上逐步增加特征,使模型性能提升最大,直到增加特征并不能使模型性能提升为止。
后向搜索法:在开始时,将特征集合分别减去一个特征作为子集,每个子集有(N-1)个特征,对每个子集进行评价。然后在最优的子集上逐步减少特征,使得模型性能提升最大,直到减少特征并不能使模型性能提升为止。
双向搜索:将前向搜索和后向搜索相结合。
启发式搜索是利用启发式信息不断缩小搜索空间的方法。在特征选择中,模型分数或特征权重可作为启发式信息。
特征选择被嵌入进学习器训练过程中。不像包裹法,特性选择与学习器训练过程有明显的区分。
优点:比包裹法省力
缺点:会增加模型的训练负担
常用方法有带L1正则的逻辑回归、基于树模型的特征选择方法、随机森林构建子树时会选择特征子集,可以直接调用模型,让模型自己进行特征的筛选。
总的来说,做特征选择的时候可以把过滤法、包裹法、嵌入法都尝试一遍,除此之外,特征选择最优的方法是基于业务角度选择和衍生特征,这需要业务知识的不断积累。因此当我们进行特征选择之后需要多去思考为什么这个特征对模型有帮助,我们是否还可以合成一些新的高价值特征进入模型中呢?
参考资料:
标准化是(X-E(X))/σ,将数据分布变成均值为0标准差为1的分布不一定是正态分布
标准化保留了数据之间的距离,没有保留数据的权重大小
适用于分类聚类算法和大数据
归一化是(X-MIN(X))/(max(X)-min(X))将数据规约到0,1或者-1,1区间
丢失了数据之间的距离,保留了数据的权重大小
适用于小数据以及不涉及距离度量的时候
为什么要做标准化/归一化?
①加快梯度下降法的求解速度(适用于梯度下降法求解的算法)
下面左图是代表两个特征形成的等高线,这两个特征的取值范围差别非常大,当使用梯度下降法求解最优解时,很有可能走“之字型”路线,从而导致需要迭代很多次才能够收敛。右图经过归一化之后,等高线就变圆了许多,在梯度下降的时候就能够更快达到收敛的状态。因此在大部分情况下,如果模型涉及到梯度下降法时,是非常有必要在建模前对数据进行归一化处理,如果不做处理,可能会导致模型很难收敛甚至无法收敛。
②可能提高算法的精度
比如一些机器学习算法需要计算样本点之间的距离(K近邻、K-means),如果某个特征取值范围特别大,那么距离的计算就可能更倾向于这个特征,导致其他特征的影响比较小,如果取值范围小的其他特征更重要,那么模型的精度就会变差,因此在这种情况下,可以考虑采用标准化来提升精度。
参考资料:CSDN用户Dream-YH
①用分类器对样本进行分类和预测,正样本得分大于负样本得分的概率,就是AUC。
②横坐标是假阳率纵坐标是召回率roc曲线所为成的面积就是AUC的值。
样本:y=1,y=1,y=1,y=-1,y=-1,y=-1
模型1的预测:0.8,0.7,0.3,0.5,0.6,0.9
模型2的预测:0.1,0.8,0.9,0.5,0.85,0.2
总共有9组正负样本组合
模型1:正样本score大于负样本score的样本组合有(y1,y4)(y1,y5)(y2,y4)(y2,y5)。AUC值为4/9
模型2:正样本score大于负样本score的样本组合有(y2,y4)(y2,y6)(y3,y4)(y3,y5)(y3,y6)。AUC的值为5/9
所以模型2要比模型1好
①样本不平衡的情况下,不会影响观察模型的效果。
②AUC继承了ROC曲线评估指标无需手动设定阈值的优良特性,直接从整体上(离线排序)方面衡量算法的表现。
②无法体现召回率、精确率等在实际业务中经常关心的指标。
训练集:模型拟合所需的数据样本,用于模型训练。
验证集:模型训练过程中单独留出的样本集,用于模型超参数调优以及评估模型效果(比如:是否过拟合,以及验证当前模型的准确率、召回率怎么样)。
测试集:评估模型最终的泛化能力(预测能力)。
过拟合定义:模型在训练集或验证集上的效果优越,但在测试集上的效果不佳。
过拟合原因:数据存在噪声、样本数量较少、训练模型过度导致模型复杂。
过拟合解决:增大样本量、减少特征数量、设置最大迭代次数、交叉验证、模型融合(Bagging&Boosting)、正则化
欠拟合定义:模型拟合程度不高,数据距离拟合曲线较远,或指模型没有很好地捕捉到数据特征,不能够很好地拟合数据。
欠拟合原因:模型复杂度低、特征少
欠拟合解决:增加新特征(加入特征组合或者高次特征)、添加多项式特征(将线性模型通过添加二次项或者三次项使模型泛化能力更强)、减少正则化参数、采用非线性模型拟合(SVM或深度学习)、调整模型容量(采用bagging算法对多个弱学习器集成)
定义:对某一问题加以先验的限制或约束以达到某种特定目的的一种手段或操作。
原理:对损失函数加上某种约束,减少模型的非线性程度,从而减少模型的方差提高泛化能力。损失函数(lossfunction)是用来估量你模型的预测值f(x)与真实值Y的不一致程度。
正则化分为两种,L1正则是权重参数的绝对值的和(和L1范数区别不大),L2正则是权重参数的平方和(也就是L2范数的平方,L2范数是平方和开根号)。(权重参数是指x前面的参数)
L1会产生一个稀疏矩阵,用于特征选择,L2更倾向于产生更小更分散的权重向量,让模型做决策时考虑更多的特征,这两种正则化本质都是防止过拟合。
稀疏矩阵和特征选择的关系
SMOTE(SyntheticMinorityOversamplingTechnique),合成少数类过采样技术。主要用于解决正负样本不平衡问题。
它是基于随机过采样算法的一种改进方案,由于随机过采样采取简单复制样本的策略来增加少数类样本,这样容易产生模型过拟合的问题,即使得模型学习到的信息过于特别(Specific)而不够泛化(General),SMOTE算法的基本思想是对少数类样本进行分析并根据少数类样本人工合成新样本添加到数据集中。
算法流程如下:
1.计算出每个少数类样本的K个近邻;
2.从K个近邻中随机挑选N个样本进行随机线性插值,构造新的少数类样本;
(随机线性插值:在特征空间中,每个少数类样本与它们的每个近邻样本连成一条直线,随机在直线上选取一点(每条直线只取一次),则为新构成的样本)
3.将新样本与原数据合成,产生新的训练集;
算法思想:随机选取n个少数的样本,找出初始扩展的少类样本,再找出最靠近它的m个少类样本,在任选最临近的m个少数类样本中的任意一点,从这两点上任选一点,这点就是新增的数据样本。
缺陷:一是在近邻选择时,存在一定的盲目性,而是无法克服非平衡数据集的数据分布,容易产生分布边缘化的问题。也就是说正负样本的边界可能会越来越模糊,虽然使数据集平衡性得到改善,但加大了分类算法进行分类的难度。
apriori算法主要应用于购物篮分析。购物篮分析是关联分析的一种重要应用:通过发现顾客在一次购买行为中放入购物篮的不同商品之间的关联,研究客户的购买习惯,为运营决策提供支持建议。比如:经常同时购买的商品可以摆得近一点,以便刺激这些商品一起销售。
事务:每条交易可以称为一个事务。
项:在关联分析中被研究的数据称为项。例如:用户每条订单中每件商品都可以称为1个项。
项集:0个或多个项的组合。
关联规则:项集与项集之间所存在的关联关系。书写格式为{X}→{Y}
支持度:项集在事务中出现的概率。支持度=项集在事务中出现的次数/事务的总量。
Support(X)={X}出现的次数/事务总数
置信度:前项集出现的情况下,后项集出现的概率。置信度=所有项组成项集的支持度/前项集的支持度。Confidence(X→Y)=Support(X,Y)/Support(X)
提升度:可用于判断前项与后项的关系是促进、抑制、无影响。提升度=关联规则的置信度/后项集的支持度。Lift(X→Y)=Confidence(X→Y)/Support(Y)
频繁项集:支持度大于等于最小支持度的项集。1个频繁项集可以产生(2的K次方)-2条关联规则。(K为一个频繁项集中包含的项的个数)
强关联规则:频繁项集所组成的关联规则中,满足置信度大于等于最小置信度的关联规则成为强关联规则。
原理:
Apriori算法使用一种称为逐层搜索的迭代方法,其中k项集用于探索(k+1)项集。首先,通过扫描数据库,计算每个项的支持度,保留大于等于最小支持度的项,找出频繁1项集的集合。该集合记为L1。然后,使用L1找出频繁2项集的集合L2,使用L2找出L3,如此下去,直到不能再找到频繁k项集。
核心思想:通过连接产生候选项及其支持度,然后通过剪枝生成频繁项集。
步骤:
1.找到支持度大于等于最小支持度的频繁项集。
2.根据频繁项集所组成的关联规则中,筛选大于等于最小置信度的强关联规则。
算法缺点:
当商品数据量大时,效率很低
1.MAE(平均绝对误差)用于评估预测结果和真实数据集的接近程度的程度,其值越小说明拟合效果越好。
优点是易于理解,它通过将每一个数据点的真实值与预测值计算残差,并且只取每个残差的绝对值,最后取一个平均值作为回归模型的评价值,缺点就是并不能知道这个评价值代表模型的拟合是优还是劣,只能通过对比才能达到效果。
2.MSE(均方误差)该指标计算的是拟合数据和原始数据对应样本点的误差的平方和的均值,其值越小说明拟合效果越好。
3.RMSE(均方根误差)也称为标准误差,它是观测值与真值偏差的平方与观测次数比值的平方根。也就是MSE开个根号,可以更好地保留量纲的一致性(量纲可以理解为数值和单位有关)。相比于MSE,RMSE对异常值比较敏感,因此该指标能够很好的反映出误差的精密度,这也就使其鲁棒性较差。
4.R^2(R方、决定系数)含义是解释回归模型的方差得分。其值取值范围是[0,1],越接近于1说明自变量越能解释因变量的方差变化,值越小则说明效果越差。比如:决定系数是0.86,这就意味着y的86%的变化可以通过x解释
1.混淆矩阵
混淆矩阵有四个基础指标,分别为以下四个。
由混淆矩阵又能衍生出其他指标,例如:精度、查准率、查全率、假阳率等
精度(准确率)accuracy=(TP+TN)/(TP+TN+FP+FN),可以理解为预测正确的样本数占总样本数的比例。
精确率(查准率)precision=TP/(TP+FP),可以理解为被预测为正的样本中,预测为正确的样本比例。
召回率(查全率)recall=TP/(TP+FN),可以理解为正样本中,预测正确的样本比例。
真阳率、灵敏度TPR(TruePositiveRate)与召回率计算公式一样。
假阳率(FalsePositiveRate)FPR=FP/(FP+TN),可以理解为负样本中,预测为正样本的比例。
特异度(truenegativerate)TNR=TN/(FP+TN),可以理解负样本中,预测正确的比例。
2.F1Score
F1结合了精确率和召回率。F1=2*precision*recall/(precision+recall),取值范围为[0,1],F1值越大说明模型在判断正类数据上越成功。但仍然需要结合假正例来判断模型在对负类数据上的效率。
3.roc曲线和AUC
roc(receiveroperatingcharacteristic)曲线,中文名称为接收者操作特征,是以假阳率为横坐标,召回率为纵坐标所绘制而成的曲线,曲线上每个点反映着对同一信号刺激的感受性。
具体定义如下,对于样本数据,我们使用分类器对其进行分类,分类器会给出每个数据为正例的概率,我们可以针对此来设定一个阈值,当某个sample被判断为正例的概率大于这个阈值时,认为该sample为正例,小于则为负例,然后通过计算我们就可以得到一个(TPR,FPR)对,即图像上的一个点,我们通过不断调整这个阈值,就得到若干个点,从而画出一条曲线。
AUC的定义是roc曲线所围成的面积,当roc曲线越靠近左上方的时候代表曲线所围成的面积越大,说明模型分类效果越好,它的取值范围为[0.5,1],可以直观地评价分类器的好坏,越接近1代表分类器效果越好。
聚类模型的评价指标可以分为两类,一类是外部指标,也就是数据集是有标签或者有人工给定的参考标准,相当于是有监督的条件下,评估聚类模型的效果。第二类是内部指标,是无监督的,无需基准数据集,不需要借助于外部参考模型,利用样本数据集中样本点与聚类中心之间的距离来衡量聚类结果的优劣。
(1)外部指标
(2)内部指标
数据预处理包含哪些步骤?
①数据清洗,处理脏数据,包括填写缺失值、重复值、清除噪声数据(降噪)、纠正不一致数据、识别或删除离群点等,比如:K近邻填充缺失值、箱型图寻找离群点等方法。
②数据规约,可以通过如聚集、删除冗余特征或聚类来降低数据规模,提高运行速度。一般分为维规约和数值规约两种,维规约指的是,合并属性或者选择最佳属性,方法有PCA降维等。数值规约是指减少数据量,选择少量且具有代表性的数据,比如随机抽样、分层抽样等方法。
③数据变换,将数据压缩到较小的区间,消除数据之间的单位问题,比如:标准化、归一化。
你的项目里数据预处理中,从代码的角度,用了哪些方法或者函数?
缺失值处理方面:使用了pandas中的isnull(),sum(),sort_values等方法,计算各特征缺失值占比,然后通过matplotlib里库中的plot方法绘制这些特征缺失值占比分布的这些图,找出阈值之后,用drop方法删除部分缺失比例高的特征,最后使用sklearn.impute库中的KNNImputer方法对缺失数据进行K近邻填充。因为我认为用户与用户之间存在一定的相似性,而K近邻填充就是根据缺失样本附近的K个样本加权平均来估计该样本的缺失数据的,所以效果比较好。
异常值处理方法:通过numpy库里的percentile方法,计算各特征的四分位数,绘制箱型图,找到异常值,再基于业务角度,思考异常值出现的原因,再删除或修改部分异常值。
数据采样方面:使用imblearn.over_sampling库中的smote过采样方法解决样本不平衡问题,因为原数据集中正负样本比例严重不均衡,通过smote过采样之后,少数类样本的数量会和多数类样本的数量持平。smote过采样方法里也使用到了k近邻算法,它通过一个少数类样本,找到附近K个少数类样本,对其中m(m 特征工程是什么? 数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限。特征工程本质是一项工程活动,目的是最大限度地从原始数据中提取特征以供算法和模型使用。特征工程主要包含数据预处理,特征选择,降维等步骤。 为什么说信息熵越小,不确定性越低? 举个简单的例子,比如我有两个骰子,分别是六个面的和12个面的骰子,根据信息熵公式可以知道,六个面的骰子信息熵比12个面的骰子信息熵小,假如我想要得到点数为1,很明显六个面的骰子更容易得到点数为1的结果,因此它的不确定性比12个面的骰子的不确定性低,这也就证明了信息熵越小,不确定性越低。 决策树如何做预测的? 首先树的生长是选择最优划分属性不断地对数据集划分下去,达到某个截止条件后停止生长,比如:到达指定深度或者所有特征划分完毕。如果是做回归预测,那么是根据叶子结点的平均值或者中位数作为预测值,如果是做分类预测,那么是根据叶子结点中概率(占比)最大的类别作为预测值。 机器学习中,你用的比较多的分类模型有哪些?(回答此类问题,用于引导面试官对你的答案提问) 随机森林、逻辑回归、xgb、lgbm、catboost。打比赛的时候经常会使用到他们,比较一下哪个算法效果更好,也会做一些模型融合之类的。 决策树和xgb之间有什么联系吗? xgb是采用boosting集成学习算法按顺序生成多个cart回归决策树,后一棵树会用到前一棵树的结果,拟合上一次预测的残差,最后采用加权累加的方式输出预测值。 机器学习模型如何调优? 机器学习模型调优有三种方式,分别是比较不同的算法,调优模型超参数,改进数据。 比较不同的算法:不同的算法适合不同类型的数据集,我们可以一起训练它们,找到表现最好的那个。比如说对于分类问题,可以采用逻辑回归、支持向量机、随机森林、xgb、神经网络,也可以考虑做模型融合比如stacking集成或者voting集成,将多个强学习器集成更强的学习器(有过拟合风险)。 调整模型参数:一般是采用交叉验证的方式进行调优,如果是xgb,那么调整的超参数可以是树的数量、树的深度、正则化、采样比例、学习率等,也可以调整模型的做分类的阈值,根据问题的不同,优化召回率或精度中的一个。 改进数据:扩大样本量、特征工程(衍生新特征、删除数据泄露的特征、降维、采样等) 机器学习模型什么时候应该停止调优? 你认为业务和机器学习建模之间有什么区别或者联系吗? XGB中的近似直方图算法和LGBM的直方图算法的区别是什么? XGB在每一层都需要动态的构建直方图,所有特征共享一个直方图,而且每一层都要重新构建直方图。而lgb针对每个特征都有一个直方图,构建一次就可以,并且在分裂的时候还可以通过直方图进行做差加速。也就是说LGBM的直方图算法的效率更高。 LR(逻辑回归)与SVM的相同点和不同点是什么? 相同点: 不同点: 在K-means和KNN中通常使用欧氏距离来计算邻居之间的距离,为什么不使用曼哈顿距离呢? L1和L2正则先验分别服从什么分布? L1是拉普拉斯分布,L2是高斯分布。 为什么L1会产生稀疏解,L2会产生稠密解? 假设参数只有两个:w1,w2上图中,左图是对应L2范式,右图对应L1范式,w*是对应最优解,蓝色圆圈代表损失函数的等高线,到达中间的小圆点时,损失为0,从小圆点向外,损失越来越大。 目标是把参数的解限制在黄色的区域内,同时使得损失尽可能小。 从图中可以看到,L2正则化相当于为参数定义了一个圆形的解空间,倾向于为各个分量均分一些权重,因而更稠密;L1正则化相当于为参数定义了一个菱形的解空间,倾向于将部分分量设置为0,因而更稀疏。 随机森林如何选择特征? 随机森林中进行特征重要性的评估思想为判断每个特征在随机森林中的每颗树上做了多大的贡献,然后取平均值,最后比较特征之间的贡献大小。其中关于贡献的计算方式可以是基尼指数或袋外数据错误率。 对每一个决策树选择对应的袋外数据OOB,计算它的袋外数据误差,记为errOOB1,袋外数据是指由于决策树是有放回抽样,所以会有36.8%(一条数据n轮没选到的概率为(1-1/n)的n次方,当n趋向于无穷大时,约等于1/e也就是36.8%)左右的数据没有参与训练,因此这部分数据被称为袋外数据。随机地对袋外数据OOB所有样本的特征X加入噪声干扰(就可以随机的改变样本在特征X处的值),再次计算它的袋外数据误差,记为errOOB2。 假设森林中有N棵树,则特征X的重要性=∑(errOOB2-errOOB1)/N。这个数值之所以能够说明特征的重要性是因为,如果加入随机噪声后,袋外数据准确率大幅度下降(即errOOB2上升),说明这个特征对于样本的预测结果有很大影响,进而说明重要程度比较高。 袋外数据是无偏估计的,所以在随机森林算法中不需要再进行交叉验证或者单独的测试集来获取测试集误差,袋外数据可以直接充当测试集的作用。 袋外错误率计算方式: 1)对每个样本,计算它作为oob样本的树对它的分类情况(约1/3的树); 2)然后以简单多数投票作为该样本的分类结果; 3)最后用误分个数占样本总数的比率作为随机森林的oob误分率。 在特征重要性的基础上,特征选择的步骤如下: 计算每个特征的重要性,并按降序排序 确定要剔除的比例,依据特征重要性剔除相应比例的特征,得到一个新的特征集 用新的特征集重复上述过程,直到剩下m个特征(m为提前设定的值) 根据上述过程中得到的各个特征集和特征集对应的袋外误差率,选择袋外误差率最低的特征集 训练完后的模型应该如何保存? 常用保存模型的包有pickle/joblib pickle库(不需要安装)实现模型保存 importpickle #保存模型,我们想要导入的是模型本身,所以用“wb”方式写入,即是二进制方式,DT是模型名字 pickle.dump(DT,open("dtr.dat","wb"))#open("dtr.dat","wb")意思是打开叫"dtr.dat"的文件,操作方式是写入二进制数据 loaded_model=pickle.load(open("dtr.dat","rb"))#加载模型 loaded_model.predict(xtest) joblib库(需要安装)实现模型保存 importjoblib joblib.dump(DT,'DT.dat')#第二个参数是文件名字 loaded_model2=joblib.load('DT.dat') loaded_model2.predict(xtest) XGB自带的保存模型方法 #这里假设模型名字xgboost xgboost.save_model('train.model') loaded_model3=xgb.Booster(model_file='train.model') loeded_model3.predict(xtest) 逐步回归法有了解吗? 逐步回归法是一种筛选特征的方法,它属于特征选择方法中的包裹法。原理是对每个解释变量依次引入模型进行F检验,同时对已引入的解释变量逐个进行T检验,当原来引入变量由于后面加入的变量的引入而不再显著变化时,则剔除此变量,确保每次引入新的变量之前回归方程中只包含显著性变量,直到既没有显著的解释变量选入回归方程,也没有不显著的解释变量从回归方程中剔除为止,最终得到一个最优的变量集合。 K-means优化有了解吗? 针对初始簇心比较敏感的问题,可以考虑采用k-means++算法,它的基本思想是逐个选取k个簇中心,且离其它簇中心越远(但不是最远的点,因为需要防止异常值的影响)的样本点越有可能被选为下一个簇中心。这个也很符合K-means原理:保持簇内对象相似度越大,保持簇与簇之间相似度越小。还有一种方法是二分K-means,将所有点作为一个簇,然后根据传统Kmeans算法将该簇一分为二,计算所有簇的和方差SSE,将和方差SSE最大的簇再次划分,依次进行以上步骤,直到达到簇的数量等于初始给定的数量为止。 针对于初始簇的数量设定问题,可以考虑采用ISODATA(迭代自组织数据分析方法)算法,这个算法是在k-means基础上增加对聚类结果的“合并”和“分裂”两个操作,当两个簇内中心距离小于阈值时则会将两个聚类中心合并为同一个,当某个簇的最大方差大于某个阈值且簇内样本数大于某个阈值则进行分裂,因此最终的聚类结果可能会和初始设定的K值不同,从而改善簇数量的设定问题。 针对聚类效果问题,可以考虑采用KernelK-means算法,它参考了支持向量机中的核函数思想,将每个样本投射到高维空间进行聚类,因为在高维空间内可能可以起到改善聚类效果的作用。 赛题背景:根据爱荷华州埃姆斯住宅的79个特征变量,预测每栋房屋的最终价格。评估指标是RMSE平方根误差。 这是我去年参与的一个竞赛,排名达到了前2.4%左右(总共50000+队伍参与),做这个比赛的目的是打基础。 在这个比赛中主要用到的方法有: 数据处理方面:删除一些缺失比例比较高的特征、对(特征取值有大小关系的)字符串型特征有进行顺序编码OrdinalEncoder和对(特征取值较多的)字符串特征进行哑变量编码。 特征选择:通过LGBM回归拟合输出各特征重要性并逆序排序,取出前55个重要的特征。 填充缺失值:采用K近邻填充,并使用随机森林进行拟合预测以rmse作为评价指标,从而确定最优的K近邻填充的K值。 模型训练:采用贝叶斯优化进行超参数调优,以xgb回归器预测测试集样本。 以上方案不足的地方: ①数据处理方面:没有分析一下数据集各个特征的分布情况,仅仅只是了解了一下是否缺失和重复。一般来说,需要特征做一下数据可视化。对类别型特征的处理不是很恰当。 ②特征筛选方面:使用的方法较少,还可以再使用一些方法例如:过滤法、包裹法、嵌入法等,具体特征选择的方法在这篇博客中也都有提到。除此之外,还可以基于自己对特征的理解,衍生一部分其他特征,例如:可以把地下室面积特征和地上活动区面积特征相加得到一个新的特征。 ③模型方面:没有比较多个模型的效果(集成模型可以考虑都尝试一遍)、也没有进行交叉验证(贝叶斯优化虽然用到了交叉验证,但并没有产生很好的效果,可能是我没有使用好,可以尝试传统一点的网格搜索)、没有模型融合(stacking模型融合,传统机器学习比赛中的大杀器)、模型调优的超参数数量较少(当时对模型算法理解较浅)、没有进行模型诊断评估模型的方差和偏差关系。这些也都是需要优化的地方。 本章节的内容参考于书籍《百面机器学习》,这本书包含一百道以上算法工程师的面试题和解答,有非常高的学习价值。 在进行数据预处理时,如何处理类别型特征? 常用的方法有三种分别是序号编码、独热编码、二进制编码。还有一种方法是不做处理,然后使用LGBM(只能处理数值类型的类别型特征)或者CatBoost(可以处理字符串和数值类型的类别型特征)模型并在建模时指定哪些特征是类别型特征,之后模型就可以自动处理它们。下面介绍一下序号编码、独热编码、二进制编码。 序号编码:序号编码主要用于处理类别间有大小关系的数据。例如:成绩可以分为高、中、低三个档次,并且存在‘高>中>低’的排序关系。然后序号编码会根据大小关系对类别型特征赋予一个数字ID,例如3表示高、2表示中、1表示低。转化后依旧保留了大小关系。 独热编码:通常用于处理类别间不存在大小关系的特征。例如:血型一共有四个取值(A型、B型、AB型、O型),独热编码会把血型变成一个四维稀疏四维向量,说通俗一点就是,把一个特征变成四个特征。例如A型血表示为(1,0,0,0)、B型血表示为(0,1,0,0)、AB型血表示为(0,0,1,0)、O型血表示为(0,0,0,1)。当类别型特征取值较多时,使用独热编码后需要注意搭配一些特征选择的方法降低维度,这样可以有效避免过拟合问题。 二进制编码:二进制编码主要分为两步,先用序号编码给每个类别赋予一个类别ID,然后将类别ID对应的二进制编码作为结果。以血型为例,A血型的ID为1,二进制表示为001;B血型的ID为2,二进制表示为010;AB型血型的ID为3,二进制表示为011,以此类推可以得到O型血的表示方式。二进制编码本质上利用二进制ID进行哈希映射,最终得到0/1特征向量,且维度数量少于独热编码,节省了存储空间。 除了以上编码形式还有其他编码方法,比如HelmertContrast、SumContrast、PolynomialContrast、BackwardDifferenceContrast等。不再具体介绍了。 roc曲线如何绘制? roc曲线绘制有两种方法。 第一种是比较常用的方法,在二分类问题中,模型的输出一般是预测样本为正例概率,将样本按照预测概率从高到低排序。此时,我们需要指定一个阈值,当预测概率大于该阈值的样本会被判断为正例,小于该阈值的样本会被判断为负例,然后动态地调整这个阈值,从最高得分(实际上是从正无穷开始调整,对应roc曲线的(0,0)点坐标)开始调整,逐渐调整到最低得分,每个阈值都会对应着一个FPR(假阳率)和TPR(召回率),在roc图上绘制每个阈值所对应的位置,再连接所有点就得到了最终的roc曲线。 第二种是更直观地绘制roc曲线的方法。首先根据样本标签统计出正负样本的数量,假设正样本数量为p,负样本数量为n;接下来,把横轴的刻度间隔设置为1/n,把纵轴的刻度设置为1/p;再根据模型输出的预测概率对样本进行从高到低的排序;依次遍历所有样本,同时从零点开始绘制roc曲线,每遇到一个正样本就沿着纵轴方向绘制一个刻度间隔的曲线,每遇到一个负样本就沿着横轴方向绘制一个刻度的曲线,直到遍历完所有样本,曲线最终停止在(1,1)坐标点,整个roc曲线绘制完成。 如何对决策树进行剪枝? 决策树剪枝通常有两种方法,分别是预剪枝和后剪枝,预剪枝是在生成决策树的过程中提前停止树的生长。而后剪枝是在已经生成过拟合决策树之后进行剪枝,得到简化版决策树。 预剪枝的核心思想是:在树中的结点进行扩展之前,先计算当前的划分是否能带来模型泛化能力的提升,如果不能,则不再继续生长子树。此时,可能存在不同类别样本存在于结点当中,按照多数投票的原则判断该结点。预剪枝的方法有以下几种。 预剪枝具有思想简单、算法简单、效率高的特点,适合解决大规模问题。但如何准确地估计何时停止,针对不同问题会有很大区别,需要一定的经验判断。同时预剪枝存在局限性,有欠拟合风险,虽然当前的划分会导致测试集的准确率降低,但在之后的划分后,准确率可能会显著性提高。 后剪枝方法有很多例如错误率降低剪枝REP、悲观剪枝PEP、代价复杂度剪枝CCP、最小误差剪枝MEP等。这里具体介绍一下cart决策树中的剪枝方法CCP。 代价复杂度剪枝CCP主要包含两个步骤: (1)从完整决策树T0开始,生成一个子树序列{T0,T1,T2,...,Tn},其中Ti+1由Ti生成,Tn为树的根结点。具体来说就是首先计算T0所有内结点(包括根结点)的误差增加率,选择误差增加率最小的内结点进行剪枝(将内结点替换为叶子结点),此时就生成了一个子树T1。然后用T1重复以上的步骤,直到生成Tn为根结点为止。最后就得到了子树序列{T0,T1,T2,...,Tn}。 误差增加率α=(R(t)R(T))/(|L(T)|-1),分子代表剪枝后该结点的误差减去未剪枝前子树的误差,分母代表子树的叶子结点个数减一。 (2)在子树序列中,根据真实误差选择最佳的决策树。有两种方法选择最佳的决策树,一种是基于独立剪枝数据集,另一种是基于k折交叉验证。 对于二分类问题,当训练集中正负样本非常不均匀时,如何处理数据以更好地训练分类模型? 首先要知道,为什么很多分类模型在训练不均衡数据时会出现问题?本质原因是模型在训练时优化的目标函数和人们在测试集时使用的评价指标不一致。这种‘不一致’可能是由于训练时和测试时期望的样本分布不一致;也可能是由于训练阶段不同类别的权重(重要性)与测试阶段不一致 根据上述分析,一般可以从两个角度来处理样本不均衡问题。 最简单处理不均衡数据集的方法是随机采样。采样一般分为过采样和欠采样。随机过采样是从少数类样本集随机有放回抽取样本以得到更多的样本;随机欠采样则相反,从多数类样本集随机抽取较少的样本(有放回或无放回)。 直接的随机采样虽然可以使样本集变得均衡,但会带来一些问题,比如,随机过采样对少数类样本进行了多次复制,扩大了数据规模,增加了模型复杂度,同时也容易造成过拟合;而随机欠采样会丢弃一部分样本,这样会导致可能损失一些有价值的信息,造成模型只学习到了整体模式的一部分。 为了解决上述问题,通常在过采样时并不是简单地复制样本,而是采用一些其他方法生成新的样本。例如:SMOTE过采样方法对少数类样本中每个样本,从它在少数类样本的k近邻中随机选择一个样本,然后将这个样本与原样本进行连线,在线上随机选择一点即为新生成的样本(根据需要过采样的倍率重复上述过程若干次)。这种过采样方法相比于随机过采样可以降低过拟合的风险。 但smote过采样为每个少数类样本合成相同数量的新样本,这可能会增大类间重叠度,并且会生成一些不能提供有效信息的样本。为此还出现了一些改进算法,例如:Borderline-SMOTE只给处在分类边界的少数类样本合成新样本、ADASYNZ则给不同的少数类样本合成不同个数的新样本。此外,还可以使用一些数据清理的方法(基于TomekLines)来进一步降低合成样本带来的类间重叠,以得到清晰的类簇,从而更好地训练分类器。 对于欠采样方法,可以采用InformedUndersampling来解决由于随机欠采样带来的数据丢失问题。常见的InformedUndersampling方法有: ①EasyEnsemble算法。每次从多数类样本中随机抽取一个子集(子集中的样本个数≈少数类样本个数),然后使用这个子集+少数类样本训练一个分类器;重复上述过程若干次,得到多个分类器,最终的分类器结果是这多个分类器结果的融合。 ②BalanceCascade算法。级联结构,每一级中从多数类样本中随机抽取子集,用子集+少数类样本训练该级的分类器;然后将多数类样本中能够被当前分类器正确判别的样本剔除掉,继续下一级的操作,重复若干次得到级联结构;最终的输出结果也是各分类器结果的融合。 ③其他诸如NearMiss(利用K近邻信息挑选具有代表性的样本)、One-sidedSelection(采用数据清理技术)等算法。 在实际应用中,具体的采样操作可能并不总是如上述几个算法一样,但基本思路很多时候还是一致的。例如,基于聚类的采样方法,利用数据的类簇信息来指导过采样/欠采样操作;经常用到的数据扩充方法也是一种过采样,对少数类样本进行一些噪声扰动或变换(如图像数据集中对图片进行裁剪、翻转、旋转、加光照等)以构造出新的样本;而HardNegativeMining则是一种欠采样,把比较难的样本抽出来用于迭代分类器。 在样本不均衡时,也可以通过改变模型训练时的目标函数(如代价敏感学习中不同类别有不同的权重)来矫正这种不平衡性。当样本数目极其不均衡时,也可以将问题转化为单类学习(one-classlearning)、异常检测(anomalydetection)。 常用的基分类器是什么? 最常用的基分类器是决策树,主要有以下三个原因: ①决策树可以比较方便地讲样本权重整合到模型训练中,而不需要使用过采样的方法调整样本权重。 ②决策树的表达能力和泛化能力,可以通过调节树的层数来做折中。 ③数据样本对决策树的扰动对于决策树的影响较大,因此不同子样本集合生成的决策树基分类器随机性较大,这样‘不稳定的学习器’更适合做基分类器。此外决策树在节点分裂的时候,随机地选择一个特征子集,从中找出最优分裂属性,很好地引入了随机性。 除了决策树外,神经网络模型也适合作为基分类器,主要由于神经网络模型也比较“不稳定”,而且还可以通过调整神经元数量、连接方式、网络层数、初始权值等方式引入随机性。 梯度上升和梯度下降的区别和联系是什么? 下面这幅图就是梯度上升和梯度下降的比较,可以发现它们共同的特点都是在每轮迭代中,利用损失函数相对于模型的负梯度方向的信息来对当前模型进行更新,只不过在梯度下降中,模型是以参数化形式表示,从而模型的更新等价于参数的更新。而在梯度提升中,模型并不需要进行参数化表示,而是直接定义在函数空间中,从而大大扩展了可以使用的模型种类。 指标是用来评估业务目标表现或效果的量化参数,最直观的作用就是将业务量化。 指标体系是指不同指标按照一定的顺序及内部联系而组成的整体。 GMV:总成交金额。GMV=销售额+取消单金额+拒收单金额+退货单金额。 CPA:每产生一次行为(注册、咨询、放入购物车)的成本。 UV:独立访客数量,记录访问了某个网页的用户数量,需要对用户进行去重处理。 PV:页面访问量,与UV的区别是不进行去重。 CR:转化率:比如商品的CR=商品购买人数/商品浏览人数。 ROI:投资回报率:投资回报率=利论/成本,ROI越高,代表项目的价值越高。 ARPU:平均每用户收入,用户收入/用户总数。 ARPPU:平均每个付费用户收入,用户收入/付费用户总人数。 CAC:用户获取成本,某一周期内产品投入成本/产品有效用户数。 DAU:日活跃用户数量。 SKU:库存量单位纺织品中的一个SKU表示为颜色、规格、款式之类的。 APA:活跃付费用户数。 DAOT:日均使用时长。 LTV:代表用户在整个生命周期内的贡献价值,可以记为ARPU*用户以月度计算平均生命周期。 LTV计算:用户生命周期为横坐标为天数纵坐标为留存率(1,2,3,4,5,6,7,14,30)所围成的图形面积,在Excel中添加趋势线可得LT函数。再根据定积分求出一个月内的LT平均生命周期(单位:天数)。再计算ARPU=总收入/总活跃用户(以一个月为单位)最后结果为LTV=ARPU*LT/31 SEO:指搜索引擎优化。全称为(SearchEngineOptimization),是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式。 目的是让其在行业内占据领先地位,获得品牌收益。很大程度上是网站经营者的一种商业行为,将自己或自己公司的排名前移。 客单价:每个用户的付费。 同比的意思是年的变化,2021年9月和2020年9月的对比叫做同比。 环比的意思是相邻两个数据(包括月和日)的变化,例如:2021年9月和2021年8月的对比叫做月环比,2021年8月12日和2021年8月13日的对比叫做日环比。 环比增长率=(本期数-上期数)/上期数*100%反映本期比上期增长了多少。 同比增长率=(本期数-同期数)/同期数*100%指和去年同期相比较的增长率。 同比发展速度,一般指是指本期发展水平与上年同期发展水平对比,而达到的相对发展速度。 环比发展速度,一般指是指报告期水平与前一时期水平之比,表明现象逐期的发展速度。 总结起来主要是两点——目标管理和目标经营,即通过目标体系,可以把每个业务环节量化和透明化,方便了解目标与现状之间的差距,以及如何通过该这些信息。驱动业务的发展,达成目标组织。 具体来说,主要作用有四点: 第一,统一公司口径。同一个指标在不同部门的口径定义是不一样的,如果每个部门各说各话,会产生误差从而影响效率。统一口径可以避免定义模糊和逻辑混乱,从而影响业务开展和数据质量。 第二,提升组织效率。指标体系可以帮助策略落地执行,及时反馈并评估策略和动作执行情况,还可以明确组织和部门的经营目标,让整体组织朝着同一个方向前进。 第三,了解业务现状。指标可以量化业务情况,清楚了解业务现状,定位问题及改善方向。 第四,科学决策业务。一个相对全面的数据指标体系,可以让管理层从数据层面对公司的发展有一个比较客观的认识,让每一次决策都有足够的数据支撑。 我们一般把好的指标体系分为四个层次: 第一层最简单,即可以描述现状,如果连现状都无法描述的话,它就不算一个指标体系。 第二层分析现状,即知道现状指标或业务因素哪里出了问题,帮助业务变化归因以及定位。 第三层预测未来,即能够帮助我们对业务未来做一些假设分析,制定策略,比如如何做才能让不好的指标变好,可以提出一些假设去预测未来。 第四层是改善未来,即能够帮助业务调整战略、策略,改善执行动作。比如基于过往的洞察,发展原来的策略在实际表现还不错,未来就可以朝着这个方向发展和努力。 ①首先找到第一指标。明确企业的第一目标,可以从三个维度进行考虑: 第一个是产品定位和核心价值:即解决用户的核心需求是什么?解决方法和核心转化路径是什么?盈利模式及当前痛点是什么? 第二是行业目前发展阶段,大致分为新兴期、成熟期、饱和期,不同时期的重要指标也不同。 第三是产品阶段,主要分为需求验证期、快速发展期、稳定期、没落期等。 ②将第一指标拆解到各个部门,得到第二指标。 比如:GMV=购买人数*客单价=访问人数*购买转化*笔单价*复购率=(新增用户+活跃老用户)*商品详情页触达率*购买转化*笔单价*复购率。 ③梳理业务流程,找到三级指标。 例如用户-用户-搜索商品-点击详情页-加入购物车-下单-支付,三级指标有人均访问次数、平均访问时长、新用户访问量、商品点击人数、商品支付人数、人均购买次数、人均购买单价等。 ④通过报表监控指标,不断更新指标体系。 当业务运营中有新的场景产生、当发现指标落地后与实际场景不适配、当使用过程中指标数据出现偏差时,都需要进行调整和迭代。 第一步:确认数据准确性。首先确定数据是环比下降还是同比下降?下降了多少?标准是什么?数据是否存在SQL逻辑性错误?如果数据下降超过了这个标准并且没有SQL逻辑性错误,则进行下一步分析。 第二步:对比历史数据,计算同环比,判断数据是否是周期性、季节性变化。 第三步:拆分指标。 例如:GMV=订单均价*订单量 订单均价=下单商品单价*下单商品数量 订单量=订单量商品详情页的流量*购买转化率 第四步:拆分维度。 外部因素:pest(政治、社会、经济、科技)、竞品 面试真题:假如某一天使用飞书视频的用户极剧下降,你应该如何分析? 第一步,向业务方确认数据的统计口径,极剧下降是下降百分之多少?是同比下降还是环比下降?数据是否存在SQL的取数逻辑错误?并且寻找一个标准来判断,这个标准可以是历史数据的标准,也可以是同行业的标准,根据标准来判断用户数量下降是否是一个问题,因为现状≠问题,现状+标准=问题。如果它是一个问题,那么进行下一步。 第二步,分析用户数量的历史数据,并计算同环比,确认数据是否存在周期性、季节性变化。 第四步,从产品方面分析,飞书这类办公软件主要是面向于TOB用户,也就是商业机构的用户,而TOC用户的数量比较少,所以一般来说飞书视频的用户数量大量减少的话,一般是因为一些规模较大的企业放弃使用飞书而转向于其他办公平台比如:teams或者钉钉。可以进行竞品分析,来比较飞书视频和其他办公软件的区别,当用户使用一次飞书视频时候,也可以向用户发放调查问卷,来深挖TOB用户流失的原因。 从技术方面分析,最近是否发生过版本更迭,或者用户打开APP出现秒退或者卡顿?导致用户体验不佳造成流失。 第五步,pest宏观环境分析: 社会上,疫情得到控制,线上办公的需求是否会减少? 指标异动分析是面试的常考的题目,答案都是有套路可言的。但是也需要形成自己的方法论,分析的时候,一定要将指标拆解正确并结合APP自身特点进行分析。 数据分析是通过数据发现业务的痛点,分析数据背后的原因并提出相应的策略,最终推动策略落地提升业务质量的过程。 ①、对数据分析十分感兴趣,对自己未来的职业规划也是在数据分析这条路深耕,非常希望能够进入该行业。 ③、认为该行业十分有前景,未来是大数据时代,而数据分析能够让企业更明确未来的方向,是非常有发展前景的行业。 取数和数据处理方面的工具:Python、MySQL、Hive、Excel、SPSS、R 数据可视化方面的工具:Tableau、FineBI、Echarts 优势(strength)劣势(weakness)机会(opportunities)威胁(threats)。 用来考量企业的内外部环境与自身战略是否匹配,帮助企业定位自己的优劣势,设计战略测量。 人货场,是指影响销售的三个重要因素 从人的角度来看,来自销售人员、顾客的因素,可以细致划分为内部员工和外部客户,分析各自的特征行为; 从货的角度,商品方面的因素。可以根据供应链的流程划分不同阶段,例如(订单量退货率收益率等) 从场的角度,可以考虑活卖场、门店、销售渠道的因素。(门店数量、渠道类型和数量等) AARRR模型是基于用户生命周期提出的模型,认为在用户增长中,最重要的五个指标是Acquisition(获取)、Activation(激活)、Retention(留存)、Revenue(收入)、Referral(自传播),这种增长模式也称为海盗模型。 第二阶段:用户激活。用户激活的重点在于‘让用户更快上手产品,产生重复使用的动力。‘常见的做法包括提供新人使用指南——比如为中老年人提供购物指导;采用水军策略——在产品前期投入虚拟用户,比如在游戏场景中投入机器人; PEST分析是指宏观环境的分析,P是政治(politics),E是经济(economy),S是社会(society),T是技术(technology)。在分析一个企业集团所处的背景的时候,通常是通过这四个因素来进行分析企业集团所面临的状况。 (1)WHAT——是什么?目的是什么?做什么工作? (2)WHY——为什么要做?可不可以不做?有没有替代方案? (3)WHO——谁?由谁来做? (5)WHERE——何处?在哪里做? (6)HOW——怎么做?如何提高效率?如何实施?方法是什么? (7)HOWMUCH——多少?做到什么程度?数量如何?质量水平如何?费用产出如何? 波特五力模型,这五种力量综合起来影响着产业的吸引力以及现有企业的竞争战略决策。 RFM模型通过一个客户的近期购买行为间隔(R)、购买的频率(F)以及购买金额(M)3项指标来描述该客户的价值状况。 PLC模型,指产品的市场寿命,即一种产品从开始进入市场到被市场淘汰的整个过程。产品的生命周期有探索期、成长期、成熟期、衰退期(迭代期)。 OSM模型,是指标体系建设过程中辅助确定核心的重要方法,包含objective业务目标、stragegy业务策略、measurement业务度量,是指标内容横向的思考。 漏斗分析是一套流程式数据分析,它能够科学反映用户行为状态以及从起点到终点各阶段用户转化率情况的重要分析模型。 末次归因模型:将功劳100%分配给转化前的最后一个渠道。 优点:他是最容易测量的归因模型,在分析方面不容易发生错误。大部分追踪的cookie存活期只有30-90天,对于顾客的行为路径、周期比较长的场景,做归因分析时可能就会发生数据丢失,而对于末次归因模型,这个数据跟着周期就不是特别重要了。 缺点:比如客户从收藏夹进入商品详细页然后成交,按照模型就会100%的功劳归功于收藏夹。但真实的用户行为路径更接近于产生兴趣、购买意向等环节,这都是其他渠道的功劳。无法从这个模型中统计出来。末次渠道的功劳会大幅度被高估。 适用场景:短期的投放,转化路径少、周期性短的业务快速提升效果,按照末次归因模型,能比较好了解到底是哪个渠道对于最终的转化有比较好的效果。 首次归因模型:将功劳100%分配给第一个触达的渠道。 优点:是一种比较容易实施的单触点模型,初次点击的归因会你明确潜在消费者是怎样找到你的,且和最后点击一样,不需要大量数据。 适用场景:一般是需要拉新的时候,公司处于市场开拓的时候,这个时候我们关系把更多的用户先圈过来,那么用首次互动模型可以看出来哪些渠道对于业务拉新最高效。所以首次归因模型对于没什么品牌知名度、且重点在市场拓展,渠道优化的公司,比较适用。 线性归因模型,他将功劳平均分配给用户路径中的每一个触点。 优点:它是一个多触点归因模型,可以将功劳划分给业务路径中每个不同阶段的营销渠道,不用考虑不同渠道的价值权重。计算方法比较简单。 适用场景:根据线性归因模型的特点,它更适用于企业期望在整个销售周期内保持与客户的关系,并维持品牌认知度的公司。在这种情况下,各个渠道在客户的考虑过程中,都起到相同的促进作用。 缺点:如果有的渠道天然处于转化链路的起点,那么对于这些渠道是不公正的,因为他们总是距离转化最远的那个,永远不会得到一个公平的权重。 位置归因模型:它综合了首次归因、末次归因、线性归因他将第一次和最后一次触点各贡献40%,中间的所有触点平均剩下的20%贡献。 缺点:它不会考虑线索转化之后的触点的营销效果,这也使得它成为销售线索报告或者只有销售线索阶段目标的营销组织的理想归因模型。 我们将一款游戏的生命周期分为成长期、成熟期(稳定期)、衰退期。 1)分别阐述一下这三个时期新增账号数、活跃账号数、收入这三类指标的特征分别是什么(不限这3个指标,也可补充其他指标)。 (1) 成长期新增账号数、活跃账号数、收入迅速增长 成熟期新增账号数增速放缓、活跃账号数与收入稳定增长 衰退期新增账号数、活跃账号数、收入持续减少 (2) 穿越火线 风控是指通过各种方法及措施来控制风险,减少损失发生的可能性,提升交易成功率。 风控主要分为2大方向:信用风控(打分,芝麻分之类)比如银行评分卡; 反舞弊风控(很多黑产活跃在互联网上,你就要通过风控和坏人做对抗;这个对抗不能只停留在防御上,更多的要站在坏人的角度去思索他们是怎么欺诈的,怎么获取利益的)比如识别薅羊毛用户 风险行为的定义: 账户安全问题:盗卡,盗余额支付 商家刷单:刷排名,刷销量,刷好评 用户作弊:”薅羊毛“,也就是获取一些优惠卷(通过反复注册新用户等行为) 评分卡的定义(信贷场景中) 评分卡的目的和意义 目的:通过对借款人信用历史记录和业务活动记录的深度数据挖掘、分析和提炼,发现蕴藏在纷繁复杂数据中、反映消费者风险特征和预期信贷表现的知识和规律,并通过评分的方式总结出来,作为管理决策的科学依据。 意义:相比于人工审批更加的客观、一致、准确,同时能够量化用户的风险程度,并且很大程度地提高审批效率(评分卡是在系统中自动实施的)。 评分卡模型主要包括:申请评分卡(A卡)、行为评分卡(B卡)、催收评分卡(C卡)和反欺诈评分卡(F卡)。 申请评分卡(A卡)和反欺诈评分卡(F卡)在贷款审批阶段也就是贷前阶段;行为评分卡(B卡)属于贷后管理阶段;催收评分卡(C卡)属于催款阶段。四类卡存在于贷前、贷中、贷后三个不同阶段。 A卡(Applicationscorecard)。目的在于预测申请时(申请信用卡、申请贷款)对申请人进行量化评估。 C卡(Collectionscorecard)。用于催收管理,在借款人当前状态为逾期的情况下,预测未来该笔贷款变为坏账的概率。 F卡(AntifraudScoreCard)。用于对业务中的新用户可能存在的欺诈行为进行预测。所谓“欺诈行为”,指的是该用户申请借款,就没想着还钱,就是奔着占便宜来的,这部分用户往往伴随着“多头共债”的现象,即该用户在多个平台都有借款逾期不还的记录。所以这部分低信用人群应该是首先要拒绝的,因为放款给这些人意味着直接损失、没有任何回报。 评分卡的构建过程: 评分卡的优点: 易于使用。业务人员在操作时,只需要按照评分卡每样打分然后算个总分就能操作,不需要接受太多专业训练。 直观透明。客户和审核人员都能知道看到结果,以及结果是如何产生的。 应用范围广。我们最熟悉的,莫过于支付宝的芝麻信用分,又或者知乎盐值(虽然知乎盐值不是评估金融风险的,但也算是评分卡的应用之一) 评分卡的缺点: 简单是优点,但在日益增长的数据前,就变成缺点。有着大量数据资源却使用有限,造成数据资源的浪费。 当信息维度高时,评分卡建模会变得非常困难。 为什么要用逻辑回归做评分卡,而不用XGBOOST或者神经网络呢? 分箱是对特征变量进行区间划分或者对不同枚举值进行合并的过程,它可以降低特征的复杂度,提升变量可解释性。 分箱有两个功能,第一个是拆分,对“连续变量”进行分段离散化,使它变成“离散变量”。比如:年龄、月收入。拆分分为等频拆分、等距拆分、信息熵分箱。举个例子,将年龄分为20岁以下,20岁至30岁,30岁以上三个区间。第二个是合并,合并的目的是减少离散变量的状态数,对“离散变量”进行合并。比如:城市、学历。举个例子:全国的城市有很多个,可以大致合并为一线城市、二线城市、三线城市...十八线城市。 每个变量的分箱数,控制在十个以下,通常5个左右是最佳的;每个箱子里的样本数至少为总样本数的5%以上,每个箱子里都要有正负样本,同时坏样本率与箱子呈单调关系。分箱越多,模型过拟合的风险越高,模型的稳定性也会变差,在金融场景,风险可控与稳定至关重要。 分箱的优缺点: 优点:比如连续变量分箱、离散变量合并,会“降低特征变量的复杂度,降低模型过拟合的风险”(因为特征中值的数量变少了,每个取值的样本量增多,也就是说方差会相比于分箱前变小,而偏差会变大);可以“增强模型的稳定性”,对特征变量的异常波动不会反应太大,也利于适应更广泛的客群;将特征变量划分为有限的分箱,可以“增强模型的可解释性”;可以更自然地将“缺失值作为单独的分箱”。 缺点:分箱后丢失了数据的细节信息,使模型对好坏样本的判别能力变弱了,模型的KS和AUC相比于分箱会下降。 原理 它以卡方分布和卡方值为基础,判断某个因素是否会影响目标变量。例如,在检验性别是否会影响违约概率时,可以用卡方检验来判断。 卡方检验的无效假设H0是:观察频数与期望频数没有差别,即该因素不会影响到目标变量。基于该假设计算出χ2值,它表示观察值与理论值之间的偏离程度。根据χ2分布及自由度可以确定在H0假设成立的情况下获得当前统计量及更极端情况的概率P。如果P值很小,说明观察值与理论值偏离程度太大,应当拒绝无效假设,表示比较资料之间有显著差异;否则就不能拒绝无效假设,尚不能认为样本所代表的实际情况和理论假设有差别。 步骤 终止条件 KS指标倾向于从概率角度衡量正负样本分布之间的差异。正是因为正负样本之间的模糊性和连续性,所以KS也是一条连续曲线。但最终为什么取一个最大值,主要原因是提取KS曲线中的一个显著特征,从而便于相互比较。召回率与假阳率的差值的最大值为特征的KS值,也就是累计正样本率大于累计负样本率的最大值,因为我们想抓到更多的坏人,也就是提高召回率,减少抓错的好人,减低假阳率。 KS值范围为(0-1),一般选取0.2-0.75的特征,>0.75说明特征可能不可靠或者有误。KS值不仅能够评价模型的区分能力,也能够评价单个特征的区分能力,前提是特征是有序且是线性的。 KS值计算步骤 KS曲线横坐标是评分区间或者是数据集百分比,纵坐标是假阳率和召回率,特征的ks=max|TPR-FPR|,对应下图红色曲线的最高点。其中召回率曲线(绿色曲线)在假阳率曲线(紫色曲线)上方。 PSI(PopulationStabilityIndex)称为群体稳定性指标,用来“对比2个数据集的分布,是否发生比较大的偏差”,对比一定要有参照物,对评分卡模型来说,参照物是模型训练时的“训练样本”(期望分布),而评估对象称为“验证样本”(实际分布)。 psi=sum((实际占比-预期占比)*ln(实际占比/预期占比)) PSI可从两个计算维度来看,即评分PSI和特征变量PSI。PSI越小代表模型越稳定,一般认为PSI小于0.1时候模型稳定性很高,0.1-0.25代表模型良好,需要检测变化的原因,大于0.25代表模型稳定性差,需要进一步分析特征变量,或者迭代模型。 可以对“入模的每个特征变量”进行分箱,在验证集与训练集上做PSI对比,判断样本是否发生大的变化。PSI也可以做跨期验证。确保“评分值、每个特征变量”,在近N个月的验证集上,对比训练集计算出的PSI,在可接受的范围内。 WOE=ln[(坏样本/总坏样本)/(好样本/总好样本)]=ln[(坏样本/好样本)/(总坏样本/总好样本)] 组内坏样本数量与总坏样本数量的比值与组内好样本数数量与总好样本数量的比值的差异,这个差异是两个比值的比值。 IVi=[(坏样本/总坏样本)-(好样本/总好样本)]*WOEIV=所有IVi的求和 IV值是woe值的加权求和。主要是消除各分组中数量差异带来的误差(消除分组样本分布不均匀带来的影响)。 组内响应比例越高(负样本占组内样本比例)WOE越大,所以要消除分组数量差异带来的影响。 当组内无负样本的时候,woe=负无穷、iv对应正无穷。当组内无正样本数是woe对应正无穷、iv对应负无穷,不管iv等于正无穷还是负无穷都是无意义的。这也是IV的一个缺点,不能自动处理变量的分组中出现响应比例为0或者100%的情况,IV值小于0.02代表无预测能力一般0.02-0.1低,0.1-0.3中,0.3-0.5高,大于等于0.5代表可疑一般我们选取0.2到0.5的特征,也就是预测能力中到预测能力高的特征。 为什么要进行WOE编码? 因为WOE表示的是当前分箱中好坏客户的比例与总体好坏客户比例的差异,WOE的绝对值越大,这种差异就越明显,契合风控场景。 特征穿越:也可以叫做数据泄露,由于样本划分的策略,导致测试集中的信息引入到了训练集中,导致评估结果会更偏爱过拟合的模型,从而导致评估结果不够准确。 黑色产业链,简称黑产,是指利用互联网技术实施网络攻击、窃取信息、勒索诈骗、***钱财、推广黄赌毒等网络违法行为,以及为这些行为提供工具、资源、平台等准备和非法获利变现的渠道与环节。 网络账号恶意注册 不以正当使用为目的,使用虚假或者非法使用的身份信息以人工和自动工具结合方式绕过企业风控实施网络账号批量注册。黑产团伙利用这些网络账号开展网络诈骗、抢票屯号、刷单、恶意抢券、虚假流量营销等活动。 在线***平台 当前,地下赌场已经迅速完成互联网“转型”,制作团队专门负责快速开发赌博游戏APP;运维团队大量租用境外服务器保证赌博游戏持续在线;资金团队在境内开设大量空壳公司和金融账户收取并转移赌资;营销团队雇佣黑客入侵正规网站植入赌博暗链。 移动应用APP 一些移动应用(APP)伪装成正常的工具、游戏等,甚至冒充其他知名App,但其中却潜藏恶意程序模块,能够在用户不知情的情况下进行恶意扣费、窃取个人敏感信息、破坏手机系统等行为。 DDOS攻击 黑客通过控制大量感染木马的电脑主机向特定网站或服务发起访问,从而导致网站或服务因超负荷运转而崩溃停机,给网站或服务所有者带来损失,原本常见于同行之间的恶性竞争,但目前在互联网上公然叫卖。 仿冒钓鱼诈骗 仿冒钓鱼网站和App冒充银行、金融机构、政府机关等。近年来,还出现钓鱼聊天软件的案例,向注册用户主动“搭讪”,诱骗用户进行充值、转账、送礼等行为。 非法网络金融平台 包括非法贷款网站、无牌照开展支付业务、非法虚拟货币平台等多种类型,无牌照支付平台主要为为网络黑色产业链提供支付服务,非法贷款网站和非法虚拟货币平台则直接以高收入回报为诱饵骗取用户资金。 数据非法售卖 通过黑客攻击、“内鬼”泄露等方式获取用户个人信息等数据,并在“暗网”交易平台、黑产交流群组等渠道非法售卖,尤其受到恶意营销、网络欺诈、金融骗贷等违法违规业务的青睐。 1.如何识别薅羊毛? 第二步,分析这个人或者这个设备的行为。比如:刷渠道量,播放量、阅读量这些指标,这种类型的人一般如果是在刷播放量,那么他就会一直在观看视频,很难产生其他行为,又或者是平台有新用户返现红包,可能会存在大量新用户来平台,直接进入套现流程,没有后续行为。 第五步,解决薅羊毛问题。比如:直接封号,不让其买东西、发表内容或者提现,也可以定向屏蔽,让他看不出来自己被屏蔽了。也可以通过改变规则,提高成本,比如:新注册的用户过七天才能发帖,邀请新用户领现金改成领实物或者虚拟物品。当然也可以不做处理,如果投入处理的成本大于把他们处理后的收益,那就不处理了。 2.当一个人在注册和使用一款信用贷款产品的时候,如何识别这个人是他本人,而不是这个人冒用了其他人的身份呢? 一般来说当用户注册和使用一款贷款产品的时候,信用贷产品会采用以下几种方式识别用户的身份: ①人脸识别认证:用户通过摄像头在线验证自己的人脸,然后通过人脸识别技术,引导用户进行眨眼等动作来确定活体检测,再与身份证照片进行实时对比判断。 ②OCR身份识别:用户上传身份证正反面图片,根据OCR识别信息进行身份验证,这种方式可以简化实名操作,并且可以进行一定的图像风险和质量检测。 ③实名绑卡认证:用户输入银行卡号、姓名、身份证号等信息,然后调用第三方支付公司的接口进行银行卡鉴权认证。 3.假设一个人不在黑名单内,如何判断这个人与黑名单中某个用户存在关系? 在信贷行业中,判断某个用户与黑名单中某个用户存在关联,有三种方法,分别是名单库筛选、专家策略、机器学习等。 ①名单库筛选是通过平台内部或合作机构获取的黑白名单,对申请贷款的用户进行过滤,避免重复欺诈行为的发生。如果一个人不在黑名单内,但是他的身份信息、联系方式、设备指纹等与黑名单中的用户有重合或者相似,那么就有可能存在关系。 ②专家策略是基于策略人员的经验和欺诈者的行为心理制定的一系列规则,对申请贷款的用户进行欺诈识别。举一些例子: 设备异常策略:通过分析客户的设备指纹,如设备型号、设备ID、IP地址等,判断客户与黑名单用户中的用户有重合或者相似。 客户的身份异常检测策略:通过分析客户的身份信息,如手机号归属地、银行卡归属地、身份证信息、通讯录、通话记录等,判断客户与黑名单用户中的用户有重合或者相似。 1.该电商平台用户访问下降,指标:平台访问用户数,查看商品次数; 3.平台升级了反作弊规则,导致过滤了更多点击,指标:过滤的无效点击占比; 5.平台发放了很多优惠券或做了折扣,抵消了收入,指标:优惠券/折扣抵消收入占比; 常用的数据分析图表手段和适用场景有哪些? 2.检查和清理异常数据,同时也需要注意数据的时效性。如果所拿到的数据是不正确或者‘过期’的数据,那么将会影响后期的分析结果。 4.选择合适的工具进行分析建模。没有最好的工具,只有最合适的工具,常用的数据分析工具有Excel、python、tableau、finebi、spss、R等。 分析过程: 左连接:返回包括左表中的所有记录和右表中联结字段相等的记录; 右连接:返回包括右表中的所有记录和左表中联结字段相等的记录; 全连接:返回两个连接表的所有记录;mysql没有全连接 内连接:返回两个连接表连接字段相同的记录; union:对两个结果集进行并集,并去重,当交换两个select语句顺序后,最终结果与不交换时无区别; unionall:对两个结果集进行并集,不去重,当交换两个select语句顺序后,最终结果与不交换时有区别; 插入数据 语法: insertintotable_name(列名,列名,列名)values(,,,)#向表中插入某些列数据 insertintotable_namevalues(,,,)#向表中插入所有列数据 例子: insertintoStudentvalues('15450134','3','男'); 更新数据: update表名set字段名=值,字段名=值; update表名set字段名=值,字段名=值where条件; updatetable1setage=10whereid>2; 删除数据: deletefrom表名[where条件]; deletefromt_userwhereid=1; 修改表名: renametable表名to新表名 renametabletable1totable2 修改表中的属性: altertable表名modify列名类型(长度)约束; altertableSmodifySnamevarchar(50)notnull; 给已有表添加列: altertable表名add列名类型(长度)约束; altertableSaddSagesmallint; 真题:如何通过左连接和右连接实现全连接和内连接? (SELECT*fromaleftJOINbona.id=b.id)UNION(SELECT*fromaRIGHTJOINbona.id=b.id);实现全连接 实现内连接有两种方式 select*fromaleftjoinbona.id=b.idwhereb.idisnotnull select*fromarightjoinbona.id=b.idwherea.idisnotnull 真题:SQL的执行顺序是什么?on和join谁先执行,为什么?on和where的区别? 执行顺序:from→on→join→where→groupby→having→select→distinct→orderby→limit 为什么on在join前面执行?因为要先经过筛选,才能通过连接把外部行加进来。 on和where的区别:on筛选之后,可以通过外连接把移除的行再次添加进来,而where是最终过滤的作用。 举个例子有一个学生表班级姓名一个成绩表姓名成绩我们需要返回X班的所有学生的成绩,但是班上有人缺考,也就是成绩表里没有姓名,我们先用on得到的就是有考试成绩的名字,通过外连接,我们就可以得到全班人的名字以及成绩。 真题:a表有80条记录,b表有100条记录。这两个表做内连接之后,记录会超过100条吗? 记录的数量取决于两个表中连接字段的匹配情况。如果a表和b表的连接字段都没有重复的情况下,记录不会超过80条。如果a表或b表的连接字段有重复的情况下,记录可能会超过100条,但最多不会超过8000条。 窗口函数作用:将数据分成多个窗口,每个窗口包含多行数据,保持表中行数不变,对每个窗口进行排序或者聚合。就是不改变表中行的数量的前提下,对表进行局部排序、聚合等其他操作。 窗口函数可以大体分为两大类,第一类是能够作为窗口函数的聚合函数:SUM、AVG、COUNT、MAX、MIN,第二类是RANK、DENSE_RANK、ROW_NUMBER、lead、lag的序列函数。 window_functionover(partitionby用于分区的字段名orderby用于排序的字段名),注意:需要根据实际情况考虑是否需要加partitionby。 第一类的例子: SELECT学生,科目,分数,SUM(分数)OVER(PARTITIONBY学生)AS'总分'FROMMarks;第二类例子: SELECT学生,科目,分数,ROW_NUMBER()OVER(PARTITIONBY科目ORDERBY分数DESC)AS"Row_Number",RANK()OVER(PARTITIONBY科目ORDERBY分数DESC)AS'Rank',DENSE_RANK()OVER(PARTITIONBY科目ORDERBY分数DESC)AS"Dense_Rank"FROMMarks;rank、dense_rank、row_number的区别 当第一名和第二名相同时: rank为跳跃排序例如1,1,3 dense_rank为连续排序例如1,1,2 row_number为直接排序,例如1,2,3 已知表user,字段id,date,求新用户的次日留存率 已知表user,字段id,date,求每个日期新用户的次日留存率 订单表orders,字段有order_id,user_id,date。求22年1月每个用户单天订单最高次数和每个用户单天订单最高次数的日期。 selectuser_id,date,cntfrom(selectuser_id,date,cnt,rank()over(partitionbyuser_idorderbycntdesc)rkfrom(selectuser_id,date,count(order_id)cntfromorderswheredate_format(date,'%Y%m')=202201groupbyuser_id,date)a)bwhererk=1解析:每个用户每天可能下单多次,因此需要先统计每个用户每天的订单量也就是a表。然后利用窗口函数对用户id分组对订单量倒序排序,筛选出排名为1的数据就可以了。如果题目不要求求出每个用户单天订单最高次数的日期,那么可以直接对a表用户id分组,使用max函数再得出结果了。 有一张销量信息表table1,字段有类目cate,店铺id,销售额sales。求出每个类目销售额排名前40%的店铺信息。(输出字段cate,id,sales) mysql中字符串排序,会根据字符串中的第一个字符比较,因为6>2所以'6-10'会被排序在‘20以上’的下面。这种排序结果不是我们想要的,因此考虑采用解法1,给每个用户的订单量所在区间通过casewhen函数分配一个数字进行标记便于后期排序,得到了a表,最后再从a表中通过casewhen将level列的数字转化成对应的单量区间,并根据level分组和排序,因为此时的level是各个区间所对应的数字,所以排序结果符合我们想要的。 数据倾斜症状: 数据倾斜原因: 导致数据倾斜的操作: join、count(distinctid)、groupby 解决数据倾斜: 以上左图为jupyternotebook中python连接MySQL的执行结果,右图为MySQL执行结果。 作用:python连接MySQL多用于自动化测试中,经常需要向数据库添加或删除数据,也需要验证测试数据和数据库的数据是否一致。 DDL(DataDefinitionLanguage)数据定义语言:用来定义数据库的对象,如数据表、视图、索引等 DDL不需要commit.eg.CREATEALTERDROPTRUNCATECOMMENTRENAME DML(DataManipulationLanguage)数据操纵语言:在数据库表中更新,增加和删除记录 DML需要commit.eg.INSERTUPDATEDELETE DCL(DataControlLanguage)数据库控制语言:用于设置用户权限和控制事务语句 DQL(DataQueryLanguage)数据查询语言 SELECT子句,FROM子句,WHERE子句组成的查询块 OLAP的定义: OLAP即联机分析处理,是数据仓库的核心部心,支持复杂的分析操作,侧重决策支持,并且提供直观易懂的查询结果。典型的应用就是复杂的动态报表系统。联机分析处理OLAP具有共享多维信息的快速分析的特征(即FASMI)。 OLAP的特点有: 1.快速性(Fast),指系统能在数秒内对用户的多数分析要求做出反应。 2.可分析性(Analysis),指用户可以定义新的专门计算,将其作为分析的一部分。 3.共享性(Shared),它定义了哪些系统工具可以满足所有安全性要求,如果需要多个写连接,则可以在适当的级别上并发更新位置,不是所有功能都需要客户回写数据,但是对于越来越多的功能,系统应该能够及时,安全地管理多个更新。 4.多维性(Multi—dimensional),指提供对数据分析的多维视图和分析。 5.信息性(Information),指能及时获得信息,并且管理大容量信息。 OLTP的定义: OLTP即联机事务处理,是传统的关系型数据库的主要应用,主要是基本的、日常的事务处理,记录即时的增、删、改,比如在银行存取一笔款,就是一个事务交易。 OLTP的特点: 1.实时性要求高。比如:很久以前银行异地汇款,要隔天才能到账,而现在是分分钟到账的节奏,说明现在银行的实时处理能力大大增强。 2.数据量不是很大,生产库上的数据量一般不会太大,而且会及时做相应的数据处理与转移。 3.交易一般是确定的,比如银行存取款的金额肯定是确定的,所以OLTP是对确定性的数据进行存取。 4.高并发,并且要求满足ACID原则。比如两人同时操作一个银行卡账户,比如大型的购物网站秒杀活动时上万的QPS请求。 OLAP和OLTP的区别: 1、基本含义不同:OLTP是传统的关系型数据库的主要应用,主要是基本的、日常的事务处理,记录即时的增、删、改,比如在银行存取一笔款,就是一个事务交易。OLAP即联机分析处理,是数据仓库的核心部心,支持复杂的分析操作,侧重决策支持,并且提供直观易懂的查询结果。典型的应用就是复杂的动态报表系统。 2、实时性要求不同:OLTP实时性要求高,OLTP数据库旨在使事务应用程序仅写入所需的数据,以便尽快处理单个事务。OLAP的实时性要求不是很高,很多应用顶多是每天更新一下数据。 4、用户和系统的面向性不同:OLTP是面向顾客的,用于事务和查询处理。OLAP是面向市场的,用于数据分析。 5、数据库设计不同:OLTP采用实体-联系ER模型和面向应用的数据库设计。OLAP采用星型或雪花模型和面向主题的数据库设计。 关系型数据库是指采用了关系模型来组织数据的数据库。简单来说,关系模式就是二维表格模型。 主要有SQLServer,Oracle,Mysql,PostgreSQL。 (1)容易理解,二维表的结构非常贴近现实世界,它的逻辑类似常见的表格。 (2)使用方便,通用的sql语句使得操作关系型数据库非常方便。 (3)易于维护,数据库的ACID属性,大大降低了数据冗余和数据不一致的概率。 (1)不能很好的满足并发需求,特别是海量数据爆发,读写能力会显得不足。 (2)可扩展性不好。 NoSQL非关系型数据库,主要指那些非关系型的、分布式的,且一般不保证ACID的数据存储系统。 主要代表MongoDB,Redis、CouchDB。 (1)易扩展,数据之间没有关系。 (2)大数据量,高性能。高性能读写非常灵活。 (3)灵活的数据模型。不需要事先对存储数据建立字段。 (4)高可用性。 (1)数据和数据没有关系,他们之间就是单独存在的。 (2)非关系数据库没有关系,没有强大的事务关系,没有保证数据的完整性和安全性。 Nosql数据库四大分类: (1)键值对存储(key-value):Redis键值对存储,优势:快速查询,缺点:存储数据缺少结构化。 (2)列存储:Hbase,优势:快速查询,扩展性强。缺点:功能相对于局限。 (3)文档数据库存储:MongoDB,早起应用多。优势:要求不特别的严格。缺点:查询性不高,缺少统一查询语法。 事务的四大特性ACID:原子性、一致性、隔离性、永久性。 原子性(atomicity)指事务中包含的所有操作要么全部成功,要么全部失败回滚。 一致性(consistency)指事务必须使数据库从一个一致性状态变换到另一个一致性状态。 隔离性(isolation)指多个并发事务之间要相互隔离。 永久性(durability)指事务一旦提交,对数据库的改变是永久性的,即使是数据库系统出现故障,也不会丢失提交事务的操作。 1.避免写select*,而是写具体的字段。 2.where里面不写or,而是通过写两个selec语句并通过unionall来代替。 3.where里面尽量不写null,而是改成具体的数值。比如性别不为空,可以改成性别为男或者女。 4.where里面避免写!=或者<>。 5.在左连接、右连接、内连接效果一样的情况下,采用内连接。 6.小表连接大表的时候,让小表作为主表。 7.优先考虑使用where过滤条件再group分组,而不是group分组后再通过having过滤。 8.避免使用like,可以使用regexp代替like。 9.大部分情况下,可以用exists代替in。 10.避免直接使用笛卡尔积,比如:from后面接多个表(fromt1,t2,t3)或者join条件后面的on带无效条件。 行转列 方式一:通过GROUPBY+CASEWHEN+聚合函数 方式二:通过GROUPBY+CONCAT_WS+COLLECT_LIST 列转行 方式一:采用UNIONALL的方式,在指标少时方便使用,当行转列的指标比较多时代码量会比较大,维护困难 方式二:使用lateralview和str_to_map或者explode 1.写一段程序求π值,要求精确到小数点后四位以上。(某银行笔试题,未给出公式) 首先需要知道π的计算公式,然后使用循环即可得出答案。pow(m,n)方法是计算m的n次方。 a,b,n,pi,temp=1,1,1,0,1whilen<=10000:pi+=tempb+=2a=-atemp=a/bn+=1pi=pi*4print('%.4f'%pi)①numpy的核心数据结构是ndarray,支持任意维数的数组;而pandas的核心数据结构是series和dataframe,仅支持一维和二维数据。 ②numpy主要用于数值计算,pandas主要用于数据处理与分析。 3.编程题(某信用卡笔试题)已知如下需求: 产品:工作量计算器 已知信息:标准大小的项目,需要1个人用80个工时完成; 计算方式1:工时计算:输入:项目大小(浮点型,代表标准大小的倍数),人数,(整数) 输出:工时数量(浮点型) 案例:1.5倍标准大小的项目,一共有两个人》》程序》》需要60.0个工时 计算方式2:人力计算 输入:项目大小(浮点型,代表标准大小的倍数),工时数量(浮点型) 输出:人数(整数)‘ 案例:0.5倍标准大小的项目,需要在20.0个工时内完成》》程序》》需要2个人力 请根据以上需求内容,使用python代码完成上述项目; defcal(choice,project,num=None,time=None):ifchoice=='1':num=int(input('请输入人数'))time=project/num*80else:time=float(input('请输入工时数量'))num=math.ceil(project/time*80)#人数需要向上取整print('{}倍标准大小的项目,一共有{}个人,需要{}个工时'.format(project,num,time))choice=input('请输入你的选择,1:工时计算,2:人力计算')project=float(input('请输入项目的大小'))cal(choice,project)4.python的数据结构有哪些,可以介绍一下它们的区别吗? python有四种基本的数据结构分别是列表(list)、元组(tuple)、集合(set)、字典(dict)。列表和元组比较明显的区别是一个是方括号,一个是圆括号,其次就是列表的元素可以修改,元组中的元素不可修改,列表和元组都可以根据索引访问其中的元素。集合就是和数学上的集合概念基本一致,他是无序性并且是不重复的,不能够通过索引获取其中的元素,同时里面的元素也是不可修改的。字典与他们最大的区别是字典的结构不同,字典中每个元素是由键值对组成的,它相当于是一个映射,并且在字典中每个元素的键是不能够重复的和不可修改的,但值可以重复也可以修改,可以通过字典的键来访问值,python3.6版本后字典是有序的,之前是无序的。 5.pandas库中有哪些数据结构呢,它们有什么区别和联系吗? pandas库中的数据结构有两种,分别是series和dataframe。 series是一维数据结构,它由index和value组成。 dataframe是二维数据结构,它不仅含有index和value,还有column(列)。或者说dataframe是由多个series组成。 联系:dataframe是由多个series组成,无论是行或者列,单独拆分出来都是一个series。 6.pandas库中比较常用的函数有哪些? pandas库中如何实现两个表格进行表关联? 可以通过pandas库中的join或者merge、concat函数进行合并。 join:用法例如df1.join(df2,on='a',how='left',lsuffix='',rsuffix='',sort='False')how后面可以有inner/outer/left/right,on是连接条件,并且两个dataframe在合并时不能有相同的列名,如果有重叠的列名必须在join方法中加入lsuffix参数,可以给左侧重复的列名加上后缀。join用法是通过行索引左右合并的,不能够上下合并。 merge:pd.merge(df1,df2,how='inner',on=None,left_on=None,right_on=None,left_index=False,right_index=False,sort=True,suffixes=('_x','_y'))。how为‘left’,‘right’,‘outer’或‘inner’之一。on代表两个dataframe的共有列作为连接键。merge用法是包含join用法的,merge默认是按照相同的列名连接的,join是按照相同的行索引连接的。由于merge函数的left_on参数可以让它自由选定左边dataframe的某一列作为连接键,又因为left_index的存在,可以让merge像join一样实现行索引的连接。 concat:pd.concat([df1,df2],axis=0,join=‘outer’,ignore_index=False),join参数只有inner/outer,代表交集和并集,axis默认是等于0,代表上下合并,ignore_index=True代表合并和重置索引。concat不仅可以合并dataframe也可以合并series。 pandas库中loc和iloc区别? loc是基于标签查找数据的,比如:df.loc[1,'a'],输出标签为1所在的行中列名为'a'的值。iloc是基于索引也就是坐标查找数据的,比如df.iloc[1,1]代表输出第一列第一行的值。 pandas中数据透视表有用过吗? 有,例如pivot_table函数可以实现类似Excel数据透视表的功能。 pandas中stack函数有用过吗? stack将数据的列转旋转成行。还有一个是unstack,将行转化为列。 pandas中如何将某列设置为索引? 使用set_index函数可以将某列变为行索引,例如:df.set_index('列名',inplace=True) pandas中groupby的作用是什么? 对数据进行分组、应用变换以及汇总。 1.Excel和tableau的区别? ①tableau倾向于可视化分析,生成更加精美的图表,Excel倾向于分析数据和数据处理。 ②tableau可以处理海量数据集,Excel到接近百万数据集就非常卡顿了。 ③Excel自带的图形更多、计算字段更加简单。taleau需要设置一些图形计算字段才能画出雷达图、漏斗图等,计算字段也比较复杂。 2.常用Excel函数有哪些,分别说一下用法和参数。 3.VLOOKUP中精确匹配和大致匹配的区别 0(FALSE)是精确匹配,就是只会找lookup-value(查找值)这个值,找不到就返回错误。 1(TRUE)是大致匹配,就是找lookup-value这个值,找不到就找小于这个值的最大值。 精确查找使用的是历遍法。而大致匹配是利用的二分法,二分法只找两次就完成任务,因为二分法不是以内容为查找对象,而是通过不断地二分数据源,每次排除一半数据,到最后一次二分时完成任务。 4.tableau中度量和维度的区别? 维度:通常是分类字段,如名称、地区、邮寄方式等。将其拖放到功能区时,tableau不会对其进行运算,而是对视图区进行分区,维度的内容显示为各区的标题。 度量:通常是数值字段,如销售额、利润、折扣等。将其拖放到功能区时,tableau默认会进行聚合运算,连续字段的取值会显示为视图中的连续轴。