ITの隊長のブログ

ITの隊長のブログです。Rubyを使って仕事しています。最近も色々やっているお(^ω^ = ^ω^)

時系列の勉強雑メモ

スポンサードリンク

ちゃんと理解したいので何度も読み直している。

  • 時系列分析の難しさ
    • 1990年1月1日の気温を予測する場合、無数にある1990年1月1日が母集団。母平均を推定しようとした場合、データは手元に1つ(1990年1月1日は現実に1つしかない)しか無いはずなのでむずい
  • なので、推測統計学の性質(?)を使って、DGP(データ生成過程)をモデリングできるならいけるんじゃないか?ってことを考える
    • 例えばサイコロで考えるとき、{1,2,...,6}は確率変数で{1/6,1/6,...,1/6}は母集団の確率分布
      • これを時系列に置き換える。1990年1月1日の気温(確率変数)は{1,2,...,6}で、確率分布は{1/6,1/6,...,1/6}とする
        • こうすると期待値も計算できるし、分散も計算できる
      • また時間が経過すると確率分布は変わるが同様に計算可能
    • 考え方は、「実際にある1つのデータ(1990年1月1日)を本来ならばあり得た確率変数の1つの実現値とみなし、もしも今日(1990年1月1日)という日が複数あれば次は違う値が得られたかもしれない。ということを想定する
  • データの表記方法(というか計算を理解したかった)
    • 期待値:  \mu_t = E(y_t) 例えば1990年1月1日がもしも無数にあったら、平均的に  \mu_t となる。ということを表す
    • 自己共分散:  \gamma_{1t} = Conv(y_{t}, y_{t-1}) = E[(y_t - \mu_t )(y_{t-1} - \mu_{t-1})]
    • 自己相関:  p_{kt} = Corr(y_t, y_{t-k}) = \frac{Conv(y_t, y_{t-k})}{\sqrt{Var(y_t)Var(y_{t-k})}}

自己相関がまでがでてきたので、前の記事に書いたコードと突き合わせたい。

www.aipacommander.com

今頃気づいたけど、参考にした記事と数式が違うな

f:id:aipacommander:20200414001359p:plain

引用元: https://momonoki2017.blogspot.com/2018/03/python7.html

引用元は全体から算出(?)、今見ている本はt時点とk時点の自己相関を算出しているという認識だから違う???

qiita.com

naruhodo. kはラグなのか(記事はhだけど)、nはデータ数。

あれ?じゃあt時点の期待値ってなんで全体のデータを使っているんだろ???

うーん、、、謎

statsmodelsのソースみてたらなんか引数で切り替えられるっぽい.

def autocorrelation2(y, lag=40, unbiased=False):
    # 自己相関係数を試しに計算してみた(Numpy利用)
    y_mean = np.mean(y) # 乗客数の平均値
    if unbiased:
        under = len(y) - np.arange(lag + 1)
    else:
        under = np.sum((y - y_mean) ** 2) 

    # ラグ1〜40の自己相関係数:-1.0〜1.0
    if unbiased:
        rk = [np.sum((y - y_mean)**2)]
        rk += [np.sum((y[k:] - y_mean) * (y[:-k] - y_mean)) for k in range(1, lag + 1)]
        rk /= under
    else:
        # ラグ0の自己相関係数:1.0
        rk = [1]
        rk += [np.sum((y[k:] - y_mean) * (y[:-k] - y_mean)) / under for k in range(1, lag + 1)]

    return np.array(rk)

全く同じ値にならなかったので、多分どっか間違えていると思うんだけど、1. 全データの数、2. lag=k時点の数で除算するという方法があった。

しかし参考にした記事の場合、1は「1. 共通の値(全データで算出した分散)で除算」になるので?になっている。

うーーーー、わからないを纏める(数式〜〜〜〜〜〜)

  • 書籍が指す分母とネット記事が指す分母が違うのはよくわからない(これはよく読んでいないから不明なだけかもしれないが、statsmodelsの実装も気になっている)

その次の偏自己相関も理解。

  • 端折るが、t時点とt-2時点前を比較したいのに、t-1時点のデータがあるので正確な自己相関を計算できない。から、t-1時点のデータを除去したい。という算出方法
  •  \hat{y_t} = αy_{t-1} と書き、係数αは  E[ (y_t\ - \hat{y_t})^2 ] を最小となるように選ぶ。こうすることで、t-1時点のデータから表現することができなかった残りが計算できる

実装したら理解できると思ったんだけど先が長い。。。