[落选]2021微信大数据挑战赛_总结

博主分享了参与算法竞赛的经历,从等待baseline到深入特征工程,遇到如LabelEncoder和OneHotEncoder的困惑,再到使用滑窗法和特征保存。遇到parquet和feather库的导入问题,最终发现是缺少相关组件。建议先提交基础版本,按顺序做特征,并离线保存以提高效率。推荐使用Pickle压缩格式保存数据,同时强调了在比赛中避免特征过多导致的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

确实很早就知道了这个比赛,但似乎一直没有开始。

之前也就刚打完一个泰迪杯,对于竞赛可以说是一无所知。

于是就等baseline,等到了麻婆豆腐1的那个版本。

5月20日开赛,我跑baseline大概都快6月中旬。

那时候一边忙着期末的各种大项目,一边找竞赛的各种指导和资料。

跑完麻婆豆腐那个,还是一头雾水,不知道这到底是怎么操作的。

当时为了LabelEncoderOneHotEncoder都看了好久

后来找到了天才儿童(好像是这个名字)的baseline2,结构清晰

这里面的特征工程几乎都是由for循环控制的,增添特征只需要在循环里面加入列名

这份代码有用到滑窗法,其详细的信息参考文章3

真正开始做,大概都是6月25日, 先读代码

弄清楚了结构,就调参、加特征

A榜基本在常规特征里面折腾,好像稍微加了点embedding

A榜结束的那天晚上我还在疯狂做特征,意图冲击B榜

然后就出问题了,特征太多,我那会儿都搞到了将近1000+

从周周星的分享4来看,似乎最多500+?

当时做到用户的兴趣特征,就是把用户看过的那些tagkeyword求平均

但是贪心,减了一部分,尝试,炸了,再减,再尝试

由于疯狂做出来的特征没经过验证,质量也不好,所以一致炸

这也就导致了…我B榜根本就没提交,因为没跑出来

血泪的教训啊…一定是做加法而不是减法

应当先跑个基础版本提交,说不好还能中奖

后来复盘的时候,觉得还是经验不足,好在此次有收获

首先是,做加法,一定要按照顺序做

先去挖基础特征,再去做复杂特征

可以参考这篇文章当中对于往瓶子里面加石头的比喻5

然后,做出的特征最好离线保存

一是方便后面可以直接载入,而不用再做特征

二是方便调整方案,对不同的特征进行组合验证

因为训练的时间可能很长,如果能节省做特征的时间,就能充分利用提交次数

关于特征的离线保存,CSV确实有点慢,可以换别的试试6

对于做完所有的那个好大的数据框

我当时尝试过pickleparquetfeather,都炸了

不仅炸了,还浪费了时间,因为我是在B榜那天做的

猜测是数据规模的问题,可能他们无法处理?

但是也不对啊,parquet可是Hadoop那套系统里面的,例子6也是2.5GB

当然可能这个总的、所有特征的数据框远超2.5GB

不太清楚发生了啥,我也很疑惑

后面可以试试分拆数据,然后用其他格式保存,提高I/O


啊啊啊啊找到原因了!我在本地跑的时候报错,,缺少相关组件。果然还是不熟悉这些工具

这是parquet

ImportError: Unable to find a usable engine; tried using: 'pyarrow', 'fastparquet'.
A suitable version of pyarrow or fastparquet is required for parquet support.
Trying to import the above resulted in these errors:
- Missing optional dependency 'pyarrow'. pyarrow is required for parquet support. Use pip or conda to install pyarrow.
- Missing optional dependency 'fastparquet'. fastparquet is required for parquet support. Use pip or conda to install fastparquet.

这是feather

ImportError: Missing optional dependency 'pyarrow'. Use pip or conda to install pyarrow.

PandasPickle倒是可以直接用,其模块的后缀为.pkl.gzip,在这篇博文当中有说明,不同于Pickle原生格式的文件类型7

但如果是原生的.pkl的后缀,好像是可以直接用Pickle模块,而不用装别的库。

.pkl.gzip的后缀还没有尝试过


做竞赛别用csv文件了。

这个测评看起来是parquet比较省内存,有压缩文件。不过单纯考虑速度的话,自带的Pickle就够用了。毕竟parquet还要装其他的库


还有一个神奇的东西,reduce_mem

好像是对数据格式进行变换,反正很省内存

具体的代码可以参考84,两份代码里面都有

对了,LightGBM也有过一个报错

word2vec也有报错

关于保存并实时查看训练过程

这里也放一下相关的比赛的参考吧


  1. [某比赛的baseline/线上0.63/Lightgbm] ↩︎

  2. 6.14周周星(第一名)分享 ↩︎

  3. 微信视频号推荐算法解题思路 ↩︎

  4. 6.14周周星(第一名)分享 ↩︎ ↩︎

  5. 推荐大赛如何在一周时间内打进决赛 ↩︎

  6. 对比不同主流存储格式(csv, feather, jay, h5, parquet, pickle)的读取效率 ↩︎ ↩︎

  7. Python Pandas to_pickle()压缩文件 ↩︎

  8. [某比赛的baseline/线上0.63/Lightgbm] ↩︎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值