Excelでデータの季節性を分析する時系列手法

Excelでデータの季節性を分析する時系列手法 IT
  1. 1章:季節性とは?時系列データで「繰り返し」を見抜く基礎知識
  2. 2章:Excelで準備する:データ整形(欠損・外れ値・日付)と可視化の最短ルート
    1. 1) 日付を“時系列”として扱える形にする
    2. 2) 欠損(抜け)を「空白のまま」にしない
    3. 3) 外れ値は消す前に「イベント」として疑う
    4. 4) 最短で効く可視化:折れ線+平均線+前年差
  3. 3章:まずは王道:移動平均と季節指数で季節性をざっくり掴む
    1. 1) 移動平均:季節のノイズを消して“地力”を見る
    2. 2) 季節指数:季節の強さを「何%増減」で持つ
    3. 3) 指数の“整形”:平均が1になるように揃える
    4. 4) 実務での使い方:季節調整して“実力”比較する
  4. 4章:一歩進める:STL分解の考え方をExcelで再現(トレンド・季節・残差)
    1. 1) まずは「トレンド」を置く(T:地力の線)
    2. 2) 次に「季節」を再推定する(S:毎年のクセ)
    3. 3) 残差を出す(R:説明できないズレ=異常の候補)
    4. 4) Excelで“STLっぽく”精度を上げるコツ(再推定)
  5. 5章:実務に効く:季節性を使った予測(ETS/FORECAST.ETS)と改善アクションの落とし込み
    1. 1) FORECAST.ETSで「季節性込みの妥当な未来」を作る
    2. 2) 予測は“点”ではなく“幅”で持つ(過信しない)
    3. 3) 予測→アクションに落とす:見るべきは「季節×需要×供給のズレ」
    4. 4) 最後に:Excel予測を“運用できる形”にする

1章:季節性とは?時系列データで「繰り返し」を見抜く基礎知識

「今月、売上が落ちたのは施策が弱かったから?」それとも「毎年この時期は落ちるもの」なのか。ここを見誤ると、いつも通りの“季節の波”に対して無駄な打ち手を撃ったり、逆に本当の異常を見逃したりします。そこで押さえたいのが、時系列データにおける季節性(seasonality)です。

季節性とは、一定の周期で繰り返される変動のこと。季節と言っても春夏秋冬に限らず、ビジネスでは次のように幅広く現れます。

  • 週次:平日と休日でPVや注文が変わる、月曜は問い合わせが多い
  • 月次:給料日後に購買が伸びる、月末に締め処理で利用が増える
  • 年次:年末商戦、年度末、夏休み、繁忙期/閑散期

ポイントは、季節性は「良い/悪い」ではなく構造だということ。構造を掴めると、次の判断が一気に楽になります。

  • 前月比ではなく、前年同月比で妥当な比較ができる
  • 「いつも起きる落ち込み」と「今回だけの落ち込み」を分けられる
  • 施策効果を季節の影響から切り離して評価できる

時系列データの変動は、ざっくり次の3要素で説明できます。

  1. トレンド:長期的な増減(成長、衰退)
  2. 季節性:周期的な繰り返し(毎週、毎月、毎年)
  3. 残差(ノイズ):上の2つでは説明できないブレ(突発要因、計測誤差)

ここで初心者がつまずきやすいのが、「トレンドと季節性の混同」です。たとえば右肩上がりの売上に週末の山谷が乗ると、グラフはガタガタして見えます。けれど実際には成長(トレンド)しながら、週末に跳ねる(季節性)だけかもしれません。逆に、トレンドが横ばいでも年末だけ跳ねるなら、施策の成果というより季節要因の可能性が高い。

また、季節性には2種類あります。

  • 加法モデル:季節の振れ幅が一定(例:毎月だいたい±100件)
  • 乗法モデル:季節の振れ幅が規模に比例(例:売上が伸びるほど繁忙期の上振れも大きい)

実務では売上や利用者数のように規模が変わる指標が多いため、体感的には乗法(割合で効く)の季節性がよく出ます。Excelで分析するときも、「平均との差」ではなく「平均に対して何%増減か」を見たほうが納得感が高いケースが多いです。

この章の結論はシンプルで、季節性とは比較の物差しを正すための前提です。次章では、その季節性をExcelで読み解くために、欠損・外れ値・日付の整形と、最短で効く可視化の準備を整えていきます。

2章:Excelで準備する:データ整形(欠損・外れ値・日付)と可視化の最短ルート

季節性の分析は「高度な手法」より先に、データの形を整えるのが勝ち筋です。ここが雑だと、移動平均も季節指数も分解も全部ズレます。Excelで最短で整える手順を、実務でつまずきやすい3点(欠損・外れ値・日付)に絞って進めます。

