0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

「相関があるから」と盲信する前に読んでほしい、相関と因果の話

0
Posted at

はじめに

こんにちは、もんすんです。

「行数が多いPRほど、バグが多い。だからPRは小さく分割しよう」

こんなレビューの鉄則みたいなことを我が物顔で語る人がいます。
私もやったことがないとは言い切れません。。

データを見れば確かにそう見えるし、経験的にも納得感がある。
一方、統計学では「相関と因果」に関する考え方が極めて重要視されます。

上記の例においては、**「行数とバグ数に相関がある」という事実を、いつの間にか「差分がバグの原因だ」**という因果にすり替わっているんです。

今回はそんな、現場に転がる「相関と因果の混同」を、回帰分析という切り口で疑ってみます。

回帰分析・相関とは何か(最小限)

厳密な定義は教科書に譲るとして、実務で使う分にはこう捉えておけば十分です。

相関 =「片方の変数が増えると、もう片方も増える(or 減る)傾向がどれくらい強いか」
回帰分析 =「その関係を数式で表して、片方から片方を予測しようとする」

「経験年数が増えるほど見積もり精度が上がる」なら正の相関、「テストカバレッジが上がるほど障害件数が減る」なら負の相関。関係の強さは相関係数(-1〜+1)という数字で表されます。

ここで押さえておきたいのは、相関は「一緒に動く」ことを示すだけで、「片方がもう片方を動かしている」とは一言も言っていないということです。

この一線を越えて解釈した瞬間に、話がおかしくなります。

開発現場のあるある

我々の現場は、実は相関だらけです。

  • コード行数とバグ数 — 行数が多いPRほどバグが多い
  • 経験年数と見積もり精度 — ベテランほど見積もりが当たる
  • テストカバレッジと障害件数 — カバレッジが高いほど障害が少ない
  • コメント量とコードの品質 — コメントが丁寧なコードは品質も高い

どれも「言われてみればそうだよね」と頷けるものばかりです。
そして厄介なことに、実際に相関はあるんです。
データを取れば、それらしい傾向は本当に出てきます。

問題は、この相関を根拠に「じゃあ行数を減らせばバグが減る」「カバレッジを上げれば障害が減る」と、施策の因果に直結させてしまうことです。

落とし穴の正体 ── 交絡因子

相関があるのに因果ではない。
その典型的な理由が交絡因子です。
交絡因子とは、ある原因と結果の間に、見せかけの因果関係を生み出してしまう第三の変数のことです。
AとBの両方に影響を与える「第三の要因C」が裏に隠れているケースです。

「行数とバグ数」で考えてみます。

複雑な機能変更は、当然コード行数も増えるし、バグも埋め込みやすい。
つまり**「変更の複雑さ」という第三の要因が、行数とバグ数の両方を押し上げている**だけかもしれない。
この場合、行数はバグの「原因」ではなく、複雑さの「結果」にすぎません。

だとすると、複雑な変更を無理やり小さいPRに分割しても、総量としての複雑さは減らないので、バグは大して減らないことになります。
行数という見かけの数字だけを削っても、本丸に手をつけていないからです。

「経験年数と見積もり精度」も同じ構図です。

経験年数そのものが精度を上げているのか、それとも 「同じドメインを長く担当している」などの別の要因 が効いているのか。
ドメイン知識が本命なら、経験10年でも初めての領域では見積もりを外す可能性が見えてきます。

実務での落とし所

ここで「じゃあ経験則なんて当てにならない」と結論するのは、行き過ぎです。

相関は、因果を探すための入口としては極めて優秀です。

大事なのは、相関を見つけたときに、そこで思考を止めないことです。

  • 相関を見つけたら、まず「なぜそうなるのか」の因果仮説を立てる
    • 「行数が多いとバグが多い → なぜ? → 複雑だから? レビューが雑になるから?」と一段掘る
  • 交絡因子を疑う
    • 「AとBの両方に効いている第三の要因Cはないか?」を必ず自問する
  • 施策は"原因"に打つ
    • 行数(結果)ではなく複雑さ(原因)を狙う
    • 「分割」ではなく「そもそも仕様を単純化できないか」を考える

経験則を使うこと自体は悪ではありません。危ないのは、相関という「一緒に動く」だけの事実を、「片方がもう片方を動かす」という因果に無自覚に格上げしてしまう瞬間です。

まとめ

  • 相関は「一緒に動く」ことを示すだけで、「片方が原因」とは言っていない
  • 現場の経験則(行数×バグ、経験年数×見積もり精度)の多くは相関どまりで、裏に交絡因子が潜んでいる可能性がある
  • 見かけの数字(行数)を触っても、本当の原因(複雑さ)に打たなければ結果は変わらない
  • 相関を見つけたら思考を止めず、「なぜそうなるか」の因果仮説と交絡因子を疑う一手間を挟む

「相関を因果と勘違いする」のは、人間が結果から原因を後付けしたがる生き物だからで、これは前回のp-hackingやデバッグの話とも根っこは同じです。

統計学は、そういう私たちの都合の良い解釈に、ちゃんと待ったをかけてくれます。

それでは、また。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?