コンビニ商品の売上予測

気象シミュレーションデータから、各商品が何個売れるか当ててみよう!

賞金: 100,000 参加ユーザー数: 486 約2年前に終了

Gajitaku Post#4

 私達のチームは、ニューラルネットワークを使って、各項目ごとに値を推定しました。
初めての説明なので分かりづらい部分があるかもしれませんがご了承下さい...
時間があまりないため、プログラムをメモのまま提出させてもらいます(各ファイルが統一されていません...)。
すみません。

 各項目ごとの入力値を説明します。
 
 
・新たに作った入力値
 Week(0~6) umb012(前日・当日・翌日に降水量>0のとき1、そうでないときは0)
 high_bとhigh_a(前日翌日の最高気温) low_bとlow_a(前日翌日の最低気温)
 higher_b(最高気温が前日<当日なら1) higher_a(最高気温が当日<翌日なら1)
 lower_b(最低気温が前日<当日なら1) lower_a(最低気温が当日<翌日なら1)
 highsub_bとhighsub_a(最高気温:当日-前日 翌日-当日)
 lowsub_bとlowsub_a(最低気温:当日-前日 翌日-当日)
 high-low(最高気温-最低気温)
 日付はmonth date(dayの間違い)に分割  

入力値の決め方:散布図を見て関係ありそうな入力を選択
lossが低くなるように毎回適当に変えてる部分もあるので添付ファイルを参照してください...

・ice1
 highest lowest

・ice2
 highest lowest

・ice3
 highest lowest

・oden1
 highest lowest rainなど

・oden2
 highest high_b high_a higher_b lowest lower_b lower_a low_b low_a lowsub_b rain umb012など

・oden3
 highest high_b high_a higher_b lowest lower_b lower_a low_b low_a lowsub_b rain umb012など

・oden4
 highest lowest rain umb012など

・hot123 alcol123(同時学習 ただしbentoとmenも学習に入れる)
 highest lowest rain high-low high_b high_a low_b low_a week umb012など

・dessert12345
 rain week umb012 dateなど

・drink123456
 highest lowest rain high-low high_b high_a low_b low_aなど

・snack123
 rain week umb01など

・tild12
 rain week umb12

・bento men(同時学習)
 highest lowest rain high-low high_b high_a low_b low_a week umb012  

ニューラルネットワークモデルについて
 活性化関数:prelu
 optimizer:RAdam or Adam

その他
・hotとalcolを同時学習した理由
 はじめは全体の商品を一気に一つのモデルで算出するものだったのですが、個別にモデルを作るほうが評価が良くなったため、実践していました。しかし、hotとalcolだけは個別のモデルよりも同時学習したときのモデルのほうが評価が良かったため、個別ではなく同時学習をしました。

・bentoとmenを同時学習した理由
 weekでこの2種類の項目をみたときに、同じ曜日で売れるか売れないかが決まっていたため、同時に学習しました

・odenに使用したデータについて
 odenは7~9月は販売していないようだったので、データから削除しました

感想
 pinball-lossを初めて使用して、うまく挙動をつかめず苦労しました。
 外れ値について、そのデータをどう扱うか苦労しました。勝手に消してもいいのかどうかなど。
 publicの評価が良くなったらその予測が良くなった、というわけでもないのでそこの見極めが大変でした。
 
 publicLBが2位、privateLBが3位、終了後LBが1位ということで、初めての賞金コンペにしてはとても良い結果だったのではないかと思っています。
 
 大まかな説明しかできませんでしたので、質問があればどんどんお願いします。

Icon4
gajitaku
Icon4
gajitaku

追記
僕の使ったtrain_dataのlowestについて、-1.2の値が全て6.2になってしまっていました。最初にダウンロードした際に僕がミスをした可能性があります。申し訳ございません。

Icon6
T.Kaz

解法の共有、ありがとうございます。
とても勉強になります。
1件質問なのですが、NNの中間層の数やLayer数を伺ってよいでしょうか?
よろしくお願いいたします。

ニューラルネットワークモデルについて
 活性化関数:prelu
 optimizer:RAdam or Adam

Icon4
gajitaku

質問ありがとうございます。
各商品によってlossが1番低くなるように適当に変えているので一概に言えませんが、大体は

入力

64

16

出力

となっています。
複雑なモデルにしたい時は16を32にしたり、層を深くしたりしています。

Icon6
T.Kaz

ご回答ありがとうございます。
私も同じ方法で進めまして、追加で質問させてください。
今回、データ数も少なく、seedによってNNの出力値が大きく変動したのですが、
その辺りの検証方法や対策など、ご教示いただけると幸いです。
よろしくお願いいたします。

Icon4
gajitaku

l2正則化の大きさや、入力値の選択で、結果がどのように変化するか見るためにseed値を変えることはほぼしていないです。結果の検証方法としましては、横軸を実際の値、縦軸を予測値としたときに、どれほど直線(実測値=実測値)上にデータが分布してるかを確認しています。あとは単純にval_lossの大きさで確認しています。

Icon6
T.Kaz

ご回答ありがとうございます。
L2正則化は具体的に何を指しているでしょうか?Dropout?
お手数をおかけします、よろしくお願いいたします。

Icon4
gajitaku

https://ai-trend.jp/basic-study/neural-network/regularization/
こちらの記事が分かりやすいかと思います。
簡単に言いますと、過学習(回帰線がtrainデータに合わせ過ぎてしまう)を防ぐために、新たに重みの制限を加えて学習をさせるものです。l2正則化をしない時は、lossのみが最小になるように学習を進めますが、l2正則化を加えますと、最小にする対象をlossだけでなく、重みにも適用させて学習を進めてくれます。

Icon6
T.Kaz

ありがとうございます。確認してみます。

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