资金流入流出预测—————第四部分

目的:

  1. 了解模型训练、预测及线下验证
  2. 掌握机器学习常用模型
  3. 利用工具对资金流入流出数据进行训练、验证及预测
1. 模型训练与验证

1.1 模型训练、预测及线下验证
在这里插入图片描述
• 数据该如何划分?
• 训练集、线下验证集、线下测试集、线上测试集
• 无时序的数据集:简单划分、交叉验证划分等
• 有时序的数据集:需考虑时序,nested交叉验证划分等
• 模型选择
• 依据在验证集上的效果选择
• 除了关注效果的均值,还要关注稳健性
• 还需考虑线上效果;可将线上效果视为一折数据
• 参数调优
• 不建议将精力放在参数调优上;容易过拟合
• 大体的设置参数即可
• 应将精力重点放在特征工程;其次是模型融合𝑍 = 𝑓 𝑌 1 ,…,𝑌 𝑝 + ε

1.2 常用的回归模型
• 多元回归
𝑍 = 𝑓 𝑌 1 ,…,𝑌 𝑝 + ε
• 常用回归模型
• 线性回归:𝑍 = 𝛽 0 + 𝛽1 𝑌 1+ ⋯+ 𝛽 𝑝 𝑌 𝑝 + ε
• 决策树
• 随机森林
• 梯度提升树:Gradient Boosting Tree、Xgboost、LightGBM、Catboost
• 可采用最小二乘或梯度下降等方法估计
• 当变量较多时,建议考虑添加LASSO等惩罚项

• 使用sklearn调用线性回归

#从sklearn算法库中导入线性回归模型算法
from sklearn.linear_model import LinearRegression, Lasso
from sklearn.datasets import load_diabetes
from sklearn.metrics import mean_squared_error
data = load_diabetes()
clf_lr = LinearRegression()
clf_lr.fit(data['data'][:300],data['target'][:300])
clf_lr.coef_
pred_lr = clf_lr.predict(data['data'][300:])
mse_lr = mean_squared_error(data['target'][300:],pred_lr)
clf_lasso = Lasso(alpha=0.1)
clf_lasso.fit(data['data'][:300],data['target'][:300])
clf_lasso.coef_
pred_lasso = clf_lasso.predict(data['data'][300:])
mse_lasso = mean_squared_error(data['target'][300:],pred_lasso)

• 决策树回归
• 变量选择条件1:为每个变量选择切分点,从而将变量作为节点分裂
• 变量选择条件2:在分裂后,依据相应分支内所有样本的因变量均值
作为估计,并评估拟合误差
• 贪心策略:综合评价每个变量对上述两个条件的满足程度
• CART回归树
• 使用sklearn调用决策树回归

#从sklearn算法库中导入决策树回归
from sklearn.tree import DecisionTreeRegressor
from sklearn.datasets import load_diabetes
from sklearn.metrics import mean_squared_error
data = load_diabetes()
clf_dt = DecisionTreeRegressor()
clf_dt.fit(data['data'][:300],data['target'][:300])
pred_dt = clf_dt.predict(data['data'][300:])
mse_dt = mean_squared_error(data['target'][300:],pred_dt)

• 随机森林回归
• 集成学习之Bagging:随机选取样本、特征
• 常采用决策树作为基模型
• 并行集成策略
• 取所有树的输出均值
• 使用sklearn调用随机森林回归

#从sklearn算法库中导入随机森林回归
from sklearn.ensemble import RandomForestRegressor
from sklearn.datasets import load_diabetes
from sklearn.metrics import mean_squared_error
data = load_diabetes()
clf_rf = RandomForestRegressor(n_estimators=100)
clf_rf.fit(data['data'][:300],data['target'][:300])
pred_rf = clf_rf.predict(data['data'][300:])
mse_rf = mean_squared_error(data['target'][300:],pred_rf)

• 梯度提升树回归
• 集成学习之Boosting:依据估计误差调整样本权重
• 常采用决策树作为基模型
• 串行集成策略
• Gradient Booting Tree
• Xgboost
• LightGBM
• Catboost
• 使用sklearn调用Gradient Boosting Tree

#从sklearn算法库中导入梯度提升树回归
from sklearn.ensemble import GradientBoostingRegressor
from sklearn.datasets import load_diabetes
from sklearn.metrics import mean_squared_error
data = load_diabetes()
clf_gbt = GradientBoostingRegressor(n_estimators=100)
clf_gbt.fit(data['data'][:300],data['target'][:300])
pred_gbt = clf_gbt.predict(data['data'][300:])
mse_gbt = mean_squared_error(data['target'][300:],pred_gbt)

