Mercari Engineering Blog

We're the software engineers behind Mercari. Check out our blog to see the tech that powers our marketplace.

Kaggleは凄かった! 更に簡単な出品を目指して商品の値段推定精度を改善中

皆さん、こんにちは機械学習エンジニアの @hurutoriya です。

2018/05/09 にメルカリが開催した Kaggle Competition である「Mercari Price Suggestion Challenge」の閉会式を行いました。 「Mercari Price Suggestion Challenge」では実際に米国版メルカリで販売された商品データを公開して、参加者の皆様に商品の値段推定精度を競い合っていただきました。

Mercari Kaggle Competition: Closing Ceremony 2018 - connpass

f:id:hurutoriya:20181109005757p:plain

この閉会式は「Mercari Price Suggestion Challenge」の上位者(ロシア・ポーランド・中国)と日本人上位入賞者を招待して、各種上位者の解法やKaggleに対する考え方をパネルディスカッション形式でお話を聞かせていただきました。 今回はカーネルオンリー(計算機資源と計算時間の制約)というルールも相まって、面白いコンペになったのではないかと思います。

当日のパネルディスカッションの動画も公開準備を終えたのででこの場をお借りして共有させていただきます。

Part1

www.youtube.com

Part2

www.youtube.com

メルカリにおける値段推定

メルカリにおける値段推定の重要性

まず、なぜ値段推定がメルカリにおいて重要なのかを解説します。 フリマアプリ「メルカリ」は、お客さまが自由に値付けを行った後にメルカリ上で出品されます。

この値付けに関連する問題として分かりやすい例では

  • メルカリの相場から外れて、高い値段で出品した場合売れない
  • 逆にメルカリの相場より低い値段で出品してしまった場合、お客さまが損をする

が考えられます。

解決策として、

  • 自分が出品予定の商品をメルカリ内で検索して相場を調査して調べる

などがありますが、これでは

  • お客さまに大きな手間がかかる
  • そもそもメルカリに登録直後のお客さまはそんなことを思いつかない

そのため、出品時に商品情報から適切な値段を自動的に提示することで出品時の手間を削減し、更に出品が簡単になります。

値段推定についての解説

現在は機械学習チームインターン @lain_m21 さんに日本版メルカリの値段推定プロジェクトに取り組んでもらっています。

値段推定タスクにおいては、Root Mean Squared Logarithmic Error: RMLSE で評価しています。

定義は

f:id:hurutoriya:20181114122755p:plain

  •  \epsilon: RMSLE スコア
  •  n: 予測したデータの数
  •  p_i: 予測した値段
  •  a_i: 真の値段
  •  \log(x): xの自然対数

で、このスコアが低ければ低いほど、小さい誤差で値段を推定できたということになります。

RMLSEは直感的にわかりにくい指標なので、可視化して説明します。 以下の図は¥3,000の値段の対するRMSLEの誤差の範囲を可視化したものになります。

(2018/11/15 11:37~ https://plot.ly/ を使って可視化していたのですが無料閲覧数枠を超えてしまったので、普通の画像に差し替えました。無念です)

f:id:hurutoriya:20181115113703p:plain

横軸がRMSLEの値、縦軸が対応するRMSLEの誤差範囲となっています。 ログ基準での指標になっているので、RMLSEが1.0の場合、

  • 真値: ¥3,000
  • 推定値の誤差範囲: ¥1,103~¥8,156

となり実際のプロダクト上で稼働させるには難しい精度です。

今回開催したKaggle Competition 1st winner が公開しているモデルは RMLSE: 0.3875 (公開されている75行のカーネル) を叩き出しており、

  • 真値: ¥3,000
  • 推定値の誤差範囲: ¥2,051~¥4,387

となり、実際のプロダクション環境にも耐えうる精度です。

1位のチームによる100行未満で書かれた Code Golf が公開され、機械学習チーム全員がこのコードの簡潔さと美しさに驚きました。

Mercari Golf: 0.3875 CV in 75 LOC, 1900 s | Kaggle

100行に満たない短さですが、洗練されたPythonコードでMLPのモデルを実現しています。 実際に1位のチームの解法を米国版メルカリ最新データに対して適用しても、米国版メルカリで既に運用されている値段推定手法よりも圧倒的な高精度を達成することができました。

彼らの最終的なコードもGitHubで公開されています。

github.com

同じく解説スライドもGitHub上で公開されています

mercari-solution/yandex.pdf at master · pjankiewicz/mercari-solution · GitHub

まとめ

今回我々は 日本版 メルカリの商品値段推定に取り組んでいます。 Kaggleで提供したデータが英語のデータセットのため、日本版メルカリに適用する際には日本語の複雑性に起因する問題が発生します。 そのため 1位の手法も日本版メルカリのデータセットに適用時には、同程度のスコアは達成しませんでした。

ですが、開催した 「Mercari Price Suggestion Challenge」では商品値段推定のために多くのKagglerにより様々な手法・アイデアが議論されており、その内容は日本版メルカリの値段推定精度向上への大きな資産となっています。

値段推定機能の進展があり次第、詳細技術について技術ブログでご紹介させていただくのでご期待ください!