ExcelのFORECAST.ETS.SEASONALITY関数の使い方|季節性の自動検出

スポンサーリンク

ExcelのFORECAST.ETS.SEASONALITY関数とは?周期を自動検出する関数

「売上に季節性があると言われるけど、実際に何ヶ月周期で繰り返しているのか確認したい」
「FORECAST.ETSで予測する前に、データの周期を一度チェックしておきたい」

こんな場面で活躍するのがFORECAST.ETS.SEASONALITY関数です。

この記事ではFORECAST.ETS.SEASONALITY関数の使い方を、月次売上データの実例とともに解説します。
FORECAST.ETSとの連携、返り値の意味、よくあるエラーまでまとめて押さえていきましょう。

読み方と語源(ETS=指数三重平滑、SEASONALITY=季節性)

FORECAST.ETS.SEASONALITY関数の読み方は「フォーキャスト・イーティーエス・シーズナリティ」です。
語源を分解するとイメージしやすくなります。

  • FORECAST: Forecast(予測)
  • ETS: Exponential Triple Smoothing(指数三重平滑法)
  • SEASONALITY: Seasonality(季節性・周期性)

ETS(指数三重平滑法)は、データを「水準・トレンド・季節性」の3要素に分けて予測するアルゴリズムです。
FORECAST.ETS関数の内部でも使われています。

SEASONALITYはそのうち「季節性」の周期長だけを取り出して教えてくれる関数です。

対応バージョンはExcel 2016以降で、Microsoft 365でも問題なく使えます。

季節性とは何か(売上が周期的に増減するパターン)

そもそも「季節性」とは何でしょうか。
一言でいうと、一定の周期で繰り返されるデータの増減パターンのことです。

身近な例を挙げてみます。

  • 月次売上: 12月が毎年高く、2月が毎年低い → 12ヶ月周期
  • 日次受注数: 平日は多く土日は少ない → 7日周期
  • 時間帯別アクセス数: 朝と夜にピークが来る → 24時間周期

FORECAST.ETS.SEASONALITY関数は、こうした周期の長さをデータポイントの個数で返してくれます。
月次売上で「12」が返れば年周期、日次データで「7」が返れば週周期です。

FORECAST.ETS.SEASONALITY関数の構文と引数

FORECAST.ETS.SEASONALITY関数の構文は以下のとおりです。

=FORECAST.ETS.SEASONALITY(values, timeline, [data_completion], [aggregation])

引数は4つで、最初の2つが必須、後ろ2つは省略可能です。

引数必須説明
values必須履歴データの数値範囲(売上・件数など)
timeline必須valuesと同じサイズの日付・数値範囲。等間隔が前提
data_completion省略可欠損値の扱い。0=欠損のまま、1=隣接値で補完(既定)
aggregation省略可同一日付がある場合の集計方法。1〜7の数値で指定

values(履歴データ)

予測の元となる過去の数値データを指定します。
月次売上、週次トラフィック、日次受注数など、時系列に並んだ数値が対象です。

空白セルやテキストが混ざっているとエラーの原因になります。
事前に数値だけが入っているか確認してください。

timeline(日付列)

valuesと対になる日付・時刻・数値の範囲を指定します。
重要なのは等間隔であることです。

月次なら毎月1日、日次なら毎日連続している必要があります。

不揃いな間隔があると周期が検出できず、#NUM!#N/Aエラーになります。

data_completion(欠損値の扱い)

データに欠損がある場合の扱いを数値で指定します。

  • 0: 欠損は欠損のまま扱う(周期検出が難しくなる)
  • 1: 前後の値から補完する(既定値・推奨)

通常は省略するか1を指定すれば問題ありません。

aggregation(重複日付の集計方法)

同じ日付が複数回ある場合の集計方法を指定します。

集計方法
1AVERAGE(平均・既定)
2COUNT
3COUNTA
4MAX
5MEDIAN
6MIN
7SUM

月次や日次データで日付が重複しないなら、省略して問題ありません。

FORECAST.ETS.SEASONALITY関数の基本的な使い方

実際の使い方を、月次売上データの例で見ていきます。

月次売上データで季節性を検出する例

A列に2024年1月から2026年12月までの月初日付(36ヶ月分)、
B列にそれぞれの売上が入っているとします。

E1セルに以下の数式を入れます。

=FORECAST.ETS.SEASONALITY(B2:B37, A2:A37)

返り値が12であれば、データに12ヶ月(=年)周期の季節性があるという意味です。
毎年同じ月に売上が高く・低くなるパターンが検出されたことになります。

返り値の意味(12=年周期、7=週周期)

返り値はデータポイントの個数で表されます。
データの単位によって意味が変わるので注意してください。

データの単位返り値の意味
月次12 = 年周期 / 4 = 四半期周期
週次4 = 月周期 / 13 = 四半期周期
日次7 = 週周期 / 30〜31 = 月周期
時次24 = 日周期 / 168 = 週周期

返り値が1の場合は「明確な季節性なし」と判断されたという意味です。
データのばらつき・周期の不明瞭さ・件数不足などが原因として考えられます。

NOTE: 自動検出される周期の上限

FORECAST.ETS.SEASONALITY関数が検出できる最大周期長は、データ全体のおよそ半分までです。
年周期(12)を検出するには最低24ヶ月、できれば36ヶ月以上のデータを用意するのが安全です。

