实战天池精准医疗大赛——复赛总结

1. 说明

 精准医疗复赛结束,最终排名在20左右。第一名的大神相当厉害,尤其是换数据之后,那分数简直是甩出其他人好几条街,非常想学习一下他的解决方案,可惜答辩定在七月,而且不一定公开,估计到时候都忘了。
 我在复赛中用的是个中规中矩的方案,也在这里记录和分享一下,写得比较随性,各位就别当纯技术文档看了。

2. 特征工程

(1) 特征去噪

 噪声数据是在最后一天才发现的,原因是训练集加入A榜答案之后,线下分数反而下降了,于是怀疑A榜数据是不是有什么问题?在检查过程中,阴错阳差地发现,有一些特殊值高出正常值几十倍,比如说有个BUN(血尿素氮)为2055,另外ApoA1和ApoB1存在数据单位不一致的问题,然后对它们进行了修正。
 在本问题中,噪音数据比较容易发现,一方面是特征不多,可以人工过滤,别一方面体验指标有可参考范围,容易界定是否为异常值。如果数据多或者经过了脱敏处理,就需要一些更精确的算法,比如离群点检测等等。

(2) 特征分类

 在本问题中,把特征分成两类:基因数据和其它数据。基因数据是以SNP开头的,取值为1,2,3,估计是位点信息,其值没有大小关系,因此作为枚举类型处理,做了onehot变换。其它特征均作为数值型处理。(注:SNP主要是指在基因组水平上由单个核苷酸的变异所引起的DNA序列多态性。)

(3) 标准化

 对数值型数据处了标准化处理,即:新数据=(原数据-均值)/标准差。然后将数值型的缺失值全部填充为0,即均值。

(4) 缺失值处理

 对SNP数据的缺失值处理试验了三种方法:
 第一种是做onehot后不处理缺失值,即1变成[1,0,0], 2变成[0,1,0], 3变成[0,0,1],缺失变成[0,0,0]。
 第二种是取出现次数最多的值作为缺失值,比如大多数都是2,则缺失值设为2。
 第三种是填加一种新值代表缺失值,这种方法线下效果最好,最终采了此方法。

(5) 特征调整

 去掉了孕前体重和身高,因为特征中还包括了孕前BMI,从经验看BMI可以取代体重和身高带有的信息,从数据看,删掉后的确有所提升。也尝试删掉其它一些特征和特征组合,效果都不明显。
 有一些干扰特征,比无用特征更麻烦,从特征重要性排序看,还挺靠前,其实是来捣乱的。就比如说,有人被杀了,刚好XX早上和他打了一架,于是大家把XX当成重要嫌疑人,结果真凶跑了。

3. 算法模型

 模型使用的是xgboost的分类,5折交叉验证。这类问题大多数都使用梯度提升决策树算法(GBDT类),只是具体工具有所差别。
 这里主要的技术点是调参,我是用sklearn的GridSearchCV实现调参。其中一个核心的参数是scale_pos_weight,它指定了正反例的权重,直觉是:“患病者”的数据应该更重要。这个值我也是通过调参找到了训练集对应的最佳值。设置后A榜成绩提高了,B榜试的少没法下结论。
 使用scale_pos_weight引发的问题是,预测的结果分布和训练集不一致。如果想要分布一致,简单地可以把判断标准从0.5向上或向下调,规范的一点的方法是做排序之后取前N个。
 大家好像都看到了结果的分布问题,于是最后一天,在群里讨论预测结果里有多少个1?这又涉及了复赛的评分指标F1。

4. 评分指标

 复赛的评分指标是F1分数(F1 Score),是统计学中用来衡量二分类模型精确度的一种指标。它同时兼顾了分类模型的准确率和召回率。F1分数可以看作是模型准确率和召回率的一种加权平均,它的最大值是1,最小值是0.
f1=(2PR)/(P+R)
其中P的精确率(预测正确的正样本/预测的正样本),R是召回率(预测正确的正样本/实际正样本).
 简单的说,如果瞎蒙一半对一半错,F1在0.5左右,如果蒙全1,F1为0.667。看起来,如果拿不准就蒙成1,胜算更大。

5. 其它尝试

 还尝试了一些其它方法,但都因效果不佳,没用到最终代码里,也在此分享一下思路。
(1) 模型融合:将同一模型,不同参数的概率结果取均值作为预测。
(2) 取更多的1:针对评价标准,调高scale_pos_weight,使预测中含更多的1。
(3) 组合和去掉一些特征:用循环组合的方式加入和去掉一些特征。
(4) 取各模型的TopX值:取各个模型分别认为最可能患病的实例。

6. 结果分析

 分析了一下模型预测的结果,基本分为三部分:
 第一种:各个算法的结论一致,并且是对的。
 第二种:各个算法的结论一致,并且是错的。
 第三种:各个算法的结论不一致,有对有错。
 前两种往往混在一起的,算法都得到了一致的结论,能查出来就查出来了,查不出来也没办法了,毕竟数据也并非携带了所有信息。而第三种是疑似状态,也正是检验算法的关键。

7. 遗憾和教训

 遗憾的是还有一些算法,不同算法的组合,特征组合,尤其是不同基因的组合,还都没有尝试,就结束了。教训也很多:
(1) 不要试图参加deadline时间相近的多个比赛,时间不够,就没法做大的修改。
(2) 数据量小的比赛里暂时领先并不说明能模型好,很可能是过拟合了。
(3) 多看,仔细看别人的方案,少做“重复造轮子”的事情。
(4) 不要总是使用熟悉的工具,在这种比赛里尝试更重要。

 除了加强技术以外,安排,心态也都很重要。总之,成绩不好,就是还有提升空间,继续努力中。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342

推荐阅读更多精彩内容