-
Notifications
You must be signed in to change notification settings - Fork 91
/
算法思路.txt
31 lines (28 loc) · 2.34 KB
/
算法思路.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
算法思路
对初赛的日常转化率处理是比较常规的问题,在解题思路里已经说明的较为清楚。
而对复赛的异常日期处理而言,仅仅考虑前六天的转化率和第七天的高转化率是不太适合的,如何处理第七天的转化率异常是这道题需要解决的一大痛点。
针对此问题,我们根据对数据的分析、特征的构建、以及对实际场景的思考,提出了四种训练集划分
a.全量统计特征提取第七天特征 -- all-to7
b.全量数据的抽样统计 -- sample
c.单独第七天的特征提取 -- only7
d.全量数据 -- all
构造四种训练集划分的目的是,
1.构造出训练集中的差异性,方便模型融合
2.在每组训练集中,对高维特征进行选择,选择后进行特征分组
特征选择的方法为
1. 蛇 在GitHub的开源代码,糖尿病精准医疗大赛的 特征选择 https://github.com/luoda888/tianchi-diabetes-top12/blob/master/README.md
利用贪心、模拟退火算法,构造出多组特征,适用于组内模型融合
2. 利用 Std/Mean 训练集测试集分布一致的思想 进行特征选择 保证线上线下特征的一致性
分组后对不同的模型进行训练,构造组内特征的差异性,模型的差异性
我们选择的方法有 Xgboost/Lightgbm/GBDT+LR/Catboost/NN模型
其中NN模型里,我们使用的是对多个模型求Average的方法,使用的模型有
1.DeepFM/DeepFFM (原始ID特征放入交叉层) 与Lightgbm 线下差距 0.0001 (千分点)
2.AFFM/AFM (对原始ID特征加入Attention) 与Lightgbm 线下差距 0.00001 (万分点)
3.FNN/FFNN/NFM (将特征工程后放入网络结构) 与Lightgbm 线下差距 0.0001 (千分点)
将上述模型,按对该组训练集的数据敏感性,训练后加权,得到该组NN的结果Ans_nn
每组特征 都可以放入上述五个模型中 即 组内选择出的特征数n 乘以 组内模型数m 即为该组模型的数量 = n*m
根据模型间的相关性,分配不同的权重进行加权融合,得到该组的答案 Ans_k
3.在组间训练集中,对每组的Ans_k进行加权融合 得到Ans_final
4.利用前六天的上下午,每小时均值的变化趋势,线下预测出线上可能的均值,为0.036287135
5.对Ans_final做Logit逆变换
具体模型融合框架,见 模型融合.pdf