機械学習と線形モデルでの時系列モデリングの比較

DataRobotのデータサイエンティスト中野です。

最近会うお客様からDataRobotを使って時系列予測を行いたいというリクエストを受けることが大変多くなって来たため、売上予測をテーマにワークショプを開催させていただくことになりました。詳細はこちらから。今回のブログでは、上記ワークショップに興味を持った方向けにより深いお話をさせていただこうと思います。

少し専門的なトピックではありますが、機械学習で行う時系列予測と昔からよく行われてきた線形の時系列解析(ARIMA、指数平滑化法など)がどう異なっているのかを説明していきます。例えば、時系列データの解析ではファイナンス分野においてはニューラルネットワークによる機械学習が最近よく行われています(ちなみにはDataRobotにはニューラルネットのアルゴリズムも含まれています)。

今回、まず最初に機械学習で行う時系列予測と線形の時系列解析の大きな違いを説明します。特に線形の時系列解析の代表的なARIMAモデルを使った際の違いに焦点を当てて説明していきます。

DataRobotは機械学習の多くのプロセスを自動化するプラットフォームです。そこで次に、DataRobotを用いて時系列予測を行なった場合、RやPythonを用いてARIMAを作った場合と比べてどれぐらい作業が自動化されているかという面を比較します。

最後にARIMAの機械学習(DataRobot)の性能を比較するために弊社で行われた、多数のデータセットでのARIMAとDataRobotでの予測精度の比較実験の結果をまとめます。

線形時系列モデル vs 機械学習での時系列予測

線形の時系列解析の代表的なARIMAモデルに焦点を当てて、機械学習で行う時系列予測と線形の時系列解析の大きな違いを説明します。

Screen Shot 2017-08-31 at 9.36.51

線型性 vs 非線形性

機械学習で時系列予測を行う最大のメリットはより現実に近い事象を説明できる非線形モデリング手法を使って分析できるということです。実ビジネスで存在するデータには線形的な関係で説明できない時系列も多く存在します。ニューラルネットがファイナンスの予測に多く使われているといったのも正にこれが理由です。実際DataRobotで分析を行っていると、十分データが存在する際にはXGBoostや非線形のカーネルを用いたSVMなどの非線形なモデルが精度の高いモデルとして上がってくることがほとんどです。一方でデータが少ない際には回帰モデルなどが精度の良いモデルとして上がって来やすくなります。

Screen Shot 2017-08-31 at 10.01.39

これに対して線形モデルは、構造が簡単に数式で表されるためモデルの構造が自明である一方、複雑な事象をうまく説明できないことも見られます。

一方で、線形モデルではその原因となる事象が全てわかっていない事柄をモデリングに上手く構造として組み込んでやることができるという良い一面もあります。具体的には時系列問題では、中身がよくわかっていない事象が未来にも影響を及ぼす(自己相関があるという風な言い方をされます)という事象が存在します。

例えば、マーケティングの毎月の予算がズボラな管理しかしていなくて、はっきりわからない場合、その売上への貢献度をモデリングするのは難しくなります。そこでそれを毎月の平均的なマーケテティング費用からの乖離ををホワイトノイズ(ランダムで起こっているが構造は一定でしかも長期間で見ると平均的にゼロ」なノイズ)で表すとします。

ほとんどの場合、マーケティングによる売上への影響は間近のマーケティングからだけでなく、前月・前々月といった過去のマーケティングのからも受けます。そこで月々のマーケティング予算をホワイトノイズlatex_76dfcac6476beabcb716bd2d731cea06として表現して、

texclip20170828080842

と書けるわけです。つまり、今月の売上には、今月のマーケティング費用と時間の経過に伴い影響力が目減りした前月のマーケティング費用の50%分の影響、前々月のマーケティング費用の30%分の影響があるということですね。

機械学習では、マーケティング費用が本当にわかっている場合には説明変数にこれらの変数を使えばモデルに組み込むことができるのですが、今回の様にはっきりとわかっていない場合はこの様な事象を機械学習で説明することは難しくなります。

簡単にここまでをまとめると、用意できるデータ量が多い、原因となる事象を把握して説明変数として使うことができる場合は機械学習を用いると非線形で複雑なパターンも認識できる良いモデルを生成する事が可能です。一方データが少ない、あるいは原因となる事象が把握できていない場合には線形時系列モデルの方が良い精度を示すことがよく見受けられます。

周期性のあるデータへの対応

実ビジネスのデータでは極端でしかも単一でなく複数の周期性を持つデータが多く見受けられます。例えば週末の売上が極端に多く、週末に50%平日で50%の売上を計上するというのは小売店ではよく見られることです。それにかけてクリスマスや母の日といったイベントのパターンも存在し、これらのパターンが複雑に絡まりあって一見しても解らないパターンとなっています。

線形時系列モデルの中でも手法によって異なるのでARIMAに限定した事柄ですが、ARIMAでは一般のRやPythonのパッケージではこの様な複数の周期性が混在しているデータに対する分析はデフォルトではサポートされておらず、また周期が長期間に渡る場合、あるいは非常に極端な周期性パターンのある場合でのモデリングは難しいと言われています*2

これに対して、機械学習では周期的なパターンをもたらす事象を全て説明変数として使ってモデリングを行うことで、様々な複雑な周期的パターンをモデリングすることが可能です。例えばそれが不定期なセールなどといった、ARIMAでは対応できないようなものでも、そのセールのある日程を説明変数としてタグ付けすることで、不定期なパターンも説明することができます。

