当前位置:   article > 正文

【BI学习心得16-模型融合与供应链预测】_对brand进行统计 brand_amount, brand_price_max, brand_pr

对brand进行统计 brand_amount, brand_price_max, brand_price_min, brand_price_


写在前面的话

随着时间的流逝,我们之前学过的知识可能忘了,链接回去,温故而知新。

  1. 01-商业智能与推荐系统

机器学习的概念,七个步骤,分类问题,回归问题

这里是关于:推荐系统方面的学习总结

1.回归分析算法

概念:研究因变量(目标)与自变量(特征)之间的关系
目的:帮助数据科学家,更好的选择最佳的变量集,用于建立预测模型
场景:价格预测,数量预测
背景:1889年道尔顿和他的朋友K.Pearson收集了上千个家庭的身高、臂长和腿长的记录,企图寻找出儿子们身高与父亲们身高之间的关系

在这里插入图片描述

1.1 常见的回归算法

  • 线性回归 / 逻辑回归
  • 多项式回归 Polynomial Regression

多项式是一种常用的特征构造方法

  • 岭回归 Ridge Regression
  • 套索回归 Lasso Regression
  • 弹性回归 ElasticNet Regression

岭回归和套索回归的混合技术,同时使用L2和L1正则

在这里插入图片描述
最小二乘估计是最小化残差平方和(RSS) m i n w 1 m ∑ i ( y i − w T x i ) 2 min_w\frac{1}{m}\sum_i(y_i-w^Tx_{i})^2 minwm1i(yiwTxi)2

lasso是最小化RSS中,加入了L1惩罚项(作为约束) m i n w 1 m ∑ i ( y i − w T x i ) 2 + λ n ∣ ∣ w 1 ∣ ∣ min_w\frac{1}{m}\sum_i(y_i-w^Tx_{i})^2+\frac{\lambda}{n}||w_1|| minwm1i(yiwTxi)2+nλw1

岭回归在最小化RSS中,加入了L2惩罚项 m i n w 1 m ∑ i ( y i − w T x i ) 2 + λ n ∣ ∣ w 2 ∣ ∣ min_w\frac{1}{m}\sum_i(y_i-w^Tx_{i})^2+\frac{\lambda}{n}||w_2|| minwm1i(yiwTxi)2+nλw2

  • 分类用于回归:SVM,KNN,CART
  • 集成学习:RF,GBDT, XGBoost, LightGBM

2.二手车交易价格预测

FieldDescription
SaleID交易ID,唯一编码
name汽车交易名称,已脱敏
regDate汽车注册日期,例如20160101,2016年01月01日
model车型编码,已脱敏
brand汽车品牌,已脱敏
body Type车身类型:豪华轿车:0,微型车:1,厢型车:2,大巴车:3,敞篷车:4,双门汽车:5,商务车:6,搅拌车:7
fuelType燃油类型:汽油:0,柴油:1,液化石油气:2,天然气:3,混合动力:4,其他:5,电动:6
geatbox变速箱:手动:0,自动:1
power发动机功率:范围 [ 0, 600 ]
kilometer汽车已行驶公里,单位万km
notRepairedDamage汽车有尚未修复的损坏:是:0,否:1
regionCode地区编码,已脱敏
seller销售方:个体:0,非个体:1
offerType报价类型:提供:0,请求:1
creatDate汽车上线时间,即开始售卖时间
price二手车交易价格(预测目标)
v系列特征匿名特征,包含v0-14在内15个匿名特征

2.1评价标准

评价标准MAE(Mean Absolute Error):
在这里插入图片描述

MAE是L1 loss,MAE越小模型越准确

2.2数据处理步骤

  • Step1,数据加载

原始数据是用空格分隔

  • Step2,数据探索

数据整体情况
查看缺失值,缺失值可视化
查看label的分布(该项目中price为label)

  • Step3,特征选择
  • Step4,模型训练

使用XGBoost,超参数设置

  • Step5,模型预测
2.2.1数据分布

从目标中我们知道,价格是需要预测的值,可以用核密度函数观察实际价格分布符合哪种分布(使用johnsonsu,norm,lognorm分布)

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
结论:数据更符合johnsonsu分布,不符合正态分布

2.2.2查看预测值的具体频数
plt.hist(train_data['price'], color ='red')
  • 1

在这里插入图片描述

plt.hist(np.log(train_data['price']), color ='red')
  • 1

在这里插入图片描述

2.2.3偏度和峰度(与正态分布进行比较)

峰度用来描述取值分布形态陡缓程度的统计量
峰度为0表示该分布与正态分布的陡缓程度相同
峰度大于0表示分布与正态分布相比较为陡峭,为尖顶峰
峰度小于0表示分布与正态分布相比较为平坦,为平顶峰
在这里插入图片描述

sns.distplot(train_data['price'])
print("Skewness: %f" % train_data['price'].skew())
print("Kurtosis: %f" % train_data['price'].kurt())
  • 1
  • 2
  • 3

在这里插入图片描述

2.2.4减少MAE的方式
  1. 时间类型数据(regDate, creatDate)
  2. 模型融合,使用XGBoost,LightGBM
  3. 增加新的特征,对brand进行统计

