AIソリューションアーキテクトのおしゃべり

Data,AI系のキャリアや書評、技術紹介をメインにゆるくやります。

時系列解析に散った子羊たちへの鎮魂歌

2つのブログを初投稿させていただいてから早いもので数週間。

自己紹介 - AIソリューションアーキテクトのおしゃべり
データ活用人材とはどんな人々か - AIソリューションアーキテクトのおしゃべり

思っていた以上に反響があり、

「面白くて、あっという間に読めた」
「ブログとリアルのキャラが一致しなくて困惑した」
「怪しい壺が買いたくなった」*1

など、数々のご好評をいただきまして非常に感謝してます。

時系列解析って何か色々あってわかりません!(憤怒)

さて、本日取り上げたいのは時系列解析。
最近では新型コロナウイルスの感染者数という大々的に報じられる時系列データがあるのでイメージしやすくなったかもしれませんが、手法自体を学んでみると何だか色んな名前が飛び交っていて訳が分からない人も多いのでは。

時系列予測の手法1つとっても

という巷の意見が初学者を惑わせているのではないでしょうか。

一体どれをどういうときにどうやって使うんですか!と憤怒*3する人、すなわちフンダーさんやフンヌーさんが続出するのもこの界隈の特徴。今日はそんなフンダーフンヌーのため、時系列解析っていつどうやって使って何で勉強したらいいか、私の経験に基づいて簡単に意見を書いていこうかと思います。

本ブログでは学術界の偉大な先生方が書いた書籍を超えることなど到底できないので、解説自体は簡単なイメージ把握に留め*4、私が愛してやまない参考書たちを惜しみなく紹介していきます。

1点!気を付けたいのは、本記事は初学者も対象としており噛み砕いた説明が入っており、一部に独自定義した名称などが入ります。注釈に書いておくようにしますが、ご注意ください。

それではまいりましょう!

時系列解析で扱われるデータ

まず何のデータを扱うのかってところからです。混乱を生む元になってるのって、「時系列データ」という言葉に暗黙的な色んな種類があるからだと思うんですね。
「時系列データ分析って書いてある本買ったのに自然言語処理の話が始まったぞ!返品だ返品だ!」
と激怒の淵へ落ちたフンダーのみなさん。落ち着いてください。実は巷で「時系列データ」が語られる際、以下の3つの意味が混在していることがあります。ややこしいんだこれが。 本ブログではその3つをまず紹介していきます。

学術的に言えば、これらデータに本質的な違いがあるわけではないですが、我々がデータを取り扱い識別する上では性質が明らかに異なります。本ブログでは一旦この分類で理解していきましょう。

↓で詳しく見ていきます。

定期記録データ

先ほども例に出した新型コロナウィルスの新規感染者数や株価など、日次・週次・月次など定期的に記録していくデータです。ぶっちゃけ名称が良く分からないので「定期記録データ」としましたが、信号データや自然言語以外の時系列データはここに分類されるイメージで捉えていただければ。逆に言えば、定期記録データが一般の時系列データで、信号データや自然言語データは時系列データの特殊なパターンと考えても差し支えません。以下、本ブログでは以後この一般的な時系列データを簡単に「記録データ」と呼んでいきます。

信号データ

音声波形、電流、温度など、昨今はIoTの文脈などでセンサなどから引き上げられてくるデータがこれにあたります。基本的には生データに近い低レベル情報というイメージですね。厳密には信号データも記録データの一種と言えるのですが、実態として検討される分析手法は結構違ったりするので、分類を変えています。 例えば、記録データと比べて信号データは外生変数が影響を及ぼすようなことも多くないため、予測値を出すことにはさほど意味がなく、むしろ周波数の解析など信号そのものの性質を知るほうが信号データには有効な解析だったりもします。そのため記録データにはあまり用いられないような、フーリエ変換などの手法を適用して解析を進める場合があります。

自然言語データ

これがあるからややこしいんですが、自然言語もデータ分析の文脈では時系列データの一種として扱うことができます。自然言語処理の文脈では、例えば「I have a pen.」はIとhaveとaとpenが連続した別のデータで連なっていると解釈できます。 ↓の表のように、記録データや信号データのように時系列データに置き換えて処理をすることで解析が可能なんですね。

