反証と反例|研究の問い・新規性・検証

このページはプロモーション(広告)を含みます。

研究の問い・新規性・検証(中級・読む30分+演習35分)

この授業のゴール

仕事でどう使うか

主張がどんな結果なら誤りだと分かるかを先に決めておくと、結果に振り回されずに判断できます。また、主張が成り立たない例(反例)を自分から探すことで、主張の範囲を正確に描けます。

路線 この授業の使いどころ
DS(データサイエンティスト) 分析計画書に「この結果なら施策は効果なしと判断する」を書いておき、結果が出た後に基準を動かさない
ML(機械学習エンジニア) 新モデルが劣化する条件(データの種類・期間・利用者層)を意図的に探し、リリース判断の資料(失敗条件の一覧)にする
DX(DX推進・AI企画) PoCの中止条件を事前に関係者と合意し、「もう少し調整すれば」と続けてしまう状態を防ぐ
RS(研究者) 研究計画書に反証条件を書き、論文の「限界」の節で反例と失敗条件を報告する。査読では、反例を隠した主張は最も厳しく指摘される

この授業では、森さんの「類似商品の情報を混ぜると誤差が減る」という主張を、反例に照らして点検します。

前提

次の言葉を使います。不安があれば先に戻ってください。

この授業の商品データ・実験結果はすべて架空です。

身近な状況:1つの失敗例で、主張は崩れるか

森さんは研究会で、次のように発表しました。

類似商品の情報を混ぜる提案法は、新商品の予測誤差を減らす。

すると、みなと屋の担当者が手を挙げました。「新Cの冷凍ちまきでは、提案法のほうが誤差が大きくなりましたよ。似た商品として冷凍しゅうまいを使ったけど、売れ方が全然違ったので。」

森さんの評価データ(8品目、すべて架空)を見てみます。類似度は、商品説明や価格帯から計算した「似ている度合い」で、0(まったく似ていない)〜1(ほぼ同じ)の値です。

商品 類似度 履歴(週) 基準法MAE(個) 提案法MAE(個) 相対削減率(%)
A 0.90 2 10.0 8.0 20.0
B 0.80 3 9.0 7.9 12.2
C 0.30 1 8.0 9.6 −20.0
D 0.70 4 7.5 7.0 6.7
E 0.20 2 9.5 10.4 −9.5
F 0.85 1 11.0 8.8 20.0
G 0.60 3 8.0 7.6 5.0
H 0.50 4 7.0 7.1 −1.4

確かに、C・E・H の3品目では提案法の誤差が大きくなっています(相対削減率がマイナス)。8品目の平均は約4.1%です。

この結果で、森さんの主張は否定されたのでしょうか。答えは、主張がどんな形だったかによります。「すべての新商品で減らす」なら、Cの1品目だけで否定されます。「平均で減らす」なら、平均4.1%は正なので否定されません。しかし、「平均で10%以上減らす」なら否定されます。発表の文は、どれとも読めてしまう形でした。

直感的な説明:白い白鳥を何羽見ても、黒い1羽で崩れる

よく使われるたとえがあります。「白鳥はすべて白い」という主張は、白い白鳥を1000羽見ても証明できません。1001羽目が黒いかもしれないからです。一方、黒い白鳥を1羽見つければ、主張は否定されます。

ここから、2つのことが分かります。

  1. 「すべての〜で成り立つ」という主張は、確かめるより否定するほうが簡単です。だからこそ、主張は否定され得る形で書き、否定する証拠を自分から探します。
  2. 否定され得ない主張(どんな白鳥を見ても崩れない主張)は、何も言っていないのと同じです。「白鳥はたいてい白いこともある」は、何を見ても否定できません。

ただし、データの研究では、主張の多くは「すべて」ではなく「平均で」「多くの場合に」という形です。この場合、1つの反例だけでは主張は崩れません。代わりに、事前に決めた判断基準(問いと仮説)を満たさなかったときに否定されます。

注意:「平均の主張なら反例を気にしなくてよい」わけではありません。反例は、主張が成り立たない条件を教えてくれます。Cのちまきが失敗した理由(類似度が低い)は、主張の範囲を正確にするための重要な手がかりです。

正確な定義:反証可能性・反証条件・反例

