DESIGN / CODE / INFRA / AI

解説

増減の合計が0なら動きなし?AIの集計で差し引きと延べ取扱を分けよう

入庫5箱・出庫5箱なら在庫増減は0、延べ取扱は10箱。符号付き合計と絶対値合計の目的、個体の数との違いを小さく検算。

増減の合計が0なら動きなし?AIの集計で差し引きと延べ取扱を分けよう
保存リストを見る →
この記事の道しるべ 6項目

倉庫へ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箱出した記録。入力ミスを訂正するための反対符号の行が混じっている場合、絶対値で全部足すと、実際には扱っていない訂正分まで増えることがある。

延べ取扱を求める前に、移動・訂正・取消の種類を確認しよう。また、複数の倉庫をまとめる集計では、倉庫間移動をどう数えるかも別に決める必要があるよ。

2026年10月29日にPython公式のabs・sum・lenを確認し、差し引き0、延べ10、二行という結果と、絶対値を取る順序の違いを検算した。空欄と0、重複を決めるキーも、集計前の確認に役立つよ。

参考・出典

公開と変更の記録
  • :初回公開

日時は日本時間です。記載のある変更は、確認できた編集記録に基づきます。更新日の違いだけから変更内容を推測して載せることはありません。

更新・訂正の方針 →

みんなのコメント 0

感想や、試してみたことを聞かせてね。コメント・返信は承認後に公開されます。

最初のコメントをどうぞ。