0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

TROCCOでZAICOのデータ転送してみた2️⃣移動平均出してみた

Posted at

前回⏬️、TROCCOを用いてZAICOから在庫データ一覧をSnowflakeに転送しました。

今回はその応用として、Snowflake上で在庫の移動平均を求めたいと思います。

時系列での在庫変動を記録しつつSnowflakeにデータを送る

【TROCCO】転送設定の作成

転送設定STEP1~STEP2(プレビュー表示)までの設定

前回の記事と同じ手順で、転送設定STEP2(プレビューが表示されるところ)まで作成します。

転送設定STEP2 ▶ 転送日時カラム設定

今回、日々の在庫変動を記録していきたいので、転送日時カラム設定を用いて「いつ転送したデータか」を記録するよう設定します。
image.png

スケジュールの設定と転送実行

設定を保存したら、毎日決まった時間にデータを転送するように設定します。

image.png


設定は以上です。

毎日のスケジュール実行で、Snowflake上には⏬️のようにデータが積み上がっていきます。

image.png

ここまできたら、後はSQLを使って移動平均を計算します。


移動平均をもとめる

そもそも移動平均とは

時系列データにおいて、ある一定期間のデータの平均値を、期間をずらしながら計算していく手法。
短期的なノイズを平滑化 し、長期的なトレンドを把握する目的で使用します。

「短期的なノイズを平滑化」というところがポイントです。

・TROCCOは基本バッチ実行でのデータ転送を行う
・ZAICOの在庫データ一覧は、その時点での在庫量を返す

という特性があります。
そのため、バッチ実行で取得した在庫データは、取得タイミングによる一時的な変動(例えば、ちょうど大量入庫直後や出荷直後など)を含む可能性があります。
移動平均を使うことで、このような短期的なスパイクをならし、より安定した在庫量の推移を見ることができます。

そのため、日々の細かな増減に惑わされず、在庫の大まかな傾向(増加傾向なのか、減少傾向なのか、安定しているのか、とか)を捉えやすくなります。

移動平均の種類

移動平均には「単純移動平均」「加重移動平均」「指数平滑移動平均」という3種類があるようです

おおまかな使い分け方⏬️

  • 年間の大まかな在庫推移や、安定的な平均在庫を知りたい ▶ 長期間の単純移動平均 (例: 60日, 90日)
  • 月次での発注計画の参考に、最近の傾向を少し重視して見たい ▶ 中期間の単純移動平均 or 加重移動平均 (例: 20日, 30日)
  • 日々の在庫チェックで、危険水準への接近などを早めに検知したい ▶ 短期間の指数平滑移動平均 or 加重移動平均 (例: 5日, 10日)

今回は最もシンプルな単純移動平均をSQLで求めたいと思います!!

単純移動平均の求め方

ざっくりとした計算プロセス

  • 一定期間のデータを合計し、その期間数で割る。
  • 計算する期間を一つずつずらしながら平均値を算出していく。

例(7日移動平均):

ある日の移動平均値は、その日を含む過去7日間のデータの平均。
次の日の移動平均値は、その日を含む過去7日間のデータの平均(最も古い日のデータは除く)。

単純移動平均を求めるクエリサンプル

SELECT
    ID,
    DATE(TIME) as "日付",
    SUM(TRY_CAST(QUANTITY AS NUMBER)) as "在庫数",
    AVG(SUM(TRY_CAST(QUANTITY AS NUMBER))) OVER (ORDER BY DATE(TIME) ROWS BETWEEN 6 PRECEDING AND CURRENT ROW) as "移動平均"
FROM
    ZAICO_LIST
GROUP BY
ID,DATE(TIME)
;

ポイント💡

  • ROWS BETWEEN 6 PRECEDING AND CURRENT ROW

    • 計算対象とする行(ウィンドウフレーム)の範囲を指定します
      • CURRENT ROW: 現在処理している行(日付)
      • 6 PRECEDING: 現在の行の前6行(6日前)
        ⏩️ つまり、「現在の行(当日)とその前の6行(6日前まで)の合計7行(7日間)」を指定しています
  • TRY_CAST(QUANTITY AS NUMBER)

    • もし QUANTITY の値が数値に変換できない形式(例: 空文字列、テキスト文字など)だった場合に、エラーを起こさずに NULL を返す関数です
    • おまじないとして設定しておきました

クエリを実行

image.png

スプレッドシートにエクスポートして、グラフ化してみました。
image.png

増減は激しいものの、ならすと大体60~70ぐらいの在庫量であることがわかりました。


今回はスプレッドシートでグラフ化しましたが、BIツールと組み合わせることで、ID別・期間別の絞り込んだ、よりリッチで実用的な可視化ができそうです!!

いかがでしたでしょうか

今回はZAICOの在庫一覧データから、移動平均を求めてみました。
日次でDWHにデータを積み上げていけば、他にも色々なデータ活用方法がありそうですね。

この記事を読んでいただいたかたの、なにか少しでもお役に立てば幸いです🙏

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?