1 背景
1. 1在线分配
场景:
假设今天流量预测一共60w流量,需要分给精品课(100w)、爆品课(80w)、素养课(120w)等等,怎么做流量分配在 供<<需 时
目前做法是:根据加权比例和ctr的乘积
每个供给结点的流量每天都是动态变化的,如何设计一些动态反馈优化整个系统也是非常重要的
目前做法是:没有做
1. 2 流量预测的重要性
实现在线分配的关键就是流量预测,流量预测高了或者低了都会导致收益的减少
2 目标
我们将人群按照标签进行聚类,一共有64种(4*2^4),目标是对于任意一种人群标签,给定日期后,利用模型,可以预测出它在给定日期的流量。
tips:可以看出这是个回归问题
3 开发
3.1 开发环境
语言:python
数据集信息:
(1)日志获取,是按dt分区好的,是全量数据,最终为DMatrix形式
(2)目前训练集是90天,测试集是1天,
(3)特征信息
使用模型:XGBoost
3.2 特征工程
主要从日期入手
3.3 XGBoost
(1) 模型参数配置
params = {'learning_rate': 0.1,
'max_depth': 30, # 构建树的深度,越大越容易过拟合
# 'num_boost_round': 2000,
# 'objective': 'reg:squarederror', # 线性回归问题
'objective': 'reg:linear', # 线性回归问题,早期版本的参与,将被reg:squarederror替换
'random_state': 7,
'gamma': 0,
'subsample': 0.8,
'colsample_bytree': 0.8,
'reg_alpha': 0.005,
'n_estimators': 1000,
'silent': 1,
'eval_metric': ['rmse', 'mae'], # 分类有“auc”
'eta': 0.3
}
(2)评价指标
前期用RMSE用来作为损失函数训练,R^2用来作为评价指标
后期发现用R^2作为评价指标不太合适,原因是数据分布方差太大,这是由于周末和平时的流量差异太大导致的,最后换成了MAPE
(3)结果,最终测试的结果MAPE为0.05左右
4. 曾经存在的问题
1.预测的天数越长,预测效果越差。
解决方法:
1.模型过拟合严重,调整参数,增加数的数量,减小树的最大深度。
2.把前一天的预测结果作为测试数据加入到训练样本中。
3.新增特征:未来一周,上课人数
5. 思考过的迭代优化过程
1.拉长周期,引入季节性节假日特征
2.去掉人数少的标签
3.引入调休的特征,手动标注
4.引入当天排课数量特征
5.研究预测的准的人群的特点
6.增加特征洞察老用户之间的差距
7.对异常日期的数据进行差分打平
8.统计有课的人占比,新用户占比