kaggle-EDA经验
要构建数值型连续变量的监督学习模型,最重要的方面之一就是好好理解特征。观察一个模型的部分依赖图有助于理解模型的输出是如何随着每个特征变化而改变的。
但是绘制的图形是基于训练好的模型构建的,这会引发一些问题。而如果我们直接用未经学习的学习的训练数据去作图,我们就能更好理解这些数据的深层含义。因为这样做能帮助我们进行:
特征理解
识别嘈杂特征
特征工程
特征重要性
特征调试
泄漏检测与理解
模型监控
Featexp 可以把一个数字特征,分成很多个样本量相等的区间(X 轴)。然后计算出目标的平均值,并绘制出左上方的图像。在这里,平均值代表违约率,图像告诉我们,年纪越大的人,违约率越低。
识别嘈杂特征
嘈杂特征容易造成过拟合,分辨噪音一点也不容易。在featexp 里,可以跑一下测试集或者验证集,然后对比训练集和测试集的特征趋势,从而找出嘈杂的特征。
为了衡量噪音影响程度,featexp 会计算两个指标:
趋势相关性: 如果一个特征在训练集和测试集里面表现出来的趋势不一样,就有可能导致过拟合,这是因为,模型从测试集里学到的一些东西,在验证集中不适用,趋势相关性可以告诉我们训练集和测试集的相似度,以及每个区间的平均值,上面这个例子中,两个数据集的相关性达到了99%。看起来噪音不是很严重。
趋势变化:趋势会发生突然变化和反复变化,但也有可能是特定区间内有其他独特的特征对其产生影响。如果出现这种情况,这个区间的违约率就没办法和其他区间直接对比了。
下面这个特征,就是嘈杂特征,训练集和测试集没有相同的趋势:两者相关性只有85%,有时候,可以选择丢掉这样的特征。可以减少过拟合。
特征重要性:
Featexp 还可以帮助衡量特征的重要性。
泄漏检测: 从目标到特征的数据泄漏会导致过拟合,泄漏的特征具有很高的特征重要性,要理解为什么在特征中发生泄漏是很困难的,查看featexp 图像可以帮助理解这一问题。
模型监控:
由于featexp 可以计算两个数据集之间的趋势相关性,因此它可以很容易地利用模型监控。每次我们重新训练模型时,都可以将新的训练数据与测试好的训练数据(通常是第一次构建模型时的训练数据)进行比价。
趋势相关性可以帮助你监控特征信息与目标的关系是否发生了变化。
ref:http://www.sohu.com/a/278412371_178408
2 特征重要性怎么做?例如特征组合和删除,调参怎么调?
组合用onehot,交叉embeding。组合要看实际分布,讲了自己构造过的一个和标签有线性关系的组合,说自己用的是遍历的方法,用两两数学关系构造新特征,看和标签的线性关系。
调参: 祖传参数,例如树模型的深度,采样频率,主要还是经验
第二部调参:比如尝试新特征,特征采样频率要设为1.