DESIGN / CODE / INFRA / AI

解説

10はどちらの区分?AIの件数集計で「以上・未満」をそろえよう

0〜29件の記録を三つに分類し、境目の10・20が重複しない条件を確認。範囲外と未確認を分け、区分別合計と元件数を照合する。

10はどちらの区分?AIの件数集計で「以上・未満」をそろえよう
保存リストを見る →
この記事の道しるべ 4項目

AIに件数を「0〜10・10〜20・20〜30」に分けてもらったら、10件の記録はどこへ入るのかな。区切りの数字だけでは、境目を二重に数えたり、どこにも入れなかったりするよ。

このページでは、整数の件数を三つの区分へ、一記録につき一つだけ分類する。紙の表だけでも試せるよ。Python 3.12で確かめるコードも用意したので、AIアカウントや実際の顧客データは必要ないんだ。

下限は含め、上限は含めない

今回の対象は0以上30未満の整数とし、次の三つに分ける。

区分 条件 境目の値の行き先
A 0以上10未満 0はA、10は含まない
B 10以上20未満 10はB、20は含まない
C 20以上30未満 20はC、30は含まない

「以上」はその値を含み、「未満」はその値を含まない言い方。数式では0 <= x < 10のように書く。片方の端を含み、もう片方を含まない範囲を半開区間と呼ぶよ。

今回なら10はB、20はCだけに入る。30はどの区分にも入れず、範囲外として別に残す条件だよ。

「以下」と「超」に変えるときは全体を見る

Aを0以上10以下、Bを10以上20以下にすると、10が両方に入る。一方、Aを0以上10未満、Bを10超20未満にすると、10がどこにも入らない。

区分の表を一行ずつ読むだけでなく、隣の区分と境目がつながっているかを見ることが大切なんだ。今回の書き方がすべての集計で唯一の正解というわけではなく、目的に合う範囲を先に決めよう。

元の九記録を、分類して数える

練習には-1、0、9、10、19、20、29、30と、値のない記録を一つ使う。NoneはPythonで値がないことを表すものだよ。

values = [-1, 0, 9, 10, 19, 20, 29, 30, None]

def classify(value):
    if type(value) is not int:
        return '要確認'
    if 0 <= value < 10:
        return 'A'
    if 10 <= value < 20:
        return 'B'
    if 20 <= value < 30:
        return 'C'
    return '範囲外'

counts = {name: 0 for name in ['A', 'B', 'C', '範囲外', '要確認']}
for value in values:
    label = classify(value)
    counts[label] += 1
    print(value, label)
print(counts)
print('total', sum(counts.values()))

結果はA・B・Cが各2件、範囲外が2件、要確認が1件で、合計9件。区分の中だけを足した6件と、元の記録数9件を取り違えないでね。

このコードは、整数型の件数だけを受け付ける練習用の契約にしている。文字列の'10'や小数の10.0は要確認へ回す。実データを読み込む段階で変換するなら、どの値を変えてよいかを別に決めよう。

AIへ頼むときも、除外した理由を残す

「Aは0以上10未満、Bは10以上20未満、Cは20以上30未満。整数以外は要確認。範囲外と要確認も別に数え、元の記録IDと行き先を一対一で返す」と伝えられる。

確認では0・10・20・30のちょうどの値と、その一つ前を入れる。同じ記録が複数区分へ入っていないか、消えた記録がないか、区分外を含めた合計が元件数と一致するかを見るよ。

編集部では2026年10月29日にPython公式の比較の書き方を確認し、九記録の行き先・件数・合計と、整数以外の扱いをPython 3.12で検証した。評価用の境界ケース、空欄と0も、分類前の条件を考える参考になるよ。

参考・出典

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

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

更新・訂正の方針 →

みんなのコメント 0

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

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