brand_amount, brand_price_max, brand_price_min, brand_price_median,
brand_price_sum, brand_price_std, brand_price_mean

单模型XGBoost,MAE=1463 完善1和2,MAE=587

在这里插入图片描述

2.2.5XGBOOST和LGBMClassifier经验参数
clf = lgb.LGBMRegressor (
            num_leaves=2**5-1, reg_alpha=0.25, reg_lambda=0.25, objective='regression',
            max_depth=-1, learning_rate=0.005, min_child_samples=3, random_state=2021,
            n_estimators=2000, subsample=1, colsample_bytree=1,
        )
  • 1
  • 2
  • 3
  • 4
  • 5
  • num_leavel=2**5-1 #树的最大叶子数,对比XGBoost一般为2^(max_depth)

  • reg_alpha,L1正则化系数

  • reg_lambda,L2正则化系数

  • max_depth,最大树的深度

  • n_estimators,树的个数,相当于训练的轮数

  • subsample,训练样本采样率(行采样)

  • colsample_bytree,训练特征采样率(列采样)

xgb = xgb.XGBRegressor(
            max_depth=6, learning_rate=0.05, n_estimators=2000, 
            objective='reg:linear', tree_method='gpu_hist', 
            subsample=0.8, colsample_bytree=0.8, 
            min_child_samples=3, eval_metric='auc', reg_lambda=0.5
        )
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • max_depth ,树的最大深度
  • learning_rate, 学习率
  • reg_lambda,L2正则化系数
  • n_estimators,树的个数,相当于训练的轮数
  • objective,目标函数, binary:logistic 用于二分类任务
  • tree_method, 使用功能的树的构建方法,hist代表使用直方图优化的近似贪婪算法
  • subsample,训练样本采样率(行采样)
  • colsample_bytree,训练特征采样率(列采样)

注意: s u b s a m p l e , c o l s a m p l e b y t r e e 是 个 值 得 调 参 的 参 数 , 典 型 的 取 值 为 0.5 − 0.9 ( 取 0.7 效 果 可 能 更 好 ) \color{red}subsample, colsample_bytree是个值得调参的参数,典型的取值为0.5-0.9(取0.7效果可能更好) subsample,colsamplebytree0.50.90.7

结论:XGBoost效果相对LightGBM可能会好一些

2.3模型融合

根据各个模型的最终预测表现分配不同的权重,比如准确率高的模型给予更高的权重,准确率低的模型给予较小的权重。

2.3.1回归任务中的加权融合

将3个模型的预测结果进行加权融合,对比结果提升,评价指标采用MAE,MSE

predict1 = [1.2, 3.2, 2.1, 6.2]
predict2 = [0.9, 3.1, 2.0, 5.9]
predict3 = [1.1, 2.9, 2.2, 6.0]
y_true = [1, 3, 2, 6]
  • 1
  • 2
  • 3
  • 4
2.3.2分类任务中的Voting

Voting策略,即选择所有模型输出结果中,最多的那个类(少数服从多数)

假 设 我 们 有 三 个 相 互 独 立 的 模 型 , 每 个 模 型 的 准 确 率 均 为 0.7 , 采 用 少 数 服 从 多 数 的 方 式 进 行 V o t i n g , 那 么 最 终 的 正 确 率 = ? \color{red}假设我们有三个相互独立的模型,每个模型的准确率均为0.7,采用少数服从多数的方式进行Voting,那么最终的正确率=? 0.7Voting=
在这里插入图片描述

在sklearn 中,VotingClassifier,实现了投票法,分为hard和soft。

hard, 硬投票, 少数服从多数(分类器)
soft, 软投票,有权值的投票(加权)

采用不同投放方式,分类结果是否有变化?

  • 模型1,A类 99%, B类 1%
  • 模型2:A类 45%,B类 55%
  • 模型3:A类 48%,B类 52%

以iris分类为例,鸢尾花有四个属性,即花瓣的长宽,茎的长宽,根据这些属性把花分为三类,分别采用三个模型,并加权融合。

LogisticRegression(C=0.1)

RandomForestClassifier(n_estimators=10, max_depth=2)

SVC(C=0.1, probability=True)
  • 1
  • 2
  • 3
  • 4
  • 5

2.4采用nerual network进行价格预测

  • 设计NN

3个FC层,每层神经元个数为250,激活函数 用ReLU 最后一个FC层,输出预测结果

  • 针对发动机功率power>600的进行异常值处理

2.5Model的特征可解释性测

  • 使用XGBoost/LightGBM进行预测,并对重要特征进行排序
  • XGBoost中的feature importance计算,一共有三种类型:

weight,特征在提升树里出现的次数,即在所有树中,某个特征作为分裂节点的次数
gain,在所有树中,某个特征在分裂后带来的平均信息增益。
cover,与特征相关的记录(observation)的相对数量

比如有100条记录(observation),4个特征(feature) 和3棵树(tree),假设特征1用来确定Tree1,Tree2和Tree3中10,5和2个记录的叶节点
coverage = (10 + 5 + 2) / 100 = 17%

在这里插入图片描述

参考资料

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/373205?site
推荐阅读
相关标签
  

闽ICP备14008679号