kaggle本第2章
第2章 タスクと評価指標
2.1 分析コンペにおけるタスクの種類
クラス分類問題でそれぞれのクラスに順序関係がある場合(例えば1 < 2 < 3)クラス分類で解くか、回帰で解いて閾値で最適化して解くかwakame.icon
quadratic weighted kappaのような外したときのペナルティが高い、評価指標が使われる場合は回帰で解いてる?(例:Pefinder)
評価指標の最適化(2.6.3)で言及されている
回帰でも、分類で解いても良いんですが、quadratic weighted kappaの場合は、分類で解いても(argmaxを取ると罰則が大きくなってしまうので)、加重平均を取ることになるので、あまり変わらないんですよね。それで回帰でも、分類でも、trainとtestで分布が違うとか特殊事情がない限りはoofで閾値を最適化しにいくことになる。currypurin.icon
quadratic weighted kappaの指標の過去コンペだと、currypurin.icon
「Diabetic Retinopathy Detection」は、上位のsolutionで分類と回帰半々くらいの記憶がある
「Petfinder」は上位solutionほぼ回帰だったはず?
「APTOS」は??
101頁の「Crowdflower Search Results Relevance」の1位の考察気になる
気になる takapy.icon
2.2 分析コンペのデータセット
2.3 評価指標
RMSLEが比率に着目している、決定係数の最小化はRMSEの最小化と同じ意味。知らなかったcurrypurin.icon
TP、TN、FP、FNと真陽性、真陰性などの言葉を暗記することができない(2.3.3 67頁)currypurin.icon
良い覚え方・理解の仕方ありますかね?currypurin.icon
日本語で覚えようとするとややこしいのでTruePositive / TrueNegativeで覚えたほうがいいかなと。wakame.icon
一文前と意見が逆ですが覚えてても嬉しいことがあった覚えがないので毎回調べてます。wakame.icon
自分も毎回調べちゃいますね・・・それかその都度絵に書いてますw takapy.icon
ただの気付きなのですが、一般的に図示される混同行列(左上:TP 右上FP 左下:FN 右下:TN)に対して、sklean.metricsのconfusion_matrixだと、左上:TN 右上FP 左下:FN 右下:TPのように、表記方法に違いがあり驚きました。気を抜くと勘違いしそう・・・(2.3.3 68頁)sinchir0.icon
その罠にハマったことあります。currypurin.icon
多クラス分類の場合は、左上が0から始まるconfusion matrixを書くのが一般だと思うけれど、そこと逆になるのは違和感がある。でもこの形が一般的なんですかねcurrypurin.icon
p.69の「INFORMATION」について、後半「不均衡なデータのタスクの例として・・・」のくだりが理解出来ませんでした。正例が少ないデータに対して予測を行った場合でも、モデルが「すごく正例っぽい!」と思ったデータに関しては、90%など高い確率が出力されると思っていたのですが、「accuracyが評価指標の場合、予測確率が50%以下であれば負例と予測するしかないため・・・」という記載があり「???」になっています。僕の上記認識が間違っている感じですかね?(2.3.3 69頁)sinchir0.icon
仮にaccuracyを評価指標として採用した場合、負例で出力が0.45でも0.01でも同じ「正しい」という評価となるという意味ですね。予測値を0or1に変換してしまうことになるので。
例えばこれをloglossを評価指標などにすると0.45よりも0.01の方が良い結果という評価になるので、能力の評価ができるということかと思います。
もしくは、「accuracyの場合は、確率を正しく予測できている前提でその閾値は50%です。」この前提があるからという方が簡単かもですね。
accuracyが評価指標だと正解データが0 or 1なので「評価指標の最適化」のような閾値の最適化ができないwakame.icon
自分で決めた閾値より以上か未満か、で0 or 1どちらを当てるかの50%の確率でしかないという感じでしょうかwakame.icon
予測値が大きい順番からレコードを並び替えた時に、正例を1、負例を0として...という部分が良くわからなかった・・・(2.3.4 76頁)takapy.icon
正例である確率を求める分類問題とした時に、予測値が{目的変数:確率} = {0:0.3, 1:0.7, 1:0.5, 1:0.9, 0:0.6}だった時に、{1:0.9, 1:0.7, 0:0.6, 1:0.5,0:0.3 }と並び替えるってことかな・・・?takapy.icon
そういうことですね!そうして、図2.15のようなROC曲線を書いてみると良いと思います。0.6と0.5のサンプルの並びが逆なので、AUCが1にならないパターンですねcurrypurin.icon
2.4 評価指標と目的関数
2.5 評価指標の最適化
ch02/ch02-04-optimize-cv.pyの閾値の決め方初めて知ったcurrypurin.icon
単純にoof全体でやっていた、精度的にどのぐらい変わることがあるのか気になる
Column out-of-foldとは?
out-of-fold = oof
2.6 評価指標の最適化の例
カスタム目的関数での評価指標の近似によるMAEの最適化
最近終わったSignateの土地コンペの事例
あきやまさんのスライドP.15あたりが本で取り上げられている内容と似た事例のため参考になる
目的関数をMAEではなくFairを使う
分類問題の不均衡データに対する評価指標の最適化
MCCのPR-AUCによる近似とモデルの選択
やりたいことはよくわかる。自分で選んで使うのは難しそうcurrypurin.icon
2.7 リーク(data leakage)
予測に有用な情報が漏れている意味でのリーク
リークの話題はだいたいDiscussionやKenelで議論・検証される
当然のごとくリークを使ったスコアがリーダーボードに並ぶのでリークなしでメダルとるのは難しい
ちゃんとDiscussionは追いましょうというのが至言な気がするwakame.icon
どれ追えば・読めばいいのとか言われそうなのでとりあえずおすすめのフィルターを紹介
「Hotness + ゴールド or シルバー」+ 「MostVotes」+ 「Recentrly + ゴールド」あたり、あとは運営のディスカッション(背景がうす青いやつ)
これについては意見が欲しいですwakame.icon
追っていてもカーネル・ディスカッション等のコメントや内容が消される可能性がある(著者のミスなど)
そこで投稿されたら通知されるという仕組みを利用して追いましょうという話
やり方は以下参考
ディスカッションの通知方法
カーネルの通知方法
参考リンク