XGBoostは複数のモデルに学習させ、それぞれの予測結果を一つの予測にまとめるアンサンブル学習の代表的なアルゴリズムの一つです。XGBoostでは決定木を一つづつ順に作っていき、それまでの決定木の多数決で間違ったデータに重みをかけて、次の決定木ではその間違いをカバーするように学習を進めていくアルゴリズムです。
今回は、XGBoostをExploratoryで実行する方法についての紹介となりますが、これによって何ができるのか簡単な例を使ってみていきましょう。
例えば、顧客ごとの売上データがあったとします。今回の予測対象は売上で、属性として職業や性別、年齢の列があります。
XGBoostなどの予測モデルを作る際に、予測対象の列のことを目的変数、目的変数を予測する上で使用する列のことを予測変数や説明変数と言います。
手元にあるこのデータを使って売上を予測するXGBoostのモデルを作成します。
作成されたXGBoostのモデルを使って、未知のデータに対して売上の予測をしていくことができます。
そして、作成されたモデルからデータの中にあるパターンに関して多くのことを学ぶことができ、下記の質問にも答えていくことができます。
それでは、ExploratoryでXGBoostをどのように使っていけるのか見ていきましょう。
XGBoostを実行する際には、1行が1観測対象となっているデータを使う必要があります。
目的変数には数値型、ロジカル型のどちらも扱うことができます。予測変数におけるデータタイプには特に縛りはありません。しかし、予測変数同士の相関が強い場合は影響度を取り合ってしまい、変数重要度の順番が低く見積もられることがあります。
今回は、従業員の「給料」を予測するXGBoostのモデルを作成します。
アナリティクスビューを開き、タイプに「XGBoost」を選択します。
目的変数に「給料」を選択します。
予測変数の列をクリックして、給料を予測する上で使用する列を選択します。シフトキーを押すことで、複数の列を一気に選択できます。
目的変数と予測変数を割り当てることができたら、「実行」ボタンをクリックします。
給料(数値)を予測するXGBoostのモデルが作成されました。
変数重要度タブでは、どの変数が目的変数とより相関が強いのか、予測する時により重要なのかを調べることができます。
職位が給料を予測する上で圧倒的に重要で、その次に職種や勤続年数が重要だとわかります。
変数重要度の詳細については、機械学習モデル - 変数重要度の仕組みと解釈のセミナーをご覧ください。
予測タブでは、それぞれの変数の値が変わると、目的変数の値はどのように変わるのかがわかります。
グレーの線は実測値を表しています。
青い線は予測値を表します。
職位が上がると給料が高くなる関係があることがわかります。
職種で見ると、他の職種に比べてリサーチディレクターとマネージャーの給料が高いようです。
学習タブでは、学習回数(作成された決定木の数)によって、予測精度がどれだけ向上したかが確認できます。
デフォルトの学習回数は10回になっていますが、プロパティから変更いただけます。また、それ以外にもEarly Stoppingの学習回数(学習した結果、予測精度が向上しない時に打ち切る回数)や、学習の際に使用する指標も変更できます。
サマリタブでは、この予測モデルの評価を確認できます。
R2乗はデータの平均からのばらつきをモデルが説明できている割合の指標で、0から1の間の値を取ります。1に近ければ近いほど、モデルがデータのばらつきをよく説明できていることを示します。
今回は、R2乗が0.968とこのモデルを使うと給料のばらつきの96.8%説明できていると言えます。
データタブでは、モデルに使用したデータと予測値をテーブル形式で表示されます。
目的変数である給料と、このモデルで算出された予測値(Predicted Value)を確認できます。
XGBoostに関する参考資料は下記をご覧ください。
予測タブの実測値はそれぞれの予測変数のデータタイプによって表示が異なります。 詳しくはこちらのノートをご覧ください。
Q: カテゴリーを予測したモデルを使って新しいデータに対して予測をした際に、予測ラベルに欠損値が出てしまう
カテゴリー列の値を予測するモデルを作っていて、そのモデルを使って新しいデータに対して予測をした際に、予測ラベルに欠損値が出てしまうことがあります。
主な原因としては、以下の2つが考えられます。
予測モデルの作成時には予測変数側に無かったカテゴリー値が予測対象の新しいデータ側で存在しているといったケースに該当する場合は、今後もモデルで予測をする際に、そのカテゴリーが含まれる可能性がある時には、モデル側にもそのカテゴリの値があるように組み込んでいただくと良いかもしれません。