鶴田研究所 Tsuruta Laboratory

調査ノート 2026-09-15

同じ問いと同じデータで生成させた80本の解析コードの、数値一致の分析

同じ問いと同じデータで80回コードを書かせ、数値・統計処理・依存関係・乱数・環境・書き添えの文を突き合わせた

要旨

サッカーの審判の判定を29の研究チームが同じデータで分析した Silberzahn ら(2018)の題材を使い、同じ問いと同じデータを Claude Code に独立に80回渡して解析コードを書かせた。発注文は四種類で、方法を文で指定したものと、問いだけを渡したもの、その言い換え、自分で最善を選べと言ったものである。書かれた80本のプログラムは一つも同じでなかったが、方法を指定した30回は赤カードの比を倍精度の最後の桁まで同じ 1.3355015466224884 と出し、こちらの独立実装とも一致した。方法を指定しないと、点推定は1.022倍の幅にしか散らばらないのに、p値は13.4倍動いた。共変量も点推定も同じ16回の中でも、頑健標準誤差をどの単位でまとめるかだけでp値が7.9倍動いた。効果量の散らばりは人間29チームの1.4%で、言い換えても判断を促しても3.8%どまりだった。モデルを取り替えると解析の単位そのものが変わり、散らばりは11倍になった。80回すべてが有意と結論した(人間は29チーム中20)。生成されたコードは同じ環境で走らせ直せば80本とも同じ数字を出し、スレッド数やライブラリの版を替えても動いたのは最後の桁だけで、方法を渡した30本は1ビットも動かなかった。いっぽう、添えられた説明文には、データと突き合わせれば白黒がつく誤りが12件あった。

