Datawhale组队学习-金融时序数据挖掘实践-Task03时间序列规则

Datawhale组队学习-金融时序数据挖掘实践-Task03时间序列规则

1.时间特征

1.1 连续时间

  • 持续时间:
  • 浏览时长;
  • 间隔时间:
  • 购买/点击距今时长;
  • 距离假期的前后时长(节假日前和节假日后可能会出现明显的数据波动);

1.2 离散时间

  • 年、季度、季节、月、星期、日、时 等;

++ 基本特征,如果用 Xgboost 模型可以进行 one-hot 编码;
++ 如果类别比较多,可以尝试平均数编码(Mean Encoding)。
++ 或者取 cos/sin 将数值的首位衔接起来,比如说 23 点与 0 点很近,星期一和星期天很近。

  • 节假日、节假日第 n 天、节假日前 n 天、节假日后 n 天;

++ 数据可能会随着节假日的持续而发生变化,比如说递减;
++ 节假日前/后可能会出现数据波动;
++ 不放假的人造节日如 5.20、6.18、11.11 等也需要考虑一下;

主要根据业务场景进行挖掘。

 # 加入时间戳
    total_balance['weekday'] = total_balance['date'].dt.weekday
    total_balance['day'] = total_balance['date'].dt.day
    total_balance['week'] = total_balance['date'].dt.week
    total_balance['month'] = total_balance['date'].dt.month    

2.聚合特征

2.1 统计值

基于历史数据构造长中短期的统计值,包括前 n 天/周期内的:
四分位数;中位数、平均数、偏差;偏度、峰度;
除了对数据进行统计外,也可以对节假日等进行统计,以刻画历史数据中所含节假日的情况。
(还可以统计未来的节假日的情况。)

2.2 同期值

前 n 个周期/天/月/年的同期值;


    # 统计翌日因子
    mean_of_each_weekday = total_balance[['weekday']+['total_purchase_amt','total_redeem_amt']].groupby('weekday',as_index=False).mean()
    for name in ['total_purchase_amt','total_redeem_amt']:
        mean_of_each_weekday = mean_of_each_weekday.rename(columns={name: name+'_weekdaymean'})
    mean_of_each_weekday['total_purchase_amt_weekdaymean'] /= np.mean(total_balance['total_purchase_amt'])
    mean_of_each_weekday['total_redeem_amt_weekdaymean'] /= np.mean(total_balance['total_redeem_amt'])

    # 分别统计翌日在(1~31)号出现的频次
    weekday_count = total_balance[['day','weekday','date']].groupby(['day','weekday'],as_index=False).count()
    weekday_count = pd.merge(weekday_count, mean_of_each_weekday, on='weekday')

    # 依据频次对翌日因子进行加权,获得日期因子
    weekday_count['total_purchase_amt_weekdaymean'] *= weekday_count['date']   / len(np.unique(total_balance['month']))
    weekday_count['total_redeem_amt_weekdaymean'] *= weekday_count['date']  / len(np.unique(total_balance['month']))
    day_rate = weekday_count.drop(['weekday','date'],axis=1).groupby('day',as_index=False).sum()

    # 将训练集中所有日期的均值剔除日期残差得到base
    day_mean = total_balance[['day'] + ['total_purchase_amt','total_redeem_amt']].groupby('day',as_index=False).mean()
    day_pre = pd.merge(day_mean, day_rate, on='day', how='left')
    day_pre['total_purchase_amt'] /= day_pre['total_purchase_amt_weekdaymean']
    day_pre['total_redeem_amt'] /= day_pre['total_redeem_amt_weekdaymean']
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值