← 이전 🐄 홈 AI For a Lab

어떻게 만들었나

누렁이 한 마리를 따라가며 처음부터 끝까지 · 2026-08
🐂 누렁이 — 이력번호 002134416102 · 2019년 2월 10일생 · 거세
실제로 있는 소입니다. 이 한 마리로 앱이 하는 일을 전부 따라가 보겠습니다.
1

물어볼 것은 딱 하나입니다

농부 아저씨가 알고 싶은 건 하나입니다. "우리 누렁이, 얼마 받을까?"

그런데 이 질문에 답하려면 세 가지를 순서대로 풀어야 합니다.

1
등급이 몇 등급인가
소값은 등급으로 정해집니다. 1++와 2등급은 kg당 8천 원 넘게 차이가 납니다.
2
그 등급이 앞으로 얼마가 되나
지금 값이 아니라 낼 때의 값이 중요합니다. 90일을 내다봅니다.
3
어디에 팔면 제일 나은가
시장마다 다르고, 서원에 넘기면 더 받습니다. 얼마나 더 받을지도 계산합니다.
이 셋을 각각 풀고 이어 붙인 것이 「소팔때」입니다.
2

등급은 세 숫자로 정해집니다

도축장에서 등급사가 보는 곳은 딱 한 자리입니다. 등심을 한 번 잘라 그 단면을 봅니다. 거기서 세 가지를 잽니다.

등지방 5mm 배최장근 151cm² 근내지방 9 — 흰 점이 촘촘할수록 높다
재는 것누렁이무엇을 정하나
근내지방도 (마블링)9육질등급 → 1++
배최장근단면적151 cm²넓을수록 고기가 많다 → 육량에 유리
등지방두께5 mm두꺼우면 버리는 지방이 많다 → 육량에 불리
도체중615 kg무거울수록 육량지수는 내려간다

육량등급은 계산식이 있습니다

육량지수 = 68.184 − 0.625×등지방 + 0.130×배최장근 − 0.024×도체중

누렁이 = 68.184 − 0.625×5 + 0.130×151 − 0.024×615
        = 68.184 − 3.125 + 19.63 − 14.76
        = 69.9  →  67.5 이상이므로 A등급

마블링 9는 1++, 육량지수 69.9는 A. 합치면 1++A — 최고 등급입니다.

실제로 누렁이는 2021년 8월 31일 농협음성축산물공판장에서 1++A로 판정받았습니다. 계산이 실제와 맞습니다.
3

그런데 이건 잡아 봐야 압니다

문제가 여기 있습니다. 위 세 숫자는 도축한 뒤에 나옵니다. 농부 아저씨는 팔기 전에 알고 싶은데 말입니다.

길 ① 초음파를 찍으면 미리 봅니다

살아 있는 소 등에 초음파를 대면 같은 단면이 보입니다. 배최장근 넓이도, 등지방 두께도, 마블링 무늬도 다 나옵니다. 도축장에서 재는 것과 같은 세 숫자입니다. 그러면 위 계산식을 그대로 쓸 수 있습니다.

🐂 살아 있는 소 등에 초음파를 댄다 28개월쯤 · 출하 두 달 전 단면 세 숫자 배최장근 · 등지방 근내지방 등급 1++A 위 계산식 그대로 확신도 94%

길 ② 초음파가 없으면 형·누나를 봅니다

초음파 장비가 없는 농가가 훨씬 많습니다. 그럴 땐 지난 소들을 봅니다.

이력번호만 넣으면 그 소의 출생일·성별·농장이 나옵니다. 그리고 같은 농장에서, 같은 어미에게서, 비슷한 개월령에 이미 도축된 소들의 성적을 찾습니다. 그 소들이 몇 등급을 받았는지가 곧 답이 됩니다.

