池の水を全部抜かなくても魚が何匹いるか推計する方法がある


NEWS ポストセブン

 池に大量発生する外来種の魚などを捕獲する『池の水ぜんぶ抜く大作戦』(テレビ東京系列)が人気となっているが、わざわざ水を抜かなくても池に何匹の魚が泳いでいるか見積もることはできる。ニッセイ基礎研究所・主任研究員の篠原拓也氏が説く推計方法とは?

 * * *
 確率や統計の分野は、難解な専門用語がたくさん出てきてとっつきにくい。いくつか例を挙げると、「歪度(わいど)・尖度(せんど)」、「帰無仮説」、「多重共線性」、「交絡因子」、「尤度(ゆうど)比」といった感じだ。

 こうした用語を、日常生活で使う人はかなり限られるだろう。一般に、専門用語を使った話は実感が伴わず関心が持たれない。むしろ、確率や統計では具体的な問題をもとに考えてみるほうが興味がわきやすい。例えば、「ある池に、魚が何匹いるのか?」を推計するといったことだ。

 以下では、2つの推計の方法を考えてみよう。

 まず、1つ目の方法。この池から、適当に20匹の魚を釣って、標識となる札をつけて池に戻す。しばらくしてから、30匹の魚を釣ったところ、15匹に標識がついていた。このとき、この池には何匹の魚がいると推計されるだろうか。

 1回目の釣りで、池全体の魚のうち、20匹に標識をつけた。2回目の釣りでは、30匹のうち15匹に標識がついていた。1回目と2回目の釣りで、標識のついている魚の割合は同じと仮定する。すると、「(池全体の魚の数):20匹=30匹:15匹」という、比の等式ができる。これを解いて、池全体の魚の数=40匹となる。つまり、この池には、40匹の魚がいると推計されることになる。

 ただし、この推計にはいくつか前提条件があり、注意が必要だ。まず1つ目に、魚が池全体に均等に分布していること。2つ目に、1回目と2回目の釣りの間の時間が十分にあって、その間に魚が池の中で回遊して混ざり合うこと。3つ目に、そうは言ってもあまり時間があきすぎると、その間に死亡したり誕生したりする魚が出てしまうので、2回の釣りの間隔は適度にとどめること。最後に、過去に同様の推計を実施したために、最初から標識がついているような魚がいないこと、などである。



 この方法は、理論的には申し分ない。しかし、実際にやろうとすると結構大変である。まず、20匹の魚を釣って1匹ずつ標識をつけなくてはならない。そして、しばらく時間を置いた後に、30匹の魚を釣る。合わせて、50匹の魚釣りが必要となる。これを1人でやるためには、相当な釣りの腕前が必要となるだろう。

 そこで、もっと簡単な2つ目の方法。この池から1匹ずつ魚を釣る。釣り上げた魚に標識がついていなければ標識をつけて、池に戻す。そして、釣りを続ける。こうして、キャッチアンドリリースを続けたところ、10回目に初めて標識のついた魚を釣り上げた。このとき、この池には何匹の魚がいると推計されるだろうか。

 この問題は、見かけの単純さによらず、かなり奥が深い。10回目に、初めて標識のついた魚を釣り上げたということは、9回目までは標識のついていない魚を釣ったことになる。つまり、この池には、少なくとも9匹の魚がいることになる。ちょうど9匹だとすると、9回目まで毎回違う魚が釣られて、全部の魚に標識がついた状態で10回目の釣りを迎えたということになる。

 これは、カプセルトイ自動販売機で9種類のアイテムを9回でコンプリートするようなもので、こういうことが起きる確率は0.1%もない。つまり、9匹という推計では少なすぎるのだ。

 一方、仮に、池に1万匹も魚がいたとする。読者から「どんなに大きな池なのか」とツッコミが入るかもしれないが、これはあくまで仮の話である。こう仮定すると、9回目の釣りを終えた段階で、1万匹のうちの9匹にしか標識がついていないことになる。10回目の釣りで、標識のついた魚を釣り上げる可能性はかなり小さいだろう。こういうことが起きる確率を計算してみると、0.1%未満となる。つまり、1万匹という推計では多すぎるのだ。

 9匹と1万匹の間に、もっと確率が高くて妥当な推計の数があるはずだ。それを計算してみよう。

 池の魚の数をn匹とする。1回目に釣り上げた魚が標識なしの確率は、まだ標識のついた魚がいないので当然1。2回目に釣った魚が標識なしの確率は(1-1/n)。3回目は(1-2/n)。……9回目は(1-8/n)。そして10回目に、標識のついた魚が9匹いる状態で、そのうちの1匹を釣り上げる確率は9/n。

 各回の釣りは独立とみられるため、これらを掛け算したものが、「池全体の魚の数をn匹としたときに10回目に初めて標識のついた魚を釣り上げる確率」となる。計算式は、つぎのような感じだ。

1 ×(1-1/n)×(1-2/n)×……×(1-8/n)× 9/n

 この計算式のnにいろいろな値を代入してみたときに、計算結果が最大になるのはnがいくらのときか、というのを考えるのである。ただし、これをまともに電卓で計算しようとすると、階乗や累乗が出てきて、手計算では困難を極める。

 そこで、最大値を求める計算をしやすくするために、この計算式の対数をとり、さらに微分した計算式を考える。そして、nを9から、1ずつ増やして代入してみる。計算結果がプラスからマイナスに転じる箇所をみつけるのだ。そのnで、元の計算式が増加から減少に転じる、つまり計算結果が最大値をとることになる。

 読者の中には、高校生の頃、数学で微分を勉強していて「xがいくつのときに関数f(x)が最大値をとるか」という問題に苦しめられた人(もしくは、いま苦しんでいる高校生)も多いと思うが、アレをやってみるわけだ。

 実際に計算してみると、nの値は、42となる。つまり、この池には、42匹の魚がいると推測される。そして、「池全体の魚の数を42匹としたときに10回目に初めて標識のついた魚を釣り上げる確率」は、約8.5%となる。ちなみに、20回目に初めて標識つきの魚を釣り上げた場合は、池全体の魚の数は183匹。30回目なら425匹。50回目なら1208匹と推計される。

 この2つ目の方法は、釣りの作業自体は無駄がなくて効率がよい。一方、対数や微分といった数学のテクニックと、パソコンなどでの表計算ソフトを使った計算が必要となり、その手間はなかなかあなどれない。

 釣りに自信がある場合は、1つ目の方法。数学のテクニックと表計算ソフトでの計算に自信がある場合は、2つ目の方法がおすすめといえる。池で釣りをしていて、釣り竿を垂れてぼーっとしているときには、その池にいる魚の数の推計についてあれこれ考えてみるのも退屈紛れになると思われるが、いかがだろうか。

個人の意見