1.1 定義と目的

移動平均とは、時系列データの連続する部分集合に対し、その平均値を逐次計算することで得られる新しい系列を指す。目的は、短期的な変動を平滑化し、データに内在する長期的なトレンドや周期成分を明確にすることにある。これにより、ランダムノイズの影響を低減し、データの本質的なパターンを抽出できる。

1.2 時系列データにおける役割

時系列データにおいて、移動平均は基調トレンドの可視化、季節調整の補助、予測モデル入力として機能する。例えば、日次売上データに移動平均を適用することで、曜日変動を除去した月間トレンドを把握できる。また、異常値の影響を緩和し、データの安定性を向上させる役割も担う。

1.3 移動平均とフィルタリングの関係

移動平均は線形低域通過フィルタの一種と見なせる。高周波成分(短期的変動)を減衰させ、低周波成分(長期的変動)を通過させる特性を持つ。デジタル信号処理の観点では、窓関数と畳み込み演算によって実現され、フィルタ次数窓幅)が遮断周波数を決定する。このため、移動平均はノイズ除去の基本的な手法として広く利用される。

2.1 単純移動平均

2.1.1 計算方法

単純移動平均(SMA)は、指定期間nのデータに対して等しい重みで平均を計算する。時刻tにおけるSMAは、t-n+1からtまでのn個のデータの算術平均として定義される。数式で表すと、SMA_t = (x_{t-n+1} + x_{t-n+2} + … + x_t) / n となる。

2.1.2 特徴と用途

SMAは計算が容易で直感的に理解しやすい反面、すべてのデータ点に均等な重みを与えるため、最新の情報に対する応答が鈍い。主に長期的なトレンド把握や、金融チャートにおける支持線・抵抗線の可視化に用いられる。初期のテクニカル分析で最も普及した手法である。

2.2 加重移動平均

2.2.1 重み付けの方式

加重移動平均(WMA)は、各データ点に異なる重みを割り当てて平均を計算する。一般的には最新のデータに大きな重みを与え、過去のデータほど重みを小さくする線形加重が用いられる。重みは期間nに対して、最新から順にn, n-1, …, 1のように設定し、総和が1となるよう正規化する。

2.2.2 適応

WMAはSMAよりも現在の値に敏感なため、株価の短期トレンド追跡や、在庫管理における発注点の調整など、迅速な反応が求められる場面で適応される。重みの配分を自由に設計できるため、特定のパターンに合わせたカスタマイズが可能である。

2.3 指数移動平均

2.3.1 平滑化係数

指数移動平均(EMA)は、過去すべてのデータを指数関数的に減衰する重みで平均する。平滑化係数α(0<α<1)により、過去のデータの影響度を制御する。αが大きいほど最新データへの依存度が高まり、α=2/(n+1)という関係で期間nに変換することも多い。逐次計算はEMA_t = α・x_t + (1-α)・EMA_{t-1}で与えられる。

2.3.2 単純移動平均との比較

EMAはSMAに比べて遅延が小さく、トレンド転換点を早期に検出できる。一方で、ノイズに対する感度も高くなるため、短期的な変動に過剰反応するリスクがある。SMAは平滑化効果が安定しているが、応答が遅れる。用途に応じて、両者を組み合わせて使用することも多い。

2.4 その他の派生手法

2.4.1 中心移動平均

中心移動平均は、注目点を窓の中央に配置して平均を計算する手法である。例えば、奇数幅の窓では前後同数のデータを含む。これにより、位相のずれが生じず、元の時系列との対応が取りやすくなる。季節調整や周期成分の抽出に適する。

2.4.2 累積移動平均

累積移動平均は、最初のデータから現在までの全データの平均値を逐次計算する。すなわち、時刻tにおける累積平均は、x_1からx_tまでの単純平均である。これは全履歴を均等に反映するため、長期安定性の指標として利用されるが、最新データの影響が小さくなる特性を持つ。

3.1 アルゴリズムの基本

3.1.1 窓関数の設定

移動平均の計算では、まず窓幅(window size)を決定する。窓幅は平滑化の度合いを決める重要なパラメータであり、小さな窓は短期変動を残し、大きな窓はより強く平滑化する。窓関数の形状(矩形、三角、指数など)は移動平均の種類に対応する。

3.1.2 境界の処理

系列の始端や終端では、完全な窓を構成できないため、境界処理が必要となる。一般的な方法としては、利用可能なデータのみで平均を計算する(部分窓)、NaNを返す、または系列を拡張(パディング)する手法がある。実装上は、先頭n-1個の値が欠損となり得る点に注意する。

3.2 プログラミング言語による実装例

3.2.1 Python (Pandas/numpy)

Pythonでは、Pandasライブラリの.rolling()メソッドを用いて簡潔に実装できる。例えば、df['column'].rolling(window=5).mean()で単純移動平均が得られる。NumPyのnp.convolveを用いれば、任意の重みによる移動平均も計算可能である。EMAは.ewm(span=span).mean()で実現される。

3.2.2 R

