ふくふくHukuhuku Inc.
EP.21Viz 11分公開: 2026-05-10

移動平均の使い所:ノイズを消して、本当のトレンドを見せる

「日次データはギザギザで読みにくい」を解決する定番テクニック。SMA / EMA / WMA の使い分け、窓幅の選び方、金融・sre・売上分析での応用、そして「移動平均で隠れる罠」までを一気通貫で。

#移動平均#前処理#時系列
CO📔 Google Colab で開く(上から順にセルを実行)
シェア

「日次の売上グラフがギザギザで読めない」週末で必ず落ち込むのが邪魔」── 時系列を可視化する現場の永遠の悩み。移動平均(Moving Average) はこの悩みに対する最初の処方箋です。本記事では SMA / EMA / WMA の使い分け、窓幅の選び方、そして移動平均で隠れてしまう情報まで扱います。

3 種類の移動平均

手法計算式特徴向く用途
SMA(単純移動平均)直近N点の平均実装最易、対称的売上・ 全般、入門
EMA(指数加重移動平均)新しい点ほど重く直近の変化に追従しやすい金融・ のリアルタイム監視
WMA(線形加重移動平均)新→古で線形に重み減衰EMA より滑らか、SMA より追従営業・KPI 中庸の選択

1. SMA:最初の選択肢

直近 N 点を単純に平均。実装最易、解釈最易。「7日移動平均」で曜日依存を吸収するのが最も一般的な使い方。

bigquery で 7日移動平均(windowing)
SQL
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;
ROWS BETWEEN 6 PRECEDING AND CURRENT ROW の意味

「現在の行を含む過去 7 行(=6 PRECEDING + CURRENT)の平均」Centered moving average(前後3+3)にしたければ `BETWEEN 3 PRECEDING AND 3 FOLLOWING`。未来データを使う centered は「現在値の予測」では使えないので注意。

2. EMA:直近の動きを重視したいとき

指数加重移動平均。SMA は窓内の点が全部同じ重みですが、EMA は 新しい点ほど大きな重みを持ちます。直近のトレンド変化に素早く反応します。

pandas / Polars で EMA
Python
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 は金融でデファクト

株価のテクニカル指標で 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. 可視化の作法

日次・SMA7・EMA7 を重ねたグラフ
日次データ(薄いグレー)+ SMA7(青)+ EMA7(赤)で「ノイズと滑らかさの両方」を見せる
  • 生データを薄く + 移動平均を太く で重ねる:両方の情報を保ったまま見やすく
  • 複数窓を並べる:7日 / 30日 を別色で重ねると 短期トレンドと長期トレンドの乖離 が見える
  • 閾値・目標値の点線を併記:移動平均がそのラインを超えた瞬間を強調
  • 前年同期 を半透明で重ねる:単純な季節性は移動平均で消えないので比較が要る

次回予告

EP.22 では「前年比・前月比」の使い所と「重くしないクエリ設計」。`LAG()` ウィンドウ関数の正しい使い方、マテリアライズドビューで巨大テーブルを高速集計するパターンまで扱います。

シェア

この記事の感想を教えてください

あなたの 1 クリックで、本当にこの記事は更新されます。「もっと詳しく」「続編希望」が一定数集まった記事は、 ふくふくが 実際に内容を拡充したり続編記事を公開 します。 送信したリアクションはお使いのブラウザに記録され、再カウントされません。

シリーズの外も探す:

まずは、現状を聞かせてください。

要件が固まっていなくて大丈夫です。現状診断と方針提案までを無料でお手伝いします。

無料相談フォームへ hello [at] hukuhuku [dot] co [dot] jp