隼時系列本: ノート1

以下の本を読みます。

時系列分析と状態空間モデルの基礎: RとStanで学ぶ理論と実装時系列分析と状態空間モデルの基礎: RとStanで学ぶ理論と実装
馬場 真哉

プレアデス出版 2018-02-14
売り上げランキング : 7742

Amazonで詳しく見る
by G-Tools
※ 以下、キャラクターが会話します。原作とは関係ありません。内容の誤りは本ブログ筆者に帰属します。
f:id:cookie-box:20180305231302p:plain:w60

ジュン、忙しいところ悪いけど、この本一緒に読んでくれない?

f:id:cookie-box:20180305232608p:plain:w60

何ですかハヤト…時系列分析? 何だってそんな本読む気になったんです?

f:id:cookie-box:20180305231302p:plain:w60

これ先月出た本なんだけど、表紙の絵がハヤブサで、通称「隼時系列本」っていうらしいんだ。それでプロデューサーが、「隼人が隼時系列本を読む」っていうネタを思いついちゃって…。

f:id:cookie-box:20180305232608p:plain:w60

導入が雑すぎる…。

f:id:cookie-box:20180305231302p:plain:w60

…それで読もうとしたんだけど、まずこれは何の本かを知らなきゃだろ? この本の正式なタイトルは「時系列分析と状態空間モデルの基礎」だけど、とりあえず「状態空間モデル」っていうやつの話は本の後半から始まるみたいだから置いといて、「時系列分析」って何かを読み取ろうと思ったんだ。そう思ってまえがきと目次をみると時系列分析とは何か1章に書いてあるらしいから1章を読んだんだけど、「時系列データ」っていうのは具体例から何となくイメージできたんだ。年ごとでも日ごとでも秒ごとでもいいから、一定の時間間隔ごとに1つずつ数字があればいいんだよな? 毎月の売上金額とかって…。

f:id:cookie-box:20180305232608p:plain:w60

ええ、一定の時間間隔ごとに1つずつ数字があればいいですね。もっとも、2つずつでも3つずつでもよいし、数字である必要もないですよ。1秒30フレームの動画があったとして、1フレームごとの静止画像を並べればこれも時系列データといえるでしょう。例えばある曲の1拍ごとのコード進行だって時系列データですよ。静止画像もコードも数字ではありませんけどね。まあ、静止画像もコードもどうにかすれば数値(のベクトル)に対応させることはできますから、時系列データという文脈では既に数字に変換されていることが想定されているとは思いますが。

f:id:cookie-box:20180305231302p:plain:w60

ジュンの解説逆にややこしいんだけど…。でも、音楽も時系列なのか。なんか親近感湧いてきたな。けど、ここからが問題なんだよ…。時系列データを分析するっていう話になっていくと思うんだけど、最初に出てくる母集団やら母平均の推定っていう話がわからないんだ…。「日本人の身長の平均値」とかいう場合の平均ならわかるけどさ、「2000年1月1日の気温」に母集団も母平均も何もないだろ? 「『2000年1月1日』が複数あれば異なる気温だったかもしれない」って言われても、別に複数ないし、あったとしても同じ気温にしかならないかもしれないし…。平均を推定するのが難しいって書いてあるけど、それ以前に平均なんてあるの?

f:id:cookie-box:20180305232608p:plain:w60

…平均なんてあるのか、ですか。あるかどうかというよりは、あることにしたんです。その前後に「データ生成過程(DGP)」の話は出てきましたか?

f:id:cookie-box:20180305231302p:plain:w60

あることにした? あ、DGPっていうのは次のページにある。

f:id:cookie-box:20180305232608p:plain:w60

時系列分析をするときは「時系列データは確率変数列(データ生成過程=DGP)から生成される」と仮定するんです。つまり、時系列データの各時点の値にはそれを生成する時点ごとの確率分布たちがある、ということにするんです。時系列分析の目的はこの確率分布たち=DGPの生成過程=時系列モデルを特定することです。いえ、もう少し正確にいうと、特定した時系列モデルによって「時系列データの将来の値を予測する」とか「複数の時系列を回帰分析する」とか、時系列データからもっと具体的な情報を引き出すことが最終的な目的ですね。逆に、目当ての具体的な情報を得る上では不要な部分を、確率的な揺らぎ=ノイズとしたのです。本の25ページの言葉を借りれば「未来を予測する情報が含まれていない、純粋な雑音」ですね。ノイズを取り除いて、目的に沿う情報だけを取り出したいんです。確率的なゆらぎがあると決めているから、「『2000年1月1日』が複数あれば異なる気温だったかもしれない」ということになるんです。

