2022年4月13日から6月2日にかけて、SIGNATEにてソニーグループ合同のコンペティションが開催された。タスクは、世界各都市の大気観測データや外部データをもとに、特定の日時、場所におけるPM2.5の濃度を予測するというものだ。ソニーグループでは「クリエイティビティとテクノロジーの力で、世界を感動で満たす」というPurpose(存在意義)のもと、多種多様な事業を展開しており、特に近年は「環境」「社会」「コーポレートガバナンス」といった社会価値・サステナビリティを事業活動に統合することで、事業とテクノロジーを通じた社会や地球環境への取り組みを加速させている。 今回のコンペティションで優勝を勝ち取ったのは、pokapokalemonさん。学生時代はプログラミング経験がなかったにもかかわらず、なぜ優勝を掴むことができたのか。理由を尋ねると、「仮説構築と検証をとにかくやった」からだと答える。 今回は、pokapokalemonさんが本コンペティション参加に至ったきっかけや、優勝への道筋、今後コンペティションに参加を検討している方々への率直なメッセージを伺った。
学生時代にプログラミング経験はなし。盛り上がりを肌で感じてコンペティションに参加
今はデータサイエンティストとして働いていますが、学生時代にプログラミングの経験はありません。法学部を卒業し、東京海上日動システムズ株式会社に新卒で入社しました。その後フロントエンド開発の部署を経て、現在はデータ活用部という部署で働いています。 業務の内容としては、たとえば顧客の保険加入率や解約率などを予測し、保険の販売代理店に対しての提案やアドバイスなどを行っています。弊社では事業部でもBIツールを積極的に活用するなど、データ活用の機運は高まりつつあります。 現職ではテーブル形式の顧客データを使って分析や予測をする機会が多いため、スキルアップを念頭に置き、テーブル形式のデータを扱うコンペティションを探していました。コンペティションの経験は他プラットフォームも含めて3回ほどあり、SIGNATEでは「SIGNATE Quest」で20時間ほど学んでいました。 そんなときに本コンペティションを目にし、エントリー人数が国内のコンペティションとしてはかなり多く(最終参加人数:約1,353人)、予測値を提出している人もかなり多かったので、盛り上がっていて面白そうだ、と思って参加に至りました。
優勝につながったのは「350回」に及ぶ仮説検証
コンペティション期間中はとにかく仮説構築と検証をたくさん行いました。今回はオープンにされている外部データも追加してよいということだったので、データをもとにどのように予測できるか仮説を立て、仮説を立証できそうなデータを追加し、追加したデータから予測した結果を検証してさらにデータを追加する、といったサイクルをとにかく回しましたね。具体的には350回ほどでしょうか。ゴールデンウィーク中だったので取り組みやすかったのもありますが、参加者の中でもかなり試行錯誤を重ねたほうだと思います。 追加したのは地理関連のデータが多かったですね。たとえば、今回配布されたデータの集計期間が2019年から2021年なので、まず新型コロナウイルスの影響はありそうだ、と当たりをつけました。そこから、感染者数の推移や、その国の政府がどの程度感染拡大に対して厳しく対応(ロックダウンや行動制限など)しているのかを指数化したデータが公開されていたので、そのデータを追加したり、首都から観測点の距離データを追加したりもしました。 試行錯誤に役立ったのが、TableauなどのBIツールです。いわゆるEDA(探索的データ分析)を行うのに役立ち、データの中身を分かりやすく可視化することで、仮説検証のスピードが上がります。Tableauを用いれば、たとえば世界地図に観測点をプロットすることでPM2.5の濃度を色の濃淡で示すことが可能です。BIツールは仮説検証にかなり役立ちました。
苦労したのはデータの観測頻度のばらつき。空間的に幅を取ることで対処
苦労した点は、大気観測データにおける観測頻度のばらつきへの対処です。観測点が合計302地点、そのうち学習用として200地点が用意されていたのですが、各地点における観測頻度の差が激しかった。たとえば、ある地点では2019年から2021年の3年間で1080日観測されているのに、別の地点ではわずか78日しか観測されていない、という具合です。 時系列データを扱う際には、過去のデータをもとに現在のデータの特徴量を増やす、いわゆる「ラグ特徴量」を用いるケースが多いかと思います。たとえば、ある国のA地点における特定の日のPM2.5を予測するとして、おそらく一日前のデータも関係あるだろうと仮定し、一行前の前日のデータも追加する、ということですね。しかし、A地点が毎日観測しているのに対し、B地点では一ヶ月に一回しか観測していない場合、同じ一行前の値にも関わらずA地点は一日前、B地点は一ヶ月前の値を参照することになり、データの意味合いが変わってしまいます。 そこで、対策として「時空間的に幅を取る」ということをしました。たとえば、B地点では毎日観測していなくとも、その国の他の場所では毎日観測している地点があるとします。そこで、Bの一ヶ月前の値と、毎日観測しているA地点との平均を取る。こうして国ごとに一週間の平均、一ヶ月の平均を使用することでデータの特徴量を増やせるので、データの意味合いが激的に変わってしまうことが起こりにくくなります。 現職ではこのようなケースの経験はなかったのですが、仮説検証のサイクルを回す中で、自分なりにたどり着いた手法でした。また以前、世界的なデータサイエンティストの方が、「コンペティションではいきなりデータを加工してコードを書く前に、まずはモデルの精度を正しく評価する仕組みを作ることが重要。そうしないとコンパスも持たず冒険するのと一緒だ」と仰っていたので、モデルを正しく評価する仕組みの部分を一番初めにきちんと考えました。こうした点が優勝につながったポイントかなと思います。
コンペティションはスキルアップにつながるゲーム。楽しんでやろう
今回のコンペティションを通して、初めて外部データを扱う経験をしました。今あるデータだけではなく、このデータを追加すればモデルの精度に効くのでは?という視点を持てたのはとても大きいと思います。今回試行錯誤した経験も、今後社内で携わるプロジェクトを推進する上で大きな助けになると感じています。 優勝したことで、社内でも年次が上の方々からすごいね!と声をかけていただけるなど、よい影響がありました。また、データサイエンティストとして社外のイベントなどに出席する際も、優勝という実績を提示できるのは様々な方との関係構築に大きなアドバンテージになり、今後の社会人人生に大いに活きてくると思います。 個人的に、コンペティションはスキルアップにもつながるゲームというイメージを持っています。コンペティションで楽しい瞬間は、自分が立てた仮説へのフィードバックがモデルの精度という形ですぐ返ってくることです。ここがだめだったのか、じゃあ次こうしてみよう、と方策を立て、さらに前に進んでいくプロセスが純粋に楽しいです。
コンペティション参加を検討している方へのメッセージ
コンペティションはひとりでやるものではありません。他の参加者の予測値の提出回数やスコアがリアルタイムで分かります。他の人が頑張っている様子を見ることが自分のモチベーションになり、試行錯誤する中で触れたことのない技術や手法に触れ、結果的に自らのスキルアップにつながるゲーム。この循環がすごくいいな、と思っています。これから参加される方は、ぜひ楽しみながらやりましょう! <ソニーグループ株式会社主催「ソニーグループ合同 データ分析コンペティション(for Recruiting)」の入賞者レポートはこちら>