主張の形ごとに、反証条件が変わります。

主張の形 例 反証条件 表の8品目での判定
すべて(全称) すべての新商品で提案法の誤差が小さい 提案法の誤差が大きい品目が1つでもある C・E・H があるので否定
平均(基準つき) 提案法の相対削減率の平均は10%以上 平均が10%未満 平均約4.1%なので否定
条件つき 類似度0.6以上の新商品では、相対削減率の平均が10%以上で、悪化する品目はない 類似度0.6以上で、平均10%未満または悪化する品目がある A・B・D・F・G は平均約12.8%、悪化なし…ただしこの条件は結果を見てから作った

3行目に注意してください。類似度0.6以上という条件は、表を見て「うまくいった品目」を囲んだものです。同じデータで「確かめられた」とは言えません。これは新しい仮説であり、別のデータ(新しく発売される商品)で、事前に反証条件を決めて検証する必要があります。

「すべて」の否定:「すべての商品で誤差が小さい」の否定は「すべての商品で誤差が大きい」ではなく、「誤差が大きい商品が少なくとも1つある」です。論理の否定を正しく作ることが、反証条件を書く第一歩です(真偽とAND・OR・NOT)。

検証できない主張の典型:「適切に調整すれば改善する」(どう調整しても失敗したら「不適切だった」と言える)、「本質的に優れている」(何で測るか不明)、「潜在的な効果がある」(観測できない)。これらは反証条件を書けないので、研究の主張としては使えません。

段階付き例題:反例から主張を限定し直す

入力:上の8品目の表と、森さんの最初の主張「提案法は新商品の予測誤差を減らす」。

ステップ1:主張の形を確定する。研究計画書を見直すと、事前の仮説は「履歴4週以下の新商品で、相対削減率の平均が10%以上」でした(問いと仮説)。これが、比べるべき主張です。

ステップ2:反証条件と照合する。8品目はすべて履歴4週以下です。平均は約4.1%で、10%未満。事前の仮説は、このデータでは否定されました。ここで基準を下げたり、品目を外したりしてはいけません。

ステップ3:反例の共通点を調べる。悪化したC・E・Hの類似度は0.30、0.20、0.50で、他の5品目(0.60〜0.90)より低い。これは 理論と実験 の理論(類似商品とのずれ $\Delta$ が大きいほど借りると損)と整合します。

ステップ4:新しい仮説と反証条件を書く。

項目 内容
新しい仮説 類似度0.6以上で履歴4週以下の新商品では、相対削減率の平均が10%以上で、基準法より悪化する品目の割合は10%以下
検証データ 2026年に新しく発売される新商品(今回の8品目は使わない)
反証条件 類似度0.6以上の品目で、平均が10%未満、または悪化する品目が10%を超える
失敗しそうな条件も含める 類似度0.6未満の品目も同時に評価し、悪化が再現するかを確かめる

ステップ5:今回の報告を書く。

「事前の仮説(履歴4週以下で平均10%以上)は、8品目の評価では支持されなかった(平均約4.1%)。悪化した3品目はいずれも類似度0.5以下だった。類似度0.6以上に限ると平均約12.8%だったが、この条件は結果を見て設定したものであり、新しい商品群で検証する。」

意味:反例は失敗ではなく、主張の範囲を描くための情報です。否定された事実をそのまま書き、反例から作った新しい仮説は別のデータで確かめる。この2つを守れば、研究は前に進みます。

操作して理解する:主張の形を変えると、反例の数が変わる

内蔵データ benchmark.csv で、2つの主張を点検します。1つ目は「提案法は毎回基準法を上回る」、2つ目は「データ拡張は毎回正解率を上げる」(proposed と、拡張を外した proposed_no_aug の比較)です。同じ seed どうしを比べ、反例(主張と逆の結果)を数えます。

import pandas as pd
d = pd.read_csv('/data/benchmark.csv')
w = d.pivot_table(index=['dataset', 'seed'], columns='method', values='accuracy')
c1 = w['proposed'] - w['baseline']          # 主張1: 正なら主張どおり
c2 = w['proposed'] - w['proposed_no_aug']   # 主張2: 正なら拡張が効いた
print('主張1の反例:', list(c1[c1 < 0].index))
print('主張2の反例:', list(c2[c2 < 0].index))
print('平均差(データセット別)')
print(pd.DataFrame({'提案-基準': c1, '拡張あり-なし': c2}).groupby('dataset').mean().round(4))

