u++の備忘録

TF-IDFを用いた「Kaggle流行語大賞2019」

「kaggle その2 Advent Calendar」の10日目の記事です*1

2018年に引き続き、2019年もTF-IDFを用いた「Kaggle流行語大賞」を算出します。具体的には、2019年に公開されたNotebookのタイトル情報から、頻繁に登場した単語をランキング形式でまとめました。

なお昨年は「探索的データ分析(Explanatory Data Analysis, EDA)」が1位に輝きました*2

upura.hatenablog.com

集計方法

概ねと同様の方法を採用しています。一連の処理はKaggleのNotebook*3にて公開しています。

データセット

「Meta Kaggle」*4のデータセット「Kernels.csv」を利用しました。公開されているNotebookの公開日・URLなどの情報が格納されています。

NotebookのURLは、ユーザが付けたタイトルに基づいて決まります。下図のように「Simple lightGBM KFold」というタイトルの場合は「simple-lightgbm-kfold」です。

f:id:upura:20191209110128p:plain

Notebookの絞り込み

一定の評価を受けたNotebookに絞り込むため、次の処理を実施して「Voteを1以上得たNotebook」に集計対象を限定します。

kernels = kernels.query('TotalVotes > 0')

年ごとに分割

「公開年」別に集計すると、次のようになりました。公開されたNotebookは年々増加しています。

kernels['Date'] = pd.to_datetime(kernels['MadePublicDate'])
kernels['Date'].dt.year.value_counts().plot.bar()

f:id:upura:20191209114546p:plain

TF-IDFを計算

最後に、年を文書、タイトルを文の単位として捉えて「TF-IDF」を計算します。詳細は割愛しますが、多くの年で出現する語(一般的な語)は重要度が下がり、特定の年にしか出現しない単語の重要度は上がるような計算を施すことになります。あらかじめnltk.corpus内の英語のstopwordsを指定して、a, the, ofなどの一般的すぎる単語は取り除いています。また筆者の判断で、Kaggle特有の一般的な単語やコンペのタイトル名に含まれる単語などを除外しました。

from nltk.corpus import stopwords
from sklearn.feature_extraction.text import TfidfVectorizer


stopWords = stopwords.words("english")
stopWordsAdd = ['data', 'analysis', 'model', 'simple', '2019', 'ashrae', 'ieee',
                'using', 'prediction', 'ml', 'classification', 'regression',
                'machine', 'learning', 'exercise', 'detection', 'kernel', 'dataset']

for sw in stopWordsAdd:
    stopWords.append(sw)

vectorizer = TfidfVectorizer(stop_words=stopWords)

結果発表

2019年のTF-IDFの値で降順にソートした上位8件を以下に示します。2019年も昨年に引き続き「eda」が首位の座を守りました。

f:id:upura:20191209114830p:plain

年次の推移を下図に示します。

f:id:upura:20191209114759p:plain

近年のKaggleの特にテーブルデータを扱うコンペでは、trainとtestの分布が異なるなど、データを丁寧に眺める必要性が高まっていると感じます。AutoMLなどの発展に伴い、単にデータを機械学習アルゴリズムに突っ込むだけでは差別化が図りづらくなっている面もありそうです。そういった背景もあり、edaはKaggleに取り組んでいると頻繁に見聞きする単語となっています。

2位の「titanic」、6位の「house」は、それぞれKaggleの初学者向けコンペの名前に起因していると推定されます*5*6

3位の「keras」、5位の「pytorch」、8位の「fastai」はいずれもニューラルネットワークを実装できるライブラリ名です。4位の「cnn」は畳み込み構造を持つニューラルネットワーク「Convolutional Neural Network」の略で、7位の「mnist」はcnnでよく扱われる手書き文字データセットです。近年のニューラルネットワークの飛躍的に発展している影響がうかがえます。

なお筆者の判断でstopwordを追加しなかった場合は下図の通りとなりました。どこまでを「一般的」として取り除くかは正直判断が難しいところです。

f:id:upura:20191209121211p:plain

おわりに

本記事では昨年に引き続き、TF-IDFを用いた「Kaggle流行語大賞」を算出しました。昨年に引き続き探索的データ分析(eda)が1位を守り、初学者向けコンペ名やニューラルネットワーク関連語も上位に食い込みました。

今年1年も存分に楽しませてもらったKaggleに感謝しつつ、来年もKaggleを楽しんでいきたいです。