渋谷駅前で働くデータサイエンティストのブログ

元祖「六本木で働くデータサイエンティスト」です / 道玄坂→銀座→東京→六本木→渋谷駅前

とある実験の記録

先日書いたこの記事ですが、「トイデータとは言え乱数シードを一つに決めて発生させたランダムウォークに対して実験をしているので、乱数シードを複数通りに変えてみたら結果は変わってくる(再現しない)のではないか?」という指摘を何人かの友人知人から貰いました。正直言って多項式フィッティングには何の思い入れもないのですが、再現性があるかどうかについては単純に気になるところです。


ちなみに、以前沖本本で勉強した際にあった「ランダムウォークには平均回帰性がなく時間と共に不確実性が増すため事実上予測不可能(特に長期予測)」という議論の通りで、本来ならランダムウォークに対して「予測」を行うのはそもそも適切ではありません。ただし、短期予測なら例えば状態空間モデルやBSTS的な方法で多少は精度を改善できるのでは?と考えていたのは事実で、同じことが無根拠でナンセンスな多項式フィッティングでも出来たら面白いかもと思ったというのも先日の記事の狙いの一つでした。


ということで、物は試しということで実験をやってみました。やり方は先日の記事から少し変えていますが大体同じで、

  • 乱数シード101から300までの200通りで生成したランダムウォークで実験
  • ランダムウォークの長さ(サイズ)は360に固定
  • データを359:1に分け、前者をtrain + val、後者をtestとする
  • さらにtrain:valは80%:20%とする
  • 多項式フィッティングはデフォルト20次で、CVする場合はvalでベストスコアを出した次数のモデルをtrainに対して推定したものを用いてtest期間の値を予測する
  • 状態空間モデルによるフィッティングは{bsts}でローカルレベルモデルとローカル線形トレンドモデルをそれぞれ別にtrain + valで推定し、直接test期間の値を短期予測する(予測値はtest期間の各時点で得られた予測分布のmedianをとる)
  • 20次多項式・CV付き多項式・BSTSローカルレベル・BSTSローカル線形トレンドの4通りのモデルに対してRMSEを乱数シードごとに記録する(計200個)
  • 最後に箱ひげ図でそれぞれのRMSEの分布を比較し、必要に応じてt検定及び順位和検定を行う(RMSEなので小さいほど予測性能に優れている)

ということをやっています。詳細はRコードをご覧いただいた方が早いでしょう。クソコードなので最適でもない上にかなり遅いですが、ご容赦ください。{bsts}についてはill-identifiedさんの記事が最も分かりやすいと思います。ただし{bsts}を選んだ理由は単純で、{dlm}の使い方は忘れてしまった上に{KFAS}は不慣れでよく分からないからです。。。

なお、コード冒頭で大半の設定は変えられるようになっていて、例えば20次多項式だと出力が上下に暴れて不利だというのであれば上限6次ぐらいに制限することも可能です。当然ながらtest期間長はおろか全体のデータの長さを変えることもできます。実験のセットアップやコードに不具合や誤りなどあれば是非ご指摘ください。

続きを読む

時系列モデリングのおさらい:季節調整とトレンド抽出

COVID-19が世界中に感染拡大し、日本含め多くの国で外出や集会の制限(自粛)措置が取られて久しい昨今ですが、これに伴って多くのところでCOVID-19に関連したオープンデータが公開されるようになっており、データ分析を生業とする人間が実データを扱う良い機会ともなっているように見受けられます。


ということで、今回の記事では東京都が公開している日次のCOVID-19感染者(PCR検査陽性者)報告数のデータを題材として、時系列モデリングのおさらいをしてみようと思います。なお、この記事における時系列モデリング結果は今後のCOVID-19の感染拡大状況について何かしらの解釈や予測をするためのものでは全くありません*1ので、悪しからずご了承ください。


また、この記事で公開しているコードは以前書いたクソコードをそのまま転用しているので、端的に言ってただのクソコードです。皆さん自身がお試しになる際は是非書き直すことをお薦めしますorz

*1:それらはauthorizeされた専門家の方々のお仕事です

続きを読む

改めて、汎化性能と交差検証のはなし

追記

再現性をチェックする実験を後日実施しています。併せてお読みください。


以前こんな記事を書きました。


この辺の話はとっくの昔に常識になっていると思っていたのですが、昨今様々な「モデル」が提唱されて公の場で喧伝されることが増えてきており、その中には明らかにこれらの記事で指摘されている問題に引っかかっているものがあるようなので、注意喚起も兼ねて改めてブログ記事として書いてみようと思います。

続きを読む