- ベストアンサー
システム(プログラム)の善し悪しの評価方法について、良い方法を教えて下さい
例えば、ある地震で家が10軒中3軒壊れたとします(10軒の家はNo.1~10とし、そのうち壊れた家はNo.1と5と10とします)。 地震で家が壊れる確率(%)は、様々なパラメータからあるシステム(プログラム)によって予想でき、上記10軒の家について事後予想したところ、それぞれの破壊確率が求まりました。仮に、No.1~10の破壊確率を10%、20%、30%、・・・90%、100%とすると、実際に壊れた家(No.1,5,10)の、このシステムによる破壊確率は、10%、50%、100%となります。 ここで、実被害を正解値として、このシステムの予想がどれだけ当たっているかを定量的に評価したいわけですが、とりあえず破壊確率の数値そのものには絶対的な意味はないとして、相対的な予想の的中率の度合いを知りたいとします。すなわち、システムによる破壊確率が高い順に並べた時に、実際に壊れた家がどれだけ上位に集まっているかという度合いを知りたいわけです。 上記例の場合、破壊確率が高い順に並べると、実際に壊れた家は、1位、5位、10位にランクされ、直感的には的中率は悪いとわかりますが、定量的な評価方法がわかりません。最初は、壊れた家の数(3軒)を基準に、破壊確率の上位3軒に実際に壊れた家が何軒ランクされるかの割合(今回の場合は3軒中1軒のみなので33%)を求めれば良いと考えたのですが、これですと外れた2軒が何位だろうが同じ評価結果となってしまいます(つまり、外れた2軒が例えば4位、5位の場合と、9位、10位の場合では、システム全体としての的中率は後者の方が悪いであろうということ)。 以上、わかりにくい説明ですが、よい方法がありましたらご教示下さい。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
結論から言いますと、こりゃ、シャノンの情報理論の出番です。(細かい話は教科書でも見て戴くとして) まず、あるひとつの家について考えます。その家が壊れる確率pを予想した。その後で、実際に壊れたかどうかq(壊れたときq=1、壊れないときq=0)を知ったときにどのぐらいびっくりするかを考える。そのびっくりの程度を定量できる尺度があれば、「びっくり度が小さいほど予想が正確だった」と言えるでしょう。さらに、ご質問のように沢山の家を対象にするためには、各家の「びっくり度」を足し算したい。なので、この尺度は加法的である必要があります。 さて、情報理論では「びっくり度」を「情報量」と呼ぶ。単位はShannon(昔はbitと呼んでいましたが)です。情報理論ではq=1のとき -log(p) だけびっくりすることになってます。「滅多に壊れないと思ってたのに壊れちゃった」とびっくりするわけです。そしてq=0の場合にも -log(1-p) だけびっくりする。これは「当然壊れると思ってたのが壊れなかった」とびっくりする程度です。(ただし、これらのlogは底が2です。以下同様。) 両者をまとめて表すと、びっくり度、すなわち情報量は、qが1か0のとき、 -q log(p) -(1-q) log(1-p) となりますね。 情報量を使うと、10軒の家について予想した「家No.kが壊れる確率」をp[k]、実際に家No.kが壊れたかどうかをq[k] とするとき、びっくり度(=情報量)の総計Bは足し算で計算できて、 B = Σ(-q[k] log(p[k]) - (1-q[k]) log(1-p[k])) (Σはk=1~10の総和) と表せます。かくて、Bが小さいほど(実際の結果を見たときのびっくりが小さくて済んだ訳だから)うまく予想できたと言えるでしょう。 ただし、このままだとちょっとだけ具合が悪い。というのはp=1(絶対壊れる)だとかp=0(絶対壊れない)という傲慢な予想をしちゃった場合に、もしも予想がはずれたらびっくり度は無限大になってしまう。万が一って言葉もありますから、例えばp=0の言いたいときにはp=0.0001、p=1と言いたくてもp=0.9999と、少しばかり謙虚に予想しておく、ということにしちゃいかがでしょ。 ご質問にある予想の例(ただし、家No.10の倒壊確率は1よりちょっと小さくしとく)においてBが最小になるのはNo.1~4またはNo.1~5の家が壊れず、残りが壊れた場合です。また、Bが最大になるのは、No.1~4またはNo.1~5の家が壊れて、残りが壊れなかった場合です。(確率0.5と予想された家No.5が壊れても壊れなくても、びっくり度は変わらない。半々なんですから、どっちにしろBは同じになるのが当然ですね。) ところで、ANo.2のコメントに閾値の話が出ていますけれども、確率を出しているのに閾値を決めるのはなんだかおかしな話です。たとえば、確率約80%で壊れると予想した家が100軒あったとして、もしも実際に80軒ぐらいが壊れたのなら予想は正確だったと思われるけれども、もし実際に壊れたのが10軒だけだったら(たとえ予想確率が高い順にトップの10軒が壊れたのだとしても)予想はかなりイーカゲンであると言うべきでしょう。しかしその場合でも閾値をテキトーに設定すれば、予想はうまく行ったと言えてしまう。これでは具合が悪い。
その他の回答 (2)
- fatbowler
- ベストアンサー率48% (26/54)
順位だけでなく、破壊確率の数値自体も評価に加えるべきだと思います。 例えば、11%、12%、13%、14%、90%の5軒のうち14%の家屋だけが倒壊 した場合、順位では2番目なので比較的いいという評価ではなく、 90%の家屋が壊れてないのに10%台の家屋が壊れたので全然ダメと 評価するべきだと思うからです。 こんなのはどうでしょうか。 まず、質問中の例では、3軒が壊れたので、100%、90%、80%の3軒が 壊れていたら大正解だったと考えられます。 つまり閾値(しきい値)75%を境に、それより高い家は壊れていたら 正解、それより低い家は壊れていなければ正解と考えます。 不正解の家の(倒壊確率-閾値)^2を足し合わせて戸数で割った値を 不正解の指数と考えて、それが低いほど良いシステムと規定する 訳です。 実際に計算すると、以下のようになります。 No.1 不正解 (10-75)^2=4225 No.2 正解 0 No.3 正解 0 No.4 不正解 (40-75)^2=1225 No.5 正解 0 No.6 正解 0 No.7 正解 0 No.8 不正解 (90-75)^2=25 No.9 不正解 (100-75)^2=225 No.10 正解 0 ----------------- 不正解指数=(4225+1225+25+225)/10=570 No.8、9、10の3軒が壊れた場合(全部正解)の場合は不正解指数=0、 No.1、2、3の3軒が壊れた場合(最も正解から遠い場合)は 不正解指数=1015 となります。 倒壊確率も計算に入っているし、何軒が壊れても基本的に単純比較 できるはずです。 私が挙げた例を計算すると、789となりました。 質問文の例よりも更に悪い、という結果になり、まあまあ妥当 なのではないでしょうか。
お礼
ご回答ありがとうございます. 実は質問には記さなかったのですが,閾値を設定した正答率を出す方法も試しているのですが,それとは別に相対的な順位づけによる評価も実施したかったわけです. ただ,こちらで実施した閾値による評価は,閾値を境に正解か不正解かを判断し,正答率を出しただけなので,今回の提案を参考にさせていただきたいと思います. 少し気になるのは,不正解側しか評価できないことでしょうか. (正解側も正解指数を出せばよいのかもしれませんが) いずれにせよ,ありがとうございました!
- wisemensay
- ベストアンサー率33% (35/103)
以下のような方法はどうでしょう。 確率が高い順から重みをつけて並べる。 実際に倒壊した家屋の重みは10とする。 Σ(予想-実際)^2/件数を計算すれば、予想倒壊確率の小さな家屋が 倒壊したときの(予想-実際)^2が大きくなるので、システムの精度が 比較できる。 重み 予想 実際 No10 10 10 No 9 9 7 No 8 8 6 No 7 7 5 No 6 6 4 No 5 5 10 No 4 4 3 No 3 3 2 No 2 2 1 No 1 1 10
お礼
回答を頂きましてありがとうございます. 重みという考え方は参考になりました. 問題としましては,実際の状況が「倒壊」か「未倒壊」しかないため, その重みを単に10と0にしてもいいかという点があると思います. また,実際にはもう1段階の状況(倒壊と未倒壊の間)があって, それに定量的な重みづけをするのが難しいように思いました. いずれにしましても,ありがとうございました.
お礼
回答ありがとうございます. シャノンの情報理論という言葉は初めて耳にしましたが, 参考にさせていただきます. 実際のデータで試してみたいと思います. ありがとうございました.