1) 日付を“時系列”として扱える形にする

まず確認したいのは、日付が文字列になっていないか。見た目が「2026/1/1」でも、左寄せなら文字列の可能性があります。文字列だと並び替えが崩れ、グラフも正しく描けません。

  • 日付の列を選択 → データ区切り位置 →(そのまま)完了:文字列日付が日付型に直ることが多い
  • それでもダメなら、=DATEVALUE(A2)で日付に変換(日本語表記などは注意)

粒度(1日/1週/1か月)も揃えます。日次データから月次で季節性を見たいなら、ピボット or 集計列で月に丸めるのが手早いです。

  • 月のキー列:=EOMONTH(A2,0)(月末日で統一)
  • 週のキー列:=A2-WEEKDAY(A2,2)+1(週の月曜で統一)

2) 欠損(抜け)を「空白のまま」にしない

時系列の怖さは、欠損があると周期の計算が崩れること。まずは抜けを検出します。

  • 値の列で Ctrl+Gセル選択空白セル:欠損位置を一発で特定

埋め方はケースで分けます。

  • 計測漏れ(本当はデータがあるはず):原本から再取得が最優先
  • 営業日がないなど構造的にゼロ:0で埋める(意味が「ゼロ」なら)
  • どちらでもなく短い欠損:前後から補間(例:=(B1+B3)/2

大事なのは、埋めた値が分析を歪めないように、補完したセルに色を付けておくこと。後で「見た目の季節性」が実は補完だった、を防げます。

3) 外れ値は消す前に「イベント」として疑う

急なスパイクや落ち込みは、季節性ではなく一過性の要因(障害・キャンペーン・在庫切れ)かもしれません。うっかり削除すると、改善のヒントも消えます。

まずはフラグ付けで十分です。例えば平均との差の大きさで目安を作り、外れ候補を色付けします。

  • 平均との差:=B2-AVERAGE($B:$B)
  • 標準偏差でざっくり:=ABS(B2-AVERAGE($B:$B))>=3*STDEV.P($B:$B)

外れ値が「異常」ではなく「仕様(季節イベント)」なら、次章以降の季節指数に反映させる価値があります。逆に障害などのノイズなら、分析用に別列で置換(例:前後平均)し、元データは残すのが実務的です。

4) 最短で効く可視化:折れ線+平均線+前年差

整形したら、いきなり複雑な分解に行かず、まずは見て気づく。おすすめは次の3点セットです。

  1. 折れ線グラフ:横軸は日付(必ず日付型)、縦軸は指標
  2. 平均との差(または比)の列を追加:季節の山谷が見えやすい
  3. 前年差(前年同日/同週/同月):季節性をまたいで比較できる

前年差は、月次ならシンプルに=B2-INDEX(B:B,ROW()-12)(12か月前)で作れます(データが12か月以上ある前提)。これを棒グラフにすると、「季節の波」ではなく「前年差での改善/悪化」が一瞬で分かります。

ここまでできれば、季節性分析の土台は完成です。次章では、この整ったデータを使って、移動平均季節指数という王道手法で「繰り返し」をざっくり掴みにいきます。

3章:まずは王道:移動平均と季節指数で季節性をざっくり掴む

準備が整ったら、まずやるべきは「難しい分解」ではなく、トレンドのうねりをならして、季節の山谷を数値化すること。Excelで王道なのが移動平均季節指数です。これだけで「いつ・どれくらいブレるか」の当たりが付き、以降のSTL分解や予測の精度も上がります。

1) 移動平均:季節のノイズを消して“地力”を見る

移動平均は、直近k期間の平均を取り、短期のガタつきを平滑化する手法です。例えば月次データで年次の季節性を疑うなら、まずは12か月移動平均が定番。数式はシンプルに、12か月ぶんの平均を取ります。

(例:月次の値がB列、B2が1行目のデータの場合)
=AVERAGE(B2:B13)

ただしこれだと「平均との差分」がずれます。季節性を作る前処理として使うなら、中心に置いた中心化移動平均が実務では扱いやすいです(ざっくり言うと、移動平均を真ん中の月に割り当てる)。Excel上は、移動平均列を作ってから行を半分ずらして貼り付けるか、奇数窓(例:13)で近似してもOKです。

移動平均で見るべきポイントは2つ。

  • トレンドの方向:伸びているのか、鈍化しているのか
  • 山谷がトレンドに対して一定か:規模が大きいほど季節の振れ幅も大きいなら「乗法っぽい」

2) 季節指数:季節の強さを「何%増減」で持つ