• Xgboost
• 里程碑
• Gradient Boosting算法的高效实现
• 考虑了模型复杂度:在目标函数中添加了相关正则化项
• 拟合效果更佳:对损失函数采用二阶泰勒展开
• 多线程
• ………
• 近年来,被广泛应用于比赛、公司业务
• 调用Xgboost

#导入Xgboost
import xgboost as xgb
from sklearn.datasets import load_diabetes
from sklearn.metrics import mean_squared_error
data = load_diabetes()
clf_xgb = xgb.XGBRegressor(n_estimators=100)
clf_xgb.fit(data['data'][:300],data['target'][:300])
pred_xgb = clf_xgb.predict(data['data'][300:])
mse_xgb = mean_squared_error(data['target'][300:],pred_xgb))

• Lightgbm
• 微软
• 更快的训练速度
• 更低的内存消耗
• 功能更全面
• 更新、维护好
• 将连续型变量离散化后,采用直方图形式获取相应
统计量,寻求最优分割点(面试时常问)
• 调用Lightgbm

#导入Lightgbm
import lightgbm as lgb
from sklearn.datasets import load_diabetes
from sklearn.metrics import mean_squared_error
data = load_diabetes()
clf_lgb = lgb.LGBMRegressor(n_estimators=100)
clf_lgb.fit(data['data'][:300],data['target'][:300])
pred_lgb = clf_lgb.predict(data['data'][300:])
mse_lgb = mean_squared_error(data['target'][300:],pred_lgb)

• Catboost
• 采用特殊的方式处理类别型特征(建模时需指定)
• 使用了组合类别特征
• 基模型是对称树
• 运行速度较慢(与CPU版的Xgboost类似)
• 调用Catboost

#导入Catboost
import catboost as cab
from sklearn.datasets import load_diabetes
from sklearn.metrics import mean_squared_error
data = load_diabetes()
clf_cab = cab.CatBoostRegressor(n_estimators=100,verbose=False)
clf_cab.fit(data['data'][:300],data['target'][:300])
pred_cab = clf_cab.predict(data['data'][300:])
mse_cab = mean_squared_error(data['target'][300:],pred_cab))

• 模型参数的设置
• 不建议将精力放在调参;黔驴技穷时再调参
• 仅需大体的设置主要参数即可
• 例如,Xgboost,learning_rate=0.1,nround=200,max_depth=6

1.3 模型融合
• 主要策略
• 加权:算数平均数、几何平均数、调和平均数等
• Stacking:交叉验证;类似于深度学习
• Blending:简单划分数据集;相当于只做Stacking的一折
• 模型平均
• 时序方法/模型与机器学习的融合
• ………
• 模型平均
• 类似于加权集成策略
• 统计学领域的研究热点
• 线性模型的模型平均方法及理论已被研究得很好(本赛题线性回归效果很好)
• S-AIC、S-BIC以及张新雨、梁华等方法

2. 面向资金流入流出预测的特征工程

2.1 工具包载入及数据划分

import pandas as pd
import numpy as np
import random
import datetime
from dateutil.relativedelta import relativedelta
import matplotlib.pyplot as plt
import seaborn as sns
import sklearn as skr
from sklearn.metrics import mean_squared_error
from sklearn.linear_model import LinearRegression
from sklearn.ensemble import RandomForestRegressor
from sklearn.ensemble import GradientBoostingRegressor
from sklearn.neural_network import MLPRegressor
import xgboost as xgb
import lightgbm as lgb
import warnings
warnings.filterwarnings('ignore')

• 数据划分
• 训练集:2014年4月1日-7月31日
• 测试集:2014年8月1日-8月31日
2.2 经典回归模型的效果对比
• 多种回归模型对比
• LGB最优(但线上效果不佳)
• LR看起来不错
2.3 模型平均
• 效果一般
• 样本量不够;模型复杂,容易过拟合
总结:

  1. 掌握数据(尤其是时序数据)划分方法、建模流程
  2. 掌握常用的回归模型,熟悉模型融合方法
  3. 利用相关方法和工具完成资金流入流出预测赛题任务

心得:由于是新接触数据挖掘,上手学习起来有点吃力,对于很多的包和函数都不熟悉,经过这次的学习,初步了解的数据挖掘的一些基本的流程,也为以后的学习铺垫了一些基础。

参考资料:
[1]Xgboost,https://github.com/dmlc/xgboost
[2]Lightgbm,https://github.com/microsoft/LightGBM
[3]Catboost,https://github.com/catboost/catboost
[4] 张新雨. 模型平均及其应用(博士论文).2010
[5] X. Zhang, D. Yu, G. Zou, H. Liang. Optimal model averaging estimation for generalized linear
models and generalized linear mixed-effects models. JASA 2016. 111(516): 1775-1790.

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值