養鶏場が鶏舎ごとの産卵・餌・温度・死亡の毎日の記録から翌月の産卵の数を Python で幅付きで予測し、出荷の計画と鶏の入れ替えの時期を決める材料にする
鶏舎ごとの集卵の数・餌の量・舎内の温度・死亡の羽数の毎日の記録から、翌月の産卵の数を下振れと上振れの幅付きで予測します。場長が出荷の量を約束するときと、鶏の入れ替えの時期を決めるときの材料にします。
- 連携・自動化
- Python
- 対象業界
- その他/小売/製造
- 対象部門
- 生産
- 対象業務
- データ入力・転記/集計・分析
- 主な課題
- データ分析に時間がかかる/判断に時間がかかる/属人化している
- AIで行う処理
- 予測
- 主な効果
- 判断支援/工数削減/機会損失防止
- 導入難易度
- ★★★★☆
- 実装レベル
- 本格構成
- 費用感
- 個別開発(大)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 毎日、事務の担当が鶏舎ごとに集卵機のカウンターの数、環境制御盤の温度、餌のタンクの減り方を管理表に書き写す
- 鶏舎の担当者の日報から、死亡の羽数と気づいたことを管理表に書き写す
- 鶏舎ごとの羽数を死亡の分だけ減らし、産卵率(集卵の数 ÷ 羽数)を計算する
- 数字がおかしい日(カウンターの不具合、書き写しの誤り)を見つけたら、鶏舎の担当者に確かめる
- 月末に、場長が鶏舎ごとの週齢と産卵率のグラフを見て、翌月の産卵の数を見込む
- 見込みを足し合わせ、GPセンターと翌月の出荷の量を決める
- 産卵率が下がってきた鶏舎について、入れ替えの時期と、次の鶏の導入の予定を考える
- 人鶏舎の担当者が、死亡の羽数と気づいたことを、紙の日報ではなくタブレットのフォームに入れる
- 自動毎朝、Python が集卵機のカウンター・環境制御盤・餌のタンクの記録と、フォームの入力を集め、鶏舎ごと・日ごとの台帳にまとめる
- 自動羽数と産卵率を計算し、おかしい数字(欠け・急な変化・カウンターの不具合の疑い)に印を付ける
- 自動鶏舎ごとの死亡率を確かめ、急に増えた鶏舎があれば、予測とは別にすぐ場長に知らせる
- 人事務の担当が印の付いた数字だけを鶏舎の担当者に確かめる
- 自動月末に、学習済みのモデルで鶏舎ごとの翌月の産卵率を下振れ・中央・上振れで予測し、羽数を掛けて産卵の数にする
- 自動鶏舎ごとの予測を足し合わせ、農場全体の見込みと、入れ替えの検討表を作る
- 人場長が予測を見て、自分の見立てと比べ、出荷の量と入れ替えの時期を決める
- 自動翌月の実績が出たら、予測との差を記録する
各工程の詳しい説明を読む
- 毎日、事務の担当が鶏舎ごとに集卵機のカウンターの数、環境制御盤の温度、餌のタンクの減り方を管理表に書き写す
- 鶏舎の担当者の日報から、死亡の羽数と気づいたことを管理表に書き写す
- 鶏舎ごとの羽数を死亡の分だけ減らし、産卵率(集卵の数 ÷ 羽数)を計算する
- 数字がおかしい日(カウンターの不具合、書き写しの誤り)を見つけたら、鶏舎の担当者に確かめる
- 月末に、場長が鶏舎ごとの週齢と産卵率のグラフを見て、翌月の産卵の数を見込む
- 見込みを足し合わせ、GPセンターと翌月の出荷の量を決める
- 産卵率が下がってきた鶏舎について、入れ替えの時期と、次の鶏の導入の予定を考える
(a)書き写しに毎日時間がかかる。 1〜3番は、12棟分を毎日行います。カウンター、制御盤、タンク、日報と、見る場所が4つに分かれています。
(b)見込みが場長の経験頼み。 5番は、場長がグラフを見て決めます。夏の暑さでどれだけ落ちるか、どの鶏種がどの週齢で落ち始めるかを、場長は覚えていますが、記録にはなっていません。
(c)見込みが1つの値しかない。 「来月は○○万個」と1つの値で決めるので、外れたときにどれくらい外れうるかが分かりません。 少なめに見積もる癖のある場長と、多めに見積もる場長とで、約束の量が変わります。
(d)入れ替えの判断が後手になる。 7番は、産卵率が下がってから考え始めます。次の鶏の導入は数か月前から手配が要るので、下がってからでは間に合いません。
(e)死亡の羽数の増え方を、毎日比べていない。 日報の死亡の羽数は書き写されますが、その鶏舎の最近の平均と比べて増えているかを毎日計算している人はいません。 鶏舎の担当者が「今日は多い」と気づけば場長に伝えますが、気づくかどうかは担当者の感覚しだいです。
- 【人】 鶏舎の担当者が、死亡の羽数と気づいたことを、紙の日報ではなくタブレットのフォームに入れる
- 【自動】 毎朝、Python が集卵機のカウンター・環境制御盤・餌のタンクの記録と、フォームの入力を集め、鶏舎ごと・日ごとの台帳にまとめる
- 【自動】 羽数と産卵率を計算し、おかしい数字(欠け・急な変化・カウンターの不具合の疑い)に印を付ける
- 【自動】 鶏舎ごとの死亡率を確かめ、急に増えた鶏舎があれば、予測とは別にすぐ場長に知らせる
- 【人】 事務の担当が印の付いた数字だけを鶏舎の担当者に確かめる
- 【自動】 月末に、学習済みのモデルで鶏舎ごとの翌月の産卵率を下振れ・中央・上振れで予測し、羽数を掛けて産卵の数にする
- 【自動】 鶏舎ごとの予測を足し合わせ、農場全体の見込みと、入れ替えの検討表を作る
- 【人】 場長が予測を見て、自分の見立てと比べ、出荷の量と入れ替えの時期を決める
- 【自動】 翌月の実績が出たら、予測との差を記録する
4番目が、この構成でいちばん大事な処理です。 死亡の羽数が急に増えたことは、予測の材料ではなく、伝染病の兆しかもしれない知らせです。 月末を待たず、その日の朝に場長に届けます。
8番目で、場長の判断は残ります。 予測は「記録から見るとこうなる」という材料で、取引先との関係、次の鶏の手配の都合、鶏舎の修繕の予定は、場長しか知りません。
02今回想定するシステム構成
集卵機のカウンター / 環境制御盤 / 餌のタンクの記録 / 日報のフォーム │ 毎朝の書き出し(CSV) ▼【トリガー】毎朝の定時実行 Python(pandas) ├──▶ 鶏舎ごと・日ごとの台帳にまとめる ├──▶ 羽数・産卵率の計算、おかしい数字の印 └──▶ 死亡率の確認 ── 急な増加はすぐ場長へ ▼【月末】 scikit-learn の HistGradientBoostingRegressor(分位点の損失 0.1/0.5/0.9) │ 鶏舎ごとの翌月の産卵率 ▼ Python ── 羽数を掛けて産卵の数に、農場全体に足し合わせ ▼ 出荷の見込みと入れ替えの検討表 ▼ 【場長が出荷の量と入れ替えの時期を決める】
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| 実行環境 | Python(pandas・scikit-learn の HistGradientBoostingRegressor) | R |
| データの取得元 | 集卵機・環境制御盤・餌のタンクの記録の書き出し、日報のフォーム | 各機器メーカーの管理ソフト |
| 保管 | 管理表(鶏舎ごと・日ごとの台帳)、農場のPCのフォルダ | 社内のデータベース |
| 通知 | メール、スマートフォンへの知らせ | 社内チャット |
機器の管理ソフトには書き込みません。 この構成は書き出された記録を読むだけです。集卵機と環境制御盤から記録を書き出せるか、書き出せる形式は何かは、機器ごとに最初に確かめます。 書き出せない機器は、従来どおり人が数字を入れます。
予測の本体は、scikit-learn の HistGradientBoostingRegressor です。 公式ページでは、loss に quantile を選べ、分位点の損失(pinball loss)を使い、quantile で推定する分位点を0から1の間で指定するとされています。0.1・0.5・0.9の3つのモデルを学習すると、下振れ・中央・上振れの3つの値が出ます。
欠けた値をそのまま扱えることも、この題材に合っています。 公式ページでは、学習のときに欠けた値を持つサンプルを左右どちらの枝に送るかを、分岐ごとに学ぶとされています。環境制御盤の記録が欠けた日、餌のタンクの記録が無い鶏舎があっても、値を埋めずに学習と予測ができます。
週齢に「単調」の制約を付けられます。 monotonic_cst で、項目ごとに単調に増える(1)、制約なし(0)、単調に減る(−1)を指定できるとされています。ピークを過ぎた後の週齢では産卵率が下がる、という知識を、ピーク後の週齢の項目に −1 として入れます。 データの少ない週齢で、予測が不自然に上がることを防ぎます。
03どうやって実装するのか
処理の起点を決める
毎朝と月末の2つの定時実行で動かします。 毎朝の実行は、前日の記録を集めて台帳にまとめ、産卵率を計算し、死亡率を確かめるためです。月末の実行は、翌月の予測を出すためです。
毎朝の実行は、鶏舎の担当者が朝の見回りと日報の入力を終えた後に置きます。 集卵機のカウンターは集卵の後に確定し、日報は見回りの後に入力されるので、早すぎるとその日の分がそろいません。 入力がそろっていない鶏舎は、昼にもう一度確かめます。
月末の予測は、出荷の量をGPセンターと決める日の数日前に出します。 場長が予測を見て考える時間を取るためです。学習のし直しは、半年に1回、鶏群の入れ替えのたびにたまる記録を足して行います。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 集卵の数 | 鶏舎ごと・日ごとの集卵の数 | 集卵機のカウンター |
| 舎内の温度 | 鶏舎ごとの1日の平均・最高・最低 | 環境制御盤 |
| 餌の量 | 鶏舎ごとの1日の給餌の量 | 餌のタンクの記録 |
| 死亡の羽数 | 鶏舎ごと・日ごとの死亡の羽数、気づいたこと | 日報のフォーム |
| 鶏群の情報 | 鶏舎ごとの鶏種、導入日、導入の羽数、週齢 | 管理表 |
| 入れ替えの予定 | 鶏舎ごとの出す予定日と、次の鶏の導入の予定日 | 管理表 |
質を決めるのは、5番目の鶏群の情報です。 週齢は導入日から計算するので、導入日が分からない鶏群があると、その鶏舎の予測が成り立ちません。 過去の鶏群も含めて、導入日と鶏種を管理表にそろえます。
6番目の入れ替えの予定は、予測の対象から外す期間を決めるために使います。 翌月の途中で鶏を出す鶏舎は、その日以降の産卵がありません。予定を入れないと、空になる鶏舎の産卵を数えてしまいます。
データの取得方法を決める
集卵機・環境制御盤・餌のタンクの記録は、それぞれの機器の管理ソフトからCSVで書き出します。 毎朝、決まったフォルダに書き出す設定にできる機器はその設定を使い、できない機器は事務の担当が書き出してフォルダに置きます。
| 取るもの | どこから | 何に使うか |
|---|---|---|
| 集卵の数 | 集卵機のCSV | 産卵率の計算、予測の答え |
| 温度 | 環境制御盤のCSV | 暑さの項目 |
| 給餌の量 | 餌のタンクのCSV | 1羽あたりの餌の量 |
| 死亡の羽数 | 日報のフォーム | 羽数の更新、死亡率の確認 |
| 鶏種・導入日 | 管理表 | 週齢の計算、鶏種の項目 |
日報は、紙からタブレットのフォームに替えます。 鶏舎の番号、日付、死亡の羽数、気づいたことの4項目だけにします。項目を増やすと入力されなくなるので、最小限にします。
集めたら、毎朝3つを機械で確かめます。 12棟すべての記録がそろっているか、日付が前日になっているか、集卵の数が鶏舎の羽数を超えていないかです。どれかが外れたら台帳への追記を止め、事務の担当に知らせます。 機器の時計がずれて日付が1日ずれる、ということは珍しくありません。
鶏舎の番号の付け方を、全部の機器でそろえます。 集卵機は「ライン1」、環境制御盤は「A棟」のように、機器ごとに呼び名が違うことがよくあります。 対応表を作り、台帳では1つの番号にそろえます。
AIへ渡す前に整形する
- 鶏舎の番号をそろえる … 機器ごとの呼び名を、対応表で1つの番号にします
- 羽数を更新する … 導入の羽数から、毎日の死亡の羽数と、出荷・移動した羽数を引いて、その日の羽数にします
- 産卵率を計算する … 集卵の数 ÷ その日の羽数です
- おかしい数字に印を付ける … 集卵の数が0の日(カウンターの止まり)、前日から半分以下や倍以上の変化、温度の記録の欠けに印を付けます
- 死亡率を確かめる … 鶏舎ごとの1日の死亡率を、その鶏舎の最近の平均と比べます
- 月の項目を作る … 鶏舎ごとに、月の平均の産卵率、月末の週齢、翌月の平均の週齢、月の平均・最高の温度、1羽あたりの餌の量、月の死亡率を作ります
- 鶏種の標準との差を作る … 鶏種ごとの標準の産卵曲線(鶏の供給元の資料)と比べた、その鶏群の産卵率の差を作ります
4番目の印は、予測の前に人が確かめます。 カウンターが止まった日の0を本当の0として学習すると、産卵が急に止まった日として覚えてしまいます。 確かめた結果、カウンターの不具合なら欠けた値として扱います。
5番目は、予測の前処理ではなく、毎朝の見張りです。 農林水産省のページは、採卵鶏などの家きんについて、同一の家きん舎内で1日の死亡率が対象期間の平均の死亡率の2倍以上となることを「特定症状」としています(設備の故障、気温の急激な変化、火災、風水害など、高病原性鳥インフルエンザ以外の事情によることが明らかな場合は除く)。そして飼養衛生管理基準では、特定症状を発見したときは直ちに家畜保健衛生所に通報することとされています。この構成は、死亡率がこの目安に近づいた鶏舎をその朝に場長へ知らせますが、通報するかの判断と通報そのものは場長が行います。 対象期間の取り方は、管轄の家畜保健衛生所の指導に従って設定します。
7番目の標準の曲線は、鶏の供給元が出している資料を使います。 鶏種ごとの週齢と産卵率の目安で、「この鶏群は標準より何ポイント上か下か」が、その鶏群の調子を表す項目になります。
AIに処理させる
させるのは、鶏舎ごとに翌月の平均の産卵率を、下振れ(0.1分位)・中央(0.5分位)・上振れ(0.9分位)の3つの値で予測することだけです。
| 項目 | 中身 | 制約 |
|---|---|---|
| 翌月の平均の週齢 | 導入日から計算 | ピーク後の週齢の項目は単調に減る(−1) |
| 当月の産卵率と標準との差 | 前処理の7番 | なし |
| 当月の1羽あたりの餌の量 | 給餌の量 ÷ 羽数 | なし |
| 翌月の平年の最高気温 | 過去の同じ月の舎内の最高温度の平均 | なし |
| 当月の死亡率 | 月の死亡の羽数 ÷ 月初の羽数 | なし |
| 鶏種 | 区分の項目 | なし |
予測の答えは「翌月の平均の産卵率」です。 産卵の数そのものを答えにすると、羽数の多い鶏舎の誤差に学習が引っ張られます。産卵率で予測し、後から翌月の見込みの羽数を掛けて数にします。 見込みの羽数は、当月末の羽数から、最近の死亡率と入れ替えの予定で計算します。
翌月の温度は、平年の値を使います。 翌月の実際の温度は予測の時点で分からないので、過去の同じ月の舎内の最高温度の平均を入れます。 猛暑の年は外れるので、その分は上振れ・下振れの幅に表れることを期待し、場長が天候の見通しで判断を足します。
| させないこと | 理由 |
|---|---|
| 死亡率の急な増加の原因の判断 | 伝染病かどうかは獣医師と家畜保健衛生所の判断 |
| 特定症状の通報の判断 | 場長が行う。この構成は知らせるだけ |
| 入れ替えの時期の決定 | 次の鶏の手配、鶏舎の修繕、取引先の都合が絡む |
| 出荷の量の約束 | 場長がGPセンターと決める |
| 死亡率の急な増加があった鶏舎の予測 | 予測から外し、場長に知らせる |
最後の行を必ず守ります。 死亡率が急に増えた鶏舎の予測を出すと、その数字が出荷の計画に入り、異常への対応より出荷の話が先に進んでしまいます。
指示内容を固定する
生成AIは使わないので、プロンプトではなくPython の処理の要点を示します。
import pandas as pd
from sklearn.ensemble import HistGradientBoostingRegressor
m = pd.read_csv("house_month.csv")
m["breed"] = m["breed"].astype("category")
feat = ["age_next_post_peak", "age_next_pre_peak", "rate_now",
"rate_gap_std", "feed_per_bird", "temp_max_normal",
"mortality_now", "breed"]
mono = {"age_next_post_peak": -1}
train = m[m["target_month"] < "2026-04"]
models = {}
for q in (0.1, 0.5, 0.9):
models[q] = HistGradientBoostingRegressor(
loss="quantile", quantile=q, monotonic_cst=mono,
max_iter=300, learning_rate=0.05, random_state=0
).fit(train[feat], train["rate_next"])
now = pd.read_csv("house_now.csv")
now["breed"] = pd.Categorical(now["breed"], categories=m["breed"].cat.categories)
now = now[~now["mortality_alert"] & ~now["leaving_next_month"]]
for q, mdl in models.items():
now[f"rate_q{int(q*100)}"] = mdl.predict(now[feat])
now[f"eggs_q{int(q*100)}"] = now[f"rate_q{int(q*100)}"] * now["birds_next"] * now["days_next"]
決まりは3つです。 1つ目は、週齢をピークの前と後の2つの項目に分け、後のほうにだけ単調に減る制約を付けることです。週齢の全体に制約を付けると、産み始めの上がり方を表せません。2つ目は、死亡率の知らせが出た鶏舎と、翌月に鶏を出す鶏舎を予測から外すことです。3つ目は、学習と確かめを月で区切ること。古い月で学習し、新しい月で当たり方を見ます。
鶏種は category 型にします。 公式ページでは、categorical_features の既定が from_dtype で、データフレームの列の型が Categorical のものを区分の項目として扱うとされています。鶏種を数値の番号にすると、番号の大小に意味があるように学習されます。
3つの分位点のモデルは別々に学習するので、まれに下振れが中央を上回ることがあります。 その鶏舎は3つの値を並べ替えて示し、並べ替えが起きたことを印として残します。 頻繁に起きるなら、項目か学習の設定を見直します。
出力形式を固定する
月末に、鶏舎ごとの予測と農場全体の見込みを表で出します。
| 列 | 中身 |
|---|---|
house | 鶏舎の番号 |
breed / age_next | 鶏種、翌月の平均の週齢 |
rate_now / rate_gap_std | 当月の産卵率、標準との差 |
rate_q10 / rate_q50 / rate_q90 | 翌月の産卵率の下振れ・中央・上振れ |
eggs_q10 / eggs_q50 / eggs_q90 | 翌月の産卵の数の下振れ・中央・上振れ |
excluded | 予測から外した理由(mortality_alert / leaving / なし) |
model_version | 使ったモデルの版 |
表の下に、農場全体の見込みと入れ替えの検討を付けます。
【翌月の農場全体の見込み(11月)】
下振れ 4,980千個 / 中央 5,160千個 / 上振れ 5,290千個
予測から外した鶏舎:7号舎(11/18 出す予定)
【入れ替えの検討】
3号舎:翌月の中央 78.2%、標準との差 −3.1、3か月後の中央の見込み 72.5%
9号舎:翌月の中央 80.4%、標準との差 −0.8
【先月の予測との差】
10月 実績 5,072千個(予測の中央 5,110千個、下振れ 4,930千個)
農場全体の見込みを、鶏舎ごとの下振れの単純な合計にしないことに注意します。 全部の鶏舎が同時に下振れることは多くないので、単純に足すと全体の下振れが低く出すぎます。 全体の下振れは、過去の月で「鶏舎ごとの予測の合計」と「農場全体の実績」の差の分布から決め直します。
当たり方の物差しは、「実績が下振れと上振れの間に入った割合」です。 0.1と0.9の分位点なら、ならして8割前後が間に入るのが目安です。それより大きく少なければ幅が狭すぎ、ほとんど全部が入るなら幅が広すぎて判断の役に立ちません。 月ごとの記録から、この割合を半年ごとに確かめます。
入れ替えの検討は、数か月先まで見込みを伸ばします。 翌月の予測を1か月ずつ先に進め、産卵率が場長の決めた目安を下回りそうな時期を示します。次の鶏の導入の手配に間に合うように、早めに見えるようにするためです。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 集卵機・環境制御盤・餌のタンク | 管理ソフトのCSVの書き出し(読み取りのみ) | 集卵の数、温度、給餌の量 |
| 日報のフォーム | 入力の読み取り | 死亡の羽数、気づいたこと |
| 管理表 | 読み取り(鶏群の情報・予定)、台帳への追記 | 週齢の計算、毎日の台帳 |
| メール・スマートフォン | 送信 | 死亡率の知らせ、月末の予測 |
死亡率の知らせは、メールとスマートフォンの両方に送ります。 場長が鶏舎にいて、メールを見ないことがあるためです。知らせは場長と、場長が不在のときの代わりの人の2人に送ります。
人が確認する
- 毎朝、印の付いた数字を確かめる … 事務の担当が、集卵の数の0や急な変化を鶏舎の担当者に確かめ、カウンターの不具合なら欠けた値にします
- 死亡率の知らせを受けたら、場長が鶏舎を見る … 原因が設備の故障や急な温度の変化か、それ以外かを確かめ、管轄の家畜保健衛生所の指導に従って判断します
- 月末に、場長が予測と自分の見立てを比べる … 予測が自分の見立てと大きく違う鶏舎は、記録を見直し、理由を書き留めます
- 出荷の量を決める … 下振れと中央の値を見て、GPセンターと約束する量を決めます
- 翌月、実績と予測の差を見る … 差が大きかった鶏舎について、理由(暑さ・病気・記録の誤り)を書きます
予測を見るときは、中央の値より先に幅を見ます。 下振れと上振れの幅が広い鶏舎は、モデルにとっても見通しにくい鶏舎です。幅の広い鶏舎ほど、場長が鶏舎を見に行って自分の目で確かめる価値があります。 幅の狭い鶏舎は、予測をそのまま材料にしてよい鶏舎です。
3番目の「理由を書き留める」が、場長の経験を記録に残す仕組みです。 「この鶏種は暑さに弱い」「この鶏舎は換気が悪い」という見立てが、予測とのずれの理由として残り、次の学習の項目を考える材料になります。
例外に対処する
| 起きること | 対応 |
|---|---|
| 集卵機のカウンターが止まって0 | 欠けた値にして、その日を産卵率の計算から外す |
| 機器の記録が書き出されていない | その機器の項目を欠けた値にし、事務の担当に知らせる |
| 日報のフォームが未入力 | 昼にもう一度確かめ、鶏舎の担当者に入力を頼む |
| 死亡率が急に増えた | 予測から外し、その朝に場長と代わりの人に知らせる |
| 翌月の途中で鶏を出す鶏舎 | 出す日までの日数で産卵の数を計算する |
| 導入日が分からない鶏群 | 予測せず、管理表の整備を頼む |
| 新しい鶏種を入れた | 学習のデータに無いので、標準の曲線との差だけで見る印を付ける |
| 分位点の並べ替えが起きた | 並べ替えて示し、印を残す |
新しい鶏種の行は、入れ替えのたびに起こりえます。 学習のデータに無い鶏種は、予測の当たり方が分かりません。最初の1鶏群は、鶏の供給元の標準の曲線と、場長の見立てを優先します。
記録を残す
- 毎朝の書き出しのCSVと、鶏舎ごと・日ごとの台帳
- おかしい数字の印と、確かめた結果
- 死亡率の知らせと、場長の判断の記録
- 月末の予測(3つの分位点の値、外した鶏舎と理由、
model_version) - 翌月の実績と予測の差、場長が書いた理由
- モデルの版ごとの学習期間と当たり方
死亡率の知らせと場長の判断の記録は、他の記録と分けて残します。 家畜保健衛生所から問い合わせがあったときに、いつ知らせが出て、いつ誰が何を確かめたかを、すぐに出せるようにします。
04実装レベルの3段階
最小構成は、使えるかを確かめる段階です。 毎月の業務には使いません。 半自動化で、1件4分が2分程度になります。 書き写しと計算はなくなりますが、月末の見込みと入れ替えの検討は、場長がグラフを見て行うまま残ります。本格構成で1.5分になり、この段階が本記事の想定です。 差が出るのは、月末にグラフを作り直して見込む作業です。 死亡率の見張りは、半自動化の段階から入れます。 予測は本格構成まで待てますが、毎朝の見張りは台帳ができた時点で動かせます。予測より先に役に立つのは、この見張りのほうです。 段階を飛ばさないでください。 半自動化で台帳を数か月作ると、カウンターの不具合が多い鶏舎、日報の入力が遅れがちな鶏舎が分かります。 そこを直してから予測に進むと、予測の材料がそろいます。
05工数削減シミュレーション
導入後 360件 × 1.5分 ÷ 60 = 9 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 鶏舎を10棟前後持ち、日齢の違う鶏群を順に入れ替えながら飼っている採卵養鶏場。GPセンターや取引先と翌月の出荷の量を約束していて、産卵の数の見込みが外れると、不足分の手当てや余った卵の安売りが起きている場合。産卵の数の見込みと鶏の入れ替えの時期を、場長が経験と手計算で決めている場合。集卵の数・餌の量・温度の記録が、鶏舎ごと・日ごとに3年分以上たまっている場合。
- 鶏舎が1〜2棟で、場長が毎日すべての鶏群を見て見込みを立てられている場合。集卵の数を鶏舎ごとに分けて記録していない場合。なお、鶏の健康の異常の判断と届出、鶏を入れ替えるかどうか、出荷の量をいくらで約束するかの判断は、この構成では代替できません。
07最小構成で試す方法
- 過去3年分の管理表から、鶏舎ごと・月ごとの平均の産卵率、週齢、温度、餌の量、死亡率を集める
- 鶏種と導入日を、全部の鶏群について確かめる
- 古い2年で学習し、直近1年の各月について翌月の産卵率を3つの分位点で予測する
- 予測と実績を並べ、実績が下振れと上振れの間に入った割合を数える
- 同じ月の場長の見込みと、予測の中央の値を、実績と並べる
5番目を必ずやってください。 場長の見込みより予測のほうが外れるなら、場長が使っている情報で、記録に無いものがあるということです。 それを項目に足せるかを考えます。
| 出てきた内容 | 判断 |
|---|---|
| 実績の多くが下振れと上振れの間に入り、場長の見込みと同じくらい当たる | 毎朝の台帳と死亡率の見張りを作り、月末の予測に進む |
| 夏の月だけ大きく外れる | 温度の項目を見直す。舎内の温度の記録が無ければ記録から始める |
| 導入日や鶏種が分からない鶏群が多い | 管理表の整備が先。 予測の問題ではない |
4番目の割合は、鶏舎ごとにも見ます。 農場全体では8割前後でも、特定の鶏舎だけ毎月外れていることがあります。その鶏舎は、換気や給水の設備に他の鶏舎と違う事情があるのかもしれません。 場長に心当たりを聞き、項目に足せるものがあるかを考えます。
最小構成は月ごとの記録で足ります。 毎日の記録を集める仕組みが無くても、管理表の月の集計から試せます。農場のPCの Python で、学習も予測も数分で終わります。試すときは、場長に結果を見せる前に、どの鶏舎がどの月に外れたかを一覧にしておくと、話が早く進みます。
3行目は、記録を長く続けてきた農場でも出ます。 過去の鶏群の導入日は、伝票から拾い直せることが多いので、3年分だけでもそろえてから試し直します。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 鶏舎の呼び名が機器ごとに違う | 対応表で1つの番号にそろえる |
| カウンターの止まりの0を学習する | 印を付けて確かめ、欠けた値にする |
| 産卵の数そのものを答えにする | 産卵率を答えにし、羽数を後で掛ける |
| 週齢の全体に単調の制約を付ける | ピークの前と後に分け、後にだけ付ける |
| 鶏種を数値の番号にする | category 型にする |
| 鶏舎ごとの下振れを単純に足す | 全体の下振れは過去の差の分布で決める |
| 翌月に鶏を出す鶏舎の産卵を数える | 入れ替えの予定で出す日以降を外す |
| 死亡率が急に増えた鶏舎も予測する | 予測から外し、すぐ場長に知らせる |
| 知らせが場長1人にしか届かない | 代わりの人にも送る |
| 予測を約束の量にそのまま使う | 場長が下振れと中央を見て決める |
上の3行が、予測の当たり方を決めます。 どれもモデルではなく、記録の扱い方の問題です。 最小構成の段階で確かめてください。特に産卵の数そのものを答えにすると、羽数の多い新しい鶏舎ほど予測が粗くなり、入れ替えの検討を誤らせます。
下から3行目と2行目は、農場の安全に関わります。 死亡率の知らせは、予測の付け足しではなく、この構成の中でいちばん先に作る機能です。 予測が無くても、毎朝の見張りだけで意味があります。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 鶏舎ごとの集卵の数・温度・餌の量・死亡の羽数、鶏群の情報、出荷の見込み、そして鶏舎の担当者が書いた日報です。
- 死亡率の知らせを、届出の代わりにしない … この構成は知らせるだけです。特定症状に当たるかの確認と、家畜保健衛生所への通報は、場長が行います。 知らせの基準は、管轄の家畜保健衛生所の指導に合わせて設定し、指導が変わったら見直します
- 知らせが届かないことを前提にする … 機器の書き出しが止まると、死亡率の確認も止まります。毎朝の実行が失敗したら、その旨を場長に知らせ、従来どおり日報で死亡の羽数を確かめます
- 出荷の見込みを社外に出さない … 農場全体の見込みは、取引の交渉に関わる情報です。GPセンターに伝える量は場長が決め、予測の表そのものは渡しません
- 日報の記述を担当者の評価に使わない … 日報の気づいたことは、鶏の様子を伝えるためのものです。記述の量や内容で担当者を評価しません
- 外部のサービスに送らない … この構成は農場のPCで完結します。記録を外部のクラウドに置くときは、置き場所と閲覧の範囲を決めます
- 農場のPCが止まったときの代わりを決める … 毎朝の見張りが1台のPCに頼っていると、PCの故障で知らせが止まります。PCが止まった日は日報の紙で死亡の羽数を確かめる、という手順を、鶏舎の担当者にも伝えておきます
- 記録を消さずに残す … 毎日の台帳と知らせの記録は、後から鶏群の調子や異常の経過をたどる資料になります。保存の期間を決め、上書きせずに残します
誤りが起きた場合のリスクは、予測が外れて出荷の約束とずれることと、死亡率の急な増加への対応が遅れることの2つです。 前者は下振れの値と場長の判断で減らします。後者は予測とは別の仕組みとして、毎朝の見張りと2人への知らせで防ぎます。
10まず何から始めるか
1週目:鶏群の情報をそろえる
過去3年分の鶏群について、鶏舎・鶏種・導入日・導入の羽数・出した日を管理表にそろえます。鶏舎の呼び名の対応表も作ります。
2週目:過去の記録で試す
月ごとの記録で学習し、直近1年の予測と実績、場長の見込みを並べます。実績が下振れと上振れの間に入った割合を数えます。
3週目:機器の書き出しと日報のフォームを決める
集卵機・環境制御盤・餌のタンクから毎朝CSVを書き出せるかを確かめ、日報を4項目のフォームに替えます。 死亡率の知らせの基準を、管轄の家畜保健衛生所の指導に合わせて決めます。
4週目:毎朝の台帳と死亡率の見張りを始める
毎朝、記録を集めて台帳と産卵率を作り、死亡率を確かめて場長に知らせるところまで動かします。この時点では予測は出さず、毎朝の見張りが確実に動くことを確かめます。
2か月目: 月末の予測を出し、場長の見込みと並べて比べます。出荷の量は従来どおり場長が決めます。3か月目以降: 農場全体の下振れの決め方と入れ替えの検討表を足し、実績との差を記録します。場長が予測を見てから出荷の量を決め、予測とのずれの理由が毎月記録に残るようになった時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
HistGradientBoostingRegressor の loss に quantile(pinball loss)があり、quantile で推定する分位点を0から1の間で指定すること。欠けた値をそのまま扱い、学習のときに欠けた値を持つサンプルを左右どちらの枝に送るかを学ぶこと。monotonic_cst で項目ごとに単調増加(1)・制約なし(0)・単調減少(−1)を指定できること。categorical_features の既定が from_dtype で、Categorical 型の列を区分の項目として扱うこと。ページが scikit-learn 1.9.1 のものであること | scikit-learn: HistGradientBoostingRegressor | 2026-10-26 |
| 鶏などの家きんの特定症状が「同一の家きん舎内において、一日の家きんの死亡率が対象期間における平均の家きんの死亡率の二倍以上となること」であり、設備の故障・気温の急激な変化・火災・風水害など高病原性鳥インフルエンザ以外の事情によることが明らかな場合は除くこと。飼養衛生管理基準(鶏など)の34で、特定症状を発見したときは直ちに家畜保健衛生所に通報し、家きん・畜産物などの出荷と移動を行わないこととされていること | 農林水産省: 家きん飼養者・関係者・鳥を飼育している方へ | 2026-10-26 |
死亡率の知らせの基準と通報の手順は、管轄の家畜保健衛生所と獣医師に確かめてください。 本記事は上記の公式ページで確認できた範囲だけを扱っています。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-1909)についてのご相談はこちらから。