方法Silberzahn らが公開した選手と審判の組146,028行を、ファイル名だけ変えて渡した。発注文は四種類(方法を渡す/問いだけ/その言い換え/自分で選べと言う)で、モデルは Claude Fable 5.1 と Claude Sonnet 5 の二つ、合わせて80回を1回ずつ独立に走らせた。各回に空のフォルダを与え、道具は読み書きと Python の実行だけに絞り、網は禁じた。出てくる数値は倍精度のまま比べ、統計処理はモデルの族・解析の単位・共変量・除外・標準誤差をまとめる単位に分けて符号化した。生成された各 analysis.py を二つの環境で走らせ直し、書き添えの文はデータから検算できる主張だけを機械で突き合わせた。
結果80本のプログラムは80通りとも別物(行数62〜193)。方法を指定した30回は赤カードの比が30回とも 1.3355015466224884、p値も同一で、指定した六つの項目も30回とも守られた。問いだけ渡した Fable 5.1 の20回は、モデルの族と解析の単位が20回とも同じで、点推定は1.2836〜1.3118(1.022倍)、p値は0.0019〜0.025(13.4倍)。対数の標準偏差は人間29チームの1.4%。言い換えは3.8%、判断を促した条件は3.2%で、どちらも人間には遠く届かない。Sonnet 5 は10回中8回が組でなく選手を単位にし、散らばりは人間の16.4%になった。80回とも有意な正の効果。同じ環境の再実行は80本とも1ビット一致。スレッド数を変えると32本、statsmodels の版を替えると主な数字が6本で最後の桁だけ動き(6本とも負の二項回帰)、方法を渡した30本はどちらでも動かなかった。
知見コードの一致と数字の一致は別のことである。プログラムは毎回別物になるのに、推定したい量を文で決めれば数字は最後の桁まで揃う。決めなければ人間は3.30倍に広がるが、同じモデルを繰り返したAIは1.022倍にしか広がらない。散らばりが小さいことは正しさの保証ではなく、推定量の選び方の不確かさが見えなくなることを意味する。見えるようにするには繰り返しではなくモデルや発注文の入れ替えが要る。仕様書に書くべきなのは推論の手続きまでで、モデル式だけでは足りない(共変量が同じでも、標準誤差のまとめ方だけでp値が7.9倍動く)。そして、数値が動かない一方で、添えられた説明文には検算できる誤りが残る。
限界データは一つ、問いも一つである。Sonnet 5 は10回のうち6回で出典の論文を名指ししたので、記憶の影響は否定できない。モデルは二つ、発注文は四つで、人格は入れ替えていない。統計処理の符号化はこちらが書いた正規表現による。書き添えの検算は3種類の主張に絞って1件ずつ読んで判定したので、誤りの率ではなく誤りが存在することの確認である。版の比較は statsmodels の二つの版だけで、別のOSや別のCPUで同じ数字が出るかは測っていない。
同じ問いと同じデータに対する効果量の散らばりを、人間の29チームとAIの繰り返しで比べた図横軸は赤カードの比(対数)。中央の縦線が1=差なし。上の行は独立した29の研究チーム、下の行は同じ発注文をAIに独立に何回も渡した結果。人間は0.89から2.93まで散らばるが、AIはどの条件でも1.3のそばに固まる。0.911.523赤カードの比(darkest / lightest)人間29チーム(Silberzahn 2018)1.17901.34101.31001.20511.38001.28301.71001.39101.48001.02941.25220.88781.41001.21451.01601.32000.95601.10101.40002.88071.31001.38001.42001.30002.93101.38201.28001.12261.39000.89–2.93n=29問いだけ渡す(Fable 5.1)1.30191.30191.30191.30191.30191.30191.30191.30191.30161.31181.30191.30161.30191.30191.30191.30191.30191.30191.28361.30191.28–1.31n=20問いだけ・言い換え(Fable 5.1)1.33601.30161.32671.30191.30141.30191.30141.30161.30161.30191.30–1.34n=10選べと言う(Fable 5.1)1.30191.30191.30191.30191.30191.30161.33601.30141.30191.30191.30–1.34n=10方法を渡す(Fable 5.1)1.33551.33551.33551.33551.33551.33551.33551.33551.33551.33551.33551.33551.33551.33551.33551.33551.33551.33551.33551.33551.34n=20問いだけ渡す(Sonnet 5)1.31911.37521.24051.37521.31131.38321.25431.33551.26211.26191.24–1.38n=10方法を渡す(Sonnet 5)1.33551.33551.33551.33551.33551.33551.33551.33551.33551.33551.34n=10
同じ問いと同じデータに対する効果量の散らばり。上の行は独立した29の研究チーム、下の行は同じ発注文をAIに独立に何回も渡した結果。人間は0.89から2.93まで散らばるが、AIはどの条件でも1.3のそばに固まる。
条件ごとに、何回走らせて何種類になったかを数えた表各行はひとつの条件。左の列ほど書き方の話、右の列ほど数字の話。プログラムは毎回別物になるが、方法を渡した条件では推定値もp値も1種類しか出ない。プログラムの種類使った行数の種類共変量の組の種類標準誤差の単位の種類推定値の種類p値の種類問いだけ渡す(Fable 5.1)20回20143711問いだけ・言い換え(Fable 5.1)10回101721010選べと言う(Fable 5.1)10回1014268方法を渡す(Fable 5.1)20回2011111問いだけ渡す(Sonnet 5)10回105531010方法を渡す(Sonnet 5)10回1011111
条件ごとに、何回走らせて何種類になったかを数えた表。左の列ほど書き方の話、右の列ほど数字の話。プログラムは毎回別物になるが、方法を渡した条件では推定値もp値も1種類しか出ない。
標準誤差をどの単位でまとめるかで、p値がどれだけ動くかを示した図横軸はp値(対数)。縦の破線が0.05。行は頑健標準誤差をまとめる単位で、点推定は1.28から1.34までの狭い範囲に収まるのに、p値は0.0019から0.025まで13倍動く。0.0010.010.050.10.05p値(両側)審判でまとめる1回p=0.0018920.00189比 1.302–1.302選手と審判の両方14回p=0.01121p=0.01121p=0.0104p=0.01121p=0.01052p=0.01121p=0.01121p=0.01121p=0.01121p=0.0104p=0.005285p=0.01052p=0.01121p=0.011210.00528–0.0112比 1.301–1.336選手でまとめる25回p=0.01492p=0.01492p=0.01492p=0.01492p=0.01492p=0.0141p=0.01436p=0.01492p=0.01492p=0.01492p=0.01492p=0.01492p=0.01492p=0.02538p=0.01492p=0.007943p=0.0141p=0.009357p=0.01492p=0.01423p=0.01492p=0.0141p=0.0141p=0.01492p=0.014920.00794–0.0254比 1.284–1.336
標準誤差をまとめる単位ごとのp値。点推定は狭い範囲に収まるのに、まとめ方の選択だけでp値が一桁動く。縦の破線が0.05。

