移動平均でノイズをならす

入門

6.4.3

移動平均でノイズをならす

最終更新 2020-02-26 読了時間 1 分
まとめ
  • 日次の原系列に移動平均線を重ねてトレンドを可視化する。
  • pandas.Series.rolling で窓幅を指定し平滑化した系列を計算する。
  • 短期変動のノイズを抑えて中長期トレンドを把握したいときに使う。

日次データに移動平均を重ねるとノイズを抑えつつトレンドを把握できます。pandas.Series.rolling を使うと簡単に計算できます。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

rng = pd.date_range("2024-01-01", periods=60, freq="D")
sales = pd.Series(np.random.normal(loc=200, scale=25, size=len(rng))).cumsum() + 500
rolling = sales.rolling(window=7, center=True).mean()

fig, ax = plt.subplots(figsize=(7, 4))
ax.plot(rng, sales, label="日次売上", color="#9ca3af", linewidth=1.5, alpha=0.7)
ax.plot(rng, rolling, label="7 日移動平均", color="#2563eb", linewidth=2.5)

ax.set_ylabel("売上(万円)")
ax.set_title("移動平均で売上トレンドを把握する")
ax.legend()
ax.grid(alpha=0.3)

fig.tight_layout()

plt.show()

pandas.Series.rolling を使うと簡単に計算できますの図

読み方のポイント #

  • 移動平均の窓幅は週単位・月単位など分析目的に合わせて設定する。
  • 原系列も同時に描くと、季節性や突発的な変化を見逃しにくい。
  • 時系列の欠損がある場合は前処理で補完しておくと滑らかな曲線になる。

いつ使うか #

  • 適している場面: 日次データのノイズを除去してトレンドを滑らかに把握したいとき。窓幅で平滑度を調整できます。
  • 不向きな場面: 窓幅が大きすぎるとトレンドの転換点が遅延して表示され、急激な変化を見逃します。
  • 代替手段: 指数移動平均(EMA)を使えば直近のデータに重みを付けてより反応の速い平滑化が可能です。

よくある失敗パターン #

  • 窓幅が大きすぎる: 窓幅を広く取りすぎるとトレンドの転換点が大幅に遅延して表示されます。データの周期性に合った窓幅を選びましょう。
  • 端の欠損値を無視: 移動平均は先頭と末尾に NaN が生じますが、これを無視してプロットすると端の情報が欠落します。min_periods で部分平均を許容するか注記してください。