返回列表

8th place solution (Flying Over the 1st place again)

538. Playground Series - Season 3, Episode 8 | playground-series-s3e8

开始: 2023-02-21 结束: 2023-03-06 定价与促销 数据算法赛
第8名方案(再次飞越第1名)

第8名方案(再次飞越第1名)

作者:Sergey Saharovskiy (Grandmaster)
发布时间:2023-03-07

简介
又是新的一周,再次向比赛的获胜者致敬!
写这篇文章的过程很痛苦,但 @jcaliz 鼓励了我,因为这个解决方案并非显而易见。

前言
大学时期我对宝石学很感兴趣,甚至考虑过获得 GIA(美国宝石研究院)认证来鉴定宝石。我还曾计划开一家自己的当铺,用来分拣钻石而不是 pandas 数据框。令人惊讶的是,我们的兴趣和职业道路会随着时间而改变。虽然我目前的重心完全不在宝石学上,但过去的经历和兴趣仍然可以是宝贵的财富。

第1部分:对抗异常值
看看这3张插图,我试图根据合理的价格范围来截断异常值(红框显示了 trainoriginal 数据集差异极大的区域)。

Train before fixing outliers

Origin with boxes

Train after fixing outliers

一旦我修正了异常值的数值,CV(交叉验证)分数得到了极大的提升,但在 LB(公开排行榜)上的结果却很差……
为了理解为什么会发生这种情况,我决定查看最佳预测,瞧!原来所有模型都已经压缩了异常值,所以没有理由去修正它。

Test preds

第2部分:模型本身已经很好了
我查看了 @tetsutani@eamonntweedy 写的公开作品,因为他们的建模部分与我的有些相似。我发现的一个共同点是,模型从一开始就很好且泛化能力很强。虽然我真的不喜欢那种被压缩的预测值,所以我试图自己“帮助”模型。我大胆地想象自己是一名注册鉴定师,开始手动标记数据。

第3部分:可视化与完美的宝石
并无意自我推销,但我开始越来越多地研究 When 4Cs Concept becomes an Art 这个话题。我从训练集中选择了特定克拉范围内的“Ideal”切工、“D”色(最佳无色)、“Flawless”(无瑕)的宝石。想法是找到指定宝石组的最大可能值,并将其与测试预测进行比较,如果测试预测因某种原因更高——将训练集中的 Q3 + (1.5 * IQR) 分配给测试预测。这为20个样本带来了 +0.01 的 LB 提升。当我决定稍微自动化一下时:

def postprocess_clip_sub(best_sub: pd.DataFrame, alpha: float) -> pd.DataFrame:
    """