1st Place Solution

はじめに

コンペを開催してくださった運営の皆様、コンペの参加者の皆様に感謝申し上げます。
スパムメールの判別という身近な題材で取り組みやすく、自然言語処理の勉強になりました。

特にcha_kabuさんの下記のトピックが参考になり、このbaselineをもとにコンペを進めていきました。
MultinomialNBを使ったbaseline(参考)

コード

ソリューション

疑似ラベルの作成とモデルの学習を繰り返しました。
他のトピックにもあるように pseudo-labeling がよく効きました。

前処理
  • 先頭の「Subject: 」を削除
  • ストップワードの削除(Step2以降)
Step 1
  • ダウンサンプリングした学習データで MultinomialNB を学習
  • 学習した MultinomialNB で Spam or Ham の可能性が高いテストデータに疑似ラベルをつける
Step 2
  • 学習データと Step 1 で疑似ラベルをつけたテストデータを使い MultinomialNB を学習
  • 学習した MultinomialNB で Spam or Ham の可能性が高いテストデータに疑似ラベルをつける
Step 3
  • 学習データと Step 2 で疑似ラベルをつけたテストデータを使い MultinomialNB を学習
  • 学習した MultinomialNB でテストデータの予測
後処理
  • テストデータ内のスパムメールの確率が上位17000件をスパムとし、それ以外をスパムでないとする
全体像

Training Flow

Icon21
haruai

解法の詳細ありがとうございます。
すみません。コンペ自体がはじめてで不勉強なため教えて下さい。
このモデルを新規のメールの判別に利用しようとした場合 \

>テストデータ内のスパムメールの確
>率が上位17000件をスパムとし、
>そ れ以外をスパムでないとする \

この部分はどのように機能させればよいのでしょうか?
このモデルは今回のコンペのデータセットでしか使えないモデルなのでしょうか?
お忙しいところ大変恐縮ですが、ご回答いただけるとありがたいです

Icon6
omegawvw
この後処理は、テストデータが非スパム : スパム = 7838 : 17000とわかっていたため、スパムの可能性が高い順に17000件をスパム、それ以外の7838件を非スパムとすることで、今回の評価指標であるF値が1になってもらいたいという意図があり、今回のコンペのデータセットでしか使用できない後処理です。 新規のメールの判別に利用する場合、後処理の部分は使えなくなり、後処理の前までのモデルを使用することになるかと思います。
Icon21
haruai

ご回答いただきありがとうございます。\

やはり、新規メールの判定では後処理の部分を使用できず、Step3までのモデルで判断するしかないとのことですね。
テストデータの分割数は公開されている情報なのでそれを使用すること自体はルール違反でないと私も認識しています。ただ、結果的に作成されたモデルがテストデータにしか使用できないようなものになっていることに関しては疑問が残ります。
今回のコンペの趣旨は基本情報に書かれている通り「電子メールのテキストデータより、スパム・非スパムを判別する分類モデル」だと私は認識しています。しかし、omegawvw様が作成されたモデルは「テストデータの分類モデル」となってしまっていて、正しい意味での「テキストデータの分類モデル」になっていないように感じます。\

このような結果でモデルの精度を評価することは正しくないように思われます。Step3までの結果で勝負すべきだと思います。\

この辺についてご見解をお聞かせいただけないでしょうか?

Icon6
omegawvw
実際の利用を想定するとテストデータの割合がわからないコンペが理想的だと思います。 今回のコンペでは、テストデータの割合がわかっているため使用でき、他の方のトピックにもあるように実際の利用を想定していないルールに甘えた処理だと思っています。 ルール設計は難しいところだと思いますが、テストデータの割合がわからない方がより実際の利用を想定したコンペに近くなると思いました。
Icon21
haruai

omegawvw様
お付き合いいただきありがとうございました。私としては大変有意義でした。
最終的な判断は運営殿にお任せしたいと思います。