次に、季節性を“ざっくり”数値化します。1章で触れた通り、売上・利用者数のような指標は乗法(割合で効く)が多いので、ここでは季節指数を「平均に対して何倍か」で作るのが分かりやすいです。

手順は次の流れです。

  1. 移動平均(トレンド成分の近似)を作る
  2. 季節比を作る(実績 ÷ 移動平均)
  3. 同じ季節(同月/同曜日など)ごとに平均し、季節指数にする

季節比は、移動平均がC列にあるならこうです。

=B2/C2

これを「月」でまとめます。月次データなら、月番号(1〜12)の列を作っておくと集計が楽です。

=MONTH(A2)

あとはピボットテーブルで、行に月番号、値に季節比の平均を置けば、各月の季節指数が出ます。例えば「12月が1.25」なら、平常月平均より25%上振れしやすい、という読みになります。

3) 指数の“整形”:平均が1になるように揃える

季節指数は、全体平均が1になるように調整しておくと使い回しが効きます(季節性だけを表すため)。ピボットから出した12個の指数の平均を取り、各指数をその平均で割って正規化します。

(例:月別指数がE2:E13にある)
平均:=AVERAGE(E2:E13)
正規化:=E2/$E$14

こうすると「指数の平均=1」に揃い、次章以降の分解や、5章の予測結果の解釈がブレにくくなります。

4) 実務での使い方:季節調整して“実力”比較する

季節指数まで作れたら、すぐに実務で効くのが季節調整値です。たとえば「今月の売上が弱い」が季節要因なのかを切り分けるには、

季節調整値 = 実績 ÷(該当月の季節指数)

で比較します。12月(指数1.25)で1200万円、2月(指数0.85)で900万円でも、季節調整後は逆転することがあります。これを見ずに「2月の方がダメ」と判断すると、打ち手がズレます。

ここまでが「まずは王道」のゴールです。移動平均でトレンドの地力を掴み、季節指数で山谷を割合で持てば、季節性の輪郭は十分見えます。次章では、この考え方を一歩進めて、トレンド・季節・残差を分けるSTL分解をExcelで“再現”していきます。

4章:一歩進める:STL分解の考え方をExcelで再現(トレンド・季節・残差)

3章で「移動平均=トレンドの近似」「季節指数=季節の型」は掴めました。次はそれを一本化して、時系列をトレンド(T)+季節(S)+残差(R)に分けて見える化します。これがSTL分解(Seasonal and Trend decomposition using Loess)の発想です。ExcelにSTLボタンはありませんが、考え方は段階的な分解で十分再現できます。

1) まずは「トレンド」を置く(T:地力の線)

やることは3章の延長で、中心化移動平均などで長期の動きだけを残す列を作ります。月次×年次季節性なら、基本は12か月窓です。

  • T列(トレンド近似)=中心化移動平均(または13か月移動平均で近似)

ここで大事なのは、Tは「厳密さ」より季節の波を消せているか。一度グラフで実績と重ね、Tが山谷に引っ張られていないか確認します。

2) 次に「季節」を再推定する(S:毎年のクセ)

STLの核は、季節性を一発で固定しないこと。Excelでも、いったんトレンドを引っこ抜いてから季節性を作り直すと、精度が上がります。

  1. 季節比(または季節差)を作る:実績をトレンドで割る(乗法モデル想定)
(実績=B列、トレンド=T列の場合)
季節比 = B2 / T2

この季節比を「月」ごとに平均し、月別のS(季節指数)を作ります(ピボットでOK)。さらに3章と同様に、Sの平均が1になるよう正規化します。これでSは「その月は平常の何倍になりやすいか」を表す、純粋な季節成分になります。

最後に各行へ季節指数を戻します。月番号の列があるなら、XLOOKUPで該当月の指数を引けば一瞬です。

(月番号= D2、月別指数表がH2:I13(H=月、I=指数))
S2 = XLOOKUP(D2,$H$2:$H$13,$I$2:$I$13)

3) 残差を出す(R:説明できないズレ=異常の候補)

最後に残差です。トレンドと季節を取り除いた「残り」で、ここがSTL分解の一番おいしい部分。なぜなら、施策・障害・在庫切れなど“今回だけ”の要因が浮き上がるからです。

乗法で分解するなら、残差は「比」で持つのが実務向きです。

R2 = B2 / (T2 * S2)
  • Rが1.00付近:想定通り(季節とトレンドで説明できる)
  • Rが1.10:想定より10%上振れ(良い異常)
  • Rが0.90:想定より10%下振れ(悪い異常)

