Kaggleで約3か月以上にわたって行われていた”Riiid! Answer Correctness Prediction“が今日(日本時間の2021年1月8日)の午前9時に終了しました。
このコンペで扱うデータはテーブルデータであり、3400以上ものチームが参加しました。
コンペの内容
このコンペは、”AIEd Challenge”と称され、教育に関する内容を扱っています。ご存知の通り、昨年から世界的にCOVID-19(新型コロナウィルス)が流行しており、学校が休校になったり、授業がオンライン化するといった事態になっています。これに伴い、教育の格差がより深まるのではないかという懸念があります。このような状況の中で、教育の格差を是正するために有効なモデルを作ろうというのがこのコンペの趣旨です。コンペの主催団体は数年以上前から教育に関わる人工知能モデル開発を続けています。
何を予測する?
このコンペでは、「学生がある問題をどのくらいの確率で正答することができるか」を予測します。学生が解く問題は英語の試験として有名なTOEICの問題です。解くのにかかった時間や問題に関する情報(どのpartの問題かなど)等が与えられるので、それらを上手に使って正確なモデルを作ります。
メモリの制約に気を付けながらの予測
このコンペで使うtrainデータは約5.5GBもの大きさがあるため、データを全て読み込むだけでも一苦労でした。コンペが始まったばかりの時期は、どのようにしてデータを読み込むかといった点が議論されていました。議論において、”datatable”や””RAPIDS”などといったライブラリが紹介され、特にdatatableの人気が高かったようです。
データを扱う際は、メモリ制約を常に考慮する必要がありました。KaggleのNotebookにおけるメモリ上限は16GBですが、データのサイズが非常に大きいため、油断するとすぐにメモリが不足してしまいます。メモリ不足を防ぐやり方としては、メモリ領域を確保するgc(ガベージコレクション)の活用、必要のなくなったデータを”del”を使って逐一削除するといった手法が有効でした。
独自のAPIを活用
今回のコンペは1つ他のコンペにはあまりないポイントがありました。それは、”riiideducation”と呼ばれるコンペ専用のAPIを使って予測をしなければならないという点です。使い方は特に難しくはありませんが、初心者のKagglerにとっては少し混乱する面があったかもしれません。
どのようなモデルが使われた?
コンペが始まった当初から、主催者によって”SAINT”や”SAKT”と呼ばれるディープラーニングを使ったモデルの論文が紹介されていました。これらのモデルについてはインターネットで検索しても実装方法が紹介されているページはほとんどなく、論文だけを頼りに実装する必要があったため、一部の上級者の方以外は実装に苦戦した方が多かったのではないかと思われます。
SAKTモデルについてはPublicのNotebookでも色々なやり方が紹介されていましたが、SAINTモデルの実装方法を細かく紹介したNotebookは最後まで出てきませんでした。
ディープラーニング以外のモデルとして人気を集めたものは、”LIghtGBM”を使ったモデルです。LightGBMはXGBoostやCatBoostと同じ、勾配ブースティング決定木(GBDT)というアルゴリズムを使ったモデルで、Microsoftが開発しました。
LightGBMを使って予測をする場合、どのような特徴量を使うかが重要になったようです。Feature Engineering(特徴量エンジニアリング)の技術はテーブルデータを扱う際に不可欠ですが、予測に有効な特徴量を作り出すのは簡単なことではありません。今回の場合はメモリ制約に気を付けながら進める必要があったため、更に難易度が増したことでしょう。
XGBoostやCatBoost、Tabnetといったモデルを使ったNotebookもいくつかあり、上位に入った人の中には、アンサンブル学習に活用している人もいたようです。
他のコンペでも大きな威力を発揮するアンサンブル学習については、SAINT/SAKT + LightGBMという組み合わせが人気を集めていました。SAKTとLightGBMを使ったアンサンブルは多くのNotebookで具体的な手法が紹介されていたため、実践した人が特に多かったのではないでしょうか。
Privateスコアが流出するアクシデント
Privateスコアは本来コンペが終了するまで一切見ることはできませんが、ある方法を使うことによってスコアが確認できてしまう状態になっていました。あるユーザーによる申し出がきっかけで判明し、バグは即座に修正されました。
これを受けて、12月29日現在のPrivateスコアを公開するという措置がなされました。(詳しくはこのスレッドを参照)
解法を見たい方はDiscussionへ
上位に入ったKagglerの解法を調べたい方は、Discussionページをご覧ください。” ~ th (順位)Solution”というスレッドでは、高いスコアを出すために使われたモデルや特徴量エンジニアリングなどに関する解説を読むことができます。