はじめに
データ分析系コンペに初参加したことを振り返ります。
普段のデータ分析系の案件から離れて、コンペに参加することで新たな知見を得ようということで、会社の業務の一環として取り組みました。
参加したコンペは Weather Challenge:雲画像予測 。バーチャルYouTuberポン子さんのライブ配信をよくみてて親しみがあったという理由で選びました。何かしら愛着があった方がモチベーションにつながります(結構大事)。
結果は87組中11位!! 初参加で何とか銀メダル🥈を獲得しました。
また、共にコンペを格闘した数学つよつよのチームメイト @myjm さんに感謝します。
コンペ概要
気象衛星で撮影された雲画像と、対応する気象解析データを使って24時間先の雲の変化を予測し、画像を生成するというタスクです。
「画像生成・未来予測」と複数のタスクが含まれる、チャレンジングなコンペでした。
衛星画像データ
このグレースケール画像(512, 672)が1時間ごとに1枚与えられます。
気象解析データ
気象解析データは(例えば850hPa等圧面の気温を)可視化するとこのような感じ。
(128, 168)の平面グリッドデータになっています。各グリットに気温、湿度、風速など、様々な気象データが格納され、さらにこの平面グリッドデータが3次元的に様々な高度で与えられています。
平面グリッドデータなので、数値データでありながら画像データのような振る舞いをするため、取り扱いに難儀しました。
タスク詳細
2016年、2017年のデータで学習し、2018年のデータを予測します。
2018年のデータは一部データが非公開になっていて、公開されているデータを元に、未知のデータを予測します。
基本戦略
- まずは一番最初に見つけた手法でどんなスコアでもいいからサブミットし、ベースモデルを作る
- その後衛星画像・気象データの特徴量エンジニアリング
しかし、一切の特徴量エンジアリングや前処理がスコア悪化をもたらしてしまった。。しかたなく、最終的にこのベースラインをsubmitしました。
モデル
画像 + 時系列 というタスクなので、CNN, RNN のキーワードで手法をサーベイしました。
見つかった Prednet という video prediction 手法を採用。
衛星画像を1セット48枚に分割し、24枚で学習 → 24枚で外挿予測した。気象データは使用していない。
外挿予測をするために正解画像を使ってウォーミングアップをするイメージです。よくみると、最初の24枚まではどんどん予測精度が良くなっていき、外挿からの24枚は精度がどんどん悪くなっているのがわかります。
アニメーションにしたもの
前処理
- データサイズを1/4に縮小 (512, 672) → (128, 168)
- 欠損している画像は直前の画像をコピー
その他試したこと
以下、試したことは全てスコア悪化をもたらした。
- データサイズを1/8, 1/16にして学習
- 大まかな季節分割をして季節ごとに学習
- ウィンドウサイズ24でデータをずらしてデータセットを2倍に水増し
- 96枚で学習 → 24枚で外挿予測
- 18枚で学習 → 24枚で外挿予測
- バッチサイズ1で学習
- 画像の正規化、ノイズ除去
反省点
- Prednetの改良に拘泥してしまい、別モデルのサーベイを怠った
- 「気象データは使わない」という戦略を取れなかった
この2点に尽きます!!スコアが伸びなかったらいったん冷静になって別の手法を探すことに徹した方がよかったです。
こちらのブログ Kaggleを取り掛かるまでにやったこととと、モチベーションの維持のために必要だったこと - にほんごのれんしゅう にその点が言及されていました。
コンペに参加してスコアが伸び悩んだ場合、普段の案件でも煮詰まった場合はこのことを肝に命じておきます。
おわりに
思うようにスコアが伸びなかったことが悔やまれますが、初のコンペ参加でやるべきことをしっかりやったので銀メダルを取ることができました。タスクの整理・タスクにあった手法の調査・データの前処理などデータ分析の定石はしっかりと抑えられていました。
また、コンペに参加することでチームでの分析、クラウドの活用、精度を上げるための試行錯誤のプロセスなど、スキルがガンガン上がった実感があります。
今後もスキルアップ目指してどんどんコンペに参加していきたいです。