omohayui blog

おも‐はゆ・い【面映ゆい】[形][文]おもはゆ・し[ク]《顔を合わせるとまばゆく感じられる意》きまりが悪い。てれくさい。

分析コンペに初参加した話

なぜ参加したのか?

GTUGGirlsスタッフ繋がりの友人3人で「Kaggleとデータサイエンスを勉強する会」を随分前から週一で行っているが、輪読会がメインで試しにトレーニングコンペをやってみるぐらいで一度もコンペに参加したことがなく、そろそろ何かにサブミットしたいということで参加してみた。

どんなコンペに参加したのか?

チームで参加すると言っても我々は素人なので、ハードルの低そうな Nishika の「生鮮野菜の価格予測」というコンペに参加した。
ハードルが低そうと言っても、ちゃんと賞金とメダル・スコア付与ありのコンペだ。

大田市場で取引された各生鮮野菜の日次の卸売価格、取引量、産地などのトレーニングデータと全国各地の気象データから、2022年5月の各野菜の卸売価格を予想するというものだ。

データから色々推測する

  • トレインデータに入っている野菜は44種類ほどだが、テストデータに入ってるのは16種類だけ
    • 最終的に予測が必要な16種類だけに絞ってモデルを作るべきか?他の野菜も考慮して作るべきか?
  • 野菜の種類によって季節ごとに価格が変動するもの、あまり変動しないものがあり、差がかなり大きい
    • 野菜ごとにモデルを作った方が良さそう
  • 取引が極端に少ない日がある
    • 大田市場は水曜が休みのことが多いらしい、休場日カレンダーのデータを使った方が良さそう
  • 各野菜の年次の卸売価格を比較すると、年ごとに大きく異る
    • 毎年の5月のデータを重視するよりも、直近のデータを重視した方が良さそう

データの前処理

  • このコンペは初心者向けにチュートリアルのNotebookが用意されていたので、それをベースに進めていった
    • チュートリアルと大きく違うところは月次でデータをまとめてしまっているところを日次で処理していったところ
  • トレインデータと気象データのエリア名が異なるのでマッピングを作成してエリア名を統一する
    • 「各地」となっているところは全国の平均気象データを作って補完

学習・推論

  • 過去の値をラグ特徴量として扱ったが、年単位のデータは振り幅が大きい、季節を考慮すると半年前のデータなどは返ってノイズになるということで、1,2,3,12ヶ月前の日次データを特徴量にすることにした
    • ただ、このやり方だと特定の野菜の xヶ月前の取引が丁度存在しないというケースは発生するので、その場合はその xヶ月前の前後1週間のデータの平均で補完した
  • 学習には安定と実績のLightGBMを使った
  • バリデーションはHold-out法を使った

コンペの結果は?

全然準備する時間が足りなくて1人1回ずつのサブミットになってしまったが、自分のサブミットしたファイルが最終スコア 15.703526 (55位/299) という初めてにしてはまずまずの結果を出したので良かった。一応メダルも貰えるらしい。

今後は?

勉強会は今後も続けて行くことになっていて、次回は中古マンションの価格予想というコンペに参加しようと計画している。
分析ド素人の私が(普段はGoでAPIとか、Elasticsearchで検索インフラのメンテしてる)ここまでモチベーションを保てているのはひとえに一緒に勉強会をしてくれている友人たちのおかげである。本当に感謝。

▼勉強会で扱った書籍