422. Santa 2020 - The Candy Cane Contest | santa-2020
感谢主办方举办这场激动人心的比赛!我很高兴能成为 Competition Grandmaster。
源代码可在此处获取:
https://github.com/toshi-k/kaggle-santa-2020
在本次比赛中,奖励是通过比较阈值和随机生成的数字来决定的。如果我们知道阈值,计算获得奖励的概率很容易。但在游戏过程中智能体无法看到阈值,我们必须对其进行估计。
和其他团队一样,我也通过 Kaggle API 下载了历史数据,并创建了一个用于监督学习的数据集。我们可以在 API 的响应中看到每一轮 threshold 的真实值。因此,我将其作为目标变量。
在比赛中期,我发现分位数回归比传统的 L2 回归要好得多。我认为它可以通过百分位参数来调整探索和利用之间的平衡。
我为训练和预测制作了 32 个特征。我也尝试了其他一些特征,但效果不佳。添加不必要的特征有时会导致超时错误,所以我没有采用它们。
| # | 名称 | 解释 |
|---|---|---|
| #1 | round | 游戏中的轮次数 (0-1999) |
| #2 | last_opponent_chosen | 对手智能体上一步是否选择了这台机器 |
| #3 | second_last_opponent_chosen | 对手智能体倒数第二步是否选择了这台机器 |
| #4 | third_last_opponent_chosen | 对手智能体倒数第三步是否选择了这台机器 |
| #5 | opponent_repeat_twice | 对手智能体过去两轮是否连续选择了这台机器 (#2 x #3) |
| #6 | opponent_repeat_three_times | 对手智能体过去三轮是否连续选择了这台机器 (#2 x #3 x #4) |
| #7 | num_chosen | 对手和我的智能体选择这台机器的总次数 |
| #8 | num_chosen_mine | 我的智能体选择这台机器的次数 |
| #9 | num_chosen_opponent | 对手智能体选择这台机器的次数 (#7 - #8) |
| #10 | num_get_reward | 我的智能体从这台机器获得奖励的次数 |
| #11 | num_non_reward | 我的智能体从这台机器未获得奖励的次数 |
| #12 | rate_mine | 我的选择次数占总选择次数的比例 (#8 / #7) |
| #13 | rate_opponent | 对手选择次数占总选择次数的比例 (#9 / #7) |
| #14 | rate_get_reward | 我获得奖励的选择次数占总选择次数的比例 (#10 / #7) |
| #15 | empirical_win_rate | 基于我的选择和奖励得出的阈值后验期望 |
| #16 | quantile_10 | 基于我的选择和奖励得出的阈值后验分布的 10% 分位点 |
| #17 | quantile_20 | 基于我的选择和奖励得出的阈值后验分布的 20% 分位点 |
| #18 | quantile_30 | 基于我的选择和奖励得出的阈值后验分布的 30% 分位点 |
| #19 | quantile_40 | 基于我的选择和奖励得出的阈值后验分布的 40% 分位点 |
| #20 | quantile_50 | 基于我的选择和奖励得出的阈值后验分布的 50% 分位点 |
| #21 | quantile_60 | 基于我的选择和奖励得出的阈值后验分布的 60% 分位点 |
| #22 | quantile_70 | 基于我的选择和奖励得出的阈值后验分布的 70% 分位点 |
| #23 | quantile_80 | 基于我的选择和奖励得出的阈值后验分布的 |