LINE株式会社は、2023年10月1日にLINEヤフー株式会社になりました。LINEヤフー株式会社の新しいブログはこちらです。 LINEヤフー Tech Blog

Blog


深層学習時系列予測モデルのライブラリー実装とLINEスタンプの月次売上予測

はじめに

 初めまして。東京大学工学系研究科修士2年の西尾健人と申します。普段の研究ではグラフニューラルネットワークを用いて物質の構造からその物性を予測するモデルの開発に関する研究を行っています。6月から7月の2ヶ月に渡り週2〜3日、内定者アルバイトとしてData Science Developmentチームの業務をお手伝いさせていただきました。本記事では私が行った業務についてご紹介します。

背景

 Data Science Developmentチームでは属人化されがちであったデータ分析の知見や手法を全社のデータサイエンティストが使いやすくなるように,分析に必要な共通のツールや基盤を開発・整備しています。今回のアルバイトでは、時系列予測に関するプロジェクトの業務をお手伝いさせていただきました。

 時系列予測プロジェクトでは時系列解析・予測のPython用OSSであるdartsパッケージとそれを拡張実装した独自ライブラリであるMLC Forecastingを開発することで、時系列予測の手法を使いやすい共通のインターフェースで提供しています。今回のアルバイトでは深層学習時系列予測モデルの1つであるLSTNetをライブラリーに実装することで、手法を手軽に試せるようにすることを目指しました。

 また、ライブラリー実装された手法をLINEスタンプのサービスに適用することで、月次売上の予測精度向上にも取り組みました。

取り組んだこと

LSTNetのライブラリー実装

 LSTNetは"Modeling Long and Short Term Temporal Patterns with Deep Neural Networks"で提案された深層学習を用いた時系列予測モデルの1つであり、非定常な時系列に対してもロバストかつ高精度に予測ができるとされており、この手法を簡単に使えるようにするために、時系列予測プロジェクト内のライブラリーへ実装しました。

 LSTNetは特徴的な3つのコンポーネントを有しています。1つ目が多変量時系列間の相関を学習するCNN層で、短期的な時間パターンを捉えることを目的としています。2つ目が時間方向の相関を学習するRNN層とRNN-skip層で、長期的なパターンを捉えることを目的としています。RNN-skip層では任意の時間間隔に対する長期パターンや周期を学習することを目的としており、等間隔にskipした時系列データに対してRNNを適用することによって周期的な時間パターンを抽出します。3つ目が線形自己回帰層で、NNが持つスケール変化に対する鈍感さを改善し、ロバストな予測が行えるようにすることを目的としています。

 今回のアルバイトでは、著者実装を参考にこのモデルを時系列予測プロジェクト内のライブラリーに実装しました。ライブラリーに実装する上で重要なのは、アルゴリズムを壊すことなくインターフェースを揃えて実装することなので、既にライブラリー実装されている他のモデルを参考にして実装を行いました。また、著者実装内にあった致命的なバグ(データスプリットを行う際にデータリークが生じている)も解消し、適切な前処理関数、モデルのアルゴリズム、そしてドキュメントとユニットテストを実装しました。

 ライブラリー実装したモデルのアルゴリズムの正当性を検証するために、論文内で評価されているデータセットで再現実験を行い評価指標であるCORR(正解値と予測値の相関係数)を用いて比較したところ、同等の精度で予測が行えたため問題なく実装できたと判断しました。

データセット

CORRの文献値

ライブラリー実装したモデルでのCORR

黒線:正解値、青線:予測値

Exchange-Rate

0.9511

0.9500

Solar-energy

0.9467

0.9421

LINEスタンプの月次売上の時系列予測

 長期的なKPIの設定や事業の方向性を決定する上で精度の高い売上予測は重要です。LINEスタンプでは毎週KPIに関するミーティングが行われており、その中で月次の売上予測が共有され、意思決定に活用されています。現状、LINEスタンプの売上予測は非常にシンプルなルールベースの手法で算出されていました。我々は、時系列予測プロジェクトで開発しているライブラリーに実装されている高度なアルゴリズムを活用することで予測精度の向上を実現できないか検証しました

 今回ライブラリーに新たに実装したLSTNetとdartsに既に実装されているProphetモデルを用いて予測を行い、従来のルールベースの手法と予測精度を比較しました。2015/4~2021/12までのデータを訓練、2022/1~2022/12までのデータを検証データとしてモデルの探索を行い、2023/1~2023/6までのデータをテストデータとして精度の比較を行った結果、LSTNet・Prophetとともに従来手法を上回る精度が得られ、特に、Prophetを用いることで従来手法の半分程度の誤差で予測を行うことができました。

 さらに、学習のさせ方を工夫することでLSTNetの精度向上にも取り組みました。Prophetモデルではトレンドや季節性を陽に分けて予測を行いますが、LSTNetでは時系列のもつトレンドや季節性を陽には扱わずデータセットから学習します。しかし、今回扱っている月次売上のデータはデータ数がそこまで大きくないことに加えて、トレンドや周期性が人間の目で見ても判別できる程度にシンプルであったため、これらを分離して学習することを考えました。時系列データをトレンド、季節性、ノイズ部分に分解し、トレンド部分と季節性&ノイズ部分で2つのLSTNetの学習を行った結果、やや精度が向上するにとどまり、Prophetを用いた手法には及びませんでした。この原因としては、トレンド部分の非定常性が影響していると考えられます。深層学習系の手法では非定常な時系列データを予測することは未だ難しく、トレンド部分の予測誤差が全体の精度向上のボトルネックとなったと考えられます。トレンド部分の予測、を古典的な手法を含めた様々な手法を検討することによって精度の向上が可能か、今後検討の余地があると思いました。

 これらの検証結果を事業部の方に共有し、ライブラリー実装されているモデルを用いた時系列予測が導入されることが決定しました。事業部の方からは、日次での予測をすることで曜日のトレンドや月初月末の傾向を見たり、プロダクト単位での予測によって解像度を上げられたらより良いというフィードバックを頂けて、今後の分析の方針を立てることもできました。

最後に

 実際にモデリングを行い、PR作成し、レビューを受けるという開発の一連の流れを体験することができて、とても良い経験になりました。また、研究や個人レベルでは扱えない規模のデータを扱えたこと、事業部の方と調整しながら予測を進めたことでデータサイエンティストの業務理解が深まりとても学びの深い2ヶ月になりました。

 大規模な時系列データの予測や解析は初めてで不安もありましたが、メンターの今井さんをはじめサポートしてくださった社員の方々のおかげで充実したアルバイトになりました!また、社員の方々の実装力や知識がとても高く、本当に学ぶことが多かったです。

 2ヶ月という短い期間でしたが、大変ありがとうございました!