順序尺度を扱う
  ・順序関係を活かせるように数値に変換(順序エンコーディング)するのが一般的手法
  ・順序尺度の特性を理解(数字の間隔に意味がなく、各順位間の間隔は議論しない。)
決定木は、順序関係を分岐の判断に利用でき、多くの場合この方法が適切に機能する。

カテゴリ変数の処理
  ・カテゴリ変数として明示的な指定
  ・学習時にcategorical_featureパラメータでその列を指定
内部的に最適な分割を探索しても順序関係が必ずしも効率的に学習されるとは限らない。
(順序関係を明示的に数値で与えるOrdinal Encodingのが良い結果を生むことがある。)

Ordinal Encoding(順序エンコーディング)
  ・カテゴリ間の自然な順序を数値に反映する。
順序を保持したまま整数値にエンコードする。
Ctegory Futureで指定すると順序は意味がなくなる。
カテゴリカル特徴を内部で最適な分割点を見つける(ノードを分割)ために使用。
このプロセスは、特徴の値が数値としての大小関係を持っているかどうかに依存しない。
  ・そのまま数値型の特徴量としてLightGBMに入力することも可能
データ型をintやfloatに変更し、他の量的変数と同様に扱う。
categorical_featureとして指定する必要はない。
  ・データ型の確認(Pandasなど)
順序尺度として扱いたい変数が数値でも、category型やobject型になってるか確認
  ・Ordinal Encodingの適用
scikit-learnのOrdinalEncoderなどを使用して、順序を反映した数値に変換
PandasのCategorical型を使用して順序を指定もできる。
  ・LightGBMへ入力(category型、順序関係の情報を含む)
数値にエンコードされたデータをLightGBMモデルにそのまま入力

ランキング学習
  ・Training API(スクラッチ実装)
  ・パラメータ
"objective" : "lambdarank"
"metric" : "ndcg"評価指標
  ・モデル
lgbm_params

Categorical Feature

feature_importance特徴量の重要度
  ・頻度:モデルでその特徴量が使用された回数(初期値)
importance = pd.DataFrame(model.feature_importance(importance_type='split'),
index=df_X.columns, columns=['importance'])
importance = importance.sort_values('importance', ascending=False)
display(importance)
  ・ゲイン:その特徴量が使用する分岐からの目的関数の減少
importance = pd.DataFrame(model.feature_importance(importance_type='gain'),
index=df_X.columns, columns=['importance'])
importance = importance.sort_values('importance', ascending=False)
display(importance)
lgb.plot_importance(lgb_clf, figsize=(8,4), max_num_features=40, importance_type='gain')
plt.savefig('importance_xx_xx.png')