takaito
数日前から参加し始めましたが,0.49からスコアが伸び悩んでいるので意見交換がしたいなと思い,トピックを作りました.
アイデアの交換などができたらと思っているので,いろいろコメントもらえたら嬉しいです!
概要に 「今回のコンペでは、学習データの一部に目的変数(被引用数)が含まれておらず、代わりにDigital Object Identifier(DOI)により計算された低精度被引用数が代替変数として付与されています。 現実世界の問題においては必ずしも充分な量の教師データを用意できるとは限らず、そのような場合においては弱教師あり学習が1つの有効な手段となります。 本コンペを通して弱教師ありにおけるモデル開発に親しんでいただければ幸いです。」 と書いてあるので,これが本コンペの特徴の一つだと思います.
自分自身はこの説明を読んだ当初,低精度被引用数(以降'doi_cites')を擬似的な目的変数として重みを調整しながら学習させるのかなと考えていました.
しかし,投稿されているトピックに目を通したところ'doi_cites'は説明変数に使用し,学習に使用するのは本来の目的変数である'cites'が存在するデータのみを用いていました.
実際,自分自身も説明変数に'doi_cites'を追加したところ,CV, LBともに大幅に改善されました.
とりあえず'doi_cites'と'cites'の相関を計算すると0.944でした.
対数変換(log1p)したものを図示したものが以下の図で,相関があることが見て取れます.
学習データに使用できる'cites'の最小値が1である.
しかし世の中には,一度も引用されない論文が大量にあるはずなので,故意的に引用数が0の論文は除外されている.
学習データに使用できるデータ,テストデータ,それ以外のデータ('cites'はないが,テストデータにないもの)の各々の'doi_cites'の分布は以下のようになりました.
学習データとテストデータである青と緑の分布はほぼ一致していますが,それ以外のデータであるオレンジの分布は,'doi_cites'が小さいものの比率が非常に多くなっているようです.
このことから,'cites'のないデータには,真の'cites'の値が0のものが大量に含まれている可能性があるかもと考えています.
また,テストデータは,ある程度コンペが盛り上がるように意図的に学習データに似たような分布のデータが選択されている可能性があるのかなと思っています.
学習データ,テストデータ,その他のデータの割合は,15117, 59084, 836407となっているため,大量にあるその他のデータをうまく活用したいところですが,目的変数と相関の強い'doi_cites'の分布が上に示したように異なっているので,擬似目的変数を新たに作成して学習データとして利用するにも,工夫が必要かなと思っています.
例えば,'doi_cites'の分布が同様な分布になるようにサンプリングして利用するなど.
少し調べましたが,多くの文献が論文の引用数を利用していました.
このあたりがとても読みやすかったです.
本コンペは,引用数の情報がないようなものなので('comments'にたまに記載されているけど,数が非常に少ない),特徴量作りにかなり苦戦しています.
また,'doi_cites'は'doi'の情報を利用して計算しているようなので,'doi'を/で分割した先頭部分を使って特徴量作るのは,あまり意味がないのかなと思っているのですが,どうなのでしょうか?
そうなると,残ったデータで直感的に論文の被引用数に大きく影響を与えるのは,著者情報である気がしています.
しかし,著者名は表記揺れがあったりするので,このあたりをどう工夫するべきかを迷っています.
takaito
画像がうまく表示されないので,どうしたら表示できるか教えてもらえると幸いです.
szdr
モデリングに関して、自分はしばらくLightGBM使っていたのですが、CatBoostに切り替えたところ精度がそこそこ上がりました
また、LightGBMモデルとCatBoostモデルのアンサンブルも(わずかに)効果がありました
pop-ketle
弱教師あり学習について
自分は、弱教師あり学習が特徴らしい?コンペということで、citesがないデータに対して、まずcitesを予測するモデルを作成し、trainデータのcitesの欠損値を埋めることで、使用可能なデータを増やす(いわゆるpseudo labeling的な)ことを取り組みとしてここしばらく試していましたが、あまり上手くいきませんでした。
仕方ないので、とりあえず弱教師あり学習は無視してcitesが存在するデータのみを用いる以前の方法に戻ることにしようかな...と考えています。弱教師あり学習である点を活かした特徴量やモデルづくりをできている人がいるのかかなり気になります。
doi_citesについて
じゃあ、本コンペ、弱教師あり学習の目玉であるはずの低精度被引用数、doi_citesってなんなんだ?という話になってくるかと思います。
自分のモデルでもdoi_citesのimportanceはかなり高く出ていて、また、本ディスカッション上でもあげられていますが、doi_citesとciteの相関はそれなりに高いものとなっています。
そこで、doi_citesがどのように生成されたものなのかを考えるのが鍵なのかなと考えて、今は少し思案中です。 軽くEDAをしたところ、doi_citesとdoiは一対一の関係にあるっぽいことがわかったので、doiの情報を何かもっと活かせないかと考えているのですが、ベン図を作成してみたところ、trainとtestでdoiの重なりはあまりなさそうなので、ここからどうしようかなといった感じです。

おまけ
titleとabstractに対して、自然言語処理的な特徴量生成を行えると思いますが、自分が軽く触った限り、あんまりいい特徴量を生成できていません。ここら辺の情報は結構大きいものとなる気はしているのですが、他の人はどんな感じなのか少し気になります。
szdr
弱教師あり学習について
citesありのデータだけで学習したモデルでcitesなしtrainデータを予測&pseudo labelを振って学習データに突っ込むのはうまくいきませんでした。
分類問題では、ある程度自信を持って予測できているデータ(予測確率>=0.99など)のみをpseudo label振って学習データに突っ込むのがよくある方法とのことで、今回のような回帰問題でも取り入れられないか考えてみました。
具体的には、citesありデータを対象にCatBoostの 損失=
RMSEWithUncertainty
で学習し、予測分散が小さいデータだけpseudo labelを振って学習データに突っ込むということをしました。 https://towardsdatascience.com/tutorial-uncertainty-estimation-with-catboost-255805ff217e結果として、Public Score: 0.487558 (pseudo labelなし) → 0.486965 (pseudo labelあり)とスコア改善に繋がりはしたものの、劇的な向上は得られませんでした。
skywalker
共有ありがとうございます。 0.49の壁が厚いと感じています。
doiはこちらのトピックで紹介されていたデータと紐づけて特徴として使用しています。 https://prob.space/competitions/citation_prediction/discussions/pn11-Postbc1b4fff9039ae354198
モデルは同じくCatBoostが一番精度が高かったですが、NNモデル作ってStackingすると効果ありました。 TabNetも試したみましたが効果があまり感じられなかったですね。