어미 · 002134400001 2018년생 형 1++A 31개월 · 도축완료 2018년생 형 1+A 30개월 · 도축완료 2019년생 누나 1++A 29개월 · 도축완료 🐂 누렁이 1++A 예상 30개월 · 사육중 형 셋 중 둘이 1++ → 누렁이도 1++ 쪽으로 봅니다
초음파가 있을 때 지금 이 소의 단면을 직접 봅니다
94%
이력만 있을 때 비슷한 소들의 성적으로 미룹니다
71%
둘 다 답을 내지만 확신도가 다릅니다. 앱은 이 숫자를 숨기지 않고 그대로 보여줍니다. 71%짜리 답을 94%인 척하지 않습니다.
4

어미가 3등급이면 새끼도 3등급일까

처음엔 그렇게 짰습니다. 도축된 혈족들의 등급을 평균 내서 그대로 썼습니다. 간단하고, 그럴듯했습니다.

돌려 보니 50두 중 28두가 3등급으로 나왔습니다. 이상합니다. 이 농장 소들이 그렇게 나쁠 리가 없습니다.

도축된 혈족을 열어 봤습니다

17두가 나왔습니다. 그런데 하나같이 이랬습니다.

이력번호도축개월체중등급
0020459856052024-12-24184324 kg3
0020522421372025-01-13175279 kg2
0020748985302026-01-30163316 kg3
0020774544202022-08-18123298 kg3
0021287178952024-06-1962490 kg2
17두 평균 등급순위1.56 (1=3등급 … 5=1++)

전부 경산우였습니다. 새끼를 여러 번 낳고 늙어서 도태된 암소입니다. 184개월이면 열다섯 살입니다. 체중 324kg은 비육우의 절반입니다. 이런 소는 원래 3등급이 나옵니다. 살을 찌우려고 키운 소가 아니니까요.

두 부류는 다른 세계입니다 경산우 — 새끼 낳고 도태 3등급21 1+1++ 평균 1.56 도축 62~184개월 · 253~496kg 비육우 — 고기로 키운 소 3등급21 1+1++ 평균 3.84 (거세) 도축 30개월 안팎 · 450kg 안팎 어미의 3등급을 그대로 새끼에게 붙이면, 다른 자로 잰 값을 옮겨 적는 셈입니다

그래서 이렇게 고쳤습니다

등급을 그대로 쓰지 않습니다. 같은 부류 안에서 얼마나 잘했나만 뽑아 넘깁니다. 가축 개량에서 오래 쓰는 방식입니다.

1
혈족을 부류로 나눈다
도축 55개월이 넘으면 경산우, 아니면 비육우
2
그 부류 평균과의 차이만 뽑는다
경산우 기준선 1.56 — 조회한 16두로 직접 구한 값입니다
3
혈연계수 × 유전력을 곱해 넘긴다
어미 0.5 · 외조모 0.25 · 형제 0.5 · 유전력 0.35
4
본인 부류의 기준선에서 그만큼 움직인다
거세 3.84 · 암 2.89에서 출발합니다
얼룩이의 어미 — 3등급, 도축 124개월 → 경산우
  차이 = 1 − 1.56 = −0.56  (같은 부류 중에선 조금 아래)

넘어가는 몫 = 0.35 × (−0.56) = −0.20
얼룩이 등급순위 = 2.89 (암 기준선) − 0.20 = 2.69  →  1등급

3등급이 아니라 1등급입니다. 어미가 3등급이었다는 사실은 「같은 도태 암소들 중에서 살짝 아래」라는 뜻일 뿐, 그 딸이 3등급이 된다는 뜻이 아니었습니다.

50두 판정고치기 전고친 뒤
3A28두0두
2A12두5두
1A3두42두
1+A 이상7두3두
고친 뒤 등급순위가 2.40~3.39 사이에 몰립니다. 폭이 좁습니다. 그게 맞습니다 — 유전력이 0.35라는 건 부모 성적의 3분의 1만 자식에게 간다는 뜻입니다. 도태 암소 몇 두만으로 개체를 갈라낼 수는 없습니다. 그래서 확신도도 55~78%로 낮게 답합니다. 초음파를 찍은 소만 94%입니다. 모르는 걸 아는 척하지 않는 것이 이 계산의 요점입니다.
5