と、自然言語データが時系列データに一応該当する旨は述べたものの、実際には自然言語を処理する場合は、記録データや信号データで用いられる自己回帰モデルや状態空間モデルなどの予測手法はほぼ使いません。最近ではニューラルネットワークによる解析が大半を占めています。

しかしながら逆に、自然言語の解析として急速に発展したニューラルネットワークの手法が信号データや記録データに適用されることは増えてるんですね。これがまた理解を煩雑にしているところがあるかと思います。

時系列データの種類まとめ

ごちゃごちゃ書きましたが、下にざっくり纏めておきます。

時系列データまとめ
どうだったでしょうか。 これが「時系列データ分析って書いてある本買ったのに自然言語処理の話が始まったぞ!」のフンダー達の叫びの正体だったわけです。

時系列解析の種類やおすすめ参考書籍

さあフンダーの叫びを解明したところで、先出しでちらほら出てきていた解析手法についても纏めていきましょう。扱うデータは分かった。では時系列解析とは具体的に何をすることなのでしょうか。

↓で概要を見てしていきましょう。

1. 記録データ・信号データに使われる予測モデル

コロナウイルスの感染者数で言えば、明日の感染者数は何人?という予測を誰でも考えたことがあると思います。データから学習して予測を返すモデルを挙げていきましょう。モデルによっては単に予測値を返すだけでなく、上昇トレンドや季節性などの成分に分解することで、本質的に感染者が増えてきているのかどうかを判断できたりします。

1-1. ARIMA系*6モデル

時系列予測における最もベーシックなモデルです。記録データ、信号データのどちらにも使います。*7
ARIMAとはそもそも何かというと、ベースとして下記のような要素を持つ予測モデルです。

  • 時刻  t における予測値  y _ {t} は、  y _ {t-1} を使って表現できる*8(AR - Auto Regressive)
  • 予測値はそれまでの移動平均を使って表現できる(MA - Moving Average))

このカッコ()の中身をどこまで関係式に組み込むかでモデルの名前が決まるんですね。ARモデル、MAモデル、ARMAモデルといったように。

ちなみにARIMAのIが入るとどうなるかというと、I- Integrated、つまり差分( y _ {t} y _ {t-1}の差)を予測対象とするモデルになります。前回予測値からの増減分を予測対象とするモデルの場合にはIが入りARIMAモデルということになります。*9

日本語で書けばARIMAは自己回帰和分移動平均モデル。なが!
これに季節性を取り込むとSARIMAモデルとなったり、派生形が色々存在します。

ちょっと抽象的なのでコロナウイルス感染者数の例を使って言い換えると、↓みたいな感じですね。

  • 感染者が昨日より今日のほうが多い。明日はもっと増えるだろうな。(AR)
  • ここ数週7日の感染者数の平均が上昇傾向だし、来週も基本的には感染者数が増えるだろうな。(MA)

皆さんもこういう仮説は感覚的に持っているのではないでしょうか。それを明示的に式に組み込んだと言えます。
参考までに、最も単純なARモデルの例を式で示しておきましょう。

 \displaystyle y_{t} = a_{0} + a_{1}y_{t-1} + \epsilon_{t}   \qquad \epsilon_{t}   ∼ N(0, \sigma_{t})



単純ですね。一期前のデータ  y _ {t-1} が定数倍(  a _ {1} )され、正規分布に基づく誤差  \epsilon _ {t} と定数項  a _ {0} が載って次の予測値  y _ {t} が出ると。
 a _ {0},  a _ {1},  \sigma _ {t} などのパラメータを観測データを使って推定することになります。

このARIMA系モデル、Rなどでの実装は比較的簡単で、解釈しやすく初心者にも扱いやすいモデルと言えます。しかしながら実務においてバンバン適用できるかと言えば、実は結構重大な問題があります。それは「データに弱定常性*10を前提としている」こと。上の式で言うなら、例えば推定した  a _ {1} などパラメータの値が経時で変わらないといった性質を求めています。

