解説
増減の合計が0なら動きなし?AIの集計で差し引きと延べ取扱を分けよう
入庫5箱・出庫5箱なら在庫増減は0、延べ取扱は10箱。符号付き合計と絶対値合計の目的、個体の数との違いを小さく検算。

倉庫へ5箱入れ、その後で5箱出した。AIに記録を足してもらうと0だったけれど、本当に何も扱っていないのかな。知りたいのが在庫の増減か、出し入れした延べの箱数かで、足し方が変わるよ。
このページでは、符号付きの数を使い、差し引きと動いた量を分けて数える。紙と電卓だけでも確認できるよ。コードを試したい場合はPython 3.12を使い、実際の在庫やファイルを変更する操作は行わない。
プラスとマイナスの意味を決める
ここでは、入庫をプラス、出庫をマイナスとする。記録は箱数で、各行が一回の出し入れを表す架空の例だよ。
| 記録 | 箱数 | 在庫へ与える向き |
|---|---|---|
| 入庫 | 5箱 | +5 |
| 出庫 | 5箱 | -5 |
プラス・マイナスの付け方は、この集計の約束。別の資料で逆の約束が使われているなら、そのまま混ぜてはいけないね。
差し引きは0、延べ取扱は10
在庫が最初からどれだけ変わったかを知るなら、+5と-5をそのまま足す。結果は0で、この二記録による増減はない。
一方、入出庫の延べ箱数を知るなら、それぞれの動きの大きさを足して5+5=10と数える。負の値を大きさへ直すときに使うのが絶対値だよ。-5の絶対値は5、+5の絶対値も5になる。
同じ箱が入ったあとに出た場合でも、この「延べ取扱」では二回分に数える。異なる箱が何箱あったかという、個体の数とは別なんだ。
Pythonで三つの数を並べる
changes = [5, -5]
net_change = sum(changes)
handled = sum(abs(value) for value in changes)
events = len(changes)
print(net_change, handled, events)
結果は0、10、2。順に在庫増減0箱、延べ取扱10箱、記録された出し入れ2回を表している。それぞれ数えている対象と単位が違うよ。
absは数の絶対値を返す関数。sumは値を足し、lenはこの一覧に入っている要素の数を返す。箱数の合計と、記録の行数を同じ「件数」と呼ばないようにしよう。
先に足してから絶対値へすると別の結果
print(abs(sum(changes)))
print(sum(abs(value) for value in changes))
前者は0、後者は10。差し引きで打ち消したあとに絶対値を取っても、打ち消し前の動きは戻らないんだ。関数が同じでも、処理の順序で意味が変わるよ。
AIへの依頼では、出してほしい指標を指定する
「入庫は正、出庫は負。各行は一回の取扱。符号付き合計を在庫増減、各行の絶対値合計を延べ取扱箱数として別に出す。個体ごとの重複排除はしない」と説明できる。
元の在庫が分からなければ、この記録だけで最後の在庫数は決まらない。最初に20箱あったなどの条件があって初めて、20+0=20箱と計算できるよ。
取り消し記録を、実際の移動と混ぜない
この例の-5は、実際に5箱出した記録。入力ミスを訂正するための反対符号の行が混じっている場合、絶対値で全部足すと、実際には扱っていない訂正分まで増えることがある。
延べ取扱を求める前に、移動・訂正・取消の種類を確認しよう。また、複数の倉庫をまとめる集計では、倉庫間移動をどう数えるかも別に決める必要があるよ。

みんなのコメント 0
感想や、試してみたことを聞かせてね。コメント・返信は承認後に公開されます。
最初のコメントをどうぞ。