Rでは、zooパッケージのrollapply()関数や、TTRパッケージのSMA(), EMA()関数が一般的に使用される。filter()関数で畳み込みフィルタとして実装することもできる。

3.2.3 SQL

SQLでは、ウィンドウ関数を用いて実装する。例えば、AVG(price) OVER (ORDER BY date ROWS BETWEEN 4 PRECEDING AND CURRENT ROW)で5期間のSMAを計算できる。データベースによっては、より複雑な加重移動平均もウィンドウ関数の組み合わせで表現可能である。

3.3 計算効率の最適化

3.3.1 逐次更新法

SMAは、新しいデータが到着するたびに全窓データを再計算するのではなく、前回の平均値から逐次的に更新できる。すなわち、SMA_t = SMA_{t-1} + (x_t - x_{t-n})/n という漸化式を用いることで、計算量をO(1)に削減する。EMAも同様に、更新式で効率的に計算できる。

3.3.2 大規模データへの適用

ビッグデータ環境では、オンライン逐次更新アルゴリズムや分散処理フレームワーク(Apache Sparkなど)を用いて移動平均を計算する。また、データをブロックに分割して部分平均を計算し、統合する手法も用いられる。メモリ制約が厳しい場合は、リングバッファを利用して最新の窓データのみを保持する。

4.1 金融市場分析

4.1.1 テクニカル指標の基礎

移動平均は、移動平均収束拡散法(MACD)、ボリンジャーバンド、ゴールデンクロス・デッドクロスなど、多くのテクニカル指標の基盤をなす。これらの指標は、価格のトレンドや勢い、買われすぎ・売られすぎの判断に用いられる。

4.1.2 トレンドの識別とシグナル生成

短期移動平均と長期移動平均の交差は、トレンド転換のシグナルとして広く利用される。短期線が長期線を上抜ける(ゴールデンクロス)は上昇トレンド開始、下抜ける(デッドクロス)は下降トレンド開始と解釈される。また、価格が移動平均線を上回るか下回るかによって、売買の判断材料が得られる。

4.2 需要予測と在庫管理

小売業や製造業では、過去の販売実績に移動平均を適用して将来の需要を予測し、適正在庫量を決定する。単純移動平均は季節変動が小さい場合に有効であり、季節調整を組み合わせた手法も開発されている。在庫発注のトリガーとして、移動平均値を基準値に設定することが一般的である。

4.3 信号処理とノイズ除去

センサーから得られる時系列データ(温度、加速度、音声など)には、測定ノイズが含まれる。移動平均フィルタを適用することで、信号の特徴を保持しつつノイズを低減できる。特にリアルタイム処理が求められる組み込みシステムでは、逐次更新型の移動平均が広く採用される。

4.4 機械学習の前処理

4.4.1 特徴量エンジニアリング

時系列データを機械学習モデルに投入する際、移動平均値は有力な特徴量となる。例えば、株価のn日移動平均や、その傾き(変化率)を入力とすることで、モデルはトレンド情報を学習できる。また、移動平均による平滑化値と元の値との差分(残差)は、短期的な変動を捉える特徴として利用される。

4.4.2 時系列予測モデルへの統合

ARIMAやLSTMなどの時系列予測モデルでは、外生変数として移動平均値を追加したり、前処理としてデータを平滑化してからモデルに入力したりする。ただし、平滑化により情報が損失するため、過度な適用は予測精度を低下させる可能性があるため注意が必要である。

5.1 遅延特性

移動平均は過去のデータに基づいて計算されるため、現在の変化に対して遅れて反応する。特に大きな窓幅では遅延が顕著となり、実際のトレンド転換点を正確に捉えられない。この遅延は、リアルタイム性が重視されるアプリケーション(高頻度取引など)で問題となる。

5.2 周期性データへの不適切な適用

強い周期性(季節性)を持つデータに移動平均を適用すると、周期と窓幅の関係によってはトレンドが歪むことがある。例えば、窓幅が周期の整数倍でない場合、平均値が周期的に変動する残差を生じる。このため、周期性データには季節調整や中心移動平均などの適切な手法を選択する必要がある。

5.3 パラメータ選択の影響

5.3.1 ウィンドウ幅の調整

窓幅はノイズ除去と応答性のトレードオフを決定する。小さすぎるとノイズが残り、大きすぎると信号の細かい変化が失われる。最適な窓幅はデータの性質や目的に依存し、交差検証やドメイン知識に基づいて調整する必要がある。

5.3.2 過剰平滑化のリスク

極端に大きな窓幅を設定すると、データの詳細な変動がすべて平滑化され、重要な局所的なパターン(急激な変化や外れ値)が消失する。これにより、分析の解像度が低下し、誤ったトレンド解釈につながる可能性がある。

5.4 外れ値に対する脆弱性

移動平均はすべてのデータ点を平均計算に含めるため、1つの大きな外れ値が結果を大きく歪める。特にSMAでは、外れ値が窓内に含まれる期間中、平均値が影響を受け続ける。この問題を軽減するには、外れ値の事前処理や、中央値移動平均(ロバストな手法)の利用が推奨される。