이제 값을 내다봅니다

등급을 알았으니 그 등급이 90일 뒤에 얼마가 될지 봐야 합니다. 지난 값만 보고 선을 쭉 긋는 건 예측이 아닙니다. 다섯 갈래를 함께 봅니다.

재료왜 보나지금 값이 미는 방향
지난 가격 흐름오르던 것은 조금 더 오른다+4.15%p
곡물·사료값사료가 비싸지면 농가가 버티기 어렵다−2.38%p
사육두수·도축두수물량이 많으면 값이 눌린다−2.19%p
명절까지 남은 날추석 앞에는 수요가 몰린다−0.22%p
뉴스질병·정책은 숫자로 안 잡힌다수급 4갈래로 세어 넣음

뉴스는 이렇게 숫자로 바꿉니다

구제역이 돌면 값이 움직입니다. 그런데 그건 어떤 통계표에도 안 나옵니다. 그래서 한우 뉴스 39.8만 건을 한 건씩 읽어 네 갈래로만 셉니다.

수요 ↑「추석 선물세트 예약 급증」
「한우 소비촉진 행사 개최」
수요 ↓「수입 소고기 관세 인하」
「가계 소비 위축」
공급 ↑「사육두수 사상 최대」
「도축물량 확대」
공급 ↓「구제역 확산으로 이동제한」
「배합사료 가격 인상」
기사 하나가 여러 갈래에 걸릴 수도, 하나도 안 걸릴 수도 있습니다. 하나라도 걸린 기사만 남기고 날짜별로 세면 매일의 수급 압력 지표가 나옵니다. 사료값 인상이 「공급 ↓」인 이유는, 비용이 오르면 농가가 못 버티고 물량이 줄기 때문입니다.

명절은 달력으로 안 잡힙니다

여기서 한 가지 어려운 게 있었습니다. 설과 추석은 음력이라 해마다 옮겨다닙니다. 설이 어떤 해는 1월 하순, 어떤 해는 2월 중순입니다. "1월이다"라는 변수로는 명절 효과를 잡을 수 없습니다.

그래서 명절까지 며칠 남았나를 직접 세었습니다. 2010년부터 2027년까지 설·추석 날짜를 전부 넣고, 하루하루 D-day를 계산해 6,574일치를 만들었습니다.

여기가 좋다 명절 30일 전 ~ 7일 전 명절 평시 16,998원 특수 끝 17,327원/kg — 평시보다 1.9% 높다
명절 앞 809 경매일과 평시 3,512 경매일을 견줘 나온 실측값입니다. 전망을 못 믿더라도 이 규칙 하나만은 지금도 쓸 수 있습니다.
6

등급이 뒤집히면 안 됩니다

모형이 자칫 1++가 1+보다 싸다고 내놓으면 그 순간 아무도 안 믿습니다. 실제로 아무 제약 없이 학습시키면 그런 일이 일어납니다. 데이터가 적은 등급에서 특히 그렇습니다.

그래서 육질·육량 순위가 올라가면 값도 반드시 올라가도록 못을 박았습니다. 수학에서는 단조 제약이라 부르는데, 쉽게 말하면 순서를 절대 못 어기게 묶어둔 것입니다.

묶지 않으면 1++ 1+ 1 ✗ 1+가 1++보다 비싸다 묶으면 1++ 1+ 1 ✓ 역전 0건 / 3,789조합
등급 15개 × 성별 4가지 × 예측일 전부를 훑어 순서가 어긋난 조합이 하나도 없음을 확인했습니다.
7

서원은 얼마를 얹어야 할까

