前言

做模型最重要的是选择特征,特征选择的好,换换模型就有不同的效果,再调参一下就可以提升实验结果,所以特征很重要,有些特征难以想象,可能大家认为是拍脑袋想出来的,可是它被证明就是有用的,本文参考天池大赛比赛排名靠前的同学分享的比赛心得,总结了这篇特征提取的文章,希望可以帮助大家,文章最后有参考文章链接,大家也可以去看看文章,了解一些比赛的东西。

特征

特殊节日

周末和工作日,或者节假日,这些都可以作为一个特征,但可能对于数据规模比较小的任务来说节假日可能没有什么用。但周末和周日的区分还是比较有用的。

上下班高峰

每天的7点-9点30都是上班高峰,晚上的17:30到19:30 也都是高峰时期,这个具体的时间你可以看数据得出,把样本汇出来就可以看到具体的时间情况,在某些任务里这个特征也是有用的,比如交通类的任务,跟公交、地铁有关的任务。

昨天数据

昨天的数据也可以作为预测今天的依据,但是要考虑到周末和工作日。

对特征数值划分为离散值

如果我们对特征数值进行划分,一定要知道一点:可能划分的某个区间,数据集上是没有样本的。比如:数据集中年龄的最小值是5岁,年龄最大值是60岁,我们按照5-12 、12-15、 15-18为一个区间分别代表小学、初中、高中,有可能数据集中15-18岁区间是没有数据的,没有数据,但是整个样本特征上,我们可以认为该特征是0,而不是遗忘这些数据特征。我们预测全天的每隔1个小时的数据,一天就有24个小时,用来模拟这24个小时的输出值,并且带有其他特征,但是问题来了,如果样本中没有10点-11点的数据,但其他特征都有,比如日期、是否是周末等等,单纯把数据集数值化过程中是会漏掉某部分数据集的。

周期

根据时间来找到一个周期,比如周一到周天,这样一个周期,或者当前时间前3天内的时间作为一个周期,来提取特征,此特征确定下来了就不会随着样本数据变大而做调整。
所以有可能周一的数据可以作为下一周的数据。

趋势特征

时序问题最简单就是会有一个趋势的概念,下一个时刻的趋势跟上一个时刻相关,就像是一个曲线随着时间变化,这个趋势也在变化。这个趋势选择什么区间呢,每天的数据作为一个趋势,还是小时级别作为一个趋势,这要看比赛的数据或要求。比如:我们选取小时级别作为趋势,9点的数据用来预测10点的数据,上一个小时预测下一个小时。

占比比例

有时候一个数值并不能很好的表现数据,可以用比例来展示,还可以求各种数据占比作为比例,比如收入与支出比例,收入与租房支出比例,这种占比情况,可以作为特征参与到模型中。

平均情况,最大值,最小值

这种数据统计,往往有一些还是可以起到一些作用的,但可能也对特征无感知,还可以取二次加工后的数据来取特征,或者融合多个特征求平均值作为一个特征,这些看具体业务情况尝试一些方法。

周期内平均值

某个周期的平均值,这个值会随着时间推移不断更新特征,可能会更新以前的提取分析后的特征值。

预测的一个bug

短期时序预测会涉及到一个bug,就是相邻两个时间内的结果会很相似,比如,10点的地铁入口流量可能跟9点地铁入口流量相近,这是一个比较强关联的关系,完全可以根据上一个结果加衰减因子来预测下一个结果。

天气因素

有些任务跟天气有关,天晴、下雨、温度等等,比如下雨、高温环境下,人就很少会出门,都愿意呆在家里,及时有事也不会去,但这些特征跟具体的任务挂钩,比如预测某个音乐会的人数,预测地铁、公交等交通出行的任务。

特征编码与取值众多的特征转换

对于离散的类别特征,往往需要进行必要的特征转换/编码才能将其作为特征输入到模型中。
常用的编码方式有 LabelEncoder,OneHotEncoder(sklearn里面的接口)。譬如对于”性别”这个特征(取值为男性和女性),使用这两种方式可以分别编码为{0,1}和{[1,0], [0,1]}。

对于取值较多(如几十万)的类别特征(ID特征),直接进行OneHotEncoder编码会导致特征矩阵非常巨大,影响模型效果。可以使用如下的方式进行处理:

  • 统计每个取值在样本中出现的频率,取 Top N 的取值进行 One-hot 编码,剩下的类别分到“其他“类目下,其中 N 需要根据模型效果进行调优;
  • 统计每个 ID 特征的一些统计量(譬如历史平均点击率,历史平均浏览率)等代替该 ID 取值作为特征,具体可以参考 Avazu 点击率预估比赛第二名的获奖方案;
  • 参考 word2vec 的方式,将每个类别特征的取值映射到一个连续的向量,对这个向量进行初始化,跟模型一起训练。训练结束后,可以同时得到每个ID的Embedding。具体的使用方式:Rossmann 销量预估竞赛第三名的获奖方案。
  • 特征转换
    针对一些长尾分布的数据特征,可以做幂变换或者对数变换,使得模型(LR或者DNN)能更好的优化。当然,大家都知道的是,树模型(Random Forest、GBDT、xgboost等)模型对特征数值幅度不敏感。

  • 交叉特征
    交叉特征算是特征工程中非常重要的方法之一了,交叉特征是一种很独特的方式,它将两个或更多的类别属性组合成一个。当组合的特征要比单个特征更好时,这是一项非常有用的技术。数学上来说,是对类别特征的所有可能值进行交叉相乘。

