のんびりしているエンジニアの日記

ソフトウェアなどのエンジニア的な何かを書きます。

atmaCup#4に参加して5位でした

Sponsored Links

皆さんこんにちは
お元気ですか。私は元気です。

atmaCup#4に参加して5位だったのでその報告を書きます!
前回より良く少しほっとしていますが、賞金圏内には届きませんでした。
f:id:tereka:20200309000912p:plain

概要

atmaさんと一般社団法人リテールAI研究会さんとの合同開催で開かれました。
お題はスーパー一回の購買で特定のカテゴリの商品を購入するかどうか。でした。
ログに今回推定するカテゴリではないものは含まれており、それらと同時にその特定のカテゴリの商品を購入するかを推定します。

開催期間は今までと異なり、一週間です。
今回から運営がSlackに#lb-liveチャンネルを作成していました。
このチャネルはTop10の順位が変わるとSlackのチャネルに投稿されるものです。
とてもおもしろいチャンネルですが、一応Top10以内にいた私としては、通知が来ると抜かれたと思って常にひやひやしていました。
スマホのブルブルが正直心臓には悪いと感じておりました。。。(あったほうが参加者的にも面白いと思います)

また、協賛企業さんより、おかしやドリンクの差し入れをいただきました。
差し入れかなりおいしかったので食べすぎないように注意しなければならないほどでした。

ソリューション

作戦

私自身は社会人のため、日中帯は稼働できません。
平日稼働中は計算を行い、夜に特徴量を作るといった作戦を立てていました。
また、評価指標がmacro AUCでもあったのでアンサンブルははじめからほぼ効果があるだろうと踏んでいました。
そのため、前日夜から最終日はモデルの計算に費やし、何もしないぐらいのお気持ちのはずでした。

しかし、予想よりもスコアが伸び悩んだこともあり、最終日は簡単なEDAしていました。
そのときに実装に致命的なバグを発見してしまったので、fix + 間に合う範囲でアンサンブルの再計算していました。
(一部間に合わなかったものがあるので頭を抱えました。)

最終日にスコアが上がって上位に来たのはアンサンブルを狙っており、Weightの比率を勘で変えるのを一日でやっていたからです。

解法

LightGBM, CatBoost, MLPの重み付き平均です。
ユーザのお気持ちになって、必要な特徴量を追加していきました。
事情により、詳細は伏せますが、こんな感じです。

・日付の特徴(年月日、給料日、祝日、祝日前日)
・不要なデータを削除
(詳細は聞かないでください。)
・ユーザx購入商品のカテゴリ、同時購入商品のカテゴリ
※NNのみSVDで次元圧縮
・ユーザの購入回数

感想

Home Credit以来のまともなテーブルデータ解析っぽいことをやりました。
かなりそのときの知見を活かしながら分析していましたが、なかなか苦しかったです。
一通りツールの使い方を改めて、学べたのはかなりの収穫だったと思っています。

正直、一日と比較して長いなんて最初は思っていましたが、データ量から見るとちょうど良かったと思います。
コンペの題材としては企業的にも有用で良かったのではないかと感じています。

改めて、運営のatmaさん、一般社団法人リテールAI研究会さんありがとうございました。
また参加したいと思います!