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(重複日付の集計方法)
同じ日付が複数回ある場合の集計方法を指定します。
| 値 | 集計方法 |
|---|---|
| 1 | AVERAGE(平均・既定) |
| 2 | COUNT |
| 3 | COUNTA |
| 4 | MAX |
| 5 | MEDIAN |
| 6 | MIN |
| 7 | SUM |
月次や日次データで日付が重複しないなら、省略して問題ありません。
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で予測の流れ
実務では次の流れがおすすめです。
- FORECAST.ETS.SEASONALITY関数でデータの周期長を確認する
- 想定どおりの値(月次データなら12など)かチェック
- 想定どおりならFORECAST.ETSの
seasonalityを0(自動検出)で予測 - 想定と違うなら、データのクレンジングか手動指定を検討
=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 | 平滑係数や誤差指標 | 「予測モデルの精度は?」の答え |
実務では、これらをセットで使うのがおすすめです。
- FORECAST.ETS.SEASONALITY で周期を確認
- FORECAST.ETS で予測値を計算
- FORECAST.ETS.CONFINT で信頼区間を計算
- FORECAST.ETS.STAT でモデルの精度を確認
予測値だけでなく「どれくらい信頼できるか」「どんな周期に基づいているか」まで把握できると、
レポートの説得力が大きく上がります。
詳しい使い方は関連記事も参考にしてください。
まとめ|FORECAST.ETS.SEASONALITYで季節性を見抜こう
FORECAST.ETS.SEASONALITY関数のポイントを振り返ります。
- 時系列データの周期の長さを自動検出して返す関数
- 返り値は「データポイントの個数」(月次で12なら年周期、日次で7なら週周期)
- 必須引数は values と timeline の2つ。日付は等間隔が前提
- 周期長×2以上のデータ件数を準備するのが安全
- FORECAST.ETSの
seasonality引数と組み合わせて使うのが王道 - エラーが出たら、まずはデータ件数と日付の等間隔性をチェック
予測の前に「データに本当に季節性があるか」を確認できると、予測値の解釈もぐっと深まります。
月次・週次・日次のデータがあるなら、まずFORECAST.ETS.SEASONALITY関数で周期を見るところから始めてみてください。
