トレンド成分・周期成分・残差へデータを分解する
時系列を トレンド(長期の傾向)・周期(繰り返す波)・残差(それ以外) の 3 つに分けます。売上の伸びが本当の成長なのか季節要因なのかを切り分けたいときに使います。
予測はしません。予測は prophet や ARIMA を使ってください。
入出力
| ポート | 内容 |
|---|---|
| 入力データ | データ |
| 出力データ | データ |
Spark エンジンでは動きません。
行の数は変わりません。 列が 3 つ増えます。ただし、出力は日付列の昇順に並び替わります。
設定項目
- 処理対象列を選択必須
- 分解する列。数値の列だけ選べます。1 列だけです。
- 日付列を選択必須
- 並べ替えの軸。日付・日付時間・時間の列だけ選べます。
- 日付の周期を入力必須
- 何期で 1 周するか。日次で週の波なら
7、月次で年の波なら12。1 以上、データの行数以下の整数です。
オプション
- window幅を入力(0~1)
- トレンドをどれくらい滑らかにするか。既定は
0.6。0 以上 1 以下です。
増える列の名前
| 成分 | できる列 |
|---|---|
| トレンド | <元の列名>_トレンド成分 |
| 周期 | <元の列名>_周期成分 |
| 残差 | <元の列名>_残差 |
3 つを足すと元の値に戻ります。 トレンド+周期+残差 = 元の値という形(加法モデル)で分けています。掛け算で分ける(乗法モデル)設定はありません。
- トレンドが右肩上がりなら、季節を除いても伸びている
- 周期で、毎年どの時期に上がるかが分かる
- 残差が大きい時点は、説明できない動きがあった日
周期成分は、1 周期分の形をそのまま繰り返した値です。 年によって波の形が変わる場合でも、同じ形が使われます。
1 周期分の周期成分を平均すると 0 になります。 プラスマイナスの「ふだんからのずれ」として読めます。波の位置は先頭の行から数えた位置で決まるので、日次・周期 7 なら「先頭の行と同じ曜日」どうしが 1 つの山谷になります。日付に抜けがあると曜日とずれます。
日付の間隔は計算に入りません
日付列は並べ替えにしか使われず、周期は「何行で 1 周か」で数えます。 日付が抜けていると、周期と実際の時間がずれます。先に連続数値、日付の補間で行を揃えてください。
window 幅
window 幅は「トレンドの 1 点を決めるのに、全体の何割の行を使うか」です。 0.6 なら、どの時点のトレンド値も全行の 60% を見て決まります。36 行のデータなら 1 点あたり 21.6 行分です。
| window 幅 | 36 行のときに 1 点で使う行数 | 結果 |
|---|---|---|
| 0.2 | 7.2 行 | 実データにぴったり沿う。トレンドが季節の波を拾う |
| 0.6(既定) | 21.6 行 | 中間 |
| 1 | 36 行(全部) | ほぼ直線になる |
周期より少ない行数しか使わない設定にすると、トレンドが季節の波を拾います。 月次・周期 12・36 行なら、window 幅は 12 ÷ 36 = 0.33 より大きくしてください。既定の 0.6 から始め、トレンドが波打つようなら大きくします。
エラーと対処
周期がデータ数を超えている
日付の周期を入力が 1 未満か、データの行数より大きいときに出ます。メッセージの {{num}} はそのデータの行数です。
周期の設定値がデータ数を超えています。
{{num}}より小さい整数の値を設定してください。
直し方 — 周期を小さくするか、データの期間を増やしてください。周期の 2 倍以上の行数が目安です。
window 幅が範囲外
window幅の設定値は0以上1以下の値を設定してください。
直し方 — 0 以上 1 以下にしてください。
処理対象列に欠損値がある
処理対象列に欠損値が含まれています。欠損値を除外するか補完してください。
直し方 — 時系列に沿った欠損値処理で埋めてください。
処理対象列に数値以外がある
処理対象列に数値型以外のデータが含まれてます。型変換をするか、数値型以外の列を除去してください。
直し方 — 列の型変更で数値にしてください。
選んだ列が入力にない
前のノードで列名を変えたり削除したりすると出ます。
対象の列が選択されていません。
直し方 — 処理対象列を選択と日付列を選択を選び直してください。
よく使う例
1. 季節を除いた伸びを見る
売上が伸びているが、季節のせいなのか本当の成長なのかを切り分けたいとき。
入力
| 年月 | 売上 |
|---|---|
| 2022-01-01 | 100 |
| 2022-02-01 | 90 |
| …(36 か月分) | … |
設定
| 設定項目 | 値 |
|---|---|
| 処理対象列を選択 | 売上 |
| 日付列を選択 | 年月 |
| 日付の周期を入力 | 12 |
出力 — 売上_トレンド成分 売上_周期成分 売上_残差 が増えます。トレンドだけを折れ線グラフに描けば、季節を除いた伸びが見えます。
2. 曜日の波を取り出す
曜日によってどれくらい違うかを数字で出したいとき。
入力
| 日付 | 売上 |
|---|---|
| 2024-04-01 | 120 |
| 2024-04-02 | 95 |
| …(180 日分) | … |
設定
| 設定項目 | 値 |
|---|---|
| 処理対象列を選択 | 売上 |
| 日付列を選択 | 日付 |
| 日付の周期を入力 | 7 |
出力 — 売上_周期成分 に、曜日ごとの上下が入ります。同じ 7 つの値が繰り返され、その 7 つを平均すると 0 になります。先頭の 2024-04-01 は月曜なので、1 番目の値が月曜、2 番目が火曜…に対応します。
3. 説明できない動きがあった日を見つける
キャンペーンや障害など、いつもと違うことが起きた日を探したいとき。
入力 — 例 2 と同じ
設定 — このノードで分解したあと、売上_残差 に外れ値の処理を掛けます。
出力 — 残差が大きく外れている日が印として残ります。
4. トレンドが波打つとき
トレンドの線が滑らかにならず、季節の波を拾ってしまうとき。
入力 — 例 1 と同じ
設定
| 設定項目 | 値 |
|---|---|
| window幅を入力(0~1) | 0.8 |
出力 — トレンドがなだらかになり、その分が 売上_周期成分 と 売上_残差 に回ります。
5. 分解した成分をグラフで並べる
3 つの成分を上下に並べて見たいとき。
入力 — 例 1 と同じ
設定 — このノードのあと縦持ち変換で 3 列を縦持ちにし、成分名を系列にして折れ線グラフに描きます。
出力 — 1 枚のグラフに 3 本の線が並びます。