これはかなり強い仮定になるので、使うタイミングが結構限られてしまいます。コロナウイルスの感染者のように、例えば新しい株が発生したり、感染者が増えてきて集団免疫ができてきたりすることで、パラメータが変動してしまうことはざらにあります。 こと記録データに使用する際は、性質が変わりにくいデータや短期的な予測としての適用の意味合いが強くなります。

おすすめの書籍
gihyo.jp

AR、MAを中心に扱ったかなり初学者向けの内容になります。金融データを扱っていることからも、文系学部出身の方が読むことも想定されているのでは。扱う範囲は広くないのですが、数式も少なく説明も丁寧で、Rによるコードも併記されてますのであまり数学に自信が無い場合にはここから入ると良いと思います。ARMAやGARCHモデルでの実験がメインで、ARIMAそのものは出てこないものの、時系列分析の最もベーシックな考え方が直観的に理解できます。



www.hanmoto.com

通称隼本。状態空間モデルと銘打ってますが、5章くらいまでARIMA系モデルを解説してくれていて、しかもわかりやすいです。「迷う人は取り敢えずこの本読んでみ」と雑に言えるくらい対象読者が広い本と言えますね。大学1年生で習うような数学を何となく覚えている人であればこの本からでも良いでしょう。1冊でARIMA系と状態空間モデルの両方が理解できるので非常におすすめです。数式による説明も最低限度に留められており、初学者でも解釈しやすいように随所で工夫されています。読み終わったら著者の馬場さんの他の書籍検索して全部買いたくなるので注意して読んでください。

1-2. 状態空間モデル

ARIMA系モデルは先ほどの説明にも出てきたように、時系列の弱定常性を仮定しています。実際には時系列の性質は時々刻々と変化しているケースが多く、ARIMA系モデルでは解決できない場合も多いです。そんな時にも使える中級者以上向けの時系列分析とでも言いましょうか。それが状態空間モデルになります。 状態空間モデルはベイジアンな手法で、「状態」という観測されない潜在変数を用いて時系列の挙動を表現していくモデルです。

  • モデルの設定を柔軟にできる
  • 生成モデルのため欠損値処理を気にしなくていい
  • 経時で変化するパラメータが導入可能で、非定常データにも対応可能
  • 予測値だけでなく、予測値やパラメータの分布も求められ、解釈性が高い

といった便利な性質を持ちます。その代わり、やや求められる数学知識は高度で、いわゆる統計モデリング力も必要になるなど、扱う人の知識レベルは多少上がります。

さあそんな状態空間モデル、一体どんな考え方なのでしょうか。
状態空間モデルでは時系列の挙動に合わせ、「状態方程式」なるものと、「観測方程式」なるものを設定します。 「いや、そんなこと言われてもどんなルールで設定すんの。」と思いますが、一般化すると求められていることは↓だけです。

観測方程式:   y _ {t}  ∼ p(y _ {t} | x _ {t})
(  t 時点の状態を示す値が  x _ {t} 、観測値が  y _ {t} )


え、これだけ?と思ったでしょう。そう、残念ながらほとんど自分で頑張るんです。*11
本ブログでは深くまでは追いませんが、ざっくり根幹となる考え方を書くとするなら

  • 「時刻  t での状態   x _ {t} 」は「時刻  t-1 での状態   x _ {t-1} 」によって確率的に変動
  • 「時刻  t での観測値   y _ {t} 」は「時刻  t での状態   x _ {t} 」によって確率的に変動

というルールの下で観測方程式と状態方程式を設定しろと言ってるだけなんですね。しかもベイジアンな手法なので、パラメータの事前分布の設定含め変えられるという点を鑑みても、かなり柔軟な設定が可能ということです。ただ自由度が高いということは、裏を返せばそれだけデータサイエンティストの腕に委ねられる領域が大きいんですね。直観的な仮説をモデルに組み込めるというベイジアンならではの強みはあるものの、きちんと学ばずに使ってもほとんどその恩恵が得られないので、どのように学んでいくかは非常に大事なところです。



