ひとことで言うと#
時間の順に並んだデータ(売上、アクセス数、株価など)をトレンド・季節性・ノイズの3要素に分解し、パターンを理解して将来の値を予測する分析手法。「過去のパターンから未来を読む」ためのデータ分析の王道。
押さえておきたい用語#
- トレンド(Trend)
- データの長期的な増減の方向性のこと。季節変動やノイズを取り除いた「地の実力」を示す。
- 季節性(Seasonality)
- 一定の周期(月次・週次・日次)で繰り返し現れるパターンのこと。12月の売上ピーク、月曜日のアクセス減少などが該当する。
- 自己相関(Autocorrelation)
- ある時点のデータが過去の自分自身のデータと相関する性質のこと。「先月の売上が高いと今月も高い」といった依存関係。
- ARIMA(Autoregressive Integrated Moving Average)
- 自己回帰・差分・移動平均を組み合わせた時系列予測モデルを指す。季節性がないデータの予測に使われる定番手法。
- Prophet(プロフェット)
- Meta(旧Facebook)が開発したビジネスデータ向けの時系列予測ツールである。季節性・祝日効果を自動検出し、直感的に使える。
時系列分析の全体像#
こんな悩みに効く#
- 「来月の売上はいくらになりそうか?」と聞かれても、勘でしか答えられない
- 売上が下がっているのが一時的なのか、構造的な問題なのか判断できない
- 過去データはあるのに、予測に活用できていない
基本の使い方#
まずデータを折れ線グラフで可視化して、全体像を把握する。
確認するポイント:
- トレンド: 長期的に増加・減少・横ばいのどれか
- 季節性: 毎年・毎月・毎週繰り返すパターンがあるか
- 異常値: 突発的な急増・急減がないか
- 構造変化: ある時点を境にパターンが変わっていないか
ポイント: 最低でも2年分のデータを可視化する。短すぎると季節性とトレンドを区別できない。
データを3つの要素に分解する。
- トレンド成分: 長期的な上昇・下降の方向性
- 季節成分: 周期的に繰り返すパターン
- 残差(ノイズ): トレンドと季節性で説明できない変動
分解方法:
- 加法モデル: データ = トレンド + 季節 + 残差(変動幅が一定の場合)
- 乗法モデル: データ = トレンド × 季節 × 残差(変動幅がトレンドに比例する場合)
ツール: Pythonのstatsmodels(STL分解)、ExcelのTREND関数+移動平均。
データの特性に合った予測モデルを選んで構築する。
| 手法 | 特徴 | 適した場面 |
|---|---|---|
| 移動平均 | 最もシンプル | 短期予測、ノイズの平滑化 |
| 指数平滑法 | 直近のデータを重視 | トレンドや季節性が緩やかな場合 |
| ARIMA | 自己回帰+移動平均の統合 | 季節性のないデータの中期予測 |
| SARIMA | ARIMAに季節性を追加 | 季節パターンのあるデータ |
| Prophet | Facebook開発、自動で季節性検出 | ビジネスデータの汎用予測 |
初心者におすすめ: Prophet(直感的に使え、祝日効果も考慮可能)。
予測の精度を検証し、改善サイクルを回す。
検証方法:
- ホールドアウト検証: データの最後の数ヶ月を「答え合わせ用」に取っておき、モデルの予測と比較
- 精度指標: MAPE(平均絶対パーセント誤差)が10%以下なら実用的
改善のサイクル:
- 予測値と実績値を毎月比較する
- 大きくズレた月の原因を分析する(外部要因?モデルの限界?)
- 新しいデータを取り込んでモデルを再学習する
ポイント: 予測は100%当たるものではない。信頼区間をセットで提示すること。
具体例#
状況: 全国30店舗の小売チェーン。来期の月別売上予測を精度よく行い、仕入れ計画に活かしたい。これまでは前年同月比に経験値を加味した「勘」で予測していた。
データ: 過去3年分(36ヶ月)の月次売上データ
要素分解の結果:
- トレンド: 年率5%の成長(右肩上がり)
- 季節性: 12月がピーク(指数140%)、2月が底(指数75%)
- 残差: 概ね小さいが、2024年10月に異常値(近隣に競合出店)
Prophetモデルによる予測(来期6ヶ月):
| 月 | 予測売上 | 95%信頼区間 |
|---|---|---|
| 4月 | 2.1億円 | 1.9〜2.3億円 |
| 5月 | 2.0億円 | 1.8〜2.2億円 |
| 6月 | 1.8億円 | 1.6〜2.0億円 |
| 7月 | 2.2億円 | 2.0〜2.5億円 |
| 8月 | 2.0億円 | 1.7〜2.2億円 |
| 9月 | 2.1億円 | 1.8〜2.3億円 |
精度検証(過去6ヶ月のバックテスト): MAPE = 7.2%(実用に十分な精度)
月別の予測売上に基づいて仕入れ量を調整。6月の閑散期は仕入れを15%削減し、在庫回転率を改善。欠品率が8%→3%に改善、在庫廃棄ロスが年間600万円削減。「勘」から「データ」への転換で、仕入れの精度が劇的に向上した。
状況: 月額課金のBtoB SaaS企業。MRR(月次経常収益)が1,800万円。急成長中で「来四半期にエンジニアを何人採用すべきか」の判断材料としてMRR予測を求められている。
データ: 過去24ヶ月のMRRデータ+新規契約数・解約数の内訳
要素分解の結果:
- トレンド: 月率4.2%の成長(複利で年率64%)
- 季節性: 3月と12月に契約増加(企業の予算消化時期)
- 残差: 2025年4月に急落(大口顧客1社の解約、MRR120万円分)
SARIMAモデルによる予測:
| 月 | 予測MRR | 95%信頼区間 | 前月比 |
|---|---|---|---|
| 4月 | 1,875万円 | 1,720〜2,030万円 | +4.2% |
| 5月 | 1,954万円 | 1,760〜2,148万円 | +4.2% |
| 6月 | 2,036万円 | 1,800〜2,272万円 | +4.2% |
アクション:
- MRR 2,000万円突破は6月の見込み → サーバー増強を5月に前倒し
- 信頼区間の下限(1,800万円)でもキャッシュフローが赤字にならないことを確認
- エンジニア2名の採用を承認(MRR成長が下限でもROI確保可能)
では、この分析で何が変わったか。成長率4.2%/月が安定して続いていることをデータで示し、経営陣の採用判断を後押しした。信頼区間の下限シナリオでも投資回収可能なことを証明したことで、「いける」ではなく「万が一でも大丈夫」という堅実な意思決定ができた。
状況: 客室15室の温泉旅館。スタッフ12名のシフト管理に悩んでいる。繁忙期に人が足りず、閑散期に人が余る。スタッフの残業代が年間320万円。
データ: 過去3年分の日別宿泊者数データ
要素分解の結果:
- トレンド: 年率2%の微増
- 季節性(月別指数):
- ピーク: 8月(155%)、1月(135%: 正月)、11月(125%: 紅葉)
- 底: 6月(65%)、2月(72%)
- 曜日効果: 土曜日の稼働率が平日の2.8倍
- 残差: GW・盆・年末年始の祝日効果が大きい
Prophetモデルの活用(祝日効果を組み込み):
- 祝日データ(GW、盆、年末年始、連休)をモデルに追加
- 予測精度: MAPE 8.5%(日別予測としては良好)
シフト最適化:
| 期間 | 従来のシフト | 予測ベースのシフト | 変化 |
|---|---|---|---|
| 繁忙期(8月) | 12名フル稼働+残業 | 14名(短期バイト2名追加) | 残業ゼロ |
| 閑散期(6月) | 12名(手持ち時間多い) | 8名(有給取得推奨) | 人件費15%削減 |
| GW・盆 | 急遽呼び出し | 2ヶ月前から計画配置 | 呼び出しゼロ |
残業代は年間320万円→85万円に削減(73%減)。繁忙期のサービス品質が向上し(スタッフに余裕ができた)、口コミ評価が**★4.0→★4.3**に改善。コスト削減とサービス向上の両立――これが「先を読む」ことの価値だった。
やりがちな失敗パターン#
- データ量が不足した状態で予測する — 6ヶ月分のデータでは季節性を捉えられない。季節性があるデータは最低2年分、できれば3年分のデータが必要
- 外部要因を考慮しない — 時系列分析は「過去のパターンが未来も続く」ことが前提。競合参入、法改正、パンデミックなどの構造変化があると予測が大きく外れる。外部要因の影響は別途モデルに組み込む
- 点予測だけを報告する — 「来月の売上は2億円です」ではなく、**「2億円(95%信頼区間: 1.8〜2.2億円)」**と幅で報告する。予測の不確実性を伝えないと、過度な期待や誤った判断を招く
- モデルを放置して更新しない — ビジネス環境は変化する。最低でも四半期に1回はモデルを再学習し、予測精度をモニタリングする。精度が悪化したらモデルの見直しが必要
まとめ#
時系列分析は、時間に沿ったデータの変動パターンを分解・理解し、将来の値を予測する分析手法。トレンド・季節性・ノイズに分解することで、データの構造を深く理解できる。予測は信頼区間とセットで提示し、定期的にモデルを更新すること。まずは自社の月次売上データを折れ線グラフで可視化し、トレンドと季節性のパターンを確認するところから始めよう。