こんにちは、数強塾代表の藤原進之介です。この記事は参考書『藤原進之介の最強120講義』の第61講「乱数と確率モデル・モンテカルロ法」のWeb版です。共通テスト「情報Ⅰ」での重要度はA(頻出。得点差がつく)、情報Ⅱでの接続先は(3)情報とデータサイエンスです。
「モンテカルロ法で円周率を求める」という話は、多くの参考書に載っています。しかしなぜ公式がある円周率を、わざわざランダムに点を打って求めるのかを説明しているものは驚くほど少ない。ここを飛ばすと、モンテカルロ法は「わざわざ不正確にする不思議な方法」にしか見えません。
この講では、その理由を原理から説明し、さらに誤差が 1/√n でしか縮まないことを私の手元で実際に走らせた数値で確かめます。すべてシードを固定してあるので、あなたが同じコードを走らせれば同じ数字が出ます。
1. この講の問い
円周率には公式があるのに、なぜわざわざランダムに点を打って求めるのか。
2. 結論
モンテカルロ法の価値は精度ではなく汎用性です。「面積を求める」を「当たりの割合を数える」に言い換えてしまえば、判定の式を書き換えるだけで、積分できない図形にも同じ手続きが通ります。その代償が収束の遅さで、誤差は 1/√n でしか縮まない。n を4倍にして誤差がやっと半分、10倍の精度には100倍の試行が要ります。そしてコンピュータの乱数は擬似乱数なので、シードを固定すれば毎回同じ列が出る。これは欠点ではなく、他人が同じ実験を再現できるという科学上の必要条件です。
3. なぜそうなるのか
3-1. 確定モデルに乱数を1行入れると、何が壊れるのか
確定モデルの世界には、たった一つの約束がありました。同じ入力を入れたら、必ず同じ結果が返る。 複利計算でも放物運動でも、式に数値を入れれば答えは1つに決まります。だから「1回計算すれば終わり」でした。
ここに乱数を1行入れた瞬間、その約束が壊れます。同じプログラムを2回走らせて、違う答えが出る。
壊れたのは答えの一意性だけではありません。「答え」という概念そのものが壊れています。確定モデルの出力は答えでしたが、確率モデルの出力は1回分の標本にすぎない。だから確率モデルでは、1回の実行結果を見て何かを言ってはいけないのです。たくさん走らせて、その散らばり方を見るしかない。
このことが、本講の全部を支配します。誤差の話も、試行回数の話も、シードの話も、すべて「1回の結果には意味がない」という一点から出てきます。モデルの分類そのものについてはモデル化の分類(静的/動的・確定/確率)に書きました。
3-2. 教材が定義する「乱数」と「擬似乱数」
文部科学省の「情報Ⅰ」教員研修用教材 第3章は、乱数をこう定義しています。
ある一定の範囲内において,すべての数が同じ確率で現れるような数のことを乱数という。コンピュータはその特質上計算で値を生成するので計算による擬似的な乱数しか生成できない。これを擬似乱数(以後「乱数」と表現する)という。
文部科学省「高等学校情報科『情報Ⅰ』教員研修用教材」第3章 コンピュータとプログラミング(令和2年)
読むべきは2文目です。コンピュータは決定的な計算機械なので、原理的に本物の乱数を作れない。 作れるのは「乱数らしく見える数列」だけで、それが擬似乱数です。教材はこの区別をした直後に「以後『乱数』と表現する」と宣言して、話を先に進めてしまいます。この括弧書きの中に、本講の後半で扱う再現性の論点が丸ごと入っています。
3-3. なぜ数え上げられる問題に、わざわざ乱数を使うのか
ここが本講の核心です。同じ教材は、モンテカルロ法をこう説明しています。
確率モデルを使ったシミュレーション手法に,モンテカルロ法がある。モンテカルロ法の特徴は対象のモデルに乱数を大量に生成して入力し,近似解を得ようとする手法である。
同上(第3章 学習16「確定モデルと確率モデル」の「確率モデルのシミュレーション」の節)
円周率なら公式があります。面積なら積分があります。それなのになぜ点を打つのか。
答えは、モンテカルロ法が「面積」を「確率」に言い換えているからです。
1辺1の正方形の中に、一様乱数で点を打ちます。「一様」とは、正方形のどこに落ちる見込みも等しいという意味ですから、ある領域Aに点が落ちる確率は
P(A) = (Aの面積)÷(正方形の面積) = Aの面積
になります。確率と面積が同じものになりました。 ならば逆に、面積を知りたければ確率を測ればよい。確率を測るとは、たくさん打って当たった割合を数えることです。
この言い換えの何がありがたいのか。プログラムのうち、図形に依存する部分が「判定式1行」だけになることです。
if x**2 + y**2 < 1.0: # 単位円のとき
if y < x**3 and x > 0.3: # 三次曲線と直線で囲まれた領域のとき
片方をもう片方に書き換えても、他の行は1文字も変わりません。積分の計算のほうは根本から変わってしまうのに、モンテカルロ法の手続きは変わらない。だから次のような場面で、モンテカルロ法だけが生き残ります。
- 境界が式で書けない(実測データで与えられた輪郭、複雑な部品の形)
- 積分が解析的に解けない(原始関数が初等関数で書けない)
- 次元が高い(10次元の領域の体積を格子で刻んで数えようとすると、刻み数の10乗になって破綻する)
- 条件が「かつ」「または」で何重にも重なっている(判定式に and と or を足すだけで済む)
つまりモンテカルロ法が売っているのは精度ではなく、手続きの汎用性です。「どんな形にも同じコードが通る」ことにお金を払い、その代わりに「答えが1回ごとにぶれる」ことと「精度がなかなか上がらない」ことを買っている。円周率で練習するのは、答えを知っているから方法の正しさを確かめられるからであって、円周率を求めるのに適した方法だからではありません。 ここを取り違えると、モンテカルロ法は最後まで意味の分からない手品に見え続けます。
3-4. なぜ試行回数を増やすと精度が上がり、なぜ4倍にしないと誤差が半分にならないのか
n 個の点のうち円に入った個数を X とします。1個の点が円に入るかどうかは、当たる確率が の「当たり外れ1回」です。n 回はそれぞれ独立なので、X は二項分布に従います。
なぜ分散は n に比例するのか。 独立な確率変数の和では分散が足し算になるからです。1回分の分散 が n 個足されて になる。ここで大事なのは、足し算されるのは分散であって標準偏差ではないということ。標準偏差は で、 に比例してしか増えません。プラスにずれた回とマイナスにずれた回が打ち消し合うので、ずれの合計は n 倍にはならないのです。
私たちが見るのは推定値 です。定数倍と割り算をすると標準偏差は素直に変換されるので、
分子は n をまったく含まない定数であることに注目してください。 を入れると
したがって、誤差の目安(標準偏差)は です。これが 1/√n の正体で、n が分母の平方根の中にしか入らないことがすべてです。だから、
- n を4倍にすると が2倍になり、誤差の目安は半分
- n を100倍にすると誤差の目安は10分の1(有効数字が1桁増える)
この収穫逓減がモンテカルロ法の本質的な弱点です。 他の数値計算法、たとえば台形公式やシンプソン法は、刻みを半分にすれば誤差が4分の1や16分の1になります。それに比べるとモンテカルロ法は絶望的に遅い。円周率を小数第3位まで信用したければ、標準偏差を 0.0005 以下にする必要があり、
つまり約1,080万回が要ります。1,080万回打って、やっと小数第3位です。
それでもモンテカルロ法が使われるのは、この 1/√n という縮み方が次元によらないからです。台形公式は次元が上がるたびに必要な点数が指数的に増えますが、モンテカルロ法の式には次元がどこにも出てきません。低次元では負けるが、高次元では逆転する。汎用性を買った代金が 1/√n だと覚えるとよいでしょう。
3-5. 擬似乱数は本当の乱数ではない。それは欠点ではなく利点である
擬似乱数は、ある初期値(シード/乱数の種)から決められた計算を繰り返して作られます。だから次の2つが必ず成り立ちます。
- シードが同じなら、出てくる列は完全に同じ
- 有限の内部状態しか持てないので、いつかは同じ状態に戻る(周期がある)
1つ目は「乱数のくせに毎回同じとは何事か」と思われがちですが、逆です。科学は、他人が同じ手続きで同じ結果に到達できて初めて検証できます。 シードを固定しないシミュレーションは、著者本人ですら二度と同じ結果を出せない。それは実験ではなく思い出話です。
本書が「読者が自分で確かめられる」を掲げている以上、この講の数値は全部シードを固定してあります。あなたが同じコードを同じシードで走らせれば、この記事と1桁も違わない数字が出ます。擬似乱数がアルゴリズムで作られているからこそ、それができる。
ただしシードの固定には、必ずセットで理解しなければならない裏側があります。シードを固定した1回の実行の結果を根拠に「n を増やしたら誤差が縮んだ」と言ってはいけません。 その1回はたまたま良かっただけかもしれないからです。次の節で、実際にそうなる例をお見せします。
なお、この「シード」「乱数の種」という語は、学習指導要領解説 情報編にも、情報Ⅰ教員研修用教材にも、情報Ⅱ教員研修用教材にも、一度も出てきません(3つの資料の全文をテキスト化して検索し0件。2026年8月3日確認)。再現性という論点は、制度側の文書には書かれていない空白地帯です。
4. 手で確かめる
以下の数値はすべて、私の手元の Python 3 でシードを 2026 に固定して実際に実行し、出力を確認したものです。
4-1. まずサイコロで、平均が3.5に寄っていくのを見る
import random
random.seed(2026)
d = [random.randint(1, 6) for _ in range(12)]
print(d, sum(d), sum(d)/12)
# [1, 3, 5, 5, 6, 1, 2, 5, 5, 5, 4, 5] 47 3.9166666666666665
12回だけなら手で足せます。1+3+5+5+6+1+2+5+5+5+4+5 = 47、47÷12 = 3.9167。理論値3.5からは0.42もずれています。5が5回も出ていて、明らかに偏っている。これが「1回の結果に意味がない」という状態です。
回数を増やすとどうなるか(同じシードで、回数だけ変えました)。
| 回数 n | 目の合計 | 平均 | 3.5との差 |
|---|---|---|---|
| 10 | 38 | 3.800000 | 0.300000 |
| 100 | 381 | 3.810000 | 0.310000 |
| 1,000 | 3,609 | 3.609000 | 0.109000 |
| 10,000 | 34,689 | 3.468900 | 0.031100 |
| 1,000,000 | 3,496,535 | 3.496535 | 0.003465 |
n=10 と n=100 で誤差がむしろ増えていることに注意してください。単調には縮まりません。それでも桁で見れば、n が100倍になるたびに誤差の桁が1つ落ちています(0.31 → 0.031 → 0.0035)。これが 1/√n です。平均という値そのものの意味は代表値(平均値・中央値・最頻値)で扱いました。
4-2. 円周率をモンテカルロ法で求める
正方形に150点だけ打った様子を図にしました。seed=2026 の最初の150点を、そのまま座標に落としてあります。
図1 1辺1の正方形に一様乱数で150点を打った結果(seed=2026)。赤が四分円の内側、青が外側。
円の中に116個、外に34個。116 ÷ 150 = 0.7733、これを4倍して 3.0933。150点でも小数第1位までは合います。コードは次のとおりです。
import random, math
def mc_pi(n, seed=2026):
random.seed(seed)
inside = 0
for _ in range(n):
x = random.random()
y = random.random()
if x*x + y*y < 1.0:
inside += 1
return 4.0 * inside / n
for n in (100, 10000, 1000000):
est = mc_pi(n)
print(n, est, abs(est - math.pi))
実行結果を表にします。
| 点の数 n | 円内の点 | 推定値 | 誤差 | 理論上の標準偏差 |
|---|---|---|---|---|
| 100 | 77 | 3.080000 | 0.061593 | 0.164218 |
| 10,000 | 7,867 | 3.146800 | 0.005207 | 0.016422 |
| 1,000,000 | 786,651 | 3.146604 | 0.005011 | 0.001642 |
n を100倍にしたのに、誤差がほとんど縮んでいません。 n=10,000 で0.0052、n=1,000,000 でも0.0050。理論上の標準偏差は0.0164→0.0016と10分の1になっているのに、実測の誤差はほぼ同じです。
これは私の書き間違いでも、コードのバグでもありません。seed=2026 という特定のくじを引いたときに、たまたま起きたことです。 理論標準偏差0.001642に対して誤差が0.005011なので、標準偏差の約3.05個分にあたります。起こる確率は0.2%ほど。珍しいけれど、ありえないことではない。
参考書がこういう数字を載せないのは、都合が悪いからです。しかしあなたが seed=2026 で実際に走らせたら、この数字が出ます。 だから隠さずに載せます。そしてこの1行が、この講でいちばん大事なことを教えてくれます。
4-3. だから誤差は「1回」ではなく「散らばり」で測る
n=1,000,000 のまま、シードだけを変えて6通り走らせました。
| シード | 推定値 | 誤差 | 標準偏差の何個分か |
|---|---|---|---|
| 1 | 3.141380 | −0.000213 | −0.13 |
| 7 | 3.141236 | −0.000357 | −0.22 |
| 42 | 3.140592 | −0.001001 | −0.61 |
| 2026 | 3.146604 | +0.005011 | +3.05 |
| 2027 | 3.139104 | −0.002489 | −1.52 |
| 20260803 | 3.142800 | +0.001207 | +0.74 |
6本中5本は誤差0.0025以内に収まっています。2026だけが外れくじだったわけです。同じ n、同じコード、シードが違うだけで誤差が20倍以上違う。 モンテカルロ法の「誤差」とは、この散らばりの幅のことであって、1回の結果のずれのことではありません。散らばりを数で表す考え方はヒストグラムと箱ひげ図の講と同じ発想です。
4-4. 誤差が本当に 1/√n で縮むかを実測する
n を4倍ずつ増やしながら、各 n について独立なシードで500回ずつ走らせ、誤差の二乗平均平方根(RMSE)を求めました。
| 点の数 n | 実測RMSE(500回) | 理論標準偏差 | n を4倍にしたときの縮み率 |
|---|---|---|---|
| 100 | 0.16863 | 0.16422 | — |
| 400 | 0.08279 | 0.08211 | 2.037 |
| 1,600 | 0.04209 | 0.04105 | 1.967 |
| 6,400 | 0.02038 | 0.02053 | 2.065 |
| 25,600 | 0.01039 | 0.01026 | 1.961 |
縮み率がすべて 2.0 前後です。n を4倍にすると誤差が半分という 3-4 の主張が、そのまま数値で出ました。実測RMSEと理論標準偏差 も、小数第3位まで一致しています。式から導いたことと、実際に走らせた結果が合う。これが確かめるということです。
1回の実行では誤差は縮まないことがある(4-2)。しかし多数回の平均で見れば、誤差はきっちり 1/√n で縮む(4-4)。この2つを両方知っていることが、確率モデルを理解しているということです。 片方だけだと、「モンテカルロ法は回数を増やせば必ず正確になる」という誤りか、「モンテカルロ法はあてにならない」という誤りのどちらかに落ちます。
4-5. 再現性を自分の目で確かめる
import random
random.seed(2026); a = [round(random.random(), 6) for _ in range(5)]
random.seed(2026); b = [round(random.random(), 6) for _ in range(5)]
random.seed(2027); c = [round(random.random(), 6) for _ in range(5)]
print(a) # [0.11912, 0.502516, 0.511823, 0.860001, 0.102637]
print(a == b) # True
print(a == c) # False
シードを2026に戻せば、何度でも同じ5個が出ます。2027にすると別の列になります。「同じ乱数列をもう一度呼び出せる」ことが、確率モデルの実験を検証可能にしている。 ちなみにこの5個は 4-2 の図の最初の座標そのもので、1点目が (0.11912, 0.502516)、2点目が (0.511823, 0.860001) です。2点目は 0.5118² + 0.8600² = 1.0015 でわずかに1を超えるので、円の外(青)になっています。図の左上あたりを探してみてください。
5. 共通テストではこう出る(重要度 A)
5-1. まず、共通テストのプログラム表記に「乱数」がある
大学入試センターが公表した「共通テスト用プログラム表記の例示」には、乱数の関数が2か所に出てきます。
- 「7 関数」の値を返す関数の例として
saikoro = 整数(乱数()*6)+1 - 「10 コメント」の説明例として
atai = 乱数()(コメントに「0以上1未満のランダムな小数をataiに代入する」と明記)
例示全体で名前つきで登場する関数は数えるほどしかありません。その中で乱数だけが2か所に顔を出している。出題側が乱数を使う気でいることの、これ以上ない証拠です。
ここで必ず確認しておくべきことが2つあります。
- 代入は
=です。 旧課程「情報関係基礎」で使われた旧DNCLの←ではありません。詳しくは共通テスト用プログラム表記の変数と代入で扱いました。 乱数()が返すのは「0以上1未満の小数」です。 1は含みません。
5-2. 型1:乱数の範囲を変換する手順を追う型
乱数() は0以上1未満しか返さないので、欲しい範囲に自分で直す必要があります。センターの例示にある saikoro = 整数(乱数()*6)+1 を分解すると、乱数が0以上1未満 → *6 で0以上6未満 → 整数() で切り捨てて 0,1,2,3,4,5 → +1 で 1〜6。掛けてから切り捨てて、最後に足すという順序に意味があります。
引っかけどころは境界です。
整数(乱数()*6)だけだと 0〜5 になる(1〜6にならない)整数(乱数()*7)+1だと 1〜7 になる(7が混ざる)- 「1以上6以下の整数」を作るのに
*5としてしまう(1〜5にしかならない)
1以上10以下の整数を等確率で得たい。空欄に入る数は何か。
kazu = 整数(乱数() * [ ]) + 1
答えは 10。乱数()*10 が0以上10未満で、切り捨てて 0〜9、+1 で 1〜10 になります。「10以下だから9」と考えてしまう人が毎年出ます。掛ける数は「欲しい値の個数」と覚えてください。
5-3. 型2:試行回数と精度の関係を問う型
「シミュレーションの回数を増やすとどうなるか」を問う型です。選択肢は次の3つの立場で作られることが多い。
- 回数を増やすほど、結果は理論値に近づく傾向がある → おおむね正しい
- 回数を増やせば、必ず誤差が小さくなる → 誤り(4-2で実際に反例を出しました)
- 回数を増やしても、1回ごとの結果はばらつく → 正しい
「必ず」「常に」「確実に」という語が入った選択肢は、確率モデルの問題ではほぼ誤りだと思ってよい。確率モデルが保証するのは傾向であって、個々の実行ではないからです。また「10倍精度を上げたいなら回数を何倍にするか」という趣旨の問いが出れば、答えは100倍です(1/√n だから)。
5-4. 型3:確定モデルとの違いを問う型
「このモデルは確定モデルか確率モデルか」「同じ入力で同じ結果になるか」を問う型です。判定はひとつ、乱数が入っているかどうか。
注意してほしいのは、シードを固定したからといって確率モデルが確定モデルになるわけではないということ。シードの固定は「実験を再現するための実装上の工夫」であって、モデルの分類とは別の話です。モデルの中に不規則な現象を取り込んでいる以上、それは確率モデルのままです。
5-5. 実際の出題
大学入試センターが公表した試作問題『情報Ⅰ』第2問Bの出題のねらいは、公式資料に次のように書かれています(問題文そのものは大学入試センターの著作物なので引用しません)。
問題の中で示された乱数を発生させる確率モデルのシミュレーションの考え方を理解し,シミュレーションの結果から読み取れる内容や,変数を変化させた場合の結果を考察できるかを問う。
大学入試センター「令和7年度大学入学共通テスト 試作問題『情報』の概要」2022年11月9日公表
各設問のねらいを見ると、(1) 与えられた乱数のデータから状況を読み取る、(2) 条件を変えてそれぞれ100回ずつシミュレーションした結果のグラフから傾向を読み取る、(3) 別の条件での結果を元のグラフと比較する、という3段構えになっています。
ここから読み取るべきことは2つ。第一に、乱数を発生させるプログラムを自分で書かせる出題ではない。与えられたシミュレーション結果を読む力を問うています。第二に、「100回ずつ」という言い方が出題側から出てくる。1回の結果ではなく、繰り返した分布を見せる形が出題の標準形です。本講の 4-3・4-4 でやったことが、そのまま出題の作法になっています。
なお、この試作問題の題材は文化祭の模擬店の待ち状況、つまり待ち行列です。待ち行列そのものの考え方は別の講で扱います。
6. 情報Ⅱではこうなる
6-1. 語数調査:この講のキーワードは、情報Ⅱで「消える」
いつもどおり、(1) 学習指導要領解説 情報編 (2) 情報Ⅰ教員研修用教材(序章から第4章まで全文) (3) 情報Ⅱ教員研修用教材(序章から第5章まで全文)で、語の出現回数を数えました(2026年8月3日、文部科学省が公開しているPDFをテキスト化して機械的に計数)。
| 語 | 解説 情報編 | 情報Ⅰ教材 | 情報Ⅱ教材 |
|---|---|---|---|
| 乱数 | 1 | 59 | 0 |
| 一様 | 0 | 12 | 0 |
| モンテカルロ | 0 | 3 | 0 |
| 確率モデル | 0 | 7 | 0 |
| 無作為 | 0 | 0 | 3 |
| 標本抽出 | 0 | 0 | 5 |
| サンプルサイズ | 0 | 0 | 5 |
| 訓練データ | 6 | 0 | 11 |
| テストデータ | 1 | 0 | 21 |
| バイアス | 4 | 0 | 24 |
| シード(seed) | 0 | 0 | 0 |
これまでの講とは逆向きの結果が出ました。 私がこれまで調べてきた語(統計の「自由度」など)は、情報Ⅰ側でほとんど出ずに情報Ⅱ側で一気に増える形でした。ところが本講の「乱数」は 59回 → 0回 と、情報Ⅱでまるごと消えます。「モンテカルロ」も「一様」も「確率モデル」も、情報Ⅱ教員研修用教材の全文に1回も出てきません。
そして入れ替わるように、情報Ⅰ教材には0回だった語(無作為・標本抽出・サンプルサイズ・訓練データ・テストデータ・バイアス)が、情報Ⅱで一斉に立ち上がります。
これは「情報Ⅱでは乱数を使わなくなった」という意味ではありません。逆です。 情報Ⅰでは乱数がプログラムで呼び出す関数として主役を張っていたのが、情報Ⅱでは乱数が手続きの前提に埋め込まれて、名前を呼ばれなくなったのです。以下の3つが、その埋め込まれ先です。
6-2. 埋め込まれ先①:データの取り方(無作為抽出)
情報Ⅱ教員研修用教材 第3章 学習11「データと関係データベース」は、こう書いています。
母集団全体を調査できないときには有意抽出や無作為抽出を用いる。有意抽出とは母集団の様々なカテゴリから適切な割合を見ながら作為的に標本をとることである。無作為抽出では特定の属性を持ったデータに偏らないようにランダムに選んだ標本を使う。
文部科学省「高等学校情報科『情報Ⅱ』教員研修用教材」第3章 情報とデータサイエンス 前半(令和2年7月)
さらに同じ節はバイアスを扱い、選択バイアスの一種として「標本バイアス(母集団の取り違えなど意識的,無意識的によらず無作為でない抽出)」を定義しています。
情報Ⅰでは乱数は「シミュレーションの中で振るサイコロ」でした。情報Ⅱでは乱数は「現実のデータを偏りなく取るための道具」になります。 使う場所が、プログラムの中から、データを集める段階に移動している。そして偏った取り方をすると分析全体が壊れるので、扱いが「面白い題材」から「守らないと結果が無効になるルール」に格上げされます。
6-3. 埋め込まれ先②:データの分け方(訓練データとテストデータ)
情報Ⅱ教員研修用教材 学習15「分類による予測」は、手書き数字データ42,000件のうち一部だけを使うとして「訓練データとして1,000個,テストデータとして100個のデータを使用する」と書き、先頭1,000件と次の100件に切り分けています。
なぜ分けるのか。 覚えたデータで試験をしたら満点に決まっているからです。だから学習に使うデータと、性能を測るデータを分離する。そしてこの分け方がどの100件をテストに回すかで結果を変えます。だから実務では乱数でシャッフルしてから切る。教材は先頭から順に切っていますが、その裏には「どう切るかは恣意的である」という論点が隠れています。
同じ第3章の「全体を通じた学習活動」には、こうあります。
テストデータを用いて正答率を求めることなどにより評価し,適合不足や過剰適合(過学習)が生じることを体験的に理解できる活動を行う。
同上(第3章 本単元の学習内容)
教材は演習の結果として「88%の正答率であることが分かる」と書いています。この88という数字自体が、どの1,000件を訓練に回したかという偶然の産物です。 情報Ⅰでは「乱数を入れると結果が変わってしまう」ことが観察の対象(題材)でしたが、情報Ⅱでは同じことが評価値に乗ってくる誤差になる。ここが一番大きな段差です。
6-4. 埋め込まれ先③:アルゴリズムの初期値
情報Ⅱ教員研修用教材 学習16「クラスタリングによる分類」の k-means法の手順は、こう始まります。
あらかじめ分割するクラスタ数を決めておき,ランダムに代表点(セントロイド)を決める。
同上(第3章 情報とデータサイエンス 後半、令和2年6月)
そして教材自身が、その直後にこう警告しています。
1)によりランダムに代表点を決めることによって,結果が大きく異なり,適切なクラスタリングとならない場合もある。何回か繰り返して分析をしたり,k-means++法を用いたりすることにより改善することができる。
同上
アルゴリズムの答えが、最初に振った乱数で変わってしまう。 情報Ⅰのモンテカルロ法では「たくさん打てば真の値に寄る」で済みましたが、k-meansでは初期値が悪いとそもそも別の答えに落ち着いてしまう。だから対策は「回数を増やす」ではなく「何回か走らせて比べる」になります。
さらに k-means++ の説明が効いています。教材は「データの中からランダムに一つの代表点を選び,その点からの距離の2乗に比例した確率で残りの代表点を選ぶ」と書きます。情報Ⅰで習った乱数は一様乱数、つまり「どれも同じ確率」でした。情報Ⅱでは一様でない確率で選ぶ乱数が出てきます。乱数が「均等にばらまく道具」から「狙いを込めてばらまく道具」に進化するのです。
6-5. まとめると、情報Ⅰと情報Ⅱの段差はこうなる
| 観点 | 情報Ⅰ | 情報Ⅱ |
|---|---|---|
| 乱数の居場所 | プログラムの中(乱数の関数を呼ぶ) | データの取り方・分け方・アルゴリズムの初期値 |
| 分布 | 一様乱数だけ | 一様でない確率(距離の2乗に比例など) |
| 結果がぶれること | 観察する対象(題材) | 評価値に乗る誤差(管理すべきもの) |
| 対策 | 試行回数を増やす | 標本の取り方を設計する/何回か走らせて比べる/訓練とテストを分ける |
| 語として | 「乱数」が59回出る | 「乱数」は0回。代わりに無作為・標本抽出・訓練データ・テストデータ・バイアス |
情報Ⅰでモンテカルロ法を学ぶ意味は、円周率を求められるようになることではありません。「同じ手続きを何度も繰り返して、結果の分布を見る」という考え方を身につけることです。 その考え方が、情報Ⅱでは名前を変えて、データサイエンスの作法そのものになります。
まとめ
- モンテカルロ法は「面積」を「当たりの割合」に言い換える手法。だから判定式を書き換えるだけで、積分できない図形にも同じコードが通る。売っているのは精度ではなく汎用性である。
- 誤差の標準偏差は 。円周率の場合は 。分子に n が入らないので、誤差は 1/√n でしか縮まない。n を4倍で誤差が半分、10倍の精度に100倍の試行。
- 1回の実行の誤差は運である(seed=2026 では n を100倍にしても誤差がほぼ変わらなかった)。誤差は多数回の散らばりで測る。
- 擬似乱数はアルゴリズムで作られるので、シードを固定すれば同じ列が出る。これは欠点ではなく、実験を他人が再現できるという科学上の必要条件である。ただし「シード」という語は解説にも情報Ⅰ・Ⅱの研修用教材にも1回も出てこない。
- 共通テスト用プログラム表記には乱数の関数が定義されている。返すのは0以上1未満の小数。代入は
=(旧DNCLの←ではない)。 - 「乱数」は情報Ⅰ教材に59回、情報Ⅱ教材に0回。情報Ⅱでは乱数は名前を失い、無作為抽出・訓練/テスト分割・k-meansの初期値という形で手続きに埋め込まれる。
出典(すべて2026年8月3日に取得)
- 文部科学省「高等学校学習指導要領(平成30年告示)解説 情報編」平成30年7月
- 文部科学省「高等学校情報科『情報Ⅰ』教員研修用教材」第1章〜第4章(令和2年。第2章のみ令和2年9月)
- 文部科学省「高等学校情報科『情報Ⅱ』教員研修用教材」第1章〜第5章(令和2年6月・7月)
- 大学入試センター「令和7年度大学入学共通テスト 試作問題『情報』の概要」2022年11月9日公表
本講は参考書『藤原進之介の最強120講義』の一部です。全120講の一覧は情報Ⅰ 最強120講義(総合案内)にまとめてあります。制度の話は2026年8月時点の情報です。
執筆:藤原進之介(数強塾グループ代表)
オンライン数学専門塾「数強塾」代表。累計3,500名以上の中高一貫校生を指導。東進ハイスクール・東進衛星予備校・代々木ゼミナールなど出講実績あり。情報Ⅰの参考書を複数執筆しており、KADOKAWA『ゼロから始める情報I』、Gakken『きめる!共通テスト 情報Ⅰ』などがあります。本記事は参考書『藤原進之介の最強120講義』第61講のWeb版です。
「情報Ⅰ、独学でいけるのか不安」という方へ
数強塾では数学と情報Ⅰの両方に対応したオンライン個別指導を行っています。学習相談は無料、体験授業は3,000円(税込)でお受けしています。