FORECAST.ETSのseasonality引数との連携

FORECAST.ETS.SEASONALITYの真価は、FORECAST.ETS関数と組み合わせたときに発揮されます。

自動検出(0)と手動指定の使い分け

FORECAST.ETS関数の構文を確認します。

=FORECAST.ETS(target_date, values, timeline, [seasonality], [data_completion], [aggregation])

4番目のseasonality引数で、季節性の周期長をどう扱うかを指定できます。

seasonality値動作
0自動検出(既定)
1季節性なしとして予測
2以上指定した周期長で予測

通常は0の自動検出で問題ありません。
ただし以下のような場面では手動指定が有効です。

  • イベント要因で過去データが歪んでおり、自動検出が外れる
  • ビジネス上「年周期で見たい」など固定の周期で予測したい
  • 自動検出値が想定と違う(例: 12を期待したのに13になる)

SEASONALITY関数で確認 → ETSで予測の流れ

実務では次の流れがおすすめです。

  1. FORECAST.ETS.SEASONALITY関数でデータの周期長を確認する
  2. 想定どおりの値(月次データなら12など)かチェック
  3. 想定どおりならFORECAST.ETSのseasonalityを0(自動検出)で予測
  4. 想定と違うなら、データのクレンジングか手動指定を検討
=FORECAST.ETS.SEASONALITY(B2:B37, A2:A37)
=FORECAST.ETS(A38, B2:B37, A2:A37, 0)
=FORECAST.ETS(A38, B2:B37, A2:A37, 12)

よくあるエラーと対処法

FORECAST.ETS.SEASONALITY関数でつまずきやすいエラーをまとめます。

#NUM!(データ件数不足・周期検出失敗)

最も多いのが#NUM!エラーです。原因は次の3パターンです。

  • データ件数が不足: 周期長の2倍未満のデータしかない
  • ノイズが大きい: ばらつきが大きすぎて周期が見えない
  • 明確な周期がない: データ自体に規則性がない

対処としては、まずデータ件数を増やすことを検討してください。
年周期を見たいなら最低24ヶ月、できれば36ヶ月以上のデータを準備します。
それでもエラーが解消しない場合は、異常値を除外するかFORECAST.LINEAR関数の利用を検討します。

#VALUE!(日付の型エラー・配列サイズ不一致)

#VALUE!エラーは、引数の型やサイズの問題です。

  • timelineに文字列・空白セルが含まれている
  • valuesとtimelineの範囲サイズが一致していない(例: B2:B37 と A2:A36)
  • data_completionやaggregationに想定外の値を指定している

対処としては、まずtimelineが日付として認識されているか確認することです。
セルの書式設定で「日付」を選んだ状態で値を入れ直すと解消することが多いです。
範囲サイズはvaluesとtimelineを必ず同じ行数にしてください。

#N/A(参照範囲の不一致・等間隔でない日付)

#N/Aエラーは、日付の間隔が等間隔でない場合に発生しやすいエラーです。

  • 月次データなのに、ある月だけ抜けている
  • 日次データなのに、土日のデータがない(営業日のみ)
  • 不規則な日付(例: 1日、3日、10日、15日…)が混在している

対処としては、不足している日付を補ってデータを等間隔にすることです。
土日を除外している場合は、data_completion=1を指定して補完するか、
平日のみをタイムラインとして扱う設計にしてください。

FORECAST.ETS / FORECAST.ETS.CONFINT との違い・使い分け

FORECAST.ETSシリーズは複数の関数で構成されます。それぞれの役割を整理します。

関数返り値用途
FORECAST.ETS予測値そのもの「来月の売上はいくら?」の答え
FORECAST.ETS.CONFINT予測値の信頼区間(ブレ幅)「どれくらい誤差がある?」の答え
FORECAST.ETS.SEASONALITY自動検出された周期長「データに何ヶ月周期がある?」の答え
FORECAST.ETS.STAT平滑係数や誤差指標「予測モデルの精度は?」の答え

実務では、これらをセットで使うのがおすすめです。

  1. FORECAST.ETS.SEASONALITY で周期を確認
  2. FORECAST.ETS で予測値を計算
  3. FORECAST.ETS.CONFINT で信頼区間を計算
  4. FORECAST.ETS.STAT でモデルの精度を確認

予測値だけでなく「どれくらい信頼できるか」「どんな周期に基づいているか」まで把握できると、
レポートの説得力が大きく上がります。

詳しい使い方は関連記事も参考にしてください。

まとめ|FORECAST.ETS.SEASONALITYで季節性を見抜こう

FORECAST.ETS.SEASONALITY関数のポイントを振り返ります。

  • 時系列データの周期の長さを自動検出して返す関数
  • 返り値は「データポイントの個数」(月次で12なら年周期、日次で7なら週周期)
  • 必須引数は values と timeline の2つ。日付は等間隔が前提
  • 周期長×2以上のデータ件数を準備するのが安全
  • FORECAST.ETSのseasonality引数と組み合わせて使うのが王道
  • エラーが出たら、まずはデータ件数と日付の等間隔性をチェック

予測の前に「データに本当に季節性があるか」を確認できると、予測値の解釈もぐっと深まります。
月次・週次・日次のデータがあるなら、まずFORECAST.ETS.SEASONALITY関数で周期を見るところから始めてみてください。

タイトルとURLをコピーしました