おすすめの書籍

www.hanmoto.com

状態空間モデルを学ぶ上では、まずARIMA系でも挙げた隼本が筆頭になります。状態空間モデルでは観測値の誤差によって、予測していた状態を更新するという処理をフィルタリングと呼ぶのですが、本書ではそのベーシックな手法であるカルマンフィルタを使った解説をかなり丁寧に書いています。これで厳しいようであれば状態空間モデルの利用は諦めたほうがいいかもしれません…。RとStanでの実装も豊富に扱われており、具体例ベースの実装方法も書かれているので、まず基本的な部分はこれを読んでおけば問題ないでしょう。


www.kspub.co.jp もう一冊がこちら。カルマンフィルタがフィルタリングのベーシックな手法と書きましたが、更にモデルに柔軟性を持たせるためには粒子フィルタ*12を使ったモデルが必要になります。元々状態空間モデルはベイジアンな手法であることに加えて、解説しようと思うと非常に難しいものになるのですが、それを真正面から丁寧に追った書籍になります。勉強し始めの際、粒子フィルタを理解しようと私は散々ネットを彷徨い、夢やぶれ泣き濡れましたが、唯一分かりやすかったのがネット上の樋口先生の解説でした。「樋口先生、状態空間モデルの書籍書いてないの?むしろ書いててくれえ…!!」と探したら、タイトルからは状態空間モデルを全然想起できない(失礼)こちらの第1版を見つけました。恐る恐る開いてみたら私の悩みは吹き飛び脳汁ドバドバ。粒子フィルタの理論をここまで詳しく解説されていて、平易に書かれている書籍はほとんど無いのではないでしょうか。

