「日次の売上グラフがギザギザで読めない」「週末で必ず落ち込むのが邪魔」── 時系列を可視化する現場の永遠の悩み。移動平均(Moving Average) はこの悩みに対する最初の処方箋です。本記事では SMA / EMA / WMA の使い分け、窓幅の選び方、そして移動平均で隠れてしまう情報まで扱います。
3 種類の移動平均
| 手法 | 計算式 | 特徴 | 向く用途 |
|---|---|---|---|
| SMA(単純移動平均) | 直近N点の平均 | 実装最易、対称的 | 売上・ 全般、入門 |
| EMA(指数加重移動平均) | 新しい点ほど重く | 直近の変化に追従しやすい | 金融・ のリアルタイム監視 |
| WMA(線形加重移動平均) | 新→古で線形に重み減衰 | EMA より滑らか、SMA より追従 | 営業・KPI 中庸の選択 |
1. SMA:最初の選択肢
直近 N 点を単純に平均。実装最易、解釈最易。「7日移動平均」で曜日依存を吸収するのが最も一般的な使い方。
SELECT date, daily_sales, AVG(daily_sales) OVER ( ORDER BY date ROWS BETWEEN 6 PRECEDING AND CURRENT ROW ) AS sma_7FROM daily_kpiORDER BY date;「現在の行を含む過去 7 行(=6 PRECEDING + CURRENT)の平均」。Centered moving average(前後3+3)にしたければ `BETWEEN 3 PRECEDING AND 3 FOLLOWING`。未来データを使う centered は「現在値の予測」では使えないので注意。
2. EMA:直近の動きを重視したいとき
指数加重移動平均。SMA は窓内の点が全部同じ重みですが、EMA は 新しい点ほど大きな重みを持ちます。直近のトレンド変化に素早く反応します。
import pandas as pd
# alpha = 0.3(小さいほど滑らか、大きいほど追従)df["ema_7"] = df["daily_sales"].ewm(span=7, adjust=False).mean()
# alpha と span の関係: alpha = 2 / (span + 1)# span=7 ⇒ alpha ≈ 0.25(最新値の重み 25%)株価のテクニカル指標で EMA-25 / EMA-50 / EMA-200 はほぼ標準。MACD(Moving Average Convergence Divergence) は EMA の差を使った指標です。 EP.15 で実装例を扱っています。
3. 窓幅(N)の選び方
窓幅は「消したいノイズの周期」より長く設定するのが原則。
| ノイズの種類 | 推奨窓幅 |
|---|---|
| 曜日依存(B2C 売上、 ) | 7 日 |
| 月末月初の振れ(経理 KPI) | 30 日 |
| 四半期波(営業の駆け込み) | 90 日 |
| 年次波(季節商材、賞与時期) | 365 日 |
90日移動平均にすると曜日も月末も全部消えますが、同時に 「キャンペーンの効果」も「障害の影響」も消える。目的によって複数の窓幅を重ねるのが定石(例: 7日 + 30日を同時表示)。
4. 移動平均が「隠してしまう」もの
移動平均は便利ですが、意思決定の基礎にする際は何を消したか自覚することが重要です。
- スパイク異常:1日だけの巨大な異常値が、平均化で 1/N に薄まる。異常検知は生データに対してかける
- 端点の処理:開始 N-1 日と終了 N-1 日は 窓が満たない。NULL にするか、過去のみで計算するか、明示する
- ラグの発生:SMA は窓幅の半分だけ右シフトされる。「いつトレンドが変わったか」を厳密に見たい用途では使えない
- Look-ahead bias:未来のデータを含む centered MA は、バックテストや予測では絶対に使ってはいけない
5. 可視化の作法

- 生データを薄く + 移動平均を太く で重ねる:両方の情報を保ったまま見やすく
- 複数窓を並べる:7日 / 30日 を別色で重ねると 短期トレンドと長期トレンドの乖離 が見える
- 閾値・目標値の点線を併記:移動平均がそのラインを超えた瞬間を強調
- 前年同期 を半透明で重ねる:単純な季節性は移動平均で消えないので比較が要る
次回予告
EP.22 では「前年比・前月比」の使い所と「重くしないクエリ設計」。`LAG()` ウィンドウ関数の正しい使い方、マテリアライズドビューで巨大テーブルを高速集計するパターンまで扱います。
この記事の感想を教えてください
あなたの 1 クリックで、本当にこの記事は更新されます。「もっと詳しく」「続編希望」が一定数集まった記事は、 ふくふくが 実際に内容を拡充したり続編記事を公開 します。 送信したリアクションはお使いのブラウザに記録され、再カウントされません。