また、その周期が日次データで1年に1度と言うような長期の周期性であっても説明変数1年の何日目かと言う説明変数によってモデリング可能です。

 

DataRobotを用いた時系列予測

DataRobotを用いて時系列予測を行なった場合、RやPythonを用いてARIMAを作った場合と比べてどれぐらい作業が自動化されているかという面の比較を行います。

Screen Shot 2017-08-31 at 9.41.29

ARIMAのモデリングプロセス

RやPythonでARIMAをモデリングする際においては、複数のプロセスが必要です。時系列分析においてもインプットデータに偏りがある場合は、データを変換して偏りを除去する必要があります。

また周期性のあるデータの場合には、データより周期性を特定し差分をとって周期性を取り除く作業を行います。例えばt = 1, m + 1, 2m + 1,・・・ごとにパターンの現れる周期mのデータではlatex_9ec9379d230efb35e9291f24af804879という時系列データに変換します。

この後ARIMAモデルのハイパーパラメーターの値を複数の検定で特定し*3、そのトレーニングデータに対してのモデルの誤差(サンプル内エラーと呼ばれ、AIC・BICと言う指標がよく使われます)がどれほどあるのかを計算するプロセスを繰り返し、最も誤差の小さなモデルを最終モデルとして選びます(これは大まかなプロセスとなります。詳細は*4を参照ください)。

DataRobotでのモデリングプロセス

DataRobotでは多くのプロセスを自動化していて、偏りのあるデータに対してはBox-Cox変換などを自動で行なってデータを正規分布の様な偏りのない分布に近くなるよう変換します。

機械学習では、先ほど説明した様に、周期性を説明変数を用いて認識するのですが、DataRobotではビジネスにおいてよく見られる、曜日、月、月の日(月が始まって何日目か)、年などといった季節性のパターンを自動で日付より抽出するという特徴量エンジニアリングを自動で行います。

Screen Shot 2017-08-31 at 10.05.28

また週番号といったその他の周期的な特徴量もDataRobot内でフィーチャーエンジニアリングして作成することができます。

さらにハイパーパラメーターのチューニングに置いてDataRobotでは先ほどのARIMAでのプロセスとは異なった「バックテスト」という手法を用い、またそのプロセスも自動で行なっています。ARIMAで説明したAIC・BICはサンプル内予測誤差(トレーニングデータに対してモデルの誤差がどれほどあるのか)の推定値ですが、DataRobotでは実際に未来のデータ(サンプル外データ)で検定して誤差をはかります。例えば、2週間後を予測するモデルを作成する際には実際にモデルを作成したデータより2週間先のデータで検定を行なって、その際に精度の高いハイパーパラメーターとモデルの組み合わせを選択し、実際に未来を予測する精度が最も高くなるようにしています。

同時にDataRobotではモデルを作ってそれより未来のデータで検定するというプロセスを複数回行う時系列の交差検定のような事も行なっています。これによって、一度のバックテストよりもさらに現実に予測を行う際の精度に近い検定値を計算することが可能です。

Screen Shot 2017-08-31 at 9.29.14.png

さらに線形時系列解析では特殊な検定が必要なトレンドのあるデータもDataRobotでは自動で対応が可能です。研究によると機械学習を用いて線形トレンドのある単位根過程をモデリングする際には先ず線形モデルをフィッテイングしてトレンドを見つけ、ターゲット変数と線形モデルの残差を機械学習のモデリングするという手法良い精度が出ると言う結果が出ています*4。DataRobotではこのプロセスを自動で行う、つまりトレンドを線形モデルで抽出し残りデータに対するフィッテイングをXGBoostで行うという一連のモデリングを自動で行うブループリントを用意しています。(ブループリントはアルゴリズムとその前後の前処理をまとめて1組に考えた処理プロセスのことです。)

このようにDataRobotではモデリングの際の煩雑なプロセスの多くを自動で処理します。

 

DataRobot vs ARIMAの精度の比較

弊社では今回約70の幅広い時系列の実データを集め、ARIMA(RのForecastパッケージのauto.arimaを利用)とDataRobotによる比較を行いました。データはテストデータと検証データに分けられ、それぞれのモデルを検証データを用いてジニ係数で比較しました。更に今回の検証においては比較を単純化するためDataRobotでは時系列のみを説明変数とし、それ以外の説明変数は使わないように行っています。

Screen Shot 2017-08-31 at 10.09.31

ジニ係数は1が完璧に予測できていて、−1であれば全く反対に予測していると言う指標になっており、DataRobotでの平均Gini係数は0.41、ARIMAの平均Gini係数は0.21となっており、上記の表からもわかるようにDataRobotの方が精度が大幅に良いことがわかります。

まとめ

今回機械学習で行う時系列予測と昔からよく行われてきた線形の時系列解析の違いを簡単にまとめさせていただきました。さらに詳細を知られたい方や、実際にDataRobotでの時系列モデリングする様子を見て見たい方は勉強会なども行なって行きたいと思うのでご期待ください。

*1 : 沖本竜義先生の本

*2 : Dr Hyndmanのこちらの記事を参考ください。

*3 : Rのauto.arimaではこのハイパーパラメーターチューニングが自動で行われる。

*4 : こちらの参考書(英語)を参考ください。

*5 : こちらの論文(英語)を参考ください。

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中