여기가 가장 재미있는 부분입니다. 서원은 농가에게 시장값보다 더 줍니다. 그런데 얼마나 더 줘야 할까요?

많이 얹으면 소가 많이 모입니다.
그런데 한 마리당 남는 게 적습니다.
적게 얹으면 한 마리당 많이 남습니다.
그런데 소가 안 옵니다.

서원이 버는 돈은 모이는 소 × 한 마리당 남는 돈입니다. 이 곱이 가장 커지는 지점이 답입니다. 계산해 보니 7%였습니다.

서원이 얹는 비율 → 모이는 소 (늘어남) 한 마리당 남는 돈 (줄어듦) 둘의 곱 = 서원의 이익 7% 가장 좋은 지점 3% 13%
얹는 비율모이는 소한 마리당 남는 돈서원의 이익
5%59%2,704 원/kg1,605
6%74%2,476 원/kg1,834
7%84%2,248 원/kg1,877 ← 가장 큼
8%90%2,021 원/kg1,808
10%96%1,565 원/kg1,498
8%로 올리면 소는 더 모이지만(90%) 이익은 오히려 줄어듭니다(1,808). 6%로 낮추면 한 마리당 많이 남지만 소가 덜 옵니다(74%). 7%가 꼭짓점입니다.
8

한 줄로 나가는 답, 네 겹으로 푼 문제

농가 화면에 나가는 말은 이것뿐입니다.

"서원과 하시면 마리당 115만 원 더 받으십니다"

이 한 줄을 얻으려면 네 가지를 동시에 풀어야 했습니다. 하나라도 빠지면 숫자가 나오지 않습니다.

① 등급별 경락가 8개 등급 × 90일 순서가 뒤집히면 안 됨 ② 부위별 소비자가 5개 부위 × 등급 도체 1kg의 쪼개짐 ③ 농가의 마음 몇 %면 서원에 낼까 보이지 않는 값 ④ 꼭짓점 찾기 셋을 곱한 곡선에서 가장 높은 한 점 α* = 7.0% 최적 프리미엄 넷 중 하나만 빠져도 이 점은 찍히지 않습니다

어디가 어려웠나

문제왜 어려웠나어떻게 했나
① 등급별 90일 등급이 15개, 데이터가 적은 등급은 값이 튀어 1++가 1+보다 싸게 나옴 순위가 올라가면 값도 오르도록 못을 박음 (3,789조합 역전 0건)
② 부위 쪼개기 경매는 한 마리를 통으로 사는데, 팔 땐 등심과 앞다리 값이 다름 도체 1kg의 부위 수율을 잡아 소비자가로 환산
③ 농가의 마음 어디에도 자료가 없음. 몇 % 얹으면 소가 오는지는 아무도 기록하지 않음 반응 곡선을 세우고 두 숫자를 가정 — 아직 남은 미지수
④ 꼭짓점 물량은 늘고 마진은 줄어 곱이 언덕 모양. 봉우리가 하나인지 확인이 필요 3~13% 구간을 0.5%씩 훑어 실제로 하나뿐임을 확인

한 번 크게 헛디뎠습니다

수율을 생체 기준 45%로 잡고 계산했는데, 곱한 대상은 도체중이었습니다. 단위가 어긋난 겁니다. 결과는 모든 등급에서 마진이 음수였습니다. 서원이 소를 살수록 손해를 본다는 답이 나왔습니다.

잘못  도체 615kg × 45%(생체 기준) = 277kg  →  회수 부족 → 마진
바로  도체 615kg × 68%(도체 기준 정육) = 418kg  →  마진 +5,689 원/kg

숫자가 음수로 나온 덕에 잡았습니다. 조금만 그럴듯했으면 못 봤을 겁니다.