Rを折れ線で描き、1.0の基準線と一緒に見てください。3章までだと「季節のせい」で埋もれていたズレが、ここではノイズではなく“検知すべきシグナル”になります。例えばRが連続して0.95を割っているなら、季節要因ではなく「プロダクトの不調」「集客の劣化」など、構造変化の疑いが濃い。

4) Excelで“STLっぽく”精度を上げるコツ(再推定)

STLは本来、季節とトレンドを交互に磨くのが特徴です。Excelでも簡易的に再現できます。

  1. 一度作ったSで季節調整:B/S を作る
  2. その季節調整値に対して改めて移動平均を取り、Tを更新
  3. 更新したTで季節比を作り直し、Sを更新

これを1回回すだけでも「トレンドが季節に引っ張られる」「季節指数がトレンドの伸びを拾う」などの混同が減ります。

ここまでできれば、Excelでも「T(地力)」「S(クセ)」「R(異常)」が分離でき、判断が一段クリアになります。次章では、この分解で掴んだ季節性をそのまま武器にして、ETS/FORECAST.ETSで予測し、改善アクションに落とすところまでつなげます。

5章:実務に効く:季節性を使った予測(ETS/FORECAST.ETS)と改善アクションの落とし込み

1〜4章で「季節性は構造」「T/S/Rで分けると判断がクリア」を押さえました。最後は、その季節性を予測として使い、さらに改善アクションに変換します。ここで便利なのがExcelのETS(指数平滑法)で、関数ならFORECAST.ETSが中心です。

1) FORECAST.ETSで「季節性込みの妥当な未来」を作る

例えば月次データ(A列=月末日、B列=実績)なら、次月以降の日付をA列に並べ、予測値をC列に出します。

=FORECAST.ETS(A13,$B$2:$B$12,$A$2:$A$12,12,1,1)
  • target_date:予測したい日付(A13)
  • values:実績(B2:B12)
  • timeline:日付(A2:A12)※2章の「日付型」が効く
  • seasonality:月次×年次なら12(週次なら52、日次なら7など)
  • data_completion:欠損の扱い(1=補完)
  • aggregation:同一日付がある場合の集約(1=平均)

まず作りたいのは「施策を入れない場合でも、季節でこれくらい動くよね」という基準線(ベースライン)です。これがあるだけで、会議の議論が「気合い」から「差分」に変わります。

2) 予測は“点”ではなく“幅”で持つ(過信しない)

実務で事故るのは、予測値を確定値として扱うこと。ETSには信頼区間を返す関数もあります。

上限:=FORECAST.ETS.CONFINT(A13,$B$2:$B$12,$A$2:$A$12,0.95,12,1,1)

上限・下限(予測値±CONFINT)をグラフで帯にすると、「今月の着地はこの範囲に入れば想定内」という合意が取りやすくなります。4章の残差Rと合わせて、想定内(ノイズ)想定外(異常)の線引きも明確になります。

3) 予測→アクションに落とす:見るべきは「季節×需要×供給のズレ」

季節性分析のゴールは当てることではなく、先回りして手を打つこと。おすすめは、予測をそのままKPI化して運用するやり方です。

  • 繁忙期(指数>1):在庫・人員・サーバー枠を先に積む(機会損失を防ぐ)
  • 閑散期(指数<1):広告費の配分見直し、CRM施策の集中、改善作業の当て込み
  • 予測より悪い:4章のR(残差)が連続で1未満なら、季節ではなく構造問題の疑い→流入/CVR/単価のどこが落ちたか分解
  • 予測より良い:再現性のある要因かを確認(キャンペーン、露出、バズ)→次回の季節イベントに“型”として組み込む

ポイントは「前年差」だけで一喜一憂せず、季節込みの予測との差で評価すること。たとえば「前年同月比+5%」でも、モデルが+10%を見ているなら実質は失速です。逆に前年割れでも、季節的に落ちる月で予測を上回っているなら、改善は進んでいます。

4) 最後に:Excel予測を“運用できる形”にする

おすすめの運用は、シートに実績・予測・残差・メモ(イベント)を並べることです。

  • 予測と実績の差(実績−予測)を毎月レビューする
  • 差が出た月は理由を1行で残す(キャンペーン/障害/価格改定など)
  • 理由が繰り返すなら、それは「ノイズ」ではなく次の季節性(構造)候補

こうして「季節の波を前提にした予測」と「ズレの理由」のログが溜まると、来年の計画が一気にラクになります。季節性は、分析で終わらせず意思決定の型にして初めて武器になります。

コメント

NewsTowerをもっと見る

今すぐ購読し、続きを読んで、すべてのアーカイブにアクセスしましょう。

続きを読む