假如拥有一个特征A,A有两个可能值{A1,A2}。拥有一个特征B,存在{B1,B2}等可能值。然后,A&B之间的交叉特征如下:{(A1,B1),(A1,B2),(A2,B1),(A2,B2)},并且你可以给这些组合特征取任何名字。但是需要明白每个组合特征其实代表着A和B各自信息协同作用。

一个更好地诠释好的交叉特征的实例是类似于(经度,纬度)。一个相同的经度对应了地图上很多的地方,纬度也是一样。但是一旦你将经度和纬度组合到一起,它们就代表了地理上特定的一块区域,区域中每一部分是拥有着类似的特性。这种暴力做交叉很可能导致特征稀疏的问题,这里可以参考FM、FMM以及阿里妈妈发布的MLR的做法和解决思路。

参考博客

幸福感预测
特征讲解

天池大赛 - 特征提取 总结相关推荐

  1. 阿里云天池大赛赛题解析――深度学习篇

    作者:天池平台 出版社:电子工业出版社 品牌:电子工业出版社 出版时间:2021-09-01 阿里云天池大赛赛题解析――深度学习篇

  2. 500位全球算法开发者零奖金参加阿里云天池大赛 AI预测台风助力防灾减灾

    9月26日,在杭州云栖大会 GEEKLAND 现场,由阿里云天池大赛主办的追风少年-台风图像时间序列预测 Hackathon 正式举行. 大赛旨在召集全球算法开发者,聚焦人工智能与气象的深度结合,探寻 ...

  3. 【读书向】阿里云天池大赛赛题解析——可视化

    [读书向]阿里云天池大赛赛题解析--可视化 目录 [读书向]阿里云天池大赛赛题解析--可视化 箱型图 获取异常数据的函数 直方图和Q-Q图 KDE分布图 线性回归图 特征变量的相关性 Box-Cox变 ...

  4. 阿里云天池大赛赛题解析——深度学习篇

    阿里云天池大赛赛题解析--深度学习篇 (豆瓣)图书阿里云天池大赛赛题解析--深度学习篇 介绍.书评.论坛及推荐 https://book.douban.com/subject/35596114/

  5. 资金流入流出预测(上)(阿里云天池大赛)

    文章目录 前言 比赛介绍 采用不同的模型预测以及结果分数 prophet模型 1数据加载 2数据探索与预处理 2.1数据特征探索 2.2按照时间聚合目标值total_purchase_amt和tota ...

  6. 天池大赛-数智重庆比赛日志

    文章目录 基本环境与mmdetection配置与应用 1. 安装cuda和cudnn 2.anaconda安装+创建子环境 3.安装mmdetection mmd论文翻译 coco数据集以及标注方式 ...

  7. 阿里云天池大赛赛题解析(深度学习篇)--阅读笔记1--赛题一

    阿里云天池大赛赛题解析(深度学习篇)–阅读笔记1 [x]表示遇到不懂的知识,将在[知识补充]给出具体讲解. 文章目录 阿里云天池大赛赛题解析(深度学习篇)--阅读笔记1 前言 赛题一 瑞金医院MMC人 ...

  8. 【啃书】【阿里云天池大赛赛题解析】目录

    算法与业务结合的开发步骤:业务理解->数据探索->特征工程->模型训练->模型验证->特征优化->模型融和.其中蕴含着模型的重构与参数的优化. 实际业务场景应用机器 ...

  9. 阿里云天池大赛赛题(机器学习)——天猫用户重复购买预测(完整代码)

    目录 赛题背景 全代码 导入包 读取数据(训练数据前10000行,测试数据前100条) 读取全部数据 获取训练和测试数据 切分40%数据用于线下验证 交叉验证:评估估算器性能 F1验证 Shuffle ...

最新文章

  1. NetBeans配置Xdebug 远程调试PHP
  2. 磁盘被占满   系统出现 no space left on 报错(block被占满/inode被占满)
  3. 为什么on用的时候会失效?
  4. Leetcode —— 面试题 04.02. 最小高度树(Python)
  5. 成员函数的重载,覆盖与隐藏
  6. vue中对话框关闭以后清空对话框中input,select内容
  7. anaconda python36 tensorflow virtualenv
  8. 最详细的Java入门到精通完整学习教程,学Java先收藏了!!
  9. 缠中说禅 教你炒股票 全集列表
  10. 继承 方法重写 组合(尚学堂视频学习总结_003)
  11. 浅谈一个人做微信公众号是靠什么盈利的
  12. It's only too late if you decide it is. Get busy living, or get busy dying(转)
  13. Magento清空购物车
  14. [Unity]Shader利用Geometry处理实现描边效果
  15. 曹雪芹诗歌中的鸿蒙,曹雪芹诗词选
  16. Stay Hungry, Stay Foolish(求知若饥,虚心若愚)
  17. 《基民天下》学习笔记——长期持有和波段操作
  18. 管理2.0 (3):从粗放到精细化的企业管理升级路
  19. 初中教师资格证科学计算机面试,2019下半年初中科学教师资格证面试真题及答案汇总...
  20. arm服务器性能监控工具,linux服务器jvm内存监控工具

热门文章

  1. 南都娱乐周刊否认爆料文章出轨因与其有私人恩怨
  2. virtualbox E_INVALIDARG (0x80070057) 和 E_FAIL (0x80004005) SessionMachine
  3. 【C】C语言函数中的变量(包括:作用域、存储类型)
  4. 关于Java中Scanner获取Char字符类型的方法
  5. TCP协议的三次握手和四次挥手
  6. 极线几何关系、极点、极线,三维重构,k-d树的特征匹配方法
  7. C#中抽象类和接口的区别与应用场景
  8. linux 安装Mysql步骤
  9. 聚合支付”为什么很多游戏商家选择他
  10. bazel切换版本笔记