背景

同じデータと同じ問いを複数の研究者に渡すと、答えは一つにならない。Silberzahn らは29のチームに「サッカーの審判は肌の色が濃い選手に赤カードを出しやすいか」を調べさせ、効果量が0.89倍から2.93倍まで散らばり、20チームが有意な正の効果を、9チームが有意でないことを報告したと書いた。同じ形の調査が移民と社会政策(73チーム)、脳画像(70チーム)、金融(164チーム)でも行われ、どれも似た散らばりを出した。Auspurg と Brüderl はこの散らばりの主な原因を「問いが曖昧だったこと」に求め、推定したい量をはっきり決め直せば結果は狭い範囲に収まると示した。

いまこの種の解析は、人に頼まなくても書ける。Bertran らは4つのモデルと5つの人格を掛けて約5,000回の自動解析を走らせ、人間の調査と同じ規模の散らばりが機械でも出ること、人格を入れ替えると結論の分布が動くこと、つまり操縦できることを示した。この研究はデータ×モデル×人格の各枠に約30回の繰り返しを持っているが、枠の中のばらつきそれ自体を数字では報告していない。図の点として描かれているだけである。そして、生成されたコードをもう一度走らせて同じ数字が出るかは確かめていない。再現性は「別の分析者が再現できるか」という10点満点の採点項目としてAIの審査役が読むだけで、実行はされない。依存関係、乱数の種、実行環境についての記述も無い。

本調査が測るのはそこである。発注文とモデルを固定したまま同じ仕事を独立に繰り返し、出てくる数値、統計処理の選択、取り込む包、乱数、実行環境、書き添えの文に書かれた事実の六つを突き合わせた。比較の相手は Silberzahn らの29チームである。その効果量が公開されているので、AIの散らばりを人間と同じ物差しに置ける。

対象と方法

データ

Silberzahn らが配ったデータをそのまま使った。選手と審判の組が146,028行、選手2,053人、審判3,147人、2012-13年の英独仏西1部である。結果変数は、その審判がその選手に出した赤カードの枚数。肌の色は写真を見た2人の評価者が5段階で付けたもので、写真の無い選手468人には値が無い。

ファイル名は dyads.csv に変えて渡した。元の名前や論文名を残すと、モデルが出典を思い出して答えを寄せる余地ができる。変数名は変えていない。それでも見破られた回があり、後述する。

四つの発注文

Claude Code を claude -p で1回ずつ独立に走らせた。各回に空のフォルダを与え、道具は読み書きと Python の実行だけに絞り、網は禁じた。発注文は四種類で、どれも「analysis.py を書き、走らせ、決まった11の項目を持つ result.json を出し、300語未満の書き添えを付ける」ところまでを指定している。

名前渡したもの何を見るためか
問いだけ問いとデータの説明書だけ。方法は指定しないSilberzahn らの29チームと同じ立場
言い換え同じ中身を別の言い回しで書いた発注文散らばりが発注文の言葉づかいから来ていないか
選べと言う「複数の解析が成り立つ。自分で最善を選び、なぜ他を採らなかったか書け」判断を促せば散らばりが増えるか
方法を渡す単位・分布・オフセット・共変量なし・標準誤差のまとめ方まで文で指定Auspurg らの言う「推定したい量を決めた」状態

モデルは Claude Fable 5.1 と Claude Sonnet 5 の二つ。回数は、問いだけと方法を渡すが各20回(Sonnet 5 は各10回)、言い換えと選べと言うが各10回で、合わせて80回である。