f:id:cookie-box:20180305231302p:plain:w60

ノイズがあると考えて目的の情報を取り出す…? うーん、でも、不要な部分を勝手に考えていいの? ある日の気温が10℃だったというのは、そういう情報じゃん。音楽も時系列って言ってたけど、俺たちの曲に不要な音なんてないだろ?

f:id:cookie-box:20180305232608p:plain:w60

あくまである目的の上で不要、ですよ。そうですね…あるお店、ドーナツ屋でもいいです、ドーナツ屋が毎週の売上高の成長率をみて、来週の原材料の仕入れを判断しているとしましょう。このお店は売り上げが徐々に伸びていて、成長率の分、原材料を多く仕入れたいんですね。でも、今週はたまたま修学旅行生の集団がこの街にやってきて、ドーナツがとてもよく売れたんです。この週の成長率を参考に来週のために原材料を多く仕入れたら、来週はきっと原材料を余らせてしまうでしょう。あくまで来週の原材料を仕入れる上では、修学旅行生が来たことによる売上増加分はノイズだったんです。音楽でも、例えば4小節などでモチーフを反復する曲は多いでしょう? 楽曲のこのような反復の周期を調べるには、4小節ずらして同じ曲を重ねたときに音の波形が重なるかを調べるかもしれません。このとき、モチーフに局所的に入れたアレンジは不要な情報になります。それは周期を調べる上でノイズというだけで、楽曲として不要な音というのではありません。

f:id:cookie-box:20180305231302p:plain:w60

なるほど…わかってきた気がする。何か調べたいことがあって、それを調べる上で有用な部分と不要な部分に切り分けたいんだな。

f:id:cookie-box:20180305232608p:plain:w60

もちろん勝手な切り分け方をしてよいわけではありません。有用な部分と不要な部分を切り分ける方法や、切り分け方が適切かどうかを調べる方法を、その本の続きが教えてくれるんでしょう。

f:id:cookie-box:20180305231302p:plain:w60

でも、何を調べたいのかがまだよくわからないかも。だって、曲に何小節の周期があるかとか聞いて調べればよくない?

f:id:cookie-box:20180305232608p:plain:w60

そうでしょうか。もしどんな周期性をもつ楽曲が流行するのかをリサーチしたいとして、調査対象が何百曲もあったら1つ1つ聞くのは大変です。楽曲データを入力するたけで判定するモデルがあれば便利だと思います。

f:id:cookie-box:20180305231302p:plain:w60

あー確かに。

f:id:cookie-box:20180305232608p:plain:w60

ただそれはあくまで例だったので…僕も詳しくありませんが、音楽データだったら、楽曲へのタグ付け、レコメンデーション、自動作曲などの研究が進んでいるのではないかと思います。「楽曲がどんなジャンルか判定したい」とか、「ある楽曲がある人にオススメできるか判定したい」とか、「勝手にコード進行と主旋律を決定してくれる時系列モデルがほしい」とかでしょうね(これらの目的で必ずしも音楽が時系列として扱われるかはわかりませんが…)。

f:id:cookie-box:20180305231302p:plain:w60

えー自動作曲!? 俺の仕事AIに奪われちゃう!

f:id:cookie-box:20180305232608p:plain:w60

どうでしょう。確かにコード進行はカデンツのような雛形がありますし、自動作成しやすいと思います。でも、主旋律はもっと自由ですからね。もし本当にハヤトと同じように作曲できるAIをつくりたかったら、そのモデルにはハヤトの作曲の癖が全てプログラミングされていなければならないでしょうけど、そんなことが可能でしょうか。それに、いくらコードとメロディだけ魅力的に生成できても、歌詞やコンセプトがあっての楽曲です。細かなニュアンスを曲に反映するモデルはきっと容易ではないでしょう。作曲を完全に機械の仕事にするのはまだ難しいのではないかと思いますが…。

f:id:cookie-box:20180305231302p:plain:w60

そっか、よくわかんないけどよかった!

f:id:cookie-box:20180305232608p:plain:w60

いや僕も知りませんけど…本に戻りましょうか。

f:id:cookie-box:20180305231302p:plain:w60