To 運営殿
omegawvw様のモデルの可否についてご判断いただけないでしょうか?
私の主張は、
テストデータの割合の情報は公開されているので使用することはルール違反ではないが、提出するデータのスコアを上げるために新規テキストの判定が不可能(テストデータから任意のテキストを1つ取り出しても判定不能)なモデルにしてしまうことは本来の目的である「テストデータの分類モデルの作成」が達成されておらず、モデルとして採用できないのではないか?
です。

omegawvw様の主張に関してはomegawvw様のコメントをご参照ください

ご多忙のところお手数おかけして申し訳ありませんがご判断よろしくお願いいたします。

Aws4 request&x amz signedheaders=host&x amz signature=bd01769d2de3a904034340e8749362d08c9b438776fcaafd0e2b4478cd21576a
ProbSpace_official

haruai様、omegawvw様

ディスカッションありがとうございます。
haruai様のご意見、最もと存じます。
今回のコンペにおいては、いただいたご指摘はあると想定したうえで、
以下背景のもとあえて比率を公開する判断をいたしました。

■比率公開に至った背景
今回 異常検知モデルの開発をテーマとしたコンペとするために、データ量の制約上、
非spamデータのほとんどをtrainによせる必要があり、
結果的にtrain, test dataで非spam / spamの比率が大きく異なることとなりました。

そのため、
・非spam / spamの比率を設定しバリデーションをかける行為が続出すると想定されたこと
・露骨に比率が設定されていなかったとしても、事前に知ったうえでパラメータチューニングした人が有利になることがあるならば避けたい

の2点理由により、公平性を担保できなくなるくらいなら予め公開してしまった方が良い、
と判断させていただきました。

本コンペにおきましては、情報としてspamデータの件数を公開しておりましたため、
omegawvw様の対応につきましては許容されるものとさせていただきます。
混乱を招くこととなりまして申し訳ございませんが、ご確認のほどよろしくお願いいたします。

Icon21
haruai

運営殿\

少し認識の違いがあるようなので確認させてください、
「比率を公開すること」、「それを利用すること」自体を問題視しているわけではありません。使い方に問題があるのでは?という問いかけだったのですが、ご回答いただいた内容が「公開された比率を使用すること」にフォーカスされているように感じます。
つまり、テストデータが7838 : 17000に分割されるようにspamの判定閾値を0.5⇒0.48にするという処理なら新規メールにも使用可能なので問題ないが、テストデータを7838 : 17000に分割するは一般性を欠く処理なので問題があるという認識です

本来、スパムメールの判定モデルの性能評価の手段としてテストデータによる評価があるはずなのに、テストデータのスコアを上げることが目的になっており、手段と目的がチグハグになっていると思います。
この点も踏まえ問題ないとの認識でしょうか?

Aws4 request&x amz signedheaders=host&x amz signature=bd01769d2de3a904034340e8749362d08c9b438776fcaafd0e2b4478cd21576a
ProbSpace_official

haruai様

なるほど、問題意識について理解いたしました。
今回の後処理は、テストデータのラベル割合という情報に過度に依存した手法なので、
一般的な問題設定の場合には適用できない。
よって、コンペティション本来の趣旨にそぐわないということですね。

正直なところ、コンペ設計時の想定が少々不十分だったと感じております。
おそらく、以下のようなデータ設計・ルール設定のほうが良かったと思っています。
・testデータについても非スパム/スパムの比率をtrainと合わせたうえで、testデータ側の比率を非公開とする
・モデル構築に使ってよい/よくない情報を明記する
・「趣旨に即したモデル」を開発することを明記する (自分の手法がOKか否か疑問に感じ場合はその都度運営に質問)
非常によい教訓なので、今後のコンペ設計の方針として採用させて頂きます。
ご指摘、誠にありがとうございます。

ただ、今回のコンペに限っては上記に関して明記されておらず曖昧なところがあったため、
失格とはできないので可とさせて下さい。

ご確認のほど、よろしくお願いいたします。

Icon21
haruai

運営殿

ご回答いただきありがとうございました。
承知いたしました

Favicon
new user
コメントするには 新規登録 もしくは ログイン が必要です。