4つのAIにロトを予想させる仕組みをどう作ったか

2026-09-27

このサイトの主張は「AIは宝くじを当てられない」であって、当ててみせることではない。そのために作った仕組みと、今どこまで動いているかを書く。

なぜ4社に同じ問いを投げるのか

1社だけの予想を出しても、外れたときに「そのモデルがたまたま弱かった」と読める余地が残る。ChatGPT・Claude・Gemini・Copilotの4社に同一のプロンプトを投げれば、差が出たとしてもそれはモデルの違いであって、聞き方の違いではないと言える。

ロト6の抽せんは毎回独立で、過去の出目に次回の情報は含まれない。この前提は別記事(セット球の周期検証、数字の出現分布の検証)で全2135回のデータを使って確かめてある。したがって「4社に予想させても、乱数と区別のつかない結果に横並びになる」という仮説を検証するのがこの企画の実体だ。

仕組みの全体

流れは5段階ある。

  • 予定表(data/schedule/loto6.json)から、まだ抽せんされていない最も早い回を探す
  • プロンプト(prompts/v1.md)の回・抽せん日を置換し、4社のAPIに投げる
  • 返答をJSONとして読み、個数・値域・重複・セット球の形式を検証する
  • 通ったものだけを data/draws/loto6/<回>/prediction.json に書き出す
  • ビルド時に lib/judge.ts が当せん番号と突き合わせ、一致数・等級・収支を導出する

書き出しと判定を分けているのは、判定結果を保存すると実データとずれる可能性が残るためだ。一致数や等級はファイルに残さず、毎回そのビルドで計算し直す。

もう一つの要が「一度書いたら編集しない」制約だ。cmd/predict はprediction.json が既にある回には何も書かない作りになっている。誤った値が入っても直さず、別途注記する運用にしているのは、事後に書き換えられる余地が残ると、抽せん前に公開した記録としての意味が消えるからだ。

プロンプトの固定と版管理

投げる文面は prompts/v1.md に1つだけ置いてある。過去の抽せん結果は渡さない。渡すとモデルが実体のない傾向分析を語り始め、読者に根拠があるように見えてしまうためだ。「当たりやすい数字を」のような誘導も入れていない。

出力はJSON形式に固定し、数字とセット球のほかに reasoning(選んだ理由)とconfidence(的中の見込みについての自己評価)を書かせている。文面を変える必要が出た場合は v2 を新規に足し、v1 はそのまま残す。過去の回がどの版で生成されたかを prediction.json の promptId に記録してあるので、版が違う回同士を混ぜて比較しないようにできる。

実際のデータから言えること

ここまでが設計で、ここからが現状だ。

data/draws/ に予想が入っているのは第2137回(2026-09-14抽せん)の1回分だけで、しかも4社中Claudeの1社分しか記録されていない。cmd/predict/providers.go がまだ空で、各社のAPIクライアントを実装していないためだ。Copilotは同等のAPIが無い可能性が高く、その場合は手動入力の経路を別に作る必要がある。

事前公開の証明にする予定のX自動投稿もまだ動いていない。証明手段は運用開始と同じ日から有効にしないと、それ以前の回だけ証明が欠けた記録になってしまう。そのため第2137回のClaude予想は正式な記録ではなく予備扱いとし、generatedAtも仮の値のまま残している。

一次情報として出せるのは、この前段階でChatGPTに個別に予想させた15回分(第2116〜2134回、事前公開の証明は無い)の採点結果だ。本数字の平均一致数は1.13個で、ランダムに6個選んだ場合の期待値0.84個(lib/judge.ts のexpectedMatches、超幾何分布の平均 = 6×6÷43)をやや上回った。5等(本数字3個一致)が1回、セット球の的中は15回中1回だった。15回では母数が小さすぎて何も結論できないが、少なくとも「乱数よりはっきり優れている」と言える差ではない。

予定表には第2136回から第2199回(2027-04-22)まで64回分がすでに登録してあるので、仕組み自体は数か月分先まで動かせる状態にある。動いていないのはAPI接続の実装とX投稿の自動化で、どちらもこの記事を書いた時点では未着手だ。

今後

4社分の予想が揃い、X投稿による事前公開の証明が始まった回から、正式な記録として数える。それまでの回は参考値として扱い、本数字にすり替えることはしない。