ひとことで言うと#
売上やアクセス数などのデータに含まれる季節的・周期的なパターンを見つけ出し、「いつ増えて、いつ減るか」を予測可能にする分析手法。感覚ではなくデータで繁忙期と閑散期を把握できる。
押さえておきたい用語#
- 季節指数(Seasonal Index)
- 各月(または週・日)の平均値を全体平均で割った季節変動の大きさを示す係数のこと。100%が平均、130%なら平均の1.3倍の需要がある。
- トレンド(Trend)
- データの長期的な増減の方向性を指す。季節変動とは別に存在し、分離して分析する必要がある。
- 移動平均(Moving Average)
- 一定期間(例: 12ヶ月)のデータを平均することで、季節変動を平滑化しトレンドを抽出する手法である。
- STL分解(Seasonal-Trend Decomposition)
- 時系列データをトレンド・季節成分・残差の3つに分解する統計手法のこと。Pythonのstatsmodelsで実行可能。
季節性分析の全体像#
こんな悩みに効く#
- 毎年同じ時期に売上が急落するが、原因がわからない
- 「今月は好調だ」と喜んでも、実は例年通りの季節変動だった
- 在庫を持ちすぎたり、足りなくなったりを繰り返している
基本の使い方#
分析したい指標の最低2年分、できれば3年分以上のデータを月別(または週別)で集める。
- 例: 月別売上、週別サイトアクセス数、日別注文数など
- 期間が短すぎると、季節パターンなのか偶然なのか区別できない
- 外部要因(消費増税、コロナなど)があった期間にはフラグを立てておく
ポイント: まずはExcelやスプレッドシートに月別データを並べるだけでOK。
データを「トレンド(長期的な増減)」と「季節変動(周期的な上下)」に分ける。
- 簡易手法: 12ヶ月移動平均を計算し、それをトレンドとする。元のデータからトレンドを引いた残りが季節変動
- 季節指数の計算: 各月の平均値を全体平均で割る
- 例: 12月の平均売上が全体平均の1.3倍 → 季節指数 130%
ポイント: Excelなら移動平均は AVERAGE 関数で、PythonならstatsmodelsのSTL分解が便利。
季節指数を月別の棒グラフまたは折れ線グラフにして、パターンを視覚的に確認する。
- 例: アイスクリーム店の季節指数
- 1月: 60% / 4月: 90% / 7月: 160% / 10月: 95% / 12月: 80%
- 年ごとに折れ線を重ねると、パターンの安定性がわかる
「毎年同じ形」なら信頼度が高い。年によってバラバラなら他の要因が大きい。
季節指数を使って来期の数値を予測し、具体的なアクションにつなげる。
- 需要予測: トレンド予測値 × 季節指数 = 月別予測値
- 在庫計画: 繁忙期の2ヶ月前から在庫を積み増す
- 広告予算: 季節指数が高い月に予算を厚く配分する
- 人員計画: 繁忙期に合わせてシフトを調整する
予測は必ず実績と比較し、季節指数を定期的にアップデートすること。
具体例#
状況: 年商5億円のアパレルEC。毎月均等に広告予算(月100万円)を配分しているが、ROIが月によって1.2〜3.5倍と大きく異なる。
季節性分析の結果(過去3年の売上季節指数):
| 月 | 季節指数 | 特徴 |
|---|---|---|
| 1月 | 130% | 初売り・福袋需要 |
| 2〜3月 | 110% | 春物の立ち上がり |
| 4〜5月 | 85% | 端境期 |
| 6月 | 75% | 閑散期 |
| 7月 | 95% | セール需要 |
| 8〜9月 | 80% | 端境期 |
| 10〜11月 | 105% | 秋冬物の立ち上がり |
| 12月 | 140% | クリスマス・年末需要 |
アクション: 月100万円の均等配分をやめ、季節指数に比例して配分を変更。12月: 168万円、6月: 60万円。年間総額は変えず需要の高い月に集中投下。
広告ROIは1.8倍→2.5倍に改善。閑散期の無駄な出稿が減り、繁忙期の機会損失が解消された。同じ予算でも「いつ使うか」で効果は激変する。
状況: 全国25店舗の居酒屋チェーン。人件費が売上の35%を占めており、閑散期にスタッフが余り、繁忙期に不足するパターンが続いている。
季節性分析の結果(過去3年の来客数季節指数):
| 月 | 季節指数 | 必要スタッフ数/店 |
|---|---|---|
| 1月 | 70% | 8名 |
| 3月 | 125% | 15名(歓送迎会) |
| 4月 | 130% | 15名(歓迎会) |
| 7月 | 110% | 13名(ビアガーデン) |
| 8月 | 90% | 10名 |
| 12月 | 155% | 18名(忘年会) |
アクション:
- 12月と3〜4月に短期バイトを重点募集(2ヶ月前から採用開始)
- 1月と8月の閑散期はシフト削減とスタッフ研修期間に設定
- 季節指数に基づいた月別の人件費予算を策定
では、季節性に合わせた配置は何を変えたか。人件費率は35%→31%に改善(年間約2,800万円の削減)。繁忙期の人手不足による機会損失もなくなり、12月の売上は前年比**8%**増加した。
状況: 生徒数400名の学習塾。年間を通じて均等に広告を出しているが、入塾問い合わせの波が大きく、営業効率が悪い。
季節性分析(過去3年の月別問い合わせ数):
| 月 | 季節指数 | 主な要因 |
|---|---|---|
| 2月 | 180% | 新年度準備 |
| 3月 | 200% | 新学年最大ピーク |
| 4月 | 140% | 新学期開始 |
| 7月 | 120% | 夏期講習 |
| 9月 | 90% | やや落ち着く |
| 11〜12月 | 60% | 最閑散期 |
アクション:
- 広告予算: 2〜4月に年間予算の50%を集中投下。11〜12月は最小限に
- 体験授業: 1月から開始(ピークの1ヶ月前に仕込む)
- 閑散期対策: 11〜12月は既存生徒の紹介キャンペーンに注力
問い合わせ単価は年間平均で38%改善。2〜4月の入塾者数は前年比25%増。生徒数は400名→480名に。ピーク月への集中投下が、この成長を実現した。
やりがちな失敗パターン#
- 1年分のデータだけで季節性を判断する — たまたまその年だけ特殊だった可能性がある。最低2年、理想は3年分のデータで複数年に共通するパターンを確認する
- トレンドと季節変動を混同する — 「毎月売上が伸びている」のはトレンド(成長)であって季節性ではない。トレンドを除去してから季節パターンを見るのが正しい手順
- 外部要因を無視する — コロナ禍やキャンペーン施策など、一時的な外部要因で歪んだデータをそのまま使うと季節指数が狂う。異常値は除外またはフラグを立てて処理する
- 季節指数を固定して更新しない — 消費者行動やビジネス環境は変化する。毎年新しいデータを加えて季節指数を更新し、パターンの変化を検知する
まとめ#
季節性分析は、データに潜む周期的なパターンを見つけ出し、需要予測や資源配分の精度を高める分析手法。「いつ増えて、いつ減るか」がわかれば、在庫・広告・人員の計画が格段に立てやすくなる。まずは自社の売上データを月別に3年分並べて、季節指数を計算するところから始めよう。