最近两个月一直在搞一个数据挖掘的项目,因为之前从来没有搞过这方面的东西,而且自己也只有python的语法基础,只能从零开始学习。这个数据量很大,刚开始给的是一个800兆的数据,后来2.0的版本就升级到了8.5G,真是让人头疼。
本来是一个三人的团队,刚开始的时候大家还在一起讨论怎么建立宽表,怎么分工合作,后来突然要做另一个项目,两个队友就被拉去做java开发了。剩我一个人在研究各种机器学习有关的算法,在这个阶段我是真的感觉到数学基础差对学计算机影响有多大了。像各种算法各种公式我是完全看不懂,我能怎么办,并没有人能教我这些,我只能一个一个百度,看太多的博客了,心酸。
还有各种库,像pandas,numpy,matplotlib,还有sklearn。学习它们我也记不清看多少视频了。
终于我把各种算法原理搞明白了,我就去催学姐给我做数据,学姐看了两天spark,帮我做出来一个缺少字段的数据,30多万条,我就开始我的first try了,过程很曲折,我用了一个决策树,我看到准确率挺高,以为成功了。其实就是lable为0的比例本来就特别大,测试一些数据基本上全是错的。
第二次尝试,我使用的是logistic回归,为了得到一个系数程序跑了两个多小时,因为数据量实在是太大了。最后的效果呢,recall值很高,达到了90%左右,但是误杀了将近1/3,因为最后评判标准是F1-score,所以一折合就感觉这个模型简直就是在瞎蒙。
这个时候真的是绝望,因为这是一个比赛,最后是有提交时间的,所以导师就天天催我,见我一次就问我怎么样了,能不能改进了,总得交点东西上去吧。。我也不知道该怎么办,直到上上周我在车上突然有了一个思路,我马上告诉学姐,让她帮我做一份更完整的数据,学姐答应周日晚上给我。然后上周我感觉五天全部都在补作业,很多很多,没干成活,导师又催我了,我说这个周末尝试重新建立一个模型。
我就想呀,问题肯定出在前期对数据的处理上,于是我就重新整理思路,开始了第三次尝试。
一,对于异常值的处理,我直接把那些空的和NaN的数据删掉,没有用的时间字段也删掉。
二,我做了一个“连续变量离散化”,对每个字段都排序然后分为八组,一~八组重新赋值为1~8。这一步我花了一下午,就是因为刚开始理解错了,以为离散化就是分成0和1。
三,计算每个分组变量与因变量的信息值IV。这里就出现了一个IV公式,很绝望,又看了好多博客。结果出来以后发现预测力挺不错,不敢相信,真的不敢相信,当时只是觉得自己的代码有问题,不过我还是接着建模了。
四,由于lable为1的比例大概是1%,所以将所有的lable为1的数据取出,我用的大概有160条,然后将其他数据随机取出1600条,这样lable为1的比例就下降到10%。然后切分训练集和测试集,我是七三分。
五,我还是用了一个逻辑回归,但是我加上了梯度下降的策略。
就是本着试一试的心态,这时候已经到了周日下午,但是我是真的没想到F1–score达到了惊人的95%,也就是说我的模型非常准,当时我高兴的直接从椅子上蹦起来了,哈哈。
两个月的努力没有白费,继续加油!