「方法を渡す」条件の正解値は、こちらで別に書いた実装で先に出しておいた。組を単位とする Poisson 回帰、log(games) をオフセット、共変量なし、審判でまとめた頑健標準誤差で、赤カードの比は1.3355、95%区間は1.1414から1.5627、p値は0.00031、使う行は124,621である。

測ったもの

数値は倍精度のまま比べ、丸めない。統計処理は、モデルの族・解析の単位・肌の色の符号化・共変量・除外・標準誤差をまとめる単位に分けて符号化した。依存関係は取り込んだ包と pip install の有無、乱数は種を置いたかと乱数を使う手続きの有無を見た。環境は三通りに確かめた。同じ環境で analysis.py をもう一度走らせて result.json が1文字違わず同じか、行列計算のスレッド数を1に、辞書のハッシュ種を変えて走らせても同じか、そして statsmodels を一つ前の版に入れ替えた別の環境で走らせても同じか、である。analysis.py は1文字も書き換えずに走らせた。書き添えの文は、データから検算できる主張だけを機械で突き合わせた。

結果

プログラムは毎回別物になる

80回が書いた analysis.py は、80通りとも中身が違った。同じ文字列のファイルは一つも出ていない。行数は62行から193行まで、中央は109行である。同じ数字を出した「方法を渡す」条件の30本の中でも、臨界値を1.96と手で書くか scipy から出すか(30本中7本が手書き)、区間を conf_int() に任せるか自分で計算するか(12本が前者)、games が0以下の行が無いことを確かめるか(16本が確かめる)、型を明示的に float に直すか(17本が直す)で分かれた。式で書く書き方(statsmodels の formula API)を選んだのは11本である。

方法を渡すと、数字は最後の桁まで一致する

方法を文で指定した30回(Fable 5.1 が20回、Sonnet 5 が10回)は、赤カードの比を30回とも 1.3355015466224884 と出した。倍精度の最後の桁まで同じで、こちらが別に書いた実装の値とも一致する。p値も30回とも同じ値だった。使った行数も30回とも124,621である。指定した六つ(単位・分布・オフセット・共変量なし・標準誤差のまとめ方・報告する量)は30回とも守られていた。

ずれたのは信頼区間の端だけである。Fable 5.1 の1本が下端を小数第9位で違う値にした(差は10億分の1.4)。臨界値に1.96と書いたためで、正確な値は1.959963984540054 である。残りの29本は端まで一致した。

問いだけ渡すと、点推定は揃い、推論だけが揺れる

方法を指定しなかった Fable 5.1 の20回は、モデルの族を20回とも Poisson 回帰にし、解析の単位を20回とも選手と審判の組にし、log(games) をオフセットに置いた。肌の色は20回とも2人の評価の平均で、写真の無い選手だけを外した。共変量の組は4通りで、20回のうち16回がリーグの国とポジションの二つ、2回がそれに年齢を足したもの、1回がポジションの区分を粗くして年齢を足したもの、1回がリーグの国だけだった。

その結果、点推定は1.2836から1.3118までの幅にしか散らばらない。最大と最小の比は1.022倍である。対数をとった標準偏差は0.0037で、人間29チームの0.2556の1.4%にあたる。

いっぽうp値は0.0019から0.025まで、13.4倍動いた。いちばん大きく効いたのは、頑健標準誤差をどの単位でまとめるかである。20回全体では、選手でまとめた回が15、選手と審判の両方でまとめた回が4、審判でまとめた回が1だった。共変量がリーグの国とポジションの二つで同じ16回に絞ると、点推定は16回とも1.3019で、違うのはまとめ方だけになる。それでもp値は、審判でまとめると0.0019、両方でまとめると0.0112、選手でまとめると0.0149で、7.9倍動く。残りの幅は共変量の違いから来ていて、最大の0.025はポジションを外した回だった。

言い換えても、選べと言っても、人間の散らばりには届かない

発注文を別の言い回しに書き直した10回は、点推定が1.3014から1.3360、対数の標準偏差が0.0096で、人間の3.8%だった。「複数の解析が成り立つ。自分で最善を選び、なぜ他を採らなかったか書け」と言った10回も、1.3014から1.3360、0.0082で人間の3.2%である。問いだけの1.4%と比べると散らばりは2倍余りに増えたが、増えた分はすべて共変量の選び方の違いで、最大の1.3360は二つの条件ともリーグの国とポジションに審判の国を足した回だった。モデルの族と解析の単位は20回とも変わらなかった。人間の散らばりには遠く届かない。判断を促した条件では、標準誤差のまとめ方がむしろ一つに寄り、10回中9回が選手と審判の両方でまとめた。