うん、時系列分析とは目的にあった時系列モデルを推定することってわかった。2章は時系列データの構造だって。自己相関とコレログラム?

f:id:cookie-box:20180305232608p:plain:w60

4小節ごとにずっとモチーフを繰り返す楽曲なら、4小節ずらして重ねたときによく重なるということです。そのような曲について、1, 2, 3, 4, 5小節とずらしたときの重なりの度合いを棒グラフにして横に並べていったら、4のところの棒グラフは他より大きくなるでしょう。それがコレログラムです。

f:id:cookie-box:20180305231302p:plain:w60

なるほど。次のページの外因性っていうのは、まさにさっきのドーナツ屋の修学旅行生のことだな。時系列データの構造って自己相関とかトレンドとか周期性なんだ。28ページの偏自己相関っていうのは自己相関とどう違うんだ…さっきの4小節ごとに繰り返す楽曲なら、8小節ずらしてもよく重なるから、本当に8小節で繰り返す周期性がどれだけあるかを知りたいときは、こっちの偏自己相関をみるってことか…。30ページはホワイトノイズと iid 系列? ホワイトノイズは iid 系列なの? そうじゃないの?

f:id:cookie-box:20180305232608p:plain:w60

書いてあるように、もし毎時刻の確率分布が正規分布であるようなホワイトノイズであれば、iid 系列です。しかし、一般にはホワイトノイズが独立とは限りません。ホワイトノイズの定義は「毎時刻の期待値はゼロ、毎時刻の分散は一定、異なる時刻の自己相関はゼロ」というだけで独立は課していないんです。毎時刻が正規分布のホワイトノイズの場合は、自己相関がゼロというのが独立と同値になりますが。

f:id:cookie-box:20180305231302p:plain:w60

じゃあここで iid 系列が出てきたのは何? 単なる紹介? 「独立性は厳しい仮定です」って言われても、「そっか厳しいんだ」って感じなんだけど…。

f:id:cookie-box:20180305232608p:plain:w60

そうですね…iid 系列は時系列モデルの最も基本的なパーツとしてつかわれますし、(強)定常という重要な性質をもつので、ここで言及しているのでしょう。31ページで出てくるランダムウォークというモデルが、毎時刻 iid 系列である正規ホワイトノイズを足し上げていくようなモデルになっているでしょう?

f:id:cookie-box:20180305231302p:plain:w60

iid 系列が重要なパーツになるのか…。でも iid 系列って「毎日サイコロを振った結果」みたいなもんだよな。なんか時系列データっぽくなくない? 気温とか売上高とか音楽は、そういうんじゃないじゃん。前の時刻の値がどうだったかといまの値が関係あるよな、たぶん…。

f:id:cookie-box:20180305232608p:plain:w60

分析対象の時系列データそのものの生成過程が iid 系列ということは少ないかもしれませんが、差分を取ったり、季節変動を除去したりしてデータを定常にしたらその生成過程は iid 系列に近くなるかもしれません。もし対象の売上高データが「『特定の季節変動 + 特定のiidノイズ』を足し上げて生成されるもの」だとわかったらうれしいはずです。もう一期先の値の確率分布だってわかります。

f:id:cookie-box:20180305231302p:plain:w60

差分を取ったりして、定常にする?

f:id:cookie-box:20180305232608p:plain:w60

第2部 Box-Jenkins 法の内容になりますね。伝統的な時系列分析の手順である Box-Jenkins 法では、まずデータを定常過程に変換することを目指します。定常過程とは何かは35ページから説明がありますが、平均と分散が時刻によらず一定で、自己相関も時点によらず時間差にのみ依存するようなモデルを弱定常過程といいます。つまり、ホワイトノイズは弱定常過程です。自己相関にとどまらず同時分布の形状自体も時間差にのみ依存するようなモデルを(強)定常過程といいます。iid であれば(強)定常です。もっとも、この本では弱定常過程のことを定常過程、そうでない場合を非定常過程と呼んでいるので以降はこれにしたがいましょう。定常過程から生成したデータをプロットすると、ずっと同じ平均値の周りに、ずっと同じばらつきで推移します。他方、非定常過程であったら、平均や分散が拡大していくか、縮小していくか、波打ってしまいます。基本的に時系列モデルは、データを定常過程に変換した上でノイズを説明するように構築します。そのモデルからデータサンプルを生成するときは、ノイズを生成してから逆向きの変換をするんです。

(ノート2があれば)つづく