出力の要点:

主張 反例(15回中) 平均差(D1 / D2 / D3)
1. 提案法は毎回基準法を上回る 1回(D1 の seed 0) 0.0136 / 0.0242 / 0.0122
2. データ拡張は毎回正解率を上げる 6回(D1 の seed 0・4、D2 の seed 2・3、D3 の seed 1・2) 0.0047 / 0.0123 / 0.0050

読み方:

試してみましょう:c1 < 0 を c1 < 0.005 に変えると、「0.005以上の差で上回らなかった回」が数えられます(答え:D1 seed 0、D2 なし、D3 の seed 1・2・4 の計4回)。「上回る」の基準をどこに置くかで、反例の数が変わります。だから、基準は結果を見る前に決めます。

発展:補助仮説、分岐の多い分析、数学の反例との違い

予測が外れても、主張そのものが誤りとは限らない:予測は、主張だけでなく、多くの補助仮説(測定が正しい、データに誤りがない、実装にバグがない、など)と組み合わせて導かれます。予測が外れたとき、誤っていたのは主張か補助仮説かを、それだけでは決められません。理論と実験 で、理論の予測と実データの食い違いの原因を、仮定ごとに切り分けたのはこのためです。ただし、毎回「補助仮説が悪かった」と言い逃れると、後付けの救済になります。どの補助仮説をどう確かめるかを、事前に計画しておきます。

分岐の多い分析:データの前処理、外れ値の扱い、評価指標、対象の絞り方などを、結果を見ながら少しずつ変えると、どこかで「効果あり」に見える組み合わせが見つかります。一つひとつの選択は合理的に見えても、全体として都合のよい結果を拾っています。対策は、(1)分析の選択を事前に決めて記録する、(2)試したすべての組み合わせを報告する、(3)探索で見つけた結果は別のデータで確かめる、の3つです。結果を見てから仮説を作り、最初からそう考えていたように書くことは HARKing(Hypothesizing After the Results are Known)と呼ばれ、避けるべき行為とされています。

統計的な反証:平均の主張を否定するとき、「平均が10%未満だった」が偶然のばらつきによるものかもしれません。品目数が少ないと、本当は効果があっても基準を下回ることがあります。必要な品目数の考え方(検出力)は 「検出力と効果量」(有料版) で学びます。

数学の反例との違い:数学の命題「すべての $n$ で成り立つ」は、反例が1つあれば確実に否定され、測定誤差もありません(「反例の構成」(有料版))。データの研究の反例は、測定の誤り(記録ミス、売り切れによる販売数の打ち止め)である可能性もあるので、反例が見つかったら、まずデータが正しいかを確かめます。ただし、確かめた結果データが正しければ、反例として報告します。

よくある失敗

失敗1:反例を「外れ値」として後から除外する

誤った例:8品目の平均が約4.1%で基準10%に届かなかったので、悪化したCを「類似商品の選び方が悪い外れ値」として除外した。残り7品目の平均は

$$\frac{20.0 + 12.2 + 6.7 - 9.5 + 20.0 + 5.0 - 1.4}{7} = \frac{53.0}{7} \approx 7.6\%$$

さらにEも除外して6品目で約10.4%とし、「基準を満たした」と報告した。

なぜ誤りか:除外のルールが、結果を見てから、主張に不利な品目だけに適用されています。これは後付けの救済で、どんな主張でも守れてしまいます。

直し方:除外のルール(例:売り切れが3日以上あった品目は除く)は、結果を見る前に決めます。事前ルールに当てはまらない品目は除外せず、8品目の結果(約4.1%)をそのまま報告します。Cが悪化した理由の分析は、限界と次の仮説として書きます。

失敗2:どんな結果でも否定されない主張を書く

誤った例:「提案法は、類似商品を適切に選べば、新商品の予測精度を向上させる。」

なぜ誤りか:精度が下がった品目があっても「類似商品の選び方が適切でなかった」と言えるので、どんな結果でも主張は守られます。反証条件が書けない主張です。

