建模交流学习

来源:互联网 发布:java方法重载和重写 编辑:程序博客网 时间:2024/06/05 01:08

以下是今天(20160811)跟阿里的同学交流的关于建模方面的心得。

1.规则-经验-机器学习
有的时候规则其实更简单,只不过这是人为的经验成分
机器学习其实是想通过大数据学习这种人为经验

2.模型是注重性能还是可解释性?
(1)如果可解释性要强的话就要牺牲性能(预测的结果好坏),如果只追求性能的话可以用一些非线性(gbdt,dnn等)
(2)如果要求可解释性最好用一些线性的模型(最简单的最常用的也就是LR逻辑回归)

3.特征筛选
不管什么模型,特征的筛选和数据预处理都很重要!
woe简单的反应了一个特征跟label之间的强弱关系
但是有的时候特征是相关的,比如判断一个人的经济能力(特征1:他有房,特征二: 他有存款) ,这2个特征某种程度上是相关的,一起放进来会有影响的。我们正常理解的是有房个数越多越有钱,存款越多越有钱,但是实际可能出来 有房是正的,存款是负的,这种不合常理的情况==》结果显示存款越多越没有钱,这种就是相关导致的,如果2个特征的相关系统超过0.8了,就可以去掉一个了,结果影响倒不会太大,但是你的模型肯定性不好。

4.数据的预处理,简单的说归一化离散化
一般来说离散化比归一化性能要好
因为离散化数据更碎,一定程度上可以模拟出非线性的关系

5.iv
iv 是 看特征跟label的关系,一般iv比较强的,优先加入特征队列,能看出特征的重要程度。

6.关于pai的使用
数据可以拿训练出来的模型直接预测
预测有2个输入:一个是模型,一个是预测数据
评估的输入是预测的输出

7.关于计算auc
auc要看训练集(得出模型的数据集)、验证集(验证模型是否正确的数据集)、测试集上的值
训练集和验证集不要过拟合忒严重

8.模型调优实例
根据baseline验证当前模型性能
把数据根据用户和时间维度划分一下
用你第一次的结果当做baseline,然后后面逐步优化
比如要预测违章,label是近三个月是否有违章记录(有1,无0),那么划分维度为就是时间,label定义三个月,那时间就是3个月的间隔,好比用1-3月的数据作为训练数据,那么一般我们把4-6月的数据作为预测数据,而1-3月份里的用户可以在用户维度拆分为训练集和验证集。
以上都是数据预处理的部分。

9.建模理解
其实建模真正耗费的时间是分析数据上,第一要清洗数据,第二选择特征,pai无非就是根据你选择的特征 跑出一个模型,训练集与特征的好坏是pai不能选择的,好比,你都选择的是无关痛痒的特征,模型肯定不会好。
还有脏数据也要记得处理,对模型结果有影响。

10.训练集和验证集
训练集、验证集比例一般分为7:3。
数据的处理很重要,直接决定模型的结果,至于用什么,其实差别不大,训练集得出的模型,在验证集上看看,如果验证集的性能比训练集的好太多,那就说明模型过拟合了(99%成功),一般情况下,验证集跟训练集结果差不多就可以了。
预测一般是预测相对于训练而言未来的事件
验证集可以看出模型的稳定性
训练集和验证集最好随机拆分

11.关于特征
建模其实是个蛮精细的活,特征多我们需要根据特征重要程度剔除特征,有得时候特征少,我们需要创建特征。
常见的就是特征相乘,这个就是指数级别的增长,比如你有100个特征,两两相乘就是10000个特征,比如是否有车是一个特征,然后是否有稳定的工作也是一个特征,这2个特征交叉相乘就是 有车并且是否有稳定工作,特征意义就不一样了,类似的方法很多。

14.关于指标加重权值
好比你有30w的数据,但是里面label=1的只有100个,占比忒少,模型基本训练不出来好的结果,可以适当的让label=1的样本多点,最简单的办法就是复制样本(但是要防止过拟合,举个最极端的例子,label=1的只有一条数据,这个人是个男的,把这个人的样本复制100w份,导致过拟合,模型结果就会显示性别=男的更容易出事故,但是事实并不是这样),但是复制需要适量。
比如一个正样本有效特征忒少,好比你有100个特征,但是这条正样本只有性别为男这一个特征,其他的特征都是空,你复制了100分,就会增加性别这个特征的权重,你复制正样本会导致无效特征权重增加。
比如酒驾对应与发生事故,模型计算出来,我们发现酒驾权重很小或vi值很小,但是我们认为醉酒这个特征权重应该是比较大的,这就是实际结果与预期的差异。但是我们需要加重酒驾的权重,这个时候就可以固定这个特征的权重,比如逻辑回归就是简单的加权求和,我这个特征我就给1.5。
就是每个特征 会有个自己的计算公式,100个特征每个都有一个,固定住了酒驾,相当于你先设定好,你原来要求解100个特征的权重值,现在我固定住一个了 他就是x=1.5,有多少个特征,不就是求解多少个变量的权重值么,只不过是矩阵计算的,利用梯度求解最优解,只是你现在固定一个值,偷懒的做法就是:酒驾的特征不放进去,先训练99的特征 ,然后把你固定的酒驾特征权重加到模型输出里,但是这样结果不一定好,如果你的样本质量很高的话,这样没啥问题。

真正建模得出一个好模型需要的时间很久的,不断的尝试不断的提升。

0 0
原创粉丝点击