こんにちは。
Mercariが主催したKaggleのコンペティションである、「Mercari Price Suggestion Challenge」について、過去に参加して色々見ていたんですが、機会があって改めて調べてみることにしたので、調べた内容とかをまとめてみました。
今回のコンペの概要
コンペの内容
コンペの内容としては、「有名なフリマアプリであるMercariの中で、出品者が出品する際の商品の価格をレコメンドすること」です。
具体的には、過去の出品者が出して来た商品の情報、例えばアイテムの状態やブランド名、説明などから商品の価格をレコメンドすることが求められます。
過去の出品者の価格を元に商品価格のレコメンドを行うので、その意味では「あなたの商品の状態なら、このくらいの価格が過去の出品状態からすると適正ですよ」みたいなのをレコメンドする機能とかに使えそうです。
完全にこれは妄想ですが、フリマでお金儲けしている人とかだと、「如何にして売るか」みたいなのがメインになるので、少し違う観点から価格を決めたいとかはあるかもしれませんが、一般の出品者からすると「とりあえずみんなが出しているっぽい価格」みたいなのでいいと思うので、普通にアプリ内で登場してもおかしくなさそうな機能だなぁと思って見ていました(メルカリのアプリ使ったことないので知らないんですが、もしかしたら既にそういう機能があるのかもしれませんが)。
Kernels Only
今回のコンペは、「カーネルのみでデータのロード、前処理、モデルの学習、予測までを全部1時間以内に行う必要がある」という点が特徴的で、Kaggleのカーネル内で、前処理・モデルの学習・予測の全部を60分以内に終わるようにする必要がありました。
なので、計算機のスペックに依存しない戦いができるということで、よりフェアな戦いができた感があります。他のコンペだと、
- そもそもデータセットが大きすぎて無理
- 大きなモデルを沢山作って、力技で勝つ
みたいなこともあったりして、どのくらい課金するかみたいなところが勝負になるところもありますが、今回はKernels Onlyということで、その意味ではだいぶフェアだなぁと思いました。
Kernelのスペックとしては、
- 16 GB ram
- 1 GB disk
- 4 core
という感じでした。
このようなルールもあった関係で、「2nd stageの方のテストデータを予測した時に、制限時間内に終わるのか」みたいなディスカッションがあったのですが、「とりあえず1st stageで終わっていれば確実に終わるようにするよ」みたいな感じで、そういうのも見ていて面白かったです。
今回のコンペ、私のようなお金のないガチ勢にとっては良かったのですが、稀に良くKernelが落ちていたので、とてもイライラしたというのはあります笑。
イベントもやっていた
先日、MercariでこのKaggleの優勝者の皆さんを集めてイベントをされていました。ツイッターに流れている、イベントの様子をみるだけでもめちゃめちゃ面白いので、ぜひ見て見てください(笑)(ちなみに私は予定が合わなくていけなかった、、、行きたかった、、、)
ブログでまとめてくださっている方もいます。会場の雰囲気とかはこれで結構わかるので、行けなかった身としてはとても嬉しい。
- メルカリ主催!Kaggle Competitionイベントに参加してきました! - 好奇心の強い大学生のちょっとした情報発信
- kaggleメルカリコンペの表彰式イベントに参加してきました - 周回遅れでIT業界デビューしたエンジニアのブログ
メルカリという日本の会社が出したコンペだったので、余計にそう思ったところがありますが、Kaggleの使い方みたいなところがうまくわかるなぁと思いました。
企業がコンペを出す意味というところは、以下の3つが主にあげられるかなぁと思います。
- 採用活動
- サービス/会社の宣伝
- 良い解法の獲得
今回のメルカリが出したコンペは、これらのメリットをフルに生かしているなぁと感じました。
まず、題材が実際に使われそうなものであったので、実際のサービスの宣伝にもなりました。良い解法の獲得という意味でも、Kernels onlyという制約を設けることで「とんでもない計算量を要するモデル」みたいなのを防ぐこともできていたように思います。また、このコンペの後に優勝者や日本で上位だった方を読んでイベントも行なっていたので、その意味でも優秀なデータサイエンティストを採用するという意味ではかなり良かったのではないでしょうか。
Kaggleの問題を出す側としては、とてもお手本になるようなコンペだったと思います(Kaggleのコンペを出す側になることはないだろうけど)。
参考
以下の記事が比較検証までしていて面白い。
Kernels
EDA
データ分析をする前に必ず読むといっても過言ではないし、ちょっと遅れて参加したコンペとかでは必ず上がっているEDAですね。
Mercaiのコンペを改めて眺めているんだけど、EDAを読むだけで普通に勉強になるンゴですね。。。 #St_Hakky_Kaggle
— Hakky@Julia勉強中(´・∀・) (@St_Hakky) 2018年5月7日
1 : https://t.co/vrcHo0rWJF
2 : https://t.co/2ThS6CkB3E
3 : https://t.co/djBnqXclQa
今回のコンペでは、以下の3つのEDAがめちゃめちゃ参考になりました。
- Mercari Interactive EDA + Topic Modelling
- Mercari Price Suggestion EDA | Kaggle
- Mercari - item description word2vec embeddings EDA | Kaggle
一番上のやつとか、すげー頑張っていて、自分でやる気も失せるくらいでした笑。
Top入賞者の解法を眺めてみる
優勝者の解法
優勝者の解法がコンペの後にしっかりと公開されていて、とても嬉しい限りです。とっても勉強になりました(正直、まだ100パーセント理解していない)
参考になるリンクを以下にあげていきます。
- Kernel(Code) : Mercari Golf: 0.3875 CV in 75 LOC, 1900 s | Kaggle
- Discussion - 1st place solution : Mercari Price Suggestion Challenge | Kaggle
- Github : GitHub - pjankiewicz/mercari-solution: Mercari 1st place solution (kaggle)
コードを見てもシンプルすぎて禿げますね(禿げないけど)。また、解法を解説したスライドもGithub上に上がっていました。
また、このコンペの解説動画を出している方がいますので、解説はこちらを見たほうがいいと思います。わかりやすかったです。
余談ですが、Kaggleのさいつよが集まったslackもこの動画を解説されている方が出しているので、そちらもぜひ。とても有益な知見がガンガン投稿されていて、普通にびっくりします笑。
日本のデータサイエンスの人たちが集まっているKaggleのslack見てるんだけど、なんかだれかが質問したらさいつよと思われる人(あったことがないのであの人がこの人って想像つかないけどアイコンとかで何となく)が、さりげなく答えているのにビビっている笑
— Hakky@Julia勉強中(´・∀・) (@St_Hakky) 2017年12月28日
Top陣の解法
トップ数パーセントにいる人たちの解法が上がっていたので、それをまとめてみました。
参加しての反省点
時間をめちゃめちゃかけないとどの道上位にいけない
途中までは結構順調に行っていたのですが、途中からスコアが伸び悩んでしまい、また修論などに重なってしまったのもあって、進捗が出せずそのままFinishになってしまいました…。
今日の登壇者みんな「人間性を捧げろ」しか言ってない気がした #mercari_kaggle_ceremony
— onodera (@0verfit) 2018年5月9日
途中まではBaseラインのモデルを元に、前処理の内容とかを追加したりとかしていたんですが、気づいてしまったこととして、「人間性を捨ててスコアをあげるしかない」ということがあります。
ちなみに、「Kaggle 人間性」でTwitterで検索すると、やはり人間性を捨てているのかぁという気持ちになります。
正直スキルなどにも依存する部分もあると思いますが、最後の方になってくると「気合い」みたいなところも大事なんだなぁと思いました。
通常のNLPでよくやることをやってしまった
いわゆる前処理みたいなところとかを一通り試したんですが、これをやってしまうと時間が全然足りなくなり、なんとか高速化の道を模索していたんですが、優勝者の回答をみるとこれがダメだったみたいです…(辛い)
どう頑張っても時間がかかるなぁって思った瞬間に、やめるべきだったなぁと。
Kaggleの楽しみ方(なぜこのコンペに参加したか)
もちろんKaggle上で戦いたいというのもあったんですが、結構勉強にモチベーションがあったりしたので、そこらへんも書いて置こうかなと思います。
個人的な考え
メルカリのコンペは自然言語処理がキーだったのですが、私自身が自然言語処理にあまり詳しくなく(やったことがないわけではないが)、結構試行錯誤してやりました。
その過程で色々勉強になることもありましたし、得られるものもたくさんありました。カーネルを見て「あーこうやってやれば良いのかぁ」ってもったり、ディスカッションを見て「なるほど、このライブラリもあるなぁ」とか思ったりしていました。
なので、競い合うのがKaggleの目的なのかなぁと思っていたのですが、Kaggleはいろんな楽しみ方があるなぁと改めて思いました。
とりあえず分野ではなくてもやってみる、って感じが大事なのかなぁと思いました。
kaggleやらない人の真似「kaggleやりたいな〜」
— おらんな (@olanleed) 2018年2月16日
kaggleやると強い人の真似「始めてから3戦でkaggle masterです」
それでもやっぱり神の領域に近づきたい
とは言ってもやっぱり、神の領域に近づきたいなぁと思うわけですよね。
Kaggle – 神々に近づくために | threecourse's memo
頑張ろう。
今後も参加したコンペについては何かしらあげていきます。