【时间序列预测实战】【特征工程与建模】

特征工程与建模

特征工程介绍

特征工程的作用

基于数据分析与探索提起潜在有价值的特征

  • 特征的重要性:
    如果特征构建越好,模型的性能会越出色,简单且灵活性强

特征提取

  • 特征提取:
    多数是采用统计手段分析,找到业务相关的点,最终形成特征

  • 例子1:箱型图分析,交易量与星期有关,最终得到7个0-1类型的特征(是否为周一、周二…)
    在这里插入图片描述

  • 例子2:点线图分析,用户星级、用户职业与是否交易有关,可考虑离散化特征
    在这里插入图片描述

离散型特征的好处
  1. 可用于设计规则
  2. 易于模型拟合,特别是以树模型为baseline
  3. 便于理解
  4. 容易做特征组合

特征组合

  • 简单的特征组合方式:
    加减乘除、log、exp等,可以产生大量特征,但容易出现过拟合且不易于解释

  • 根据任务背景,发掘一些特定的特征
    时序问题,常见特征包括最大最小值,中位数,偏度峰度,历史同期的排名,分位数等。
    推荐系统,常见特征类别包括用户特征,商品特征,行为特征等

特征处理

筛选(劣汰)

生成了大量特征,开始选择较好的特征子集,筛选规则为剔除几乎无关特征,保留大量特征,处理自变量的共线性,若两个自变量存在共线性,可以构造保有各自特性和共性的新的特征
在这里插入图片描述
把筛选过后的特征子集留下,通过特征重要性评估方法,进一步挑选良好的特征去组成最优子集

特征重要性方法(优胜)
  • Mean Variance Test
    独立性检验,探究变量之间的关系是否独立

  • SHAP(SHapley Additive exPlanations)
    解释任意机器学习模型的输出
    在这里插入图片描述在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • Permutation Importance
    在这里插入图片描述

实战特征工程

1. 提取(是/否)类型特征

  • 是否为周一、周二…周日
  • 节假日相关的特征——是否为节假日、节假日后第一天、节假日最后一天
  • 与月初、月末相关的特征

2. 用箱型图观察(是/否)类型特征

  • 可以发现一些明显比较差的特征
  • 例如:样本量的严重不平衡,取值差异不大

3. 利用相关性分析(是/否)类型特征

  • 申购总额与is_weekend负相关
  • 申购总额与is_work正相关
  • 筛选一些弱相关的特征

4. 对特殊日期提取相关距离特征(节假日、月初、月末)

  • 距放假的天数、距上班的天数
  • 距月初天数、距星期日天数

5. 基于点线图分析距离特征

在这里插入图片描述

6. 基于相关性分析距离特征

在这里插入图片描述

7. 距波峰、波谷的天数

  • 以星期为周期确定波峰、波谷
  • 观察申购总额时序图
  • 观察点线图
    在这里插入图片描述在这里插入图片描述

8. 添加周期因子

  • 星期周期因子
  • 月份周期因子
  • 观察周期因子与目标变量的相关性

9. 添加时序特征

  • 以星期为周期统计目标变量的均值、中位数、偏度等统计值的相关性

10. 观察所有特征的分布

在这里插入图片描述

11. 使用MVtest判断特征与因变量是否存在非线性关联

处理自变量间复共线性

12. 分析特征重要性

使用SHAP、Permutation Importance。
对两种方法的排序列表拿 TOP K 取交集

模型训练与验证

训练、预测、线下验证

在这里插入图片描述

数据集划分

有时序的数据集需要考虑时序,nested交叉验证划分。
在这里插入图片描述

常用回归模型

  • 线性回归(多元回归)
    采用OLS或gradient descent估计参数
    变量较多可考虑使用lasso惩罚项

  • 决策树回归
    变量选择条件:为每个变量选择切分点,在分裂后依据相对应分支内所有样本的因变量均值
    评估拟合误差:贪心策略(对变量条件的满足程度)、CART

  • 随机森林回归
    Bagging,随机选取样本与特征
    树模型做baline
    并行集成策略
    取所有树的均值

  • 梯度提升树回归
    boosting,依据估计误差调整样本权重
    决策树做baseline
    串行集成策略
    gradient boosting tree
    xgb、lgb,catboost

模型融合

  1. 主要策略
  • 加权
  • Stacking:交叉验证
  • Blending:简单划分数据集,等同于只做stacking的一折
  • 时序方法
  • 模型平均(类似于加权集成策略)

在这里插入图片描述

常用代码:

## 提取节假日
#### 准备一个Set,把所有节日放进去
holiday_set = set()
holiday_set = holiday_set | {datetime.date(2014,4,5), datetime.date(2014,4,6), datetime.date(2014,4,7)}# 清明节
holiday_set = holiday_set | {datetime.date(2014,5,31), datetime.date(2014,6,1), datetime.date(2014,6,2)}# 端午节

## 设置是否为周末
total_balance['is_weekend'] = 0
total_balance.loc[total_balance['weekday'].isin((5,6)), 'is_weekend'] = 1

先提取大量统计特征,然后开始看分布,看相关性去筛选。
然后建立另一种类型的特征,重复筛选的操作

  • 0
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
时间序列预测中,基于分解的建模方法常用于处理具有趋势和季节性成分的数据。这种方法将时间序列分解为趋势、季节性和残差三个成分,并对每个成分进行建模,然后将它们结合起来进行预测。 以下是基于分解的建模方法的一般步骤: 1. 数据分解(Decomposition):使用时间序列分解技术,如季节性分解或 STL 分解,将原始时间序列分解为趋势、季节性和残差三个成分。 2. 趋势建模:对趋势成分进行建模,可以使用线性回归、移动平均、指数平滑等方法来捕捉趋势的变化。 3. 季节性建模:对季节性成分进行建模,通常使用季节性回归、ARIMA 模型、指数平滑等方法来捕捉季节性的周期性变化。 4. 残差建模:对残差进行建模,用于捕捉未被趋势和季节性解释的随机波动。可以使用自回归(AR)、滑动平均(MA)等方法来建模残差。 5. 预测合并:将趋势、季节性和残差的模型组合起来,得到最终的预测结果。 这种基于分解的建模方法可以更好地捕捉时间序列的趋势和季节性特征,同时也考虑了残差的随机波动。常用的时间序列模型,如 ARIMA(自回归移动平均模型)、季节性 ARIMA、指数平滑等,可以用于具体的建模步骤。 需要注意的是,基于分解的建模方法可能在数据具有明显的趋势和季节性特征时效果较好,但在数据缺乏这些特征或存在其他非线性模式时,可能需要考虑其他更适合的方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值