数値の平滑化
細かい上下動をならして、傾向を見やすくします。 日々の売上の変動を均して流れを見る、センサーのノイズを取る、といった使い方をします。
入出力
| ポート | 内容 |
|---|---|
| 入力データ | データ |
| 出力データ | データ |
Spark エンジンでは動きません。
行の数は変わりません。 対象列 1 つにつき 1 列増えます。
設定項目
- 処理対象列を選択
- ならす列。数値の列だけ選べます。複数選べます。
- 処理対象列を結果から除外する
- on にすると、元の列を消します。既定は off です。
- 平滑化手法を選択
- 単純移動平均(既定)/ 指数移動平均 / カルマンフィルタ。
- ウィンドウ幅を設定必須
- 単純移動平均と指数移動平均のときだけ出ます。既定は
3。
オプション
- 特定の列で並べ替えてから実行する
- on にすると、並べ替えの組が出ます。既定は off です。
- 対象列を選択
- 並べ替えに使う列。組はいくつでも足せます。
- 並べ替えタイプを選択
- 昇順(既定)か降順。
手法の違い
| 手法 | 内容 | 向いている場面 |
|---|---|---|
| 単純移動平均 | 直近 n 行の平均 | まず試す(既定) |
| 指数移動平均 | 新しい値を重く見る | 直近の変化に早く追従したい |
| カルマンフィルタ | ノイズを推定して取り除く | 観測にばらつきがある |
指数移動平均の「ウィンドウ幅を設定」は、平均を取る行数ではなく重みの減り方を決める値です。 大きいほど過去を長く引きずります。
増える列の名前
元の列は書き換わりません。 手法ごとに決まった接頭語が付いた新しい列が増えます。
| 手法 | できる列 |
|---|---|
| 単純移動平均 | 単純移動平均_<元の列名> |
| 指数移動平均 | 指数移動平均_<元の列名> |
| カルマンフィルタ | カルマンフィルタ_<元の列名> |
同じ名前の列がすでにあるときは、末尾に _1 が付きます。 単純移動平均_売上 がすでにあれば 単純移動平均_売上_1 になります。元の列が上書きされることはありません。
行の並び順で決まる
今の行順で計算します。 時系列なら必ず日付順にしてください。特定の列で並べ替えてから実行するを使うか、先に行の並べ替えをつなぎます。
ウィンドウ幅の決め方
大きいほど滑らかになり、変化への反応が遅れます。 日次データで週の波を消したいなら 7、月の波なら 30 が目安です。
先頭の行も空欄にはなりません。 1 行目はその行だけの平均、2 行目は 2 行分の平均、というように、ウィンドウ幅に満たないあいだはある分だけで計算します。 そのため先頭のほうはならし方が弱くなります。
欠損値の扱い
欠損の行は欠損のまま残り、計算からも外れます。 欠損を飛ばして、値のある行だけを詰めてから平均を取ります。たとえばウィンドウ幅 3 で 5 行目が欠損のとき、6 行目は 3・4・6 行目の平均になります(5 行目は数えません)。
欠損を飛ばしたくないときは、先に欠損値処理で埋めてください。
エラーと対処
数値でないデータが含まれている
数値に見えても文字列型になっている列を選んだときに出ます。
処理対象列に数値型以外のデータが含まれてます。型変換をするか、数値型以外の列を除去してください。
直し方 — 数値の列だけを選ぶか、列の型変更で数値にしてください。
処理対象列を選んでいない
処理対象列を選択を空のまま実行したときに出ます。
対象の列が選択されていません。
直し方 — 処理対象列を選択で列を選んでください。
選んだ列が入力データにない
前のノードで列名を変えたり列を削ったりして、選んである列がなくなったときに出ます。
対象の列が存在しません。
直し方 — 列を選び直してください。
よく使う例
1. 日々の売上の流れを見る
曜日ごとの波が大きく、増えているのか減っているのかが読み取れないとき。
入力
| 日付 | 売上 |
|---|---|
| 2024-04-01 | 120 |
| 2024-04-02 | 90 |
| 2024-04-03 | 150 |
| …(以降 90 日分) | … |
設定
| 設定項目 | 値 |
|---|---|
| 処理対象列を選択 | 売上 |
| 平滑化手法を選択 | 単純移動平均 |
| ウィンドウ幅を設定 | 7 |
| 特定の列で並べ替えてから実行する | on |
| 対象列を選択 | 日付 |
| 並べ替えタイプを選択 | 昇順 |
出力 — 単純移動平均_売上 が増えます。1 行目は 120、2 行目は 105、3 行目は 120 というように、7 行たまるまでは少ない行数で計算されます。
2. 直近の変化を早く捉える
最近の動きを重く見たいので、古い値に引っ張られたくないとき。
入力 — 例 1 と同じ
設定
| 設定項目 | 値 |
|---|---|
| 平滑化手法を選択 | 指数移動平均 |
| ウィンドウ幅を設定 | 7 |
出力 — 指数移動平均_売上 が増えます。例 1 と同じ 3 行で比べると、こうなります。
| 日付 | 売上 | 単純移動平均_売上 | 指数移動平均_売上 |
|---|---|---|---|
| 2024-04-01 | 120 | 120 | 120 |
| 2024-04-02 | 90 | 105 | 102.857 |
| 2024-04-03 | 150 | 120 | 123.243 |
どちらも 1 行目は元の値そのままです。 2 行目以降は、指数移動平均のほうがその行の値(90 や 150)に近くなります。これが「新しい値を重く見る」の中身です。
3. ノイズの多い計測値をならす
センサーの値がばらつき、移動平均では遅れが気になるとき。
入力
| 計測時刻 | 温度 |
|---|---|
| 10:00:00 | 24.1 |
| 10:00:01 | 23.6 |
| 10:00:02 | 24.4 |
設定
| 設定項目 | 値 |
|---|---|
| 処理対象列を選択 | 温度 |
| 平滑化手法を選択 | カルマンフィルタ |
出力 — カルマンフィルタ_温度 が増えます。ウィンドウ幅を設定は出ません。
4. ならす前と後をグラフで比べる
どのくらいならされたかを目で確かめたいとき。
入力 — 例 1 と同じ
設定
| 設定項目 | 値 |
|---|---|
| 処理対象列を結果から除外する | off(既定) |
出力 — 売上 と 単純移動平均_売上 が並ぶので、折れ線グラフで 2 本とも描けます。
5. 複数の列をまとめてならす
売上・客数・単価を同じ条件でならしたいとき。
入力
| 日付 | 売上 | 客数 | 単価 |
|---|---|---|---|
| 2024-04-01 | 120 | 12 | 10 |
| 2024-04-02 | 90 | 9 | 10 |
設定
| 設定項目 | 値 |
|---|---|
| 処理対象列を選択 | 売上、客数、単価 |
| 平滑化手法を選択 | 単純移動平均 |
| ウィンドウ幅を設定 | 7 |
出力 — 単純移動平均_売上 単純移動平均_客数 単純移動平均_単価 の 3 列が増えます。ウィンドウ幅は 3 列とも同じです。別々にしたいなら、このノードを分けてつなぎます。