モデルを変えると、揺れる場所が変わる

同じ「問いだけ」の発注文を Sonnet 5 に渡すと、構造から違うものが出た。10回のうち8回は組ではなく選手を単位にした。6回は1,585人全員、2回はさらに行を絞った1,419人と1,564人である。組を単位にしたのは2回だけだった。モデルの族も分かれ、6回が負の二項回帰、4回が Poisson 回帰である。頑健標準誤差を使わなかった回が7ある。点推定は1.2405から1.3832で、最大と最小の比は1.115倍、対数の標準偏差は0.0418で人間の16.4%だった。

つまり、同じ発注文を繰り返したときの散らばりは小さく、モデルを取り替えたときの散らばりはその11倍ある。それでも人間29チームの幅(3.30倍)には届かない。

結論は80回とも同じ向きになった

80回すべてが正の効果を報告し、80回すべてで95%区間の下端が1を上回った。人間29チームでは20チーム(69%)である。効果量はというと、80回すべてが人間29チームの幅の内側に入り、Fable 5.1 の中央値1.302は人間の中央値1.31のすぐ隣にある。一つの解析としては人間の真ん中を当てているが、9チームぶんの「有意でない」は一度も出ない。

名前を変えても、片方のモデルは出典を見破った

ファイル名を変えて渡したにもかかわらず、Sonnet 5 は「問いだけ」の10回のうち6回で、書いたスクリプトの冒頭に「Silberzahn ら」「Uhlmann」「many analysts の赤カードのデータ」と名指しした。Fable 5.1 は60回のどこにも出典を書かず、Sonnet 5 も方法を渡した10回では書かなかった。変数の並びと行数で分かる程度に、このデータは知られている。

ただし、見破ったことが選択を決めたようには見えない。Sonnet 5 の10回のうち、解析の単位を選手にしたのは名指しした6回のうち5回、名指ししなかった4回のうち3回である。負の二項回帰を選んだのは名指しした側で4回、しなかった側で2回だった。10回では分けて論じられない。それでも、報告された値が公開されている範囲に引き寄せられている可能性は残る。

再実行と環境

同じ環境で80本をもう一度走らせると、80本とも result.json を1文字違わず作り直した。同じ機械、同じ版、同じ設定なら、生成されたコードは何度走らせても同じ数字を出す。

次に、行列計算のスレッド数を1にし、辞書のハッシュ種を別の値にして走らせた。一致したのは80本中48本で、残る32本は推定値や区間の端が最後の桁で動いた。動いた幅は、Fable 5.1 の31本では最大でも100兆分の3、Sonnet 5 で負の二項回帰を使った1本でも1,000億分の1.1だった。方法を渡した30本は1本も動かなかった。動いたのは共変量を入れた条件だけで、問いだけの Fable 5.1 が16本、言い換えが7本、選べと言うが8本、Sonnet 5 が1本だった。回ごとに見ても、動いた32本はすべて共変量を入れた回で、共変量の無い34本は1本も動いていない。ただし共変量を入れても動かなかった回が14本ある。スレッド数とハッシュ種を同時に変えていたので、条件の違う4本で片方ずつ変えて走らせ直した。4本ともスレッド数だけを変えると、両方を変えたときと1ビットまで同じ値に動き、ハッシュ種だけを変えても報告値から1ビットも動かなかった。動かしているのはスレッド数で、行列計算を並行して進める数が変わると足し合わせる順序が変わり、最後の桁が揺れる。

