フィルタとしての移動平均

日次の時系列データ、連続するM日間の平均、そしてその平均がデータに含まれうるすべての周期に何をもたらすか。まずは実際の報告数で試し、Mを1日ずらして、週のパターンが戻ってくる様子を観察してください。

インタラクティブシミュレーションを読み込んでいます...

レッスン

理論 — フィルタとしての移動平均

M項移動平均は、時系列データの各値を連続するM個の値の平均に置き換えます。これは 1/M の重みを持つ長さ M の箱型関数との畳み込みです。したがって畳み込み定理により、1サンプルあたり f サイクルの周期に与える影響は、箱型関数のフーリエ変換である利得 H(f) = sin(πfM)/(M sin πf) との掛け算になります。H は f = 1/M, 2/M, … でゼロとなり、最初のゼロ点から次のゼロ点までの間ではマイナスになります。各平均値を区間の中央に配置したとき、H は実数となります。区間の最後に配置した場合は、同じ値であっても (M − 1)/2 サンプル分の遅れが生じます。

各記号の意味

M
各区間で平均する日数
f
周期の周波数(サイクル/日)。0 から ½ まで
H(f)
利得:平均化によって周波数 f の周期が何倍になるか。マイナスは反転を意味する
前提
欠測のない1日1値のデータ。これにより、区間は常に暦日でのM日間にまたがります。周期を打ち消すには、報告された値そのものが7日ごとに繰り返される必要があります。常に一定の報告の遅れであれば、週ごとの繰り返しは保たれるため何も変わりません。しかし、欠測日や祝日、あるいは週ごとに変動する遅れがあると、この前提は崩れます。

7日平均はどんな形の週周期も消し去る 🖖

ドイツの7日平均を押してください。この報告数は週の初めに落ち込み、後半に積み上がります。前後の1週間に対する割合は、月曜日が平均60.1%、木曜日が130.7%です。7日平均をとると、曜日の変動は0.8ポイントになります。連続する7日間の区間には、月曜日から日曜日までが必ず一つずつ含まれます。したがって、週ごとに繰り返すパターンであれば、その形にかかわらず、どの区間にも同じ量が加算されます。下のグラフを見ると、利得 sin(7πf)/(7 sin πf) は、1日あたり1/7、2/7、3/7サイクルの周波数で正確にゼロになります。これは週周期と、日次データが持ちうるたった二つの高調波に相当します。0.8という数字がゼロでないのは、現実のパターンが正確には繰り返されないからです。週のパターンのみを押すと、変動は0.0になります。祝日はこの繰り返しを完全に壊します。クリスマスの日は0人、その翌日は時系列中で最大の39,988人でした。そのため、区間の最後が0で終わる12月22日の中心化平均は21,025まで落ち込みます。そしてその1日後、39,988という数字が区間に入ると、平均は22,266まで戻ります。ここで、Mを1日ずらしてみましょう。8日間の区間には一つの曜日が二度含まれるため、変動の8分の1が残ります。合成された1週間における70.7ポイントのうち、8.8ポイントです。一方、6日間の区間は一つの曜日を外すため、6分の1である11.8ポイントが残ります。14日や21日にすると、再び変動は消えます。後方移動平均は同じ数値を後の日に報告するだけなので、同じように週周期を消し去ります。

平均を通すと上下が反転する波もある 🖖

5日の波を押してください。周期5日のコサイン波に、同じ7日平均をかけています。平滑化といえば小刻みな変動を小さくするものだと思われがちです。破線のゴーストはそうした予想を描いたもので、波は縮んでいますが反転はしていません。実際の平均値は、元の波の−0.2311倍になります。小さくなった上に反転し、入力が谷になる日にピークを迎えています。その理由は、区間の中に収まっています。連続する5日間は波のちょうど1サイクル分にあたり、その合計はゼロになります。そのため、7日間の区間には両端の2日間、つまり中央から前後にそれぞれ3日離れた値だけが残るのです。3日というのはサイクルの10分の6に相当します。ある点からそれだけ前後に離れた2日分を足し合わせると、その点での波の 2 cos(6π/5) = −1.618 倍になります。これを7で割ったものが、−0.2311です。下のグラフを見ると、3.5日から7日の間のすべての周期で利得はマイナスになっています。最もマイナスになるのは4.86日付近の−0.2330で、2.33日から3.5日の間で再びプラスに転じます。1日おきの変動を押してください。日次の時系列データが持ちうる最も速い変動は、元の7分の1である−0.1429で通り抜けます。スティーブン・W・スミスのDSPの教科書では、移動平均を「極めて優れた平滑化フィルタ」であると同時に「極めて劣ったローパスフィルタ」であると一文で評しています。このマイナスに落ち込むローブの存在が、その理由なのです。

後方移動平均は3日遅れの中心化移動平均 🖖

ダッシュボード式(後方)を押してください。ダッシュボードはまだ起きていない日を平均できないため、7日平均をその区間の最終日に配置します。これは、同じ7つの数字と同じ平均値を、区間の中央から3日遅れで報告しているということです。破線は中心化移動平均であり、実線はその曲線を右にスライドさせたものです。このデータの中で最大の7日平均である1日あたり25,851人は、12月18日から24日の週のものです。中心化すると、この値は12月21日に置かれます。後方に置くと、24日になります。どちらの配置にも代償があります。中心化平均はタイミングに遅れはありませんが、最後の区間がまだ完了していないため、データの3日前に途切れてしまいます。後方平均は今日まで届きますが、3日前を中央とする週の様子を記述していることになります。直線的なトレンドの上では、変化からちょうど3日遅れているわけです。利得には影響がないため、週周期は変わらず消え去ります。すべての周波数において同じように3日分、タイミングだけがずれるのです。M日間の区間における遅れは (M − 1)/2 日です。したがって、14日間の後方移動平均は6.5日の遅れとなります。

全プロセスの詳細解説

  1. 平均の平均 4 ステップ

    7日平均は5日の変動を上下逆さまにします。そこで同僚が、7日平均に対してさらに7日平均をとることを提案してきました。このとき5日の波はどうなるでしょうか。週周期はどうなりますか。また、2回目の平均をかける代償は何でしょうか。 まずは5日の波を押してください。ページには1回目の処理での利得が表示されています。

    この問題をツールで開く

    1. ページから読み取れる1回目の処理での利得:

    2. 2回目の処理では、同じ利得を波にもう一度掛け合わせます。マイナスとマイナスを掛けるとプラスになります:

    3. これら2回の処理を合わせると、箱型関数をそれ自身と畳み込んだ、三角形の重みを持つ13日間の平均になります:

    4. 電力が半減する点は、1回処理時の H² = ½ から、2回処理時の H⁴ = ½ へと移動します:

    解答

    5日の波は元の大きさの0.0534倍になり、反転せずに現れます。週周期は 0 × 0 = 0 なので引き続き消去されたままです。 その代償は、より遅い周期の波まで鈍らせてしまう平滑化フィルタになることです。電力が半減する周期は15.66日から21.74日へと延びます。また、中心化するためには片側3日ではなく6日必要になるため、データの6日前に途切れてしまいます。ヒンドマンとアサナソプロスはこうした処理を「移動平均の移動平均」と呼んでおり、彼らの例では3×3-MAでしたが、ここでは7×7-MAとなります。

学習の道すじ

フーリエ変換の実際

参考文献 (3)