直し方:「適切に」を、事前に決められる手順に置き換えます。

「類似度(商品説明と価格帯から算出、0〜1)が0.6以上の既存商品を類似商品とする。この規則で選んだ場合、履歴4週以下の新商品で、相対削減率の平均が10%以上になる。」

これなら、平均が10%未満なら否定される、という反証条件が書けます。

失敗3:成功しそうな条件だけで検証する

誤った例:次の検証で、類似度0.8以上の商品だけを選んで評価し、「全品目で改善」と報告する。

なぜ誤りか:失敗しそうな条件(類似度が低い商品)を最初から除くと、反例が見つかる機会がありません。読み手は「どの商品でも効果がある」と受け取ってしまいます。実際に使う場面では、類似度の低い新商品も来ます。

評価した範囲 報告から読み手が受け取る印象 実際
類似度0.8以上だけ どの新商品でも改善する 類似度0.5以下では悪化し得る
類似度0.2〜0.9すべて 類似度が高いと改善、低いと悪化 正確

直し方:失敗しそうな条件を、比較に含めることを計画の段階で決めます。結果は条件ごとに分けて報告します。

失敗4:平均の主張を、1つの反例で否定されたと誤解する

誤った例:事前の主張は「proposed は baseline より正解率の平均が高い」だった。D1の seed 0 で proposed が下回ったのを見て、「主張は否定された」と結論した。

なぜ誤りか:主張は「平均」についてのものです。D1〜D3のどのデータセットでも平均差は正(0.0136、0.0242、0.0122)で、15回中14回で上回っています。1回の反例は「毎回上回る」を否定しますが、「平均が高い」は否定しません。

直し方:主張の形(すべて/平均/条件つき)と反証条件を照らし合わせて判定します。そのうえで、反例は「毎回とは言えない」という限界として報告します。反例を軽視するのも、過大に扱うのも、どちらも誤りです。

まとめ

用語

反証可能性(falsifiability)

主張と矛盾する観測結果があり得ること。反証可能な主張だけが検証で知識を増やせる。

反証条件(falsification condition)

「この結果が出たら主張は誤りと判断する」と、結果を見る前に決めた具体的な条件。

反例(counterexample)

主張の条件を満たすのに、結論が成り立たない例。

後付けの救済(ad hoc rescue)

反例が出た後で、主張を守るためだけに条件や除外ルールを付け足すこと。

HARKing(Hypothesizing After the Results are Known)

結果を見てから仮説を作り、最初からそう考えていたように書くこと。避けるべき行為。

よくある質問

反例が見つかったら、研究は失敗ですか?

失敗ではありません。反例は、主張が成り立たない条件を教えてくれます。反例の共通点を調べることで、主張の範囲が正確になり、新しい仮説が生まれます。隠すことが失敗です。

反証条件は、いつ決めればよいですか?

データを見る前、遅くとも評価用のデータの結果を見る前です。研究計画書や実験記録に日付つきで書いておきます。結果を見てから決めると、無意識のうちに結果に合わせてしまいます。

データの誤りと本物の反例は、どう見分けますか?

まず記録を確かめます。例えば、売り切れで販売数が打ち止めになっていないか、入力ミスがないか。誤りの判定ルール(売り切れが3日以上なら除外、など)は事前に決めておき、すべての品目に同じように適用します。ルールに当てはまらなければ、本物の反例として報告します。

「平均で」の主張と「すべてで」の主張、どちらを書くべきですか?

データで確かめられる形を選びます。データの研究では、ばらつきがあるので「すべてで」は反例で崩れやすく、「平均で◯%以上」と「悪化する割合は◯%以下」を組み合わせるのが実用的です。後者を入れると、平均が良くても一部で大きく悪化する方法を見逃しません。

実務で中止条件(反証条件)を決めるときのコツは?

「どの数値が、いつまでに、どこまで届かなければやめるか」を、関係者と事前に合意して文書に残します。例:「8週間のPoCで、欠品率が2パーセントポイント以上下がらなければ本導入しない」。結果が出てから「もう少し続ければ」となるのを防げます。

反例を探しても見つからなければ、主張は正しいと言えますか?