ライブラリの版を替えると、数字が動く場所がはっきり分かれた。statsmodels を0.15.0から0.14.6に替えた環境で80本を走らせると、80本とも止まらずに終わり、73本が result.json を1文字違わず作り直した。主な数字(推定値・区間の両端・p値)が動いたのは6本で、6本とも主モデルが負の二項回帰だった。Poisson 回帰を主モデルにした73本は、版を替えても1ビットも動かない。残る1本は主モデルが Poisson 回帰で主な数字は同じだったが、感度分析として足した負の二項回帰の値だけが動いた。動いた幅は最大でも推定値の小数第12位(差は1兆分の3)で、結論に届く大きさではない。

負の二項回帰は分散の大きさを表す値を反復計算で推定するので、その打ち切りの細部が版で変わると最後の桁が揺れる。Poisson 回帰にはその値が無い。数字がどこまで動くかは、生成したAIの側ではなく、選ばれた推定量の側で決まる。

乱数と依存関係

80回のどれも乱数を使わなかった。種を置いた回が0、乱数を必要とする手続き(ブートストラップ、並べ替え、事後分布の標本)を使った回も0である。人間29チームでは4チームがベイズの手法を使っており、そこでは種が結果を左右する。乱数の再現性は、AIの側では「問題が発生しなかった」というかたちで守られている。

包を追加で入れた回も0である。80回とも pandas、numpy、statsmodels を使い、臨界値のために scipy を足した回が18あった。いっぽう、使った包の版を書き残した回は80回中4回しかない。どの回も「追加では入れていない」とは書くが、いま動いている版がいくつかは、ほとんど書かない。

書き添えの文に、検算できる誤りがある

80通の書き添えから、データかその回自身の出力と突き合わせれば白黒がつく主張を拾い、1件ずつ文脈を読んで判定した。はじめは正規表現で機械的に数えたが、「124,621件を残し21,407件を外した」を逆向きに読むなどの誤検出が3種類出たので、公開する数は目で確かめたものだけにした。誤りと言い切れるものは12件、11回にあり、12件とも Fable 5.1 の回だった。

主張書いた回誤り何が違うか
解析に残る審判の数1655回が3,147と書いた。これは全データの審判数で、解析に残るのは2,978
「ファイルにUTF-8でない文字がある」33UTF-8として欠けなく読める
「素の率は肌の色とともに単調に上がる」844回は、その回が印字した表で3番目の区分が2番目より低い

一番示唆に富むのは「単調に上がる」である。8回が同じ文を書いたが、その回が画面に出した5区分の率は二通りあった。2人の評価が1段ずれた選手を、np.round のように偶数の側へ丸めた回では、率は3.765、4.437、4.661、4.808、5.054と本当に単調に上がる。pd.cut や np.floor で下へ丸めた回では、3.765、4.527、4.388、4.873、5.059となり、3番目で下がる。前者の4回も後者の4回も、同じ「単調に上がる」を書いた。表を出した回を分母にすると、単調な表を出した5回のうち4回、単調でない表を出した7回のうち4回がこの文を書いている。表が単調でなくても、半分を超える回が同じ文を書いた。結論の向き(濃いほど赤カードが多い)はどちらの丸め方でも変わらないが、根拠として書いた事実は半分の回で表と食い違う。

審判の数の誤りは、全データの審判数3,147をそのまま書いたものである。16回が解析に残る審判の数に触れ、11回は正しく2,978と書き、5回が3,147と書いた。5回とも「小標本の補正は無視できる」という文脈で使っていて、結論には効かない。「UTF-8でない」は、そう書いた3回がどれも latin-1 か置換で読み、「解析する変数には影響しない」と正しく添えていた。読み方の判断は無害で、理由の説明が事実と違う。

誤りとは数えなかったが、目に留まったものが一つある。写真の無い選手の数を書いた13回のうち、7回は468人と書き、6回は467人と書いた。データの実数は468人である。いっぽう、渡した説明書には「2,053人中1,586人の写真があった」とあり、そこから引くと467人になる。467と書いた6回は、データを数えずに説明書の数から引いた値を書いたと読める。説明書そのものが実データと1人ずれていて、その差がそのまま文に移っている。

費用と手数

80回で 48 ドルかかった。1回あたりの中央は、所要 85 秒、道具の呼び出しが 9 回である。方法を渡した条件がいちばん速く安く(Fable 5.1 で中央58秒)、判断を促した条件がいちばん遅い(中央127秒)。

