TypeSafe の Jev は、文章を書かずに「型の決まった答えと確率」だけを返す、判断に特化したモデルです。はい/いいえの確率(Noul)、選択肢の確率(Choice)、段階ごとの確率(Score)の形で答えが返ってきます。
確率つきで答えてくれるなら、野球の「来年どうなるか」の予想に使えるのではないか、と気になりました。どのくらい当たるのか、どこで外すのかを、公開されている MLB のデータで調べてみました。私は野球の現場の経験者ではなく、公開データを集計してみただけです。
Jev の呼び方
Jev は OpenRouter から呼べます。新規アカウントの無料枠(カード登録なし・残高 0 のまま)で、2 つの実験の評価に使った 697 回の呼び出しがすべて収まりました(返ってきた料金の合計で約 0.019 ドル=0.0107 + 0.0080)。
呼び出しは、状況を表す state と、聞きたいことを型つきで並べた questions を送るだけです。
body = {
"model": "typesafe/jev-1.13",
"state": {"context": "An anonymous MLB hitter's 2025 regular season. ...",
"wOBA": 0.315, "xwOBA": 0.33, "strikeout_rate_pct": 19}, # 抜粋
"questions": {
"delta_bin": {"type": "score",
"instructions": "How will this hitter's wOBA in 2026 compare with his 2025 wOBA?",
"criteria": ["Big drop: ...", "Small drop: ...", "About the same: ...",
"Small rise: ...", "Big rise: ..."]},
},
}
req = urllib.request.Request("https://openrouter.ai/api/alpha/decisions",
data=json.dumps(body).encode(), method="POST",
headers={"Authorization": f"Bearer {key}",
"Content-Type": "application/json"})
resp = json.load(urllib.request.urlopen(req, timeout=30))
probs = [resp["answers"]["delta_bin"]["probabilities"][str(k)] for k in range(5)]
返ってくるのは {"0": 0.02, "1": 0.32, ...} のような段階ごとの確率だけで、理由の文章はありません。
コード・事前登録・Jev の全回答は yasumorishima/jev-baseball に置いています。
最初の実験:ABS チャレンジが覆るか
最初に試したのは、ABS チャレンジ(ボール・ストライク判定への異議申し立て)が「覆るか」です。正解が 1 件ずつ付いていて、確率の当たり外れを測りやすいと思ったからです。
データの作り方
MLB の StatsAPI の試合データ(feed/live)には、チャレンジされた投球に reviewDetails が付いています。2026 年 8〜9 月の 777 試合から、投球判定へのチャレンジ(reviewType == "MJ")を 2,678 件取り出しました。
取り出すときに 2 つ気をつけることがありました。
- 投球の
details.call.descriptionはチャレンジの後の判定です。そのまま使うと答えが漏れるので、元の判定は「どちらが申し立てたか」から出しています(打つ側が申し立てたなら元はストライク、守る側ならボール) - 投球に付いている
countはその球の後のカウントです。直前のカウントは、1 つ前の投球から取ります
後から分かった取りこぼし:この記事を書いた後、別の記事のために 1 年分を集め直していて気づきました。チャレンジの結果で打席が終わるとき(見逃し三振・四球)は、reviewDetails が投球ではなく打席の側に付きます。この実験では投球の側しか見ていなかったので、集め直した 8 月 1 日〜9 月 27 日のチャレンジ 3,543 件のうち 893 件(25%)が抜けていました(拾えていた 2,650 件は、最初に集めた 2,678 件と集めた時期が違うため少しずれています)。抜けていた分は覆った割合が 48.6% で、拾えていた分(56.8%)より低めです。
Jev に聞いた 250 件は、すべて拾えていた側から選んでいます。そのため、この節の結果は「打席が続く場面のチャレンジ」についての結果です。距離だけの式を 8 月の全件で当て直し、9 月の全件(1,650 件)で測ると Brier は 0.102 でした。拾えていた 9 月分(1,238 件)では、元の式が 0.1121、当て直した式が 0.1123 でほぼ同じです。対象の集合が違うので 0.102 と 0.112 は直接は比べられませんが、全件にしても式が悪くなることはありませんでした。Jev には聞き直していない(無料枠を使い切った)ので、Jev の数字は拾えていた分だけのものです。
ゾーンからの距離は、ボールの表面がゾーンに触れているかで決まるので、「ゾーンの長方形からボールの中心までの距離 − ボールの半径」で出しました(ゾーンの角は丸くなります)。
def edge_in(px, pz, top, bot):
"""ボールの表面からゾーンまでの距離(インチ)。+ は外れ、- は触れている"""
x0, x1 = -17 / 24, 17 / 24 # ホームベースの幅の半分(フィート)
dx = max(x0 - px, 0.0, px - x1)
dz = max(bot - pz, 0.0, pz - top)
if dx > 0 or dz > 0:
d0 = math.hypot(dx, dz)
else:
d0 = -min(px - x0, x1 - px, pz - bot, top - pz)
return (d0 - 1.45 / 12) * 12 # ボールの半径 1.45 インチを引く
9 月から選んだ 250 件を Jev に聞き、8 月の 1,431 件で「元の判定と逆側に何インチ外れているか」だけのロジスティック回帰を作って比べました。Jev には座標とゾーンの上下に加えて、この距離も計算して渡しています。
結果:距離だけの式の圧勝
Brier スコア(確率の予想と 0/1 の結果のずれの 2 乗の平均、低いほど良い)は 距離だけの式 0.113、Jev 0.180 でした。
250 件を、元の判定からどちら側に何インチ離れているかで 4 つに分けました。判定と逆側に 1 インチ以上外れた 82 球は実際には 99% 覆っていて、距離だけの式も 98% と出しています。Jev の確率の平均は 65% でした。判定どおりの側に 1 インチを超えて入っている 63 球も、実際に覆ったのは 0 球なのに、Jev は平均 18% を付けています。
境目の近く(1 インチ以内)では、式も Jev も迷っています。判定どおりの側に 1 インチ以内の球でも 58% が覆っていて、StatsAPI の座標とゾーンから計算した境目は、ABS が実際に使っているゾーンを端まで再現できていないようでした。
そもそも題材が合っていなかった
ただ、この結果は測る前から見えていたものでした。ABS は追跡した投球の座標を決まったゾーンと比べる仕組みなので、答えはルールで決まっています。判断の問題になっていませんでした。
そこで、結果がルールで決まらず、本当に不確かなものを題材にしました。
本題:来季の wOBA がどれくらい動くか
打者の翌年の成績は、平均への回帰・運・年齢・故障などが混ざって決まります。ルールでは決まりませんが、打撃の中身を表す指標(xwOBA や三振率など)は手元にあるので、判断の材料もそろっています。
使ったデータと、比べ方
- データ:自作の MLB データセット(Hugging Face の yasumorishima/mlb-stats)の打者の年別成績。Baseball Savant と MLB StatsAPI から作っています
- 対象:2025 年と 2026 年の両方で 250 打席以上の打者 227 人。2025 年に 250 打席以上あって 2026 年に届かなかった 82 人は入っていないので、翌年も出場できた打者に限った結果です
- Jev に渡すもの:2025 年の打席数・wOBA・xwOBA・三振率・四球率・ISO・BABIP・打球の傾向(ゴロ・フライ・引っ張りのフライの割合)・走塁スピード、年齢と守備位置は 4 区分。名前と球団は渡さず、数字も丸めました
- 聞くこと:2026 年の wOBA の変化が、5 段階のどれに入るか(Score)
5 段階の区切りは、過去の「ある年 → 翌年」の組の変化量を 5 等分する位置で決めました。過去の組は、2016→2017 年から 2024→2025 年までの、両方の年に 250 打席以上ある 1,620 組です(60 試合だった 2020 年を含む組は除いています)。区切りは −36、−14、+3、+25 ポイント(1 ポイント= wOBA 0.001)になりました。
予想の良さは RPS(Ranked Probability Score)で測りました。段階を順番に足した確率と、実際の段階との差の 2 乗を平均するもので、「少し上がる」を予想して「大きく上がる」だった場合より、「大きく下がる」だった場合のほうを重く罰します。低いほど良い値です。
def rps(probs, b): # probs: 5 段階の確率、b: 実際の段階(0〜4)
cp, tot = 0.0, 0.0
for k in range(4):
cp += probs[k]
tot += (cp - (1.0 if b <= k else 0.0)) ** 2
return tot / 4
比べる相手は 3 つです。
- 当て推量:5 段階すべて 20%
- Marcel 法風のルール:打席数に応じてリーグ平均へ寄せ、年齢で少し補正するだけの式(学習なし)。変化の予想を中心に、過去の組で測った外れ方の幅で正規分布を置き、5 段階の確率にしています
- 過去の例で学習したモデル:過去の 1,620 組から n 件だけ選んで学習したリッジ回帰
def marcel(u):
lg = u["lg"] # 2025 年のリーグ平均 wOBA
proj = lg + u["pa"] / (u["pa"] + 600) * (u["woba"] - lg)
age = u["age"]
proj *= (1 + 0.006 * (29 - age)) if age < 29 else (1 - 0.003 * (age - 29))
return proj - u["woba"] # 予想した変化
全データで学習したモデルが Jev に勝つのは見えているので、知りたいのは「学習するモデルは、過去の例を何件もらえば Jev に追いつくか」です。この件数が、Jev が最初から持っている野球の知識の量の目安になります。新外国人や新人のように、データが少ない場面でこそ気になる量です。
結果を見てから都合のよい読み方をしないように、設計と「どういう結果ならどう読むか」を、Jev を呼ぶ前にリポジトリへ commit しました(PREREG.md)。
当て推量からの上積みは、Marcel 法風ルールの 3 分の 1
当て推量の RPS は 0.195 です。そこから何ポイント下げたかを並べました。
Jev は 0.015 下げていて、当て推量よりは良い結果でした。打者を選び直して 10,000 回計算した差の 95% 区間は [−0.029, −0.001] で、0 を含みません。
一方、Marcel 法風のルールは 0.046 下げていて、Jev はこれに届きませんでした(差 +0.031、95% 区間 [+0.017, +0.044])。事前に決めた読み方では「Jev は教科書的なルールより劣る」になります。
Jev の実力は、過去の例 20〜50 件で学習したモデルと同じくらい
過去の 1,620 組から n 件(10、20、50、100、300 件)を選んでリッジ回帰を学習し、同じ 227 人で RPS を出しました。どの例を選ぶかで結果が変わるので、n ごとに 200 回選び直して平均しています。
200 回の平均で見ると、20 件で学習したモデルは Jev より悪く、50 件で学習したモデルは Jev より良くなりました。Jev は、1 件も学習させずに 20〜50 件ぶんくらいの予想を出していることになります。
ただし 20 件のときは選ぶ例しだいで大きくぶれ(95% の範囲 0.157〜0.242)、Jev の 0.180 はその中に入っています。また、測ったのは 20 件と 50 件の点だけなので、線が交わる位置は測った値ではありません。
Jev は「大きく動く」をほとんど想定していない
ここからは、結果を見た後に行った分析です。まず、Jev がどこで点を落としたのかを見ました。
5 段階ごとに、実際にその段階に入った打者の割合(灰色)と、Jev がその段階に付けた確率の平均(橙)を並べました。5 等分で区切っているので、過去の組ならどの段階も 20% くらいになります。
2026 年も、227 人のうち 15% が大きく下がり、22% が大きく上がりました。Jev はそれぞれ 2% と 9% しか付けていません。「ほぼ同じ」と「少し上がる」に確率を寄せすぎていました。
1 人ずつ見ると、もっとはっきりします。Jev の 5 段階の確率に、過去の組で各段階に入ったときの変化の平均(−57、−24、−5、+14、+45 ポイント)を掛けて足し、「Jev が予想した変化」にしました。
横が実際の変化、縦が予想した変化です。点線の上に乗るほど当たっています。Jev の予想はほぼ ±30 ポイントの中に収まっていて、横に寝た帯になっています。
予想のばらつき(標準偏差)は Jev 13 ポイント、ルール 21 ポイント、実際の変化 36 ポイントでした。実際の変化には運も入っているので、よく当たる予想でも実際よりは小さく動きます。比べるならルールとで、Jev はルールの 6 割ほどしか動いていません。
なお、この「予想した変化」は 5 段階の平均から作っているので、Jev が「大きく下がる」に確率を 100% 置いても −57 ポイントより下にはなりません。図の左下の端は、この作り方の限界でもあります。
上がるか下がるかの向きは分かっています。予想と実際の変化の相関は Jev 0.57、ルール 0.62 で、それほど大きな差はありません。差がついたのは、動く大きさのほうでした。
大きく下がった強打者は外し、運の悪かった打者は当てた
名前の横は 2025 年の wOBA です。Jev には名前を渡していないので、Jev から見た Judge は「wOBA .465(0.005 刻みに丸めた値)、30〜33 歳の外野手」です。
Aaron Judge は 2025 年に wOBA .463 で、2026 年は 91 ポイント下がりました。ルールは「これだけ高いと平均へ戻る」として 75 ポイントの下げを予想しましたが、Jev は 20 ポイントの下げでした。Cal Raleigh(.392)や George Springer(.408)も同じ形で、実際は 90 ポイント前後下がったのに、Jev の予想は 15〜23 ポイントの下げです。ただ、ここまで大きな下げは、ルールも含めてどの予想も当てきれていません。
逆に、Jev のほうが当たった打者もいます。Henry Davis は 2025 年の wOBA が .229 と低く、xwOBA(.293)より 64 ポイントも低い「運の悪い」年でした。実際は 34 ポイント上がり、Jev の予想は +35 でほぼぴったりでした。ルールは +64 と上げすぎています。
Michael Conforto も、実際の +55 に対して Jev +34、ルール +11 で、Jev のほうが近い値でした。Conforto は wOBA が xwOBA より 43 ポイント低く、ここでは運の戻りを見ているかどうかで差が出ています(次の節)。
Jev は運を見ているが、平均への回帰をあまり見ていない
この 5 人の違いは、Jev が何を手がかりにしているかで説明できそうです。そこで、Jev が予想した変化を、次の 2 つの数字で説明する回帰を当てはめました。
- 平均への回帰:2025 年の wOBA がリーグ平均よりどれだけ高いか
- 運:2025 年の wOBA − xwOBA(打球の速さと角度から見込まれる wOBA との差)
同じ回帰を、過去の 1,620 組の実際の変化にも当てはめて比べています。
X = np.c_[np.ones(n), woba_minus_league, woba_minus_xwoba]
w_actual, *_ = np.linalg.lstsq(X_train, actual_delta_train, rcond=None) # 過去の 1,620 組
w_jev, *_ = np.linalg.lstsq(X_test, jev_expected_delta, rcond=None) # Jev の予想(227 人)
過去の組では、リーグ平均より 1 ポイント高かった打者は翌年に 0.43 ポイント、wOBA が xwOBA より 1 ポイント高かった打者も 0.43 ポイント戻っていました。Jev の予想では、運の戻りは 0.32 で実際より弱めですが、平均への回帰は 0.20 と半分以下です。
Marcel 法風のルールは逆で、平均への回帰は 0.57 と強めに見ていますが、式に xwOBA が入っていないので運の戻りは 0.01 とほぼ見ていません。Conforto でルールが +11 と小さく出たのはこのためで、過去の組の重みで計算すると +30 になります。
Judge のような「運ではなく本当に打っていた強打者」は、xwOBA も高いので運の戻りはほとんどありません。残るのは平均への回帰で、過去の組の重みで計算すると −66 ポイントですが、Jev はそこを弱くしか見ていないので −20 で止まっていました(実際は −91 で、重みの式でも届いていません)。
一方の Henry Davis は、過去の組の重みで計算しても +64 で、ルールと同じ値になります。Davis で Jev が当たったのは、この 2 つの手がかりでは説明できない、1 人の打者の結果です。
幅と平均への回帰を補った予想は、ルールと区別がつかない
Jev の予想の幅が狭すぎるなら、幅だけ直せばルールに追いつくのかも試しました。Jev に追加で聞き直すことはせず、手元の回答から計算しています。
- Jev の予想の中心 + ルールと同じ幅:Jev が予想した変化を中心に、ルールと同じ幅(過去の組でルールが外れた大きさの標準偏差 32 ポイント)の正規分布を置いて、5 段階の確率にしました
-
確率をならす:Jev の 5 段階の確率を
p ** (1 / T)で平らにし、当て推量(各 20%)と w の割合で混ぜました。T と w は、227 人を 10 組に分け、9 組で一番良い組み合わせを選んで残りの 1 組で測る形で決めています(どの組でも T は 2.7〜3.2、w は 0 が選ばれました) - さらに、足りない平均への回帰を足す:1 つ目の中心に「(過去の組の重み 0.43 − Jev の重み 0.20)×(リーグ平均との差)」を足しました。どちらの重みも 2026 年の結果を使わずに決まる値です
中心を Jev のまま幅だけルールにそろえると、RPS は 0.180 から 0.162 になり、ルールとの差(0.031)の半分以上が縮まりました。確率をならすほうは 0.168 です。それでもどちらもルール(0.149)には届かず、差の 95% 区間は 0 を含みませんでした(幅をそろえたもの +0.014 [+0.004, +0.023])。
そこに足りない平均への回帰を足すと 0.1505 になり、ルールとの差は +0.002(95% 区間 [−0.005, +0.008])で、区別がつかなくなりました。残っていた差は、ほぼ「平均への回帰を弱くしか見ていない」ぶんだったと考えています。ただし、これは結果を見た後に思いついて試した直し方です。
まとめ
今回のデータでは、次のような結果になりました。
- ABS チャレンジのように答えがルールで決まる問題では、距離だけの式に大きく負けた(Brier 0.113 対 0.180)
- 名前を伏せた打撃成績から来季の wOBA の変化を聞くと、当て推量よりは良く、過去の例 20〜50 件で学習したモデルくらいの力があった。ただ、Marcel 法風のルールには届かなかった
- 上がるか下がるかの向きは分かっていて、運(wOBA − xwOBA)の戻りも実際よりやや弱いが見ている
- 一方で、動く大きさを小さく見積もり、特に平均への回帰を弱くしか見ていない。結果を見た後で幅と平均への回帰を補った予想は、ルールと区別がつかなかった(もう Jev だけの予想ではない)
2 つの実験に共通していたのは、向きは分かっているが、確率が真ん中に寄りすぎることでした。個人的には、データが少ない場面で Jev の答えを出発点にするなら、平均への回帰と幅を少ないデータで補う形を次に試してみたいと思っています。
試したのは 1 つのモデルの版(jev-1.13-20260917)、1 つの聞き方、2025→2026 年の MLB 打者だけです。別の聞き方や別の題材では結果が変わる可能性があります。
付録
用語
- wOBA:打席の結果(四球、単打、本塁打など)を得点への価値で重みづけした出塁の指標。リーグ平均は 2025 年で .313
- xwOBA:打球を、実際にヒットになったかではなく、打球の速さと角度から見込まれる値に置き換えた wOBA
- RPS:段階の予想の良さ。段階を順番に足した確率と実際との差の 2 乗の平均。低いほど良い
- Brier スコア:はい/いいえの確率の予想の良さ。確率と 0/1 の結果の差の 2 乗の平均。低いほど良い
事前に決めたこと、後から見たこと
- 事前に登録したのは、対象の選び方、5 段階の区切り、比べる相手、学習曲線(n 件で学習したモデルとの比較)、主な読み方です
- 登録した読み方には「追いつく件数が 50 件なら〜」という規則もありましたが、先に「Marcel 法風のルールに劣る」の規則に当てはまったため、件数は記述として載せています
- 5 段階ごとの割合、散布図、選手の例、回帰の重み、幅と平均への回帰の直し方、ABS の距離別の集計は、結果を見た後に行った分析です
注意点
- 成績が外れ値に近い 17 人(どれかの指標が平均から標準偏差の 2.5 倍を超えて離れている選手)を除くと、当て推量との差は区間が 0 をまたぎます([−0.024, +0.005])
- 数字を丸めても、Judge のような有名選手は成績から特定できるので、Jev が選手を知っていた可能性は残ります。成績を似た選手と混ぜて身元を消す検査もしましたが、混ぜると実際の変化の幅も狭まり(標準偏差 0.036→0.029)、予想の幅が狭い Jev に有利に働きます。記憶があれば混ぜた行で Jev は悪くなるはずですが、その分と有利に働く分が足し合わさって見えるので、この検査からは記憶の有無は言えません
- 「Jev が予想した変化」は、5 段階の確率に過去の組の段階ごとの平均を掛けて出したもので、Jev が直接答えた値ではありません
- 回帰の重みの比較は、Jev の予想(227 人)と過去の実際の変化(1,620 組)で対象が違います。2026 年の 227 人の実際の変化で当てはめても、平均への回帰 0.52、運 0.41 で、傾向は同じでした
- ABS の比べる相手は StatsAPI の座標から計算したゾーンで、ABS 本体のゾーンを端まで再現してはいません
データと再現
- 打撃成績:yasumorishima/mlb-stats(Hugging Face)。2026 年の公式戦が終わった翌々日(2026-09-29)に取得した値です
- ABS チャレンジ:MLB StatsAPI の試合データ
- 集計と図:https://github.com/yasumorishima/jev-baseball (結果を見た後の分析は
study2-projection/deepdive.py)