「調べた範囲では反例が見つからなかった」とだけ言えます。見つからなかった範囲(データ・条件・回数)を明示して書きます。白鳥の例のように、調べていない範囲に反例がある可能性は残ります。

確認問題

問1 「すべての新商品で、提案法の誤差は基準法より小さい」という主張の反証条件として正しいものはどれか。

  1. ① すべての新商品で、提案法の誤差が基準法より大きい
  2. ② 提案法の誤差が基準法より大きい新商品が、少なくとも1つある
  3. ③ 提案法の誤差の平均が基準法より大きい
  4. ④ 提案法の誤差が基準法より小さい新商品が、少なくとも1つある
解答と解説

正解:②

「すべてで成り立つ」の否定は「成り立たない例が少なくとも1つある」です。

問2 次のうち、反証可能な主張はどれか。

  1. ① 提案法は、適切に調整すれば予測を改善する
  2. ② 提案法は、本質的に優れた予測法である
  3. ③ 類似度0.6以上の新商品では、提案法の相対削減率の平均は10%以上である
  4. ④ 提案法には、潜在的な改善効果がある
解答と解説

正解:③

条件・指標・数値基準があり、平均が10%未満なら否定される、という結果が考えられます。

問3 事前の仮説は「相対削減率の平均10%以上」だった。8品目の平均は4.1%で、悪化した品目を除外すると10.4%になった。正しい報告はどれか。

  1. ① 除外後の10.4%を報告し、仮説は支持されたとする
  2. ② 4.1%と10.4%の平均7.3%を報告する
  3. ③ 結果は報告せず、実験をやり直す
  4. ④ 8品目の4.1%を報告し、仮説は支持されなかったとする。悪化の理由は限界と次の仮説として書く
解答と解説

正解:④

結果を見てから不利な品目だけを除くのは後付けの救済です。事前の基準どおりに報告します。

問4 主張「提案法の正解率の平均は基準法より高い」に対し、15回中1回だけ提案法が下回った。最も適切な判断はどれか。

  1. ① 平均の主張は否定されないが、「毎回上回る」とは書けないので、反例を限界として報告する
  2. ② 主張は否定された
  3. ③ 反例の1回はデータの誤りなので削除する
  4. ④ 反例があるので、提案法は基準法より劣る
解答と解説

正解:①

平均の主張は1つの反例では否定されません。ただし反例は「毎回とは言えない」という限界を示すので、報告します。

問5 検証の設計で「失敗しそうな条件を比較に含める」理由として、最も適切なものはどれか。

  1. ① 結果の平均を下げて、控えめな主張にするため
  2. ② 主張が成り立たない条件を見つけ、主張の範囲を正確に描くため
  3. ③ 査読者を驚かせるため
  4. ④ 実験の数を増やせば必ず有意になるため
解答と解説

正解:②

成功しそうな条件だけで検証すると、反例を見つける機会がなく、範囲を広く誤解されます。

問6 類似度0.6以上の品目だけで平均12.8%、悪化なし、という結果が、8品目の表を見てから「類似度0.6以上」と区切って得られた。この結果の扱いとして正しいものはどれか。

  1. ① 類似度0.6以上で効果があることが確かめられた
  2. ② 意味のない結果なので捨てる
  3. ③ 新しい仮説であり、別のデータで事前に反証条件を決めて検証する必要がある
  4. ④ 類似度の閾値を0.7、0.8と変えて、最も良い結果を報告する
解答と解説

正解:③

結果を見てから作った条件は、同じデータでは確かめられません。探索的な発見として、新しいデータで検証します。

次に学ぶこと

次の 研究計画の骨格 では、ここまでの問い・仮説・新規性・理論と実験・反証条件を、1枚の研究計画の骨格にまとめます。

関連:数学の命題の反例の作り方は 「反例の構成」(有料版)、必要なデータ量(検出力)は 「検出力と効果量」(有料版)、全試行を記録する実験台帳は 「実験台帳と追跡」(有料版) で扱います。

キャリア学習:データサイエンティスト・機械学習エンジニア・DX推進・研究者を目指す人の学習アプリ。164モジュール・984授業を、ブラウザで動くSQLとPythonの演習で。基礎と各分野の最初のモジュールは無料。全部は2,980円の買い切り。

アプリを無料で開く有料版と無料版の違い