Public LB 0.693の悲劇
第2回 金融データ活用チャレンジに限らずデータ分析コンペのPublic LBで自分にとって一番良いスコアのsubmission.csvを選択からはずすのは自分には煩悩的に無理
SMBC Group GREEN×DATA ChallengeではPublic LBが伸びなかったおかげでうなぎ上りに順位をあげることができ運の良さを痛感したが今回はどうなるか・・・
Cross Validatonの平均が0.683くらいの成績のなかでPublic LBが0.693とか出ちゃった場合,他人事として冷静に考えるとPrivate LBは0.67くらいかなぁーとか思いつつ,でも0.693という結果は捨てがたくということで平均的な実力は0.683なのに0.693という奇跡のスコアが出ちゃった時にPrivate LBはやっぱり0.67近傍なのかベイズ推定の香り漂うこの問題を調べるために実験してみた
実験
Cross Validationで使用したデータセットは学習用(train)と検証用(test)にデータを分割して検証用のf1_score(average='macro')の平均が0.683という前提で以下の実験を行う
検証用(test)をさらに2分割したデータの組み合わせを10,000個作成する
具体的にはtrain_test_split(test_size=0.5,random_state=XXX)でXXXを変化させながら10,000個の2分割されたデータの組み合わせを作る
2分割×10,000個のデータについてF1を算出しその中から片方が0.693以上の組合せを選びもう片方のF1をdescribe
結果
2分割したデータのF1スコアの組,たとえば(0.67,0.69),(0.682, 0.681)に対して小さい方をf1_min,大きい方をf1_max,差分(f1_max - f1_min)をf1_diffとして整理する
f1_min | f1_max | f1_diff |
---|---|---|
0.670 | 0.690 | 0.020 |
0.681 | 0.682 | 0.001 |
次にPublicLBのスコア(F1_Pub)を閾値として以下の2つのグループを集計する
- グループ1:f1_min >= F1_Pub
- グループ2:f1_max >= F1_Pub and f1_min < F1_Pub
グループ1, グループ2それぞれをdescribeする
結論
0.693のモデルは?
現実は厳しい
グループ1は0件,半分予想していたが…
0.693の相方はかならずそれ以下であることが確定
他人事の冷静な自分の見解を裏切らない結果
相方のdescribeを貼り付けたいところだがdatabricksが期限切れでアクセスできないため断念
median(quantile=0.5),meanともに0.67後半だったはず
その代わりにPrivateスコアを貼っておく
想像以上に最終評価が高い
暫定評価 | 最終評価 |
---|---|
0.6930102 | 0.6846376 |
0.692のモデルは?
予想外の結果が…
件数は以下
全体 | グループ1 | グループ2 | グループ1 or グループ2 |
---|---|---|---|
10,000 | 2,100 | 2,739 | 4,839 |
相方が0.692を超える組合せはおおよそ半分もある(...意外)
先に最終評価を記載しておく
暫定評価 | 最終評価 |
---|---|
0.6922592 | 0.6837695 |
f1_minはmedian(quantile=0.5)が0.6822でそれよりも上
最終評価を予測するときのステップは以下となりそう(確証は無し)
- グループ1(0.692より相方が大きい) or グループ2(0.692より相方が小さい)
確率を素直に受け入れるとグループ2を選択 - グループ2のなかでどのくらいに位置づけられる?
median(中央値)の近傍,ただしグループ1の件数もそこそこあるので多少上振れで期待してよい???
自分があと30年若ければ確率振幅に突入して分析を継続するところだが還暦を超え頭も体力もすっかり衰えているので無理
結局どうなった?
0.692モデルの実験を踏まえsubmitのポートフォリオを組み換えしようとしたところ突然システムが停止しそのまま試合終了になった
もしシステムが復旧していたらPrivateLBは49位から100位くらいまで順位を下げていた
人間万事塞翁が馬,禍福は糾える縄の如し を痛感する出来事だった