考察

この測定でいちばんはっきりしたのは、コードの一致と数字の一致は別のことだという点である。80本のプログラムは一つも同じでなく、行数は3倍の幅がある。それでも方法を文で決めれば、30本が倍精度の最後の桁まで同じ値を出す。推定量が決まっていれば、それを書く手つきは結果に効かない。逆に言えば、コードの差分を見て「違う解析だ」と判断するのは当たらない。

Auspurg と Brüderl が人間について言ったこと、つまり散らばりの主因は問いの曖昧さであってやり方の自由度ではないという主張は、AIについても同じ向きに出た。ただし程度が違う。方法を決めれば人間の側でも幅は狭まるが、AIではゼロになる。決めなければ人間は3.30倍に広がるが、同じモデルを繰り返したAIは1.02倍にしか広がらない。曖昧な問いを渡しても、モデルは毎回同じ推定量を選んでしまう。

その「同じ推定量」が当たっていたかというと、点推定は人間の中央値の隣に落ちた。しかし80回すべてが有意と結論しており、人間の31%が到達した「有意でない」という結論は一度も出ない。散らばりが小さいことは、正しさの保証ではなく、不確かさが見えなくなることを意味する。一つの解析を一度だけ走らせて出た区間は、推定量の選び方の不確かさを含んでいない。同じモデルで繰り返しても、その不確かさは見えてこない。

見えるようにするには、繰り返しの軸を変えるしかない。モデルを取り替えると散らばりは11倍になり、解析の単位そのものが変わった。Bertran らが人格を入れ替えて分布が動くことを示したのと同じ構図で、散らばりは繰り返しからではなく条件の入れ替えから出てくる。多世界的な報告をするなら、同じ発注文を何度も回すのではなく、モデルと発注文を変えて回す必要がある。

環境を揺らしたときの動き方も、同じ筋で説明がつく。スレッド数で最後の桁が動いたのは、共変量を入れて行列の列が増えた回だけだった。ライブラリの版で動いた数字は、7本ともすべて負の二項回帰の当てはめから出ていて、Poisson 回帰で出した主な数字は1本も動かなかった。共変量を持たない Poisson 回帰、つまり方法を渡した条件の30本は、三つのどの揺らし方でも1ビットも動かなかった。環境に対して頑健かどうかを決めていたのは、コードを書いたAIの側ではなく、選ばれた推定量と行列の形の側である。そしてどの動きも100億分の1に届かず、結論にも区間にも影響しない。生成されたコードの再現性を脅かしているのは計算機の細部ではなく、推定量の選び方のほうである。

p値のほうは別の話である。共変量も点推定も同じ16回の中で、p値は7.9倍動いた。動かしていたのは頑健標準誤差をまとめる単位で、選手でまとめるか審判でまとめるかの選択である。このデータでは選手も審判も何十回も現れるので、どちらか一方でまとめるか両方でまとめるかは分析者の判断に委ねられ、20回のうち両方でまとめたのは4回だった。方法を渡す条件ではこれを文で指定したので、揺れは消えた。つまり、仕様書に書くべきなのは推論の手続きまでであって、モデル式だけでは足りない。

最後に、書き添えの文である。数値の結果は繰り返しても1ビットも動かないのに、その結果を説明する文には、データと突き合わせれば誤りと言い切れるものが12件あった。中でも「単調に上がる」は、単調でない表を出した7回のうち4回が書いた。12回しか無いので、表の中身が文を左右しないとまでは言えない。それでも、自分が印字した表と食い違う文が半分を超える回で出てくるのは、要約が表を読んで書かれたのではなく、この種の解析でそう書くのが自然だから書かれている可能性を示している。生成された解析を受け取る側にとっては、コードと数字よりも、書き添えの文のほうが検算を要する。

