アプリ版:「スタンプのみでお礼する」機能のリリースについて

1)対数平均二乗誤差(RMSLE)はコロナ感染者数の予測と正解データとの比較で使ってもよいと思いますか?
2)これは数字が小さいほど比較データの誤差が小さいということでしょうか?

A 回答 (3件)

コロナ感染者数のような、数値が大きくなるにつれて、変動幅も指数的に増大する場合は、誤差の評価もそれに対応していないと、感染者が少ない時は予測が合うが、感染者が多い時は予測が合わないという評価になってしまいます。



一般的には、対数グラフにプロットすれば、一定のばらつきになるはずです。そうなっているか、確認する必要があります。

また、予測が多めに出た場合と少なめに出た場合とがあったとき、少なめに予測した時は予測が間違ったとの「そしり」を受けるよう場合、少なめの予測に対してペナルティを掛けたいです。

1) その点、RMSLEは、少なめの予測に対して悪化する評価なので、適していると言えます。

2) 評価値が小さい時の方が誤差が小さいということです。それはRMSEと同じです。
    • good
    • 0

No.1 訂正です。



>> |ε[k]|<<(1 + x[k])のとき、δ[k] ≒ ε[k]

これ間違い。正しくは

  |ε[k]|<<(1 + x[k])のとき、δ[k] ≒ ε[k]/(1 + x[k])

でした。相対誤差を評価している。これは最後に書いた方式のa=1の場合に相当します。
    • good
    • 0

RMSLEとは、実測値 x[k], 予測値p[k] (k=1,2,...,N)を使って、


  δ[k] = log(1 + p[k]) - log(1 + x[k])
とするとき、このδ[k]についてのRMS(2乗したものの平均値の平方根)のことです。xやpが負の値になったら計算できないという欠点を持っています。(1を足してあるのは、xやpが0になったときも困るもんだから、ごまかしてある、っていうだけのことです。)

 ここで予測の残差εを
  ε[k] = p[k] - x[k]
として、
  δ[k] = log((1 + x[k] + ε[k])/(1 + x[k]))
  = log(1 + (ε[k]/(1 + x[k])))
と書き直してみれば、
  |Δx|<<1のとき log(1 + Δx) ≒ Δx
という近似を使って、
  |ε[k]|<<(1 + x[k])のとき、δ[k] ≒ ε[k]
です。つまり、残差(予測の誤差)が実測値に比べて十分小さい(予測がそこそこ当っている)のなら、RMSLEはRMSEと(ほとんど)同じです。

 だから、予測がメチャクチャ外れて、たとえばεがxの何万倍もある、という事態が心配な場合にのみ、RMSLEを使う意味が出てきます。しかしそんな予測は、あきらかに使い物にならないわけで、わざわざ評価するまでもない。だから普通はRMSLEなんて使いません。
 しかし、まるでダメな「予測」でも、あえてその性能を評価しなきゃならんという場面もある。それは機械学習です。というわけで、RMSLEは機械学習に特有の手法であり、それも予測の性能がまるっきりダメダメの段階でのみ意味を持っています。(だから機械学習だって、収束が近いときにわざわざこんなもん使う必要はありません。)

 で、本題ですが、まず、2つめのご質問。これは基本中の基本です。
 RMSLEでもRMSEでも、要するにδのバラツキの標準偏差を計算しているわけですから、大きいほどバラツキも大きい。小さいほどバラツキも小さい。そういう意味ですんで、「誤差が小さい/大きい」と単純には言えない。たとえば「ある時点だけで1回、とんでもないデタラメな予測値を出してる以外は良く合ってる」のか、「万遍なくプラスマイナスにブレている」のかは、この評価関数では区別できません。
 自分がどんな特徴を捉えて「誤差が小さい/大きい」と判定したいのかによって、どんな評価関数を使うのかを自分で決めなくちゃいけないんです。もちろん、評価関数を自分で作る必要がある場合も多い。

 そこでご質問のひとつめについて。「予測が100で実際が102」の場合と「予測が10000で実際が10002」の場合を「どっちも予測の誤差は2だから同程度だ」と評価したいのであれば、RMSLE(もちろん、RMSEで十分ですが)を使えばいいでしょう。えええ、あんた正気か?「予測が100で実際が102」と同程度なのは「予測が10000で実際が10200」だろがよ、ともし考えるのであれば、RMSLEやRMSEじゃダメで、相対誤差で性能を測るべきでしょう。たとえば
  δ[k] = ε[k]/x[k]
のRMSを使う。ところがこのやりかたですと、x[k]が0に近い値のときにはちょっとの誤差ε[k]があるだけでδ[k] がひどく大きくなる。(それにx[k]=0だと困る。)これはこれで不都合ですね。そこでたとえば、折衷案として
  δ[k] = ε[k]/(a + x[k])
とやる。aは適当な正の数です。こうすると、x[k]がaに比べて小さいうちはδ[k]≒ε[k]/aであり、RMSEと似た性質を持つ。また、x[k]が大きくなるとδ[k]≒ε[k]/x[k] になるんで、相対誤差の評価に近い。こうして「主に相対誤差を評価するけれども、x[k]が小さいときの相対残差ε[k]/x[k]に過敏に反応しない」ような評価関数が得られるわけ。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!