3rd place solution(by Oregin)

お疲れ様です。俺人です。
今回の野菜取引価格の予測で3位の解法を紹介させていただきます。
内容的には同じ内容ですが、図等を追加した記事をブログでも公開しておりますので、併せてご参照ください。
【3位解法】Probspace開催「野菜取引価格の予測」の振り返り。
(https://oregin-ai.hatenablog.com/entry/2023/08/23/190148)

1.全体構成

野菜についてどのような分類をして予測するか、天候情報をどのように加工して、何を選択するかで知恵を絞りました。
全体構成としては、大きく分けて以下の2つの構成で構築し、それぞれの予測値の平均を最終的な提出としました。

  • 野菜を種類(根菜、葉菜類、果実など)に分類し、分類ごとにモデル・特徴量を選択して学習・予測
  • 野菜の価格周期をスペクトラム化しクラスタリングして、クラスごとにモデル・特徴量を選択して学習・予測
    *クラスタリングについてお問い合わせをいただいたので、サンプルコードをGithubに公開しました。
    https://github.com/Oregin-ML/Classification_of_vegetable_prices_by_spectrum_image

地域に関しても考慮に入れようか悩んだのですが、今回の価格は生産地ではなく消費地の価格とのことでしたので、地域別の予測はあまり影響しないと仮定して、野菜の種類だけに注目することとしました。

2.特徴量選択

特徴量については、価格の時系列データのほかに天候情報について以下の通り加工し、分類した野菜毎に、選択して学習に利用しました。

【特徴量の加工】

元データ

  • 天候情報の元データを日照時間、降水量、降雪量、最高気温、最低気温、平均気温の6つに分類

累積和

  • 日照時間、降水量の合計、降雪量合計、平均気温、最低気温25℃以上日数、最高気温25℃以上日数、最低気温0℃未満日数、最高気温0℃未満日数、日照時間0.1時間未満日数について、累積和を特徴量として追加。
  • 累積については、2か月、3か月、4か月、6か月、12か月のパターンで累積和を計算。

差分

  • 最高気温と最低気温の差、平均気温と最低気温の差、最高気温と平均気温の差、最高気温の平均と最低気温の平均の差を特徴量として追加。

閾値以上、以下のフラグ

  • 日照時間につき、100,150,200,250,300を閾値として以上、以下のフラグを特徴量として追加。
  • 降水量の合計につき、10,50,100,200,300,400,500を閾値として以上、以下のフラグを特徴量として追加。
  • 降雪量の後継につき、5,10,30,50,100,150,200を閾値として以上、以下のフラグを特徴量として追加。
  • 最高気温の平均、最低気温の平均、平均気温につき、5,10,15,20,25,30,35を閾値として以上、以下のフラグを特徴量として追加。

【特徴量の選択】

上記の各特徴量について、野菜の分類ごとに特徴量を選択して学習・予測を行いました。

| 野菜分類 | 日照時間 | 降水量 | 降雪量 |・・・・
| 茸  類 | ×    | ×   | ×   |・・・
| 根菜直根 | 〇    | ×   | ×   |・・・
・・・

3.モデル構築

モデルは野菜分類ごとに学習・予測を行いました。

それぞれのモデルは基本的にはProbSpaceのトピックに投稿させていただいている以下のモデルを基本として、LSTMの部分にSimpleRNN、GRUを利用した3種類のモデルにつき、野菜分類ごとにハイパーパラメーターを調整して作成しています。

LSTM Base line−コメント付き (LB 0.27614 ) by Oregin (https://comp.probspace.com/competitions/vegetable_price/discussions/Oregin-Post9ed99a078ff6b67ea44d)

4.感想

今回のコンペは、野菜の価格を予測するという時系列データを扱った課題でした。
3位という結果を残せて満足しているのですが、悔いが残る点としては、以下の2点です。

1点目は、最初の段階で地域による予測の分類は行わなかったので、該当する野菜の主な産地の天候情報に絞るなどの工夫で、もう少し精度があげられたのではないかという点です。

2点目は、価格について、そのままの値を利用して予測しましたが、対数化を試すことをすっかり忘れてしまっており、対数化することでも精度があげられたのではないかという点です。

他にも細かいところでは色々できたのではないかと考えています。

皆さんの解法を参考にさせていただきながら、今後のコンペに生かしていきたいと思います。

5.謝辞

最後となってしまいましたが、本コンペを運営してくださいました、Probspase の運営の皆様、一緒にコンペに取り組んでいらっしゃった皆様、Twitter上でやりとりを実施させていただいた皆様に心より感謝申し上げます。

今後とも、よろしくお願いいたします。

Icon20
cosho

3位入賞おめでとうございます!
分かり易いご説明で大変参考になります。
素人質問で恐縮ですが、何点がご質問がございます。

①ニューラルネットワーク系のモデルを活用された根拠はございますか。
②分類ごとのモデル選択はどのような基準で行われたのでしょうか。
③価格周期のスペクトラム化の詳細について、参考になる記事がございましたらぜひ教えてください。

チームでcatboost、SARIMA等の結果をアンサンブルして予測しましたが、validation結果とLBの動きが合わずに苦戦しました。
上記、今後のために伺えますと幸いです。よろしくお願いいたします!

Aws4 request&x amz signedheaders=host&x amz signature=99b5ba8ada8f801465187fcd667262ca86af69a0459ae20e92cea68b77f7a939
Oregin

コメントありがとうございます!
ご質問につき、以下の通り回答させていただきます。

①ニューラルネットワーク系のモデルを活用した根拠について
今回のコンペでは単一の値の予測ではなく、複数項目の予測だったのと、価格データ以外の気象情報など複数の特徴量を取り込むので、ニューラルネットワークのほうが簡単にモデルが作れそうだなという考えでLSTMのモデル作ってみました。作ってみたところ、意外とうまくいったので、ニューラルネットワークで取り組んでみました。

➁分類ごとのモデルの選択はどのような基準で行ったか。
モデルはLSTM、SimpleRNN、GRUの3種類から選んでいますが、モデル選択にはあまり時間をかけず、3種類をためしてみて、LBスコアが向上したものを採用しています。
なお、モデルの選択よりも特徴量の選択に力をいれました。野菜の種類ごとに、日照時間が効くのではないか、寒い季節の野菜は閾値以下の気温のフラグを立てた項目が効くのではないかといったように色々試しながら取り組みました。

③価格周期のスペクトラム化の詳細について、参考になる記事
スペクトラム化から野菜の分類までのコードをコメント付与してGithubに公開いたしました。
ご参考にしていただければと思います。
https://github.com/Oregin-ML/Classification_of_vegetable_prices_by_spectrum_image

以上、ご回答になっていますでしょうか。

Icon20
cosho

ご回答ありがとうございます!
モデル選択の経緯について、承知しました。
やはり特徴量は分類ごとに丁寧に検討することが大事なのですね。

またスペクトラム化コードのご提供、とてもありがたいです。
活用させていただきます。

丁寧に回答くださり、誠にありがとうございました!!

Favicon
new user
コメントするには 新規登録 もしくは ログイン が必要です。