아직 남은 것을 분명히 해 둡니다. ③의 반응 곡선에 들어간 두 숫자(얼마나 빠르게 반응하는지, 몇 %부터 움직이는지)는 실측이 아니라 가정입니다. 서원이 실제로 계약을 시작하면 몇 %에 몇 두가 왔는지가 쌓입니다. 그때 이 두 숫자를 실측으로 갈아끼우면 7%는 조금 움직일 겁니다. 지금 7%는 「지금 아는 것으로 낼 수 있는 최선의 답」이지, 영원한 정답이 아닙니다.
9

그 7%는 어디서 나오나

서원이 7%를 더 주고도 남는 이유가 있습니다. 소 한 마리를 통째로 사서 부위별로 나눠 팔기 때문입니다. 경매에서는 한 마리를 kg당 얼마로 뭉뚱그려 사지만, 팔 때는 등심과 앞다리 값이 다릅니다.

한 마리 도체 615kg · 1++A 25,001 원/kg 에 산다 등심  7.8% 갈비 10.6% 설도 12.8% 양지·안심 11.1% 나머지 정육 25.7% 소매 부위값 합 56,677 도매단계 회수 32,872 소매의 58%
도매단계 회수     32,872 원/kg
− 경락가           25,001
− 도축·가공·물류   2,182
─────────────────────────
= 남는 돈          5,689 원/kg

25,001원의 7%는 1,750원입니다. 5,689원 중 1,750원을 농가에 나눠 주고 서원은 3,939원을 가져갑니다. 양쪽 다 이깁니다. 소매 판매까지 하지 않고 도매 단계에서 넘기는 것으로만 계산했으니, 보수적인 숫자입니다.

10

누렁이의 최종 답

여기까지가 앱 안에서 벌어지는 일입니다. 밖으로 나오는 건 세 마디뿐입니다.

① 어디에 농협음성 · 69km
26,706 원/kg
가장 가까운 곳보다 kg당 812원 높습니다
② 언제 명절까지 45일
한 달 뒤
명절 앞 30~7일 구간 · 평시보다 1.9% 유리
③ 서원과 하면 28,575 원/kg 으로 사드립니다  (α*=7%)
마리당 115만 원 더 받으십니다 — 5%는 도축 즉시, 나머지는 30일 뒤 정산
농가 화면에는 수식이 한 줄도 나오지 않습니다. 육량지수도, 최적화 식도, 단조 제약도 전부 안에서 돕니다. 밖으로 나오는 건 이웃 언니가 말해주듯 세 마디입니다.
11

정직하게 말씀드릴 것

여기까지 만들었지만, 아직 다 된 게 아닙니다.

항목지금 상태
등급 판정 (초음파)계산식이 실측과 맞습니다
등급 역전 방지3,789조합 중 0건
명절 효과+1.9% 실측 확인
도매시장 비교10곳 실제 경락가
혈통 기반 등급 추정유전력 0.35로 보정 · 확신도 55~78%
부계 혈통 (친조부·씨수소)한우리 연계 필요 — 지금은 모계만
농가 물량 반응 (α의 k·α₀)실측 없음 — 가정값
90일 가격 방향아직 검증을 통과하지 못했습니다
선도계약값은 도축 당일 확정 — 미리 못 정합니다
90일 뒤에 오를지 내릴지를 맞히는 건 아직 어렵습니다. 여섯 번 나눠 검증했더니 두 번만 「늘 오른다」는 단순 규칙을 이겼습니다. 그래서 앱은 "어디에 낼까"와 "언제 낼까"를 먼저 답합니다. 이 둘은 지금도 확실합니다. 방향 예측이 좋아지면 그때 더 말씀드리겠습니다.
누렁이 = 이력번호 002134416102 · 축산물품질평가원 이력제·등급판정 API 실제 조회 결과
데이터 — 축평원 경락가 12,655일·등급별 198,696건·시장별 164만 건 · KAMIS 소매가 42.4만 건 · KOSIS 사료비 · FRED 국제곡물가(1992~) · 한우 뉴스 39.8만 건 · 명절 D-day 6,574일
AI For a Lab · 2026-08