アイキャッチ
データ分析コンペの本なので、データ分析をしていてグラフがたくさん画面に表示されているイメージがいいなと思いました。
「白黒タキシード猫がパソコンを使ってデータ分析をしており、データをグラフで可視化している。水彩画風」というプロンプトでDALL-Eにお願いしました。
「the black and white tuxedo cat analyzing data on a computer, depicted in a watercolor painting style.」というプロンプトによる生成画像に、Canvaで文字を入れました。
Amazonにおける本の紹介
★「Kaggleで勝つ」準備をしよう!★
初学者が「Kaggleに何となく興味ある」状態から「実際のコンペに参加できる」状態になれるような内容を目指しました。
・サンプルコードの詳細な解説があるから、しっかり身につく!
・優勝チームと専業Kagglerのコンビによる、安定のわかりやすさ!
・充実の本音対談で、やさしくサポート!
・初学者や手探りでやっているが体系的な知識を得たい人に最適。
amazon.co.jp
感想
Kaggleは、データ分析コンペの世界的なプラットフォームです。
データサイエンティストを名乗る人間としては、Kaggleやらないとな〜とずっと思っていました。
でも英語だし、どこから始めたらいいかわからないし、うーん難しいな…と思って先送りにしてきました…
いよいよやるぞ!と思ったので、いろいろネット上で情報を調べていたところ、この本がおすすめされていたので購入してみました。
Kaggle Masterをお持ちの二人が書かれた本なので安心感がありますね!
すごくわかりやすいですし、データコンペで重要になるポイントや、進めていくうえでつまづくところががおさえられているように感じました。
節の最後にはお二人の対談もあり、説明形式ではわからなかった「コンペにおける勘所」がわかりやすくなっています。
本章では、あまりコードの説明は多くないのですが、付録でコードの詳細解説が載っています。
まず本文を読み通して分析の流れを確認してから、公開されているコードを一つずつ確認していくという使い方が良さそうだと思います。
また、参考文献も豊富に載っています。書籍もありますが、webページのリンクがほとんどなので、すぐに読むことができます。これだけでもかなり価値があると思いました。
個人的にとくに良かったと思ったのは、4章の「さらなる学びのために」で、参加するコンペをどのように選んだらいいか、分析環境をどうすればいいかなどが書かれていたことです。
初心者向けのコンペとしてはTitanicコンペが有名ですが、そのあとどんなコンペに挑戦したらいいかというのはみなさん悩むポイントだと思いますし、本気でやりたい人が一度は考える「GPUを購入すべきか」についても記載がありとても勉強になりました。
本書ではEDA (探索的データ分析)の項目に多くの紙面を割いています。データ分析においてここの工程が非常に重要なのですね。
データの概要を把握するのに役立つツール「Pandas Profiling」の紹介もありました。PythonのPandasライブラリで扱うデータフレームの概要、変数、相関、欠損値、サンプルなどの情報と、数値データの分布やカテゴリデータの頻度などのグラフを自動で生成してくれるということで、早速使ってみたいと思いました。
あと、パラメータチューニングを行うツール「Optuna」が紹介されていたのですが、実は「Optunaによるブラックボックス最適化」という本を積読しています。読まないと…
また、対談のなかで、「初期の学習段階では、既に完成されている他者のNotebookを利用して学習する」ことがおすすめされていて、そうなのか、全部一から自分でやらなくてもいいのか!というのは大きな気付きでした。勉強しながらとりくめばいいんだ…!
コンペだけど、いい成績をだすことだけが目的なのではなくて、すごい人と同じ問題に取り組んで、その人達のいいところを吸収することができる、それがKaggleのいいところかな、と思いました。もちろん、やっていて成績が上がるととても嬉しいと思うので、勉強しながら力をつけていきたいです。
Kaggleはすべて英語ですし、挑戦する最初のハードルが高いと思うのですが、本書はタイトルの通り「スタート」にピッタリの本で、本書を片手に早速やってみよう!という気持ちになりました。読んでとてもよかったです!
Kaggleに挑戦したらまたブログにまとめます。
概要
はじめに
この書籍は、Pythonを使ってKaggleでの機械学習コンペに初めて挑戦する人向けの入門書です。特に「Titanic: Machine Learning from Disaster」というコンペを例に取りながら、Kaggleでのデータ分析の基本を学びます。本書は、Kaggleの基礎から学べるように章別に体系立てて書かれており、データの種類ごとの扱い方も紹介しています。これにより、初心者でも次のステップに進むための知識が得られます。
この書籍の著者は、データサイエンスの実務経験を持つ事業会社のデータサイエンティスト「石原祥太郎(u++)さん」と、Kaggleを専門に活動する専業Kagglerの「村田秀樹(カレー)さん」です。おふたりは「Kaggle Master」の称号を持っています。また、彼らは過去にKaggleの入門向けの教材を作成した経験があります。本書は、過去に公開されたKaggle入門の記事や本を基にしていますが、より実践的で汎用的な知識を含むようになっています。
Kaggleや機械学習の基礎知識がなくても大丈夫なように、本書では初歩から説明しています。約150ページで、付録にはサンプルコードの詳細な解説があります。
提供されているサンプルコードはPython 3.6で確認され、GitHubやKaggleで公開されています。Dockerを使った環境構築の方法も説明されているので、自分のPCで実践的な学習が可能です。
第1章 Kaggleを知る
1.1 Kaggleとは
Kaggleは、世界中のデータサイエンティストや機械学習エンジニアが集まるオンラインプラットフォームです。ここでは、様々な企業から提供されたデータを使って、機械学習モデルの予測性能を競います。参加者は提供されたデータを分析し、予測結果をKaggleに提出します。この提出物は自動的に採点され、そのスコアに基づいてランキングが決まります。コンペには通常、2〜3カ月の期間が設けられています。成績に応じてメダルが授与され、メダルの獲得数によって「Contributor」から「Grandmaster」までの称号を獲得することができます。これらの称号は、Kaggle内での実績として認識されます。
Kaggleでは、PythonやRを用いたデータ分析が可能なNotebooks環境を提供しており、コードの共有やディスカッションが行われています。これにより、初心者から上級者まで幅広く学習することが可能です。
また、Kaggle以外にも、日本の「SIGNATE」やオフラインで開催されるコンペティションなど、様々な形式の機械学習コンペが存在します。これらは、Kaggleでの経験を活かして挑戦することができます。
1.2 Kaggle で用いる機械学習
機械学習はコンピュータに学ぶ力を持たせる技術で、人工知能の一部です。
- 教師あり学習:問題とその答えを示して学習させ、新しい問題にも答えられるようにします。迷惑メール判定などに使われます。
- 教師なし学習:正解が不明なデータから、パターンやグループを見つけ出す学習方法です。「クラスタリング」が一例です。
- 強化学習:行動の結果として得られる報酬を基に最適な行動を学ぶ方法です。ロボットの制御やゲームAIに応用されます。
Kaggleのコンテストでは、教師あり学習を用いて、データを基に予測モデルを作り、その性能を競います。例えば、「タイタニック号の乗客の生存予測」が課題として設定され、正解率で評価されます。
1.3 Kaggleのアカウントの作成
- Kaggleアカウント作成:アカウント作成には、Googleアカウントかメールアドレスが必要です。「Username」は変更不可で、プロフィールURLに使われます。
- ログイン後の画面:「Newsfeed」では、フォローしているユーザーの投稿やディスカッションが表示されます。自分の参加しているコンペ、データセット、ノートブックがそれぞれ表示されます。
- Competitionsページ:コンペの一覧から、参加したいコンペを選び、「Join Competition」で参加申し込みをします。コンペにはルールがあり、参加前に同意が必要です。
- コンペのルール:Titanicコンペは初心者向けで、一日の提出回数の上限が他のコンペに比べて多いです。一般的なルールには、1人1アカウントの規定や、チーム外との情報共有禁止などがあります。
- Overviewセクション:コンペの目的、評価指標、提出ファイルの形式などが記載されています。これらはコンペによって異なります。
- Timeline:コンペの重要な期限が記載されており、これには参加期限や提出最終期限が含まれます。
- Teamページ:チーム名の設定、メンバーの管理、招待などができます。これにより、コンペにチームで参加する際の管理が容易になります。
1.4 Competitions ページの概要
Kaggleの「Compete」セクションにアクセスすると、現在進行中または終了したコンペティションの一覧を見ることができます。各コンペには、その内容や参加しているチームの数などの情報が表示されています。
コンペに参加するには、特定のコンペのページで「Join Competition」ボタンをクリックし、表示されるルールに同意する必要があります。
コンペのルールはそれぞれ異なりますが、Titanicコンペは初心者向けとして設計されており、日々の提出回数の上限などが他のコンペに比べて比較的緩いです。一般的なルールには、1人1アカウントの原則、外部とのコード共有禁止、提出回数の上限設定、チームの最大人数制限などがあります。
コンペの「Overview」セクションには、そのコンペの目的、評価指標、重要な日付(参加締切、チーム結成締切、最終提出締切など)、賞金に関する情報が含まれています。これらの情報は、コンペに参加する前に把握しておくと有用です。
「Team」セクションでは、チームの管理(名前の設定、メンバーの招待や閲覧、リーダーの設定など)が行えます。これにより、共同でコンペに取り組む際の組織を整えることができます。
1.5 環境構築不要な「Notebooks」の使い方
KaggleのNotebooks環境を使えば、PythonやRをインターネットブラウザ上で実行でき、機械学習に必要なツールがすでにセットアップされています。これにより、環境構築の手間が省けます。
GPUの使用が可能であり、一般的なパソコンよりも高い計算能力を無料で使うことができます。
- 新しいNotebookを作成するには、Kaggleで「New Notebook」ボタンをクリックし、言語とタイプを選択後、「Create」ボタンで作成します。
- Notebookではコードを「セル」という単位で記入し、実行することができます。実行はセルの左にある三角のアイコンをクリックするか、「Shift + Enter」キーで行います。
- 他人が公開しているNotebookをコピーして、自分のものとして編集・実行することも可能です。
- 自宅のパソコンで同じ環境を作りたい場合は、Dockerを利用して仮想環境を構築する方法があります。この場合、Dockerのインストール、GitHubからのサンプルコードダウンロード、仮想環境の起動、ブラウザからのアクセスという手順で行います。
【対談①】Kaggleを始めたきっかけ、良かったこと
Kaggleは、実世界のデータセットを用いた機械学習の問題を解くことで、機械学習の理論だけでなく、実践的なスキルを学べるプラットフォームです。データを収集する必要がなく、さまざまな種類のデータセットが提供されるため、データの前処理やモデリングに集中できます。
KaggleにはチュートリアルやDiscussion、Notebooksなど豊富な学習コンテンツがあり、初心者から上級者まで幅広いレベルのデータサイエンティストが学びや交流ができる環境が整っています。
世界中のデータサイエンティストと競争しながらも、解法を共有する文化があり、互いに学び合うことができます。
Kaggleで学んだ知識や技術は、実務のデータ分析やモデリングに直接応用することができ、業務の質の向上につながります。
コンペティションでの成績によりメダルや称号を獲得でき、データサイエンティストとしてのスキルや実績を客観的に証明することができます。
Kaggleコミュニティは非常にアクティブで、オンラインだけでなくオフラインのイベントも積極的に行われており、同じ興味を持つ人々とのネットワークを広げることができます。
第2章 Titanicに取り組む
2.2 全体像を把握! submitまでの処理の流れを見てみよう
Kaggleで機械学習モデルの予測結果を提出する方法について学びます。
提出方法は、Kaggleのノートブックを使用する方法、CSVファイルを直接アップロードする方法、そしてKaggle APIを利用する方法の3つがあります。
Kaggleのノートブックを使って提出する場合は、サンプルコードをコピーして編集し、実行することで提出できます。提出すると、結果が「submission.csv」というファイルに保存されます。
Kaggleには、「Leaderboard」という順位表があり、Public LeaderboardとPrivate Leaderboardの2つに分けられています。Public Leaderboardはコンペ開催中に確認できますが、最終的な順位はPrivate Leaderboardで決まります。
最終順位に影響する提出は、自分の提出一覧から2つまで選択できます。
Kaggleのノートブック以外で作成したCSVファイルは、「Submit Predictions」タブから直接提出できます。
Kaggle APIを使用する場合は、まずpip install kaggleコマンドでインストールし、Kaggleのアカウントページから認証用のトークンを取得して設置する必要があります。
提出はkaggle competitions submitコマンドで行います。このコマンドには提出ファイルのパスとメッセージを含めます。
Kaggle APIには、コンペティションのデータセットのダウンロードやノートブックのアップロードなど、他にも様々な機能があります。
【対談②】 submit の楽しさ
Kaggleの順位表(Leaderboard)に自分の名前が載ることで、喜びや切磋琢磨の感情を味わえることが魅力の一つです。
Twitterで自分の成果を共有し、友人や他の参加者と競い合うのも楽しいです。
最初にsubmitしてみることでモチベーションが高まりますが、時間が経過すると順位が下がることに焦りを感じることもあります。
提出後、スコアが表示されるまでの期間にワクワクし、良いスコアを得た時の喜びは格別です。
提出してスコアが改善した時には、自分の考えが正しかったという満足感を得られます。
1日に提出できる回数には制限がありますが、積極的にチャレンジすることが推奨されています。ただし、チームを組む際には提出回数の制限を考慮する必要があります。
多くの場合、提出してもスコアが上がらないこともありますが、それもKaggleの面白さの一部です。
様々な機械学習の技術を試す「全部やる」というアプローチがあり、実際にデータセットや課題に応じて効果的な方法を見つけるのが重要です。
自分で実際に手を動かして提出することで、他の人の解法を理解する以上に深い学びが得られます。
一度実際に試してみることで、技術や方法論の理解が深まり、理解度が格段に向上します。
2.2 全体像を把握! submitまでの処理の流れを見てみよう
まず、数値計算を行うためのNumPyと、テーブル形式のデータを扱いやすくするPandasのパッケージを読み込みます。
つぎに、Kaggleで提供されているTitanicの乗客データを読み込みます。これには学習用データ(train.csv)、テストデータ(test.csv)、そして提出用のサンプルファイル(gender_submission.csv)が含まれます。
特徴量エンジニアリングでは、文字列である性別を0と1の数値に変換したり、欠損している運賃データ(Fare)を平均値で埋めるなど、データを加工して機械学習アルゴリズムが扱いやすい形にします。さらに、有用と思われる新しい特徴量を作り出します。
ロジスティック回帰という手法を使って、生存したかどうかを予測するモデルを学習させます。この際、モデルの動作を調整するためのハイパーパラメータも設定します。
最後にsubmitします。学習したモデルでテストデータに対する予測を行い、その結果をCSVファイルに保存してKaggleに提出します。提出した結果は、正解と照らし合わせて評価されます。
【対談③】「ベンチマーク」を作る
新しいコンペティションへの取り組みでは、最初の提出までが特に難しいと感じられます。
自分だけのモデルを作成する初期段階は、データ加工の部分で問題に直面しやすいです。
他人のコードを使用しても上手く機能しない、思い通りにデータを加工できないという課題があます。
エラーに直面し、解決策を探しても新たな問題が出現し、進捗が見られない場合があります。
これらはデータサイエンスにおいて避けられない、重要な工程の一つですが、初心者がこの段階で挫折するのは避けたいところです。
初期の学習段階では、既に完成されている他者のNotebookを利用して学習することが推奨されます。
Kaggleでの経験が増えるにつれて、自分で一からコードを書く能力が身につきますが、初めは他人の作業を参考にすることが多いです。
実際の経験から、より効率的な作業方法を見つけ、自分のスタイルを確立することが重要です。
本書では、データサイエンスの技術を少しでも身に付けることができるように、具体的なサンプルコードの詳細な解説を提供しています。
2.3 次の一手を見い出す!探索的データ分析をしてみよう
機械学習でデータを扱う際、データを変換し学習・予測を行った後に、スコアを上げるために特徴量エンジニアリングを行います。
特徴量エンジニアリングとは、データから新しい有益な特徴を作り出すことで、これには仮説を立ててデータを可視化する作業が含まれます。
仮説を立てるには、その分野の専門知識(ドメイン知識)があるかどうかでアプローチが変わります。専門知識がある場合は仮説からスタートし、ない場合は探索的データ分析(EDA)から仮説を見つけます。
「Pandas Profiling」は、データの概要を把握するのに役立つツールで、PythonのPandasライブラリで扱うデータフレームの概要、変数、相関、欠損値、サンプルなどの情報と、数値データの分布やカテゴリデータの頻度などのグラフを自動で生成してくれるツールです。このツールを使用すると、データセットに関する詳細なレポートを簡単に得ることができます。データ分析を始める際に、まずはPandas Profilingでデータの概要を確認することで、どのようなデータが含まれているのか、どのような特性を持っているのかを大まかに把握することができます。
Pandas Profilingを使用するには、まずimport pandas as pdとimport pandas_profilingで必要なライブラリをインポートします。その後、Pandasで読み込んだデータフレームに対して.profile_report()メソッドを呼び出すことで、レポートを生成できます。
ただし、このレポートの生成には少し時間がかかる場合があるため、大きなデータセットを扱う場合は、データの一部を抽出してレポートを生成するなどの工夫が必要になることがあります。
カテゴリ変数は、限られた数の異なるカテゴリやグループに値をとる変数です。例えば、Titanicコンペにおいては「性別」や「乗船した港」などがカテゴリ変数に該当します。
機械学習アルゴリズムは、ほとんどの場合、数値データを扱うように設計されています。そのため、カテゴリ変数を機械学習モデルで使う前に、数値に変換する必要があります。
カテゴリ変数の数値変換にはいくつかの方法がありますが、2種類のカテゴリしかない場合(例: 男性/女性)は、単純に0と1のような数値に置き換えることが一般的です。
しかし、3種類以上のカテゴリを持つ変数を扱う場合は、単純に数値を割り当てると、カテゴリ間に順序や比較が存在すると誤って解釈される可能性があります。例えば、「乗船した港」を0, 1, 2と数値変換すると、港間に大小関係があるかのように見えてしまう問題が生じます。
この問題を解決するために、「One-Hot エンコーディング」という技術がよく用いられます。これは、カテゴリ変数を複数のダミー変数に変換する手法で、各カテゴリを表す列を新たに作り、そのカテゴリに該当する場合は1、そうでない場合は0を割り当てます。
One-Hot エンコーディングの利点は、カテゴリ間に誤った数値的な関係を生じさせずに変数を数値化できる点です。しかし、カテゴリの数が多い場合は、それに応じて多くのダミー変数が生成されるため、データの次元が大幅に増加するデメリットもあります。
一部の機械学習アルゴリズム、例えばLightGBMなどは、カテゴリ変数を直接扱うことができるため、このような特徴量エンジニアリングの手間を省くことが可能です。
各特徴量と目的変数「Survived」の関係を可視化し、新しい特徴量を見つけることが、予測性能の向上につながります。例えば、「Parch」と「SibSp」を合計して「家族の人数」とする新しい特徴量が有効かもしれません。
探索的データ分析(EDA)を通じて、データの理解を深め、有効な特徴量を見つけ出すプロセスが重要です。
【対談④】単なる「可視化」ではない
EDA(探索的データ分析)はデータの理解を深め、問題解決へのアプローチを見つける重要なプロセスです。これはデータサイエンスの分野で非常に価値があるとされています。
最近の技術進歩により、データの前処理や機械学習モデルの作成が自動化されつつあります。しかし、EDAは他の研究者や業界の人たちと差をつけるために不可欠なスキルです。
Kaggleのコンペティションでは、特殊なデータセットや課題に対するEDAの実施が成功に直結しています。これらのコンペティションは一般的なデータ分析の問題ではなく、より複雑な課題を含んでいることが多いです。
EDAには主に2つのアプローチがあります。1つ目は、プロジェクト初期にデータを理解するためのもの、2つ目は、データ分析の進行中に新たな仮説を見つけ出すためのものです。
Pandas Profilingなどのツールを使用することで、データの概要を迅速に把握できます。このツールはデータの初期分析に非常に役立ちます。
実際のコンペティションやプロジェクトに取り組むことで、EDAのスキルを磨くことができます。経験を積むことで、データに対する洞察を深めることが可能になります。
Kaggleでの経験は、他の類似した課題に取り組む際にも役立ちます。以前のコンペティションで学んだ知識や技術を活用することができます。
Kaggle講座ではEDAが重要なテーマの一つとして取り上げられており、特にPandas Profilingを用いたデータの理解方法が参加者から高い評価を受けています。これらのツールや技術の習得は、データサイエンスの分野で成功するために重要です。
2.4 ここで差がつく!仮説に基づいて新しい特徴量を作ってみよう
2.4から2.8節では、Notebookを改善して予測スコアを向上させる方法について学びます。ここで紹介される方法は、Kaggleコンペで役立つ汎用的な技術です。
再現性があるとは、何度実行しても同じ結果が得られることを指し、これがないとスコアの改善判断が難しくなります。
特徴量の有効性は、様々な条件でモデルを学習させた結果を提出することで確かめることができます。
【対談⑤】特徴量エンジニアリングが勝負を決める
特徴量エンジニアリングは、予測モデルの性能に大きな影響を与えます。Kaggleのコンペティションで成功するためには、そのコンペティションの特性をよく理解し、効果的な特徴量を見つけ出すことが鍵となります。
特徴量エンジニアリングの学習は主に独学で行われ、Kaggleや過去の資料、ブログ記事などから情報を得ています。
参考になる書籍としては、「Kaggleで勝つデータ分析の技術」や「機械学習のための特徴量エンジニアリング」などがあります。
ドメイン知識を持っていることが、特徴量エンジニアリングにおいて有利に作用することが多いです。実際に「Instacart Market Basket Analysis」や「PLAsTiCC Astronomical Classification」、「PetFinder.my Adoption Prediction」のコンペティションでは、ドメイン知識が重要な役割を果たしました。
2.5 勾配ブースティングが最強?!いろいろな機械学習アルゴリズムを使ってみよう
sklearnというパッケージを使っていれば、アルゴリズムの変更は簡単にできます。
たとえば、勾配ブースティングとニューラルネットワークは、ロジスティック回帰よりも複雑なデータをより正確に予測できる可能性があるアルゴリズムです。特に、Kaggleのコンペティションでは高い性能を発揮することが知られています。
LightGBMは、勾配ブースティングを用いた機械学習アルゴリズムで、特にメモリの使用効率が良い方法で実装できます。学習用データと検証用データを分け、カテゴリ変数を指定し、過学習を防ぐための早期打ち切り機能を使いながらモデルを学習させます。
ランダムフォレストではsklearnで提供されているRandomForestClassifierを使用して、ロジスティック回帰よりも良い結果を得ることができます。
ほかにも、XGBoostやCatBoost、そしてニューラルネットワークを構築するためのパッケージ(PyTorchやTensorFlow)もあります。これらも性能向上のために試してみる価値があります。
【対談⑥】機械学習アルゴリズムの選び方
Kaggleのデータコンペティションでは、LightGBMがよく使われています。これは計算が速く、使いやすいためです。LightGBMは、データの欠損部分やカテゴリ型のデータも扱え、データを標準化する必要がないというメリットがあります。
XGBoostやCatBoostといった他のアルゴリズムも、コンペの後半でモデルの多様性を増やす目的で使用されます。Kaggleで以前はXGBoostが主流でしたが、最近はCatBoostも注目されています。技術の進歩は早いです。
最近では、ニューラルネットワーク(NN)がコンペティションでの勝利に不可欠であり、特にデータの前処理が重要です。ニューラルネットワークを上手に構築できると有利になりますが、難しいため学習には時間がかかります。
Kaggleでは、通常の勾配ブースティングアルゴリズムが高い性能を発揮しますが、仕事ではデータの解釈性を重視した線形回帰が使われることもあります。
2.6 機械学習アルゴリズムのお気持ち?!ハイパーパラメータを調整してみよう
機械学習アルゴリズムの動きを左右する「ハイパーパラメータ」という設定値があります。これを変更することで、予測の精度などが変わります。
ハイパーパラメータを調整する方法には、自分で値を変えてみる手動調整と、専用のツールを使う方法があります。
例えば、LightGBMという機械学習モデルの性能を上げるためには、objective(目的)、max_bin(特徴量の分割数)、learning_rate(学習率)、num_leaves(決定木の葉の最大数)というパラメータを調整します。
Optunaというツールを使用すると、これらのハイパーパラメータの最適な組み合わせを自動で見つけ出すことができます。
Kaggleのコンテストでは、データの特徴をうまく引き出す「特徴量エンジニアリング」がハイパーパラメータの調整より重要であることが多く、他の参加者が見つけた良いパラメータ設定を参考にすることもあります。
ハイパーパラメータを調整する際には、モデルの「表現力」と「過学習」のバランスを考えながら、1つずつ慎重に変更していくと良いでしょう。
【対談⑦】自己流のハイパーパラメータ調整のやり方
Kaggleコンペでのハイパーパラメータ調整は、特にテーブルデータと勾配ブースティングモデルを使用する場合、特徴量エンジニアリングに注力する方が有益だとされています。
ハイパーパラメータの設定には、既存のNotebookからのコピー利用や前回のコンペでの使用経験を活かすことが一般的です。
ハイパーパラメータを調整する際には、コンペの序盤と終盤で2回行う方がいます。序盤はベンチマークを作成する目的で、終盤は性能を最後まで引き上げるために手動で調整します。
Optunaのような自動化ツールを利用して、コンペの終盤に迅速に調整を終える方法もあり、夜間に実行することで翌朝には最適なハイパーパラメータが見つかっていることが多いです。
ハイパーパラメータの意味を理解して設定すること、およびデータに依存して探索範囲を修正することが大切です。勾配ブースティングのパラメータを理解し設定するためには、一つのパッケージのドキュメントや論文を読んで理解することが効果的です。
2.7 submitのその前に!「Cross Validation」の大切さを知ろう
機械学習モデルの性能を確認するための「validation(検証)」について説明します。
Kaggleコンペティションでのsubmit回数には制限があり、submitによるスコア確認には問題があることを指摘します。
Public Leaderboard(LB)のスコアが一部のデータに過学習している可能性もあります。
学習用データセットから検証用データセットを作成し、モデルの性能を測ることが一般的です。
「ホールドアウト検証」では、学習用データセットを分割してLightGBMなどのアルゴリズムを使用して検証します。
「Cross Validation(交差検証)」は、データセットを複数回にわたって異なる方法で分割し、ホールドアウト検証を行うことで、より汎用的な性能確認が可能になります。Cross Validationの結果、train_test_split()関数を用いてデータセットを分割した際と比べてスコアが悪化した原因は、データセットの分割方法にあると推察されます。
データセットの分割方法を考慮する際には、目的変数の割合やデータセット内に時系列性やグループが存在しないかを検討する必要があります。
StratifiedKFoldを使用して目的変数の割合を均等に保ちながら分割することもできます。
時系列データやグループに関連するデータの場合、それぞれに適した検証用データセットの構築方法が必要です。
【対談⑧】「Trust CV」
「Trust CV」は、公開スコアより自分のクロスバリデーションスコアを信頼するKagglerの間の考え方です。
Kaggleの上位プレイヤーは高品質な検証データセットの作成に長けています。
Kaggleでは、公開スコアと非公開スコアで順位が変わる「Shake up」が発生しますが、グランドマスターはこれを乗り越えて上位を維持します。
bestfitting氏は最終提出で「安全」と「危険」の2種類のモデルを選ぶことを勧めています。
モデル選択は個性が現れる部分であり、リスクを取ることで成果を上げることもあります。
公開スコアに惑わされて選択を誤った例もありますが、検証データセットを工夫することで、公開スコアが低くても非公開スコアで高い成果を上げることが可能です。
2.8 三人寄れば文殊の知恵!アンサンブルを体験しよう
アンサンブルは、いくつかの機械学習モデルを組み合わせて、より良い予測結果を目指す技術です。この技術は、Kaggleのようなデータ分析コンテストで成果を発揮することが多いです。
例えば、モデルA、B、Cを多数決によって組み合わせることで、各モデル単体よりも高い90%の正解率を達成しました。
実際のデータセット(Titanic)を使った実験では、ランダムフォレストとLightGBMの組み合わせで過去最高のスコア0.78468を得ることができました。
アンサンブルにおいては、モデル間の予測値の相関が低いほど、多様性が高く性能向上が期待できます。アンサンブルの詳細な学習には、「Kaggle Ensembling Guide」や「Kaggleで勝つデータ分析の技術」の読書がお勧めです。
Titanicコンペは、データ数が少なくスコアが安定しないため、技術試験には適していますが、競争としては推奨されていません。
【対談⑨】黒魔術.チームマージ
アンサンブル手法とは、複数のモデルを組み合わせて予測精度を向上させる方法で、この手法を使えば使うほど精度が高まります。
コンテストなどで、他のチームがどのようにアンサンブル手法を使っているかを見ることは、新しい技術を学ぶ上で非常に興味深いです。
「黒魔術」と呼ばれる高度なアンサンブル手法には、「Linear Quiz Blending」というものがあり、それを用いることで比較的低ランクのモデルを高くランクアップさせることができます。
チームを合併する(チームマージ)ことで、さまざまなアプローチを持つモデルを組み合わせ、より高い精度を目指すことができますが、そのタイミングを見極めるのは難しいです。
コンテストの初期段階でチームを組むこともありますが、その際はチーム内での役割分担や信頼関係が成果に結びつくことがあります。
チームマージは新たな知見を得る良い機会ですが、個人としての実力をつけることも重要です。高い実力があれば、より優秀な人とチームを組むチャンスが増えます。
第3章 Titanic の先に行く
3.1 複数テーブルを扱う
機械学習コンペティションでは、複数のCSVファイルがデータセットとして提供されることがあります。これらのファイルを適切に結合して分析する必要があります。
「Home Credit Default Risk」コンペでは、融資申込みデータと申込者の過去の申込履歴が別々のファイルに記録されており、これらを結合して分析します。
1対多の関係を持つデータセットを結合する場合、集約方法を工夫する必要があります。例えば、過去の申込回数を特徴量として加えることが可能です。
複数のファイルからデータを結合し、新たな特徴量を作成することで、機械学習モデルの精度を向上させることができます。
【対談⑩】現実世界のデータ分析
企業でのデータは複数のテーブルに分かれており、「正規化」という設計思想に従いテーブルが適度に分割されています。
「Home Credit Default Risk」のようなコンペティションはテーブルが多く、実務はさらに複雑ですが、データ基盤の整備度により扱いやすさが変わります。
社内でのデータドキュメントの整備やSQLの利用が容易な場合、データ収集が手軽になります。
Kaggleでの複数テーブルの扱いは実務の良い練習になり、Pandasを使った処理のスキル向上につながります。
Kaggleでの経験は実務でのソースコードの再利用や、ディープラーニングモデルの改善、データモデリングのアドバイスなどに活かせます。
実務ではKaggleのように小数点以下の性能差を競うことは少ないですが、Kaggleで得た経験は多様な場面で役立ちます。
3.2 画像データを扱う
Kaggleでは、データの種類に応じて様々な競技があります。これには、表形式のデータ、画像、テキストが含まれます。
画像データを使った競技では、画像を正確に理解・分類する能力が試されます。これには、画像にラベルをつける(分類)、画像内の物体を見つける(検出)、画像を細かく区分けする(セグメンテーション)などの課題があります。
特定の技術に焦点を当てた競技もあります。例えば、機械が誤認識を起こすような画像を作り出すAdversarial Exampleや、新しい画像を生成する技術(GAN)に関するものです。
画像データと表形式のデータは、両方とも基本的には数字の集まりとして扱われますが、画像データの場合は、その処理方法にニューラルネットワークという特別な技術がよく用いられます。
近年は、ニューラルネットワークを使用して、画像から有用な特徴を自動で抽出する方法が主流になっています。
画像データを扱う競技では、データのサイズが大きく、処理には高い計算能力が求められます。そのため、GPUの使用が一般的です。
【対談⑪】画像コンペ体験談
画像コンペはテーブルデータを扱うコンペに比べ、一回の学習にかかる時間が長く、試行錯誤の機会が少ないことが挑戦的でした。また、最新の研究や他のコンペの情報を集めることが重要で時間がかかります。
コンペによっては小規模なデータでNotebooksだけで参加可能なものもあれば、大規模データを扱うために高性能な環境が必要なものもあります。自分の参加したいコンペや使用可能な環境に合わせて準備する必要があります。
3.3 テキストデータを扱う
自然言語処理(NLP)は、機械が人間の言語を理解し処理する技術です。コンペティションでは、テキストデータを使って機械翻訳や質問応答などの課題に取り組みます。
具体的なコンペの例には、「TensorFlow 2.0 Question Answering」や「Quora Insincere Questions Classification」があり、文章が含む情報を分析して予測することが求められます。
NLPと通常のデータ分析との違いは、テキストデータを直接扱うことができないため、数値やベクトルなど、機械が理解可能な形式に変換する必要があります。
「Bag of Words」はテキストを単語の出現回数で表す方法ですが、文の構造や単語の意味の差異を考慮できません。
「TF-IDF」は単語の出現頻度とその単語がどれだけ珍しいかを考慮することで、テキストの特徴をより詳細に表現します。
「Word2vec」は単語間の意味の近さを捉えるための技術で、より高度なテキスト解析が可能になります。日本語版Wikipediaを使ったWord2vecのモデルでは、単語の意味の近さをより正確に捉えることができ、言語処理の精度を高めることが可能です。
【対談⑫】NLP コンペ体験談
自然言語処理のコンペティションは、テーブルデータを扱うコンペティションとは異なり、データの特徴を抽出する特徴量エンジニアリングよりも、ニューラルネットワークの設定値(ハイパーパラメータ)の調整が重要です。
第4章 さらなる学びのために
4.1 参加するコンペの選び方
Kaggleで開催されている10〜20のコンペからどれを選ぶかは、特に初心者にとっては判断が難しいです。
コンペを選ぶ際の基準として、メダルの有無、データの種類、開催期間、そしてCode Competitionsの有無が重要です。
メダルが獲得できるコンペは、参加者のレベルが高く、より多くの学びがあるため、メダルの有無を確認することが大切です。
コンペで扱うデータの種類には、テーブルデータ、画像データ、テキストデータがあり、自分の扱いたいデータを基に選択すると良いでしょう。
開催期間が短い、つまり終了が近いコンペに参加すると、情報が充実している上、締め切り効果でやる気が保ちやすいです。
Code Competitionsは、処理の記述方法に特別なルールがあるコンペで、全処理を1つのNotebookで行う必要があるものと、予測処理のみNotebookで行い学習は外で可能なものがあります。
4.2 初学者にお勧めの戦い方
- 概要やルールの確認: コンペの目的や解決したい課題を理解することが重要です。コンペのOverviewのDescriptionやDiscussionを読み、評価指標を理解しましょう。
- データの確認: 提供されるデータの理解が重要であり、データについてはさまざまな角度から見ていく必要があります。自分でデータを確認するか、参加者が公開しているNotebookを利用してデータのイメージをつかむと良いです。
- ベンチマークの作成: 初めに、ベンチマークとなるモデルを作成します。データセットの分割方法や使用する機械学習アルゴリズムを決め、公開されているNotebookを参考にすることも有効です。
- ベンチマークの改善: ベンチマークモデルの改善には、特徴量の追加や、DiscussionやNotebooksでの情報を参考にするなどの試みが含まれます。CVスコアとPublic Leaderboardのスコアを確認しながら、改善を進めることが重要です。
- アンサンブルでスコアの上積みを狙う: コンペの終盤では、アンサンブルを用いてスコアの向上を目指します。シンプルな方法としては、seedを変えて複数の予測を平均する「Seed Averaging」があります。
4.3 分析環境の選択肢
コンペティション参加時、Kaggleの提供するNotebooks、自分のPC、またはクラウドサービスのいずれを使うかが問題になります。扱うデータの大きさや必要な計算速度によって、適切な選択が変わります。
- Kaggle Notebooksの特徴:
- メリット: 初心者でも環境設定不要で始められ、GPUも利用できます。この手軽さが大きな利点です。
- デメリット: 利用可能なメモリやディスク容量に制限があり、大きなデータセットを扱う場合や複数のNotebookを同時に動かす場合に不便があります。
- 自分のパソコンを使う場合:
- メリット: 自由に環境をカスタマイズでき、クラウドのように使用料を気にせず試せます。
- デメリット: 初期にパソコン購入費がかかります。例えば、村田が購入したPCは33万円でした。
- クラウドの利用:
- メリット: 必要に応じて計算リソースを調整でき、大規模な計算が可能になります。
- デメリット: 環境設定や操作に慣れる必要があります。GCPやAWSなどがあり、村田はGCPを推奨しています。また、Dockerを使うことで、同じ環境を簡単に構築できるという利点があります。
4.4 お勧めの資料・文献・リンク
- kaggler-ja slack
- kaggler-ja wiki
- 門脇大輔ら、『Kaggleで勝つデータ分析の技術』、技術評論社,2019
- Kaggle Tokyo Mectup の資料・動画
【対談⑬】Kaggleで勝つために。今後の日標
Kaggleは競技プラットフォームであり、他の参加者との競争を通じて、自然に新しい知識を学ぶことができます。各コンペティションを通じて新しい技術や知識を得ることができるのは、大きな魅力の一つです。さまざまな仮説を立てて試してみることが重要です。
Kaggleは少しでも興味があれば試してみる価値があります。
コメント