藁にすがる思いで手にした本書籍、とても助かったのでTwitterで勝手に興奮してたらあまりにうるさかったのか、それを見た講談社サイエンティフィク様(https://twitter.com/kspub_ls)から第2版をご寄贈いただきました。テンションの上がった私は気合を入れてレビューを書くどころか、時系列解析のまとめ記事を書き始め、うっかり大長編になり激しく後悔し現在に至ります。

第2版は状態空間モデル以外に散在する時系列分析の手法概説を加え、オールカラー化して更に分かりやすくなっています。地味に1章の導入も時系列分析の基礎として勉強になるんですよね…。
というわけでみんな、買ってくれよな!


gihyo.jp とにかく上に挙げた手法たちのR実装サンプルを見たい!という方はこちら。粒子フィルタまでのコードサンプルが非常に充実しています。一応理論の解説も触れられていて、前半は非常に分かりやすく展開されています。後半は初学者というより、一度理論を理解した人が見返すとコードと合わせ非常に良い頭の整理になりますので、時系列分析を1周学んだうえで手元に持っておく1冊として良いと思います。


www.kyoritsu-pub.co.jp 個人的にベイジアンな手法はRとStanの組み合わせが扱いやすい印象ですが、昨今ではシステム化のためPythonで実装しなければならないケースもあるでしょう。その要望に応えてくれるのがこちらの書籍。こちらも粒子フィルタまでのPython実装コードが満載です。異常検知まで扱ってくれているので時系列解析×Pythonというケースでは持っておいて損はないでしょう。

1-3. ニューラルネットワークモデル

ニューラルネットワークでも時系列データを扱えるモデルが幾つか存在します。リカレントニューラルネットワーク、LSTM、Transformer系のモデルなど元々は自然言語処理用に発展してきたものではありますが、記録データや信号データの予測として用いられるケースもあります。昨今ではTransformer系がKaggleのコンペティションでも猛威を振るっているみたいですね。十分なデータ量が揃っていればパターン認識の精度は高いこともありますが、非定常過程には思うような結果が得られないケースもあるので一概にすべてのケースで高精度とは言えないようです。また状態空間モデルなどに比べモデルの解釈性が落ちたり、学習にはGPUマシンが必要になり学習時間も要するので注意が必要です。

解釈性という観点では、例えばコロナウイルスの感染者予測1つとっても、重要なのは予測が当たることばかりではありません。例えば病院経営においては、中長期的な感染者数のトレンドのほうが気になることもあるでしょう。我々のような一般市民も、単なる感染者数だけでなく曜日ごとの傾向を捉えて一喜一憂しないようにしてるのではないでしょうか。 下記の機械学習手法を用いた回帰モデルも含め非常に高精度なモデルですが、タスクが果たして予測だけを求めているのか、そうでないのかはモデル選択の上で特に重要ですので、要件をきちんと把握し安易に精度の良いだけのモデルを選ばないように気をつけてください。

おすすめの書籍

www.oreilly.co.jp 何といってもニューラルネットワーク系はこのシリーズから入るべきです。出版が少し前になるのでTransformer系は扱われていませんが、それでもニューラルネットワークの時系列データ(自然言語がメインですが)を把握する上で本書を超えるものは無いでしょう。 何ならシリーズの①から読みましょう。 分かりやすすぎて「はわわわわ」となって泡を吹くことこの上なしです。コードについてはその名の通り独自実装になるので、本書を読み終わったらPytorchやTensorflowのライブラリの使い方を覚えていくと良いと思います。私はPytorchやTensorflowの実装は黎明期に別ルートで覚えることになったので書籍等は使っていませんが、ニューラルネットワーク自然言語処理系を扱う書籍や下記は参考になると思われます。

詳解ディープラーニング 第2版 | マイナビブックス

物体・画像認識と時系列データ処理入門 [TensorFlow2/PyTorch対応第2版] NumPy/TensorFlow2(Keras)/PyTorchによる実装ディープラーニング - 秀和システム あなたの学びをサポート!

また、自然言語処理のプロの実装を知りたい方は自然言語系のKaggleコンペのNotebookから学ぶ手もありでしょう。例えば少し前にCommonLit Readability Prizeという文章データから読みやすさを定量評価するコンペティションが開催されました。 私のような雑魚でなく、つよつよデータサイエンティストによるBERT、RoBERTaなど最新の手法の実装が多く公開されていますので、関連ライブラリの扱い方を確認するのも良いでしょう。
CommonLit Readability Prize | Kaggle



1-4. GBDTなど機械学習手法を用いた回帰モデル

上記のほか、いわゆる時系列分析手法とは呼ばれていない、機械学習を用いた回帰モデルでも予測をしたりします。主にコンペティションなどではよく使われ、説明変数にラグ特徴量(過去の目的変数の値)や外生変数などを用います。GBDT系やニューラルネットワークの回帰モデルを使うことで、比較的簡単に高精度な予測が可能となる場合があります。こちらも高精度予測ではありますが、モデルのトレンド成分など解釈性については状態空間モデル等に比べると乏しいので、タスクの目的に応じて使い分けると良いでしょう。 また、回帰モデルとしてガウス過程回帰を使って予測をすることもあります。ガウス過程回帰モデルは比較的精度の高い予測結果を期待できながらも、ベイジアンな手法なので予測値のほか予測分布まで算出できます。意思決定を伴う予測をしたい場合には候補として挙がることが多いです。やや計算コストが高いのと、理論を理解していても結構カーネルの設定で迷うので扱いは難しいですが、強力な手法であることは間違いありません。

おすすめの書籍
gihyo.jp 各所で大絶賛の名著ですので私が今更紹介するまでもありませんね。本書の3.10には時系列データに対する特徴量エンジニアリングなどが扱われています。時系列データの取り扱いに限らず、あらゆる予測タスクのTipsが載っているバイブルです。データ分析を学ぶ方は手元に持っておくことをおすすめします。

本書の他、Kaggleの時系列系のコンペティションの解法を調べることも有効です。大抵のコンペは参加者の方が上位解法を纏めてくれていたりするので、自分が取り組む際にはチェックしておくと非常に勉強になります。


www.kspub.co.jp ガウス過程回帰を勉強したい方はこちらの書籍がおすすめです。あまり解説書籍が存在しなかったガウス過程ですが、この書籍の登場でだいぶ助けられました。ロマンありますよねガウス過程。ガウス過程の中で用いるカーネル法などが割と難しい概念になるので、初学者がきちんと理解できるようになるべく平易に記載してくれています。本書を読み終わって、もっと…もっとガウス過程のすべてを知りたい…と思った方は下記の書籍たちに足を突っ込んでみてください。責任は取りません。

カーネル多変量解析 - 岩波書店

ベイズ深層学習 | 書籍情報 | 株式会社 講談社サイエンティフィク

カーネル全然分からねーじゃねーか!とブチ切れ寸前になった方は下の書籍のSVMの解説あたりでも分かりやすく扱われています。 多変量解析入門 - 岩波書店

カーネルの挙動を視覚的に理解したい方はこんなサイトもおすすめ。 Jochen Görtler



2. 記録データ・信号データに使われる異常検知・変化検知モデル

異常検知については、ここで語り切るにはちょっと奥が深すぎるので、というか語る気なかったんですが成り行きで作ることになったので、概要とおすすめ書籍くらいにさせてもらおうと思います。この他、変化検知の手法なども含めて概要を記載します。

2-1. 特異スペクトル変換(変化検知)

時系列データの最大特異値を用いて変化度を算出し、それに基づいて性質が変化したタイミングを判断する手法を特異スペクトル変換と呼びます。正常・異常を区別する異常検知とは異なり、あくまで変化度を検出する手法ですので、変化検知もしくは変化点検知などと呼ばれます。特異値分解は計算コストがやや大きいものの、機械学習の世界では自然言語処理のEmbedding、テーブルデータの次元削減、劣決定性問題の解の安定化など色んな場面で用いられます。変化点検知に限らず特異値分解について知ることも個人的には結構重要かなーと思いますね。あとで紹介しますが、「入門 機械学習による異常検知」には特異値分解も詳しく扱ってます。

2-2. 予測モデルを用いた異常検知

こちらは1.で紹介した予測モデルの予測値を元にして異常検知する方法です。考え方は比較的シンプルな手法で、「予測値からどれくらい離れるか」を定量的に判断し閾値を超えた段階で異常とします。ただ「どれくらい離れるか」を定義することは、予測値の背後にある分布をどう考えるかに直結するので、そこは注意が必要です。ARIMA系など予測値が1点で求まる手法は正規性を仮定してみたり、訓練データの分位点を考えて異常度を算出します。状態空間モデルやガウス過程回帰などのベイジアンな手法を用いれば予測は分布として出すことができますので、分布に従い閾値を設定できますね。

2-3. クラスタリング手法による異常検知

クラスタリング、言うなれば教師なし学習で正常・異常を分類する手法です。簡単に言えば、時系列データがどのクラスタに分類されるか都度判定し、正常クラスタに入らない場合に異常判定をする手法になります。教師ありの分類問題で異常検知をするケースもありますが、一般的には異常検知をする場合、正常データに対して異常データ数は圧倒的に少ないことがほとんどなので、クラスタリングをはじめとした教師なし学習のような、異常データを必要としない手法が用いられることが多いです。代表的なクラスタリング手法であるK-meansや混合正規分布によるクラスタリングなどが使われることもありますが、これらは事前にクラスタ数を指定する必要があるため、DBSCANなど事前にクラスタ数を指定しない手法が選択されることもあります。異常を分類するという手法ではクラスタリングに限らず隠れマルコフモデルを使ったり、適応共鳴理論を用いるケースもあるみたいで、決まりきったデファクトの手法はあまり聞かない印象です。私はあんま詳しくないのですが、知り合いが適応共鳴理論に関する参考になるブログを書いていたので貼っておきます。

適応共鳴理論(Adaptive Resonance Theory)の異常検知への適用 #Python - Qiita

2-4. 疎構造学習による異常検知

多次元の時系列データに対して使われる手法です。例えばグラフィカルlassoと呼ばれる手法は、時系列データ同士に相関関係がある場合に、定常時と異常時でデータ同士の関係性が崩れることを利用して異常を発見する方法になります。具体的には、データが多変量ガウス分布に従っているという仮定を置き、学習データから精度行列をスパース(疎な行列)に推定することで予測分布を得ます。異常時はデータ同士の関係(精度行列)が変化するはずで、この予測分布から外れるという考え方で異常を発見します。

おすすめの書籍
私の印象ですが、時系列データの異常検知については十分に書籍があるとは言えないと思っています。 予測モデルベースの異常検知はともかく、クラスタリングベースの異常検知手法やグラフィカルLassoなどを纏めて取り扱っている書籍が全然無い*13んですよね。なんでだろ。 異常検知の書籍でおすすめはありますので、ひとまずそれをご紹介しておきます。

www.coronasha.co.jp

200冊以上読んできたデータ分析系の書籍でも個人的にかなり上位のおすすめです。数式をがっつり使って異常検知をはじめから丁寧に解説しています。残念ながら異常検知系の書籍は初心者向けのものが少なく、本書籍も数学アレルギーの方にはやや厳しい側面もありますが、しっかりと式が追いやすいように行間が少なく記載されており、かつRのコードもありますので、比較的迷わず追うことができます。部分空間法の解説では、主成分分析を3つの角度から解説することで特異値分解との関係性を示しており、個人的には異常検知以外の部分でも大変勉強になりました。
これを読んでもうちょっと知りたい…となった方は同じく井手さんが著者の1人となっている下記にステップアップしてみるといいかもしれません。ちょっとこちらの方が難しめです。

異常検知と変化検知 | 書籍情報 | 株式会社 講談社サイエンティフィク

やはりワイはRでなくてPythonで書きたいんや…となった方はこちら。

Pythonによる異常検知 | Ohmsha



また、疎構造学習について気になった方はスパースモデリングに関する書籍を見てみるといいでしょう。簡易的ではありますが岩波データサイエンスのvol.5にグラフィカルLassoに関する解説が書かれています。

www.iwanami.co.jp

3. 信号データによく使われる解析手法

信号データについては、それ自体に予測の意味が無かったりするデータも多いです。例えば、製造現場における振動センサで機器の振動状態を見ていたとしても、振動波形の予測をしたいわけではなく、知りたいのは故障の有無だったりするわけです。その場合、先に紹介した異常検知や、信号そのものの周波数特性などを解析する方が重要だったりします。ということで、信号データの処理手法には独自のものが結構存在します。本記事では全部は扱いませんが、特に機械学習の文脈でも良く取り上げられる手法を紹介しておきます。雑な解説ですがすみません。

3-1. フーリエ変換

フーリエ変換は周波数解析の手法になります。機械学習の分野だけでなく信号や波形データを扱う際には本当によく使われる手法です。私も学部・修士で大変お世話になりました。実はエクセルでもできちゃったりするんですよね。
簡単に言えば、「正弦波・余弦波があればどんな波形でも近似できんじゃね?」という無邪気な想いに答えてくれる変換方法です。信号データをインプットにしてフーリエ変換すると、各周波数に対する振幅スペクトルが得られます。どの周波数でスペクトルが大きくなっているかで、信号データにどんな周波数の波(正弦波・余弦波)が含まれているか推定するんですね。時系列データにおいては、周波数成分が特定できることで、信号データのノイズを取り除くことができたり、機械学習に入る前に信号の性質を理解できるわけです。うれしい。
ただし、正弦波・余弦波が前提になる以上、定常性のある波形データしか表現できないという限界があります。性質が経時変化するデータには注意が必要です。ちなみに信号データのような離散データを扱う場合は厳密には離散フーリエ変換を使います。

3-2. ウェーブレット変換

ウェーブレット変換も目的はフーリエ変換に通ずるところがありますが、こちらは非定常データにも対応が可能です。フーリエ変換が「正弦波を使って信号を表現」しているという前提に立って使う手法でしたが、ウェーブレット変換は「ウェーブレット関数(マザーウェーブレット)で信号を表現」するイメージです。ウェーブレット関数には色々な種類があり、それぞれスケールが可変です。要は「伸び縮みできるいい感じの波を用意して、いっぱい足し合わせたらどんな信号でも表現できるんじゃね?」という、無邪気オブ無邪気な発想*14です。信号データをインプットに、それぞれの時刻においてどのスケールのウェーブレットが強く影響してるかを出してくれます。
上記はざっくりしたイメージでしたが、ウェーブレット変換にも連続・離散のそれぞれの手法があり、詳しく知りたい方は下記が参考になります。

連続および離散ウェーブレット変換 - MATLAB & Simulink - MathWorks 日本

3-3. 独立成分分析

音声データなどにありがちですが、信号に複数の音声が混ざっているケースがあります。人間の場合は2人が喋っていても、それを別の音声と認識することが可能です。無意識に信号を分離できているんですね。信号データからそのように独立したデータを分離する手法に独立成分分析などがあります。近年では統計的因果探索の文脈でも用いられるなど、使う頻度は多くないですがデータサイエンス界隈ではたまに登場します。

3-4. メルスペクトログラムへの変換

音声データを周波数が人間の知覚に近い「メル尺度」をベースに、時間軸、周波数、パワーに変換します。音声分類タスクにおいては、メルスペクトログラムを画像化しCNNにブチ込むという流れが確立されており、Kaggle界隈では猛威を振るっているようです。

おすすめの書籍

www.morikita.co.jp 信号解析を最初に学ぶ1冊目はこちらがおすすめです。フーリエ変換、特異スペクトル解析、ウェーブレット変換などについて網羅的で、1冊手元にあると安心できる書籍です。

先に解説した独立成分分析については、取り上げてみたものののあまり初心者向けとは言えない書籍が多いですね…。発展的な内容なので、本気で学びたい段階になってから手を付ける形でもいいかもしれません。先に紹介したように統計的因果探索の文脈でも用いられるため、因果探索の勉強と共に学ぶ手もあります。参考書籍は下記になります。

統計的因果探索 | 書籍情報 | 株式会社 講談社サイエンティフィク

Pythonで学ぶ音源分離(機械学習実践シリーズ) - インプレスブックス

入門 独立成分分析 - 東京電機大学出版局 科学技術と教育を出版からサポートする



ということで長くなりましたが、時系列手法や書籍の紹介はここまで!

自然言語はここから書こうとすると更に倍くらいの分量あっても足りないので、時系列特集では扱いません! 疲れましたすみませんでした。

最後に~最近の時系列データ処理の動向

いかがだったでしょうか。私は吐くほど長くなって本当にしんどかったです。
時系列分析も、予測の分野においてはニューラルネットワークの発展、今回紹介していないProphet、AutoML界隈でも時系列分析が可能になっている製品もあり、どんどん手軽な高精度の手法が出てきています。しかしながら途中紹介したように、本当に自分がやりたいタスクが予測のようで予測ではないというケースは意外にも多かったりします。目的をきちんと整理した後、じゃあいざ分析をしたいときに、手軽な自動予測しか知識の引き出しが無いと大変苦労しますので、すべてを深く学ばないにしても、体系的に理解しておくことは非常に重要かと思います。

今回も長かったですね。見込みの甘さで自らの首を絞めています。

次こそはライトな話題を扱いたいです。 ワインとAIについて語ろうかなと思います!

乞うご期待!

*1:参考: https://hiro-gamo.hatenablog.com/entry/2022/08/19/155707

*2:なんのネタか分からない人は新宿あたりを1日歩きましょう

*3:ふんど・ふんぬ

*4:メンタル弱いので間違ってたら優しく教えてください

*5:独自名称です。正しい名称あったら教えてください

*6:自己回帰型とも。自己回帰(AR)に限らないので敢えて本ブログではこういう書き方してます。

*7:信号データに用いる場合は予測が目的になるケースはそこまで多くなく、異常検知としての活用や信号の性質の解釈の意味合いが強いです。

*8:t-2でもt-3でも設定は自由ですが

*9:正確には日本語訳は差分でなく和分らしいですが

*10:ざっくり言えば、データの統計的性質が経時変化しないこと。

*11:典型的な予測パターンなら書籍見ればいくらでも載ってますけど

*12:パーティクルフィルタとも

*13:知ってたら教えてください

*14:怒られそう