限界

  • データは一つで、問いも一つである。赤カードのデータは広く知られていて、実際に Sonnet 5 は10回のうち6回で出典を名指しした。記憶の影響は否定できない。Fable 5.1 が60回とも出典に触れなかったこと、見破った回と見破らなかった回で選択が分かれなかったこと、方法を渡した条件の値がこちらの独立実装と一致したことの三つしか根拠が無い。よく知られていないデータで同じ測定をやり直す必要がある。
  • モデルは二つ、発注文は四つで、人格は入れ替えていない。Bertran らが示した操縦のしやすさは、ここでは測っていない。
  • 統計処理の符号化は、こちらが書いた正規表現による。主モデルは result.json の文を優先して判定しており、感度分析として走らせた別のモデルは数えていない。
  • 書き添えの検算は、データかその回の出力と突き合わせれば白黒がつく3種類の主張に絞り、1件ずつ読んで判定した。80通の文に出てくる数字の一部でしかなく、残りの主張が正しいかどうかは分からない。誤りの率ではなく、誤りが存在することの確認である。
  • 版の比較は statsmodels の0.15.0と0.14.6の二つだけで、numpy と scipy は同じ版、OSも同じ Windows である。行列計算のライブラリが別物になる環境(別のOSや別のCPU)で同じ数字が出るかは測っていない。
  • 人間29チームとの比較は効果量の単位を揃えたものを使ったが、元の29チームは推定したい量そのものが違っていた(Auspurg らの指摘)。散らばりの比は、揃った物差しでの比ではなく、公開されている数字での比である。

参考文献

  1. R. Silberzahn, E. L. Uhlmann, D. P. Martin, et al. (2018). Many Analysts, One Data Set: Making Transparent How Variations in Analytic Choices Affect Results. Advances in Methods and Practices in Psychological Science 1(3), 337-356.
  2. K. Auspurg and J. Brüderl (2021). Has the Credibility of the Social Sciences Been Credibly Destroyed? Reanalyzing the "Many Analysts, One Data Set" Project. Socius 7.
  3. N. Breznau, E. M. Rinke, A. Wuttke, et al. (2022). Observing many researchers using the same data and hypothesis reveals a hidden universe of uncertainty. Proceedings of the National Academy of Sciences 119(44), e2203150119.
  4. R. Botvinik-Nezer, F. Holzmeister, C. F. Camerer, et al. (2020). Variability in the analysis of a single neuroimaging dataset by many teams. Nature 582(7810), 84-88.
  5. A. J. Menkveld, A. Dreber, F. Holzmeister, et al. (2024). Nonstandard Errors. The Journal of Finance 79(3), 2339-2390.
  6. M. Bertran, R. Fogliato, and Z. S. Wu (2026). Many AI analysts, one dataset: Navigating the agentic data science multiverse. Proceedings of the National Academy of Sciences 123(29). arXiv:2602.18710
  7. K. Gu, R. Shang, R. Jiang, et al. (2024). BLADE: Benchmarking Language Model Agents for Data-Driven Science. Findings of the Association for Computational Linguistics: EMNLP 2024. arXiv:2408.09667
  8. Q. Zeng, C. Jin, X. Wang, Y. Zheng, and Q. Li (2025). AIRepr: An Analyst-Inspector Framework for Evaluating Reproducibility of LLMs in Data Science. arXiv:2502.16395
  9. M. Alizadeh, M. Mosleh, F. Gilardi, A. Kasirzadeh, and J. A. Tucker (2026). AI Coding Agents Can Reproduce Social Science Findings. arXiv:2606.11447
  10. Z. S. Siegel, S. Kapoor, N. Nadgir, B. Stroebl, and A. Narayanan (2024). CORE-Bench: Fostering the Credibility of Published Research Through a Computational Reproducibility Agent Benchmark. arXiv:2409.11363
  11. B. Atil, S. Aykent, A. Chittams, et al. (2024). Non-Determinism of "Deterministic" LLM Settings. arXiv:2408.04667
  12. Z. T. Rewolinski, A. V. Zane, H. Huang, C. Singh, C. Wang, J. Gao, and B. Yu (2026). Sanity Checks for Agentic Data Science. arXiv:2604.11003
  13. Y. Zhou, L. Y. Choi, J. Wen, and W. Ye (2026). Accuracy, Stability, and Repeated-Run Reliability of Large Language Models on Deterministic Programming Tasks. arXiv:2606.00920

資料