DESIGN / CODE / INFRA / AI

解説

重なった時間を二重に足していない?AIの稼働時間集計を区間で検算しよう

三つの作業の合計135分と、どれかが動いていた105分は別の数字。重複する時間帯をまとめ、集計対象と境界を明示した依頼文を作る。

重なった時間を二重に足していない?AIの稼働時間集計を区間で検算しよう
保存リストを見る →
この記事の道しるべ 4項目

AIへ作業時間の一覧を渡したら、合計135分になった。でも、同時に動いていた時間を二重に足したくなかった。作業ごとの時間の合計と、どれか一つでも動いていた時間は、違う集計になるよ。

今回は同じ日の架空の三つの作業で比べる。AIモデルへ送信した実測記事ではなく、条件と正解を自分でも確認する練習だよ。

三つの区間から、二つの合計ができる

ID 開始 終了 長さ
A 09:00 10:00 60分
B 09:30 10:30 60分
C 11:00 11:15 15分

作業別に足せば60+60+15で135分。一方、AとBは09:30〜10:00の30分が重なっている。どれかが動いていた時間なら、09:00〜10:30の90分と、11:00〜11:15の15分を足し、105分になる。

どちらが正しいかは、知りたいもの次第。人や機械ごとの投入時間なら単純合計が必要な場合もある。今回の105分は「同じ時間軸で、少なくとも一つが動いていた長さ」という定義だよ。

AIへの依頼は、対象の単位を先に書く

各行は同じ日の日本時間の稼働区間です。
求めたいのは、どれか一つ以上が稼働していた時間の長さです。
重複する時間帯は二重に数えず、結合した区間も表示してください。
区間は開始を含み終了を含めません。
作業別の単純合計も別の列に出し、両者を混ぜないでください。
終了が開始より前の行は、勝手に翌日と解釈せず確認対象にしてください。

これは編集部が作った依頼文。合計だけでなく結合後の区間が出ると、どの重なりを処理したかを照合できる。ただし、出力された内訳も元データで確認する必要があるよ。

Pythonで区間をまとめる

以下はPython 3.12で確認した例。日付と+09:00を付け、時刻だけから翌日への繰り越しを推測しない。

from datetime import datetime

rows = [
    ("09:00", "10:00"),
    ("09:30", "10:30"),
    ("11:00", "11:15"),
]
intervals = []
for start, end in rows:
    a = datetime.fromisoformat(f"2026-10-27T{start}:00+09:00")
    b = datetime.fromisoformat(f"2026-10-27T{end}:00+09:00")
    if b < a:
        raise ValueError("日付と時刻の確認が必要")
    intervals.append((a, b))
merged = []
for a, b in sorted(intervals):
    if merged and a <= merged[-1][1]:
        merged[-1] = (merged[-1][0], max(merged[-1][1], b))
    else:
        merged.append((a, b))
plain = sum((b-a).total_seconds() for a, b in intervals) / 60
covered = sum((b-a).total_seconds() for a, b in merged) / 60
print(plain, covered)

期待する表示は135.0と105.0。開始の早い順に並べ、重なる区間を結合してから長さを足す。ちょうど接する区間もまとめているが、接している部分に追加の長さは発生しないよ。

この例は同じタイムゾーンのデータに限定している。実際には、日付、タイムゾーン、欠損、同じ記録の重複なども先に確認しよう。

合計と区間を両方照合する

編集部ではコードの135分・105分と、結合後の二区間を確認した。AIがこの依頼に必ず同じ正解を返すと検証したものではないよ。

日付ごとへ分ける場合はタイムゾーンと日付境界、予定の時間の積み上げは作業時間とスケジュールも合わせて整理しよう。

参考・出典

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

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

更新・訂